speedtest_statuspage

Crates.iospeedtest_statuspage
lib.rsspeedtest_statuspage
version0.2.5
created_at2025-08-06 12:04:39.526736+00
updated_at2025-08-08 08:13:34.7681+00
descriptionA utility application to serve speedtest results over an HTTP endpoint.
homepage
repositoryhttps://github.com/GhostTorment/speedtest_statuspage
max_upload_size
id1783709
size6,725,228
Jak Bracegirdle (GhostTorment)

documentation

README

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-cli every N minutes (default: 60).
  • Caches the last successful speedtest result in memory.
  • Exposes /speed HTTP 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

  1. Ensure speedtest-cli is installed and available in your system PATH.

  2. Set environment variables as needed, for example:

    export BIND_ADDRESS=0.0.0.0
    export BIND_PORT=8080
    export INTERVAL_MINUTES=5
    
  3. Run the application:

    cargo run --release
    
  4. Access speedtest results at:

    http://<BIND_ADDRESS>:<BIND_PORT>/speed
    

    The 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 */ }
}
Commit count: 0

cargo fmt