7 releases
Uses new Rust 2024
| 0.2.5 | Aug 8, 2025 |
|---|---|
| 0.2.4 | Aug 7, 2025 |
| 0.1.2 | Aug 6, 2025 |
#908 in HTTP server
2MB
303 lines
Contains (ELF exe/lib, 6.5MB) speedtest-statuspage
speedtest-statuspage
A utility application to serve speedtest results over an HTTP endpoint.
Disclaimer
This project is not affiliated with, endorsed by, or sponsored by Ookla (Ookla®).
All trademarks and copyrights belong to their respective owners.
Overview
speedtest-statuspage runs periodic speedtests using the speedtest-cli binary, caches the latest results, and exposes them via an HTTP JSON API endpoint (/speed).
The service can be configured via environment variables and is built using Rust with Actix-web and Tokio for async task scheduling.
Features
- Periodically runs
speedtest-clievery N minutes (default: 60). - Caches the last successful speedtest result in memory.
- Exposes
/speedHTTP GET endpoint returning the latest cached speedtest result as JSON. - Returns HTTP 503 if no cached speedtest result is available yet.
- Configurable bind address, port, and speedtest interval via environment variables.
Environment Variables
| Variable | Description | Default |
|---|---|---|
BIND_ADDRESS |
IP address to bind the HTTP server | 127.0.0.1 |
BIND_PORT |
Port for the HTTP server | 8080 |
INTERVAL_MINUTES |
Interval in minutes between speedtests | 60 |
Usage
-
Ensure
speedtest-cliis installed and available in your systemPATH. -
Set environment variables as needed, for example:
export BIND_ADDRESS=0.0.0.0 export BIND_PORT=8080 export INTERVAL_MINUTES=5 -
Run the application:
cargo run --release -
Access speedtest results at:
http://<BIND_ADDRESS>:<BIND_PORT>/speedThe endpoint returns JSON with the latest speedtest data or HTTP 503 if no results are available yet.
Example Response
{
"bytes_received": 12345678,
"bytes_sent": 8765432,
"download_bps": 50000000.0,
"upload_bps": 10000000.0,
"download_mbps": 50.0,
"upload_mbps": 10.0,
"ping_ms": 15.3,
"client": { /* client info */ }
}
Dependencies
~16–28MB
~470K SLoC