Speedplane is a tool for tracking internet speedtest results with a web dashboard. It runs speedtests on a schedule (or manually) and provides a web UI to view historical results and manage schedules.
- Automated speedtest scheduling (interval-based or daily at specific times)
- Web dashboard for viewing results and statistics
- REST API for programmatic access
- Historical data tracking with charts and metrics
- Configurable via config file or command-line flags
make buildOr manually:
# Build frontend
make frontend
# Build backend
go build -o speedplane .Speedplane can be configured via a config file or command-line flags. The config file speedplane.config can be placed anywhere, or in the current directory by default.
Create a speedplane.config file:
{
"data_dir": "/path/to/data",
"db_path": "/path/to/database.results",
"listen_addr": ":8080",
"public_dashboard": false
}--config string- Config file path (full path with filename, or directory to use default filename 'speedplane.config', default: current directory)--db string- Database path (full path with filename, or directory to use default filename 'speedplane.results')--listen string- IP address to listen on (default: "all" - listens on all interfaces)--listen-port int- Port to listen on (default: 8080)--public- Enable public dashboard access (default: false)--version, -v- Print version information--help, -h- Show help message
Command-line flags override values from the config file.
Both --config and --db flags work the same way:
- If a directory is provided, the default filename (
speedplane.configorspeedplane.results) is appended - If a full file path is provided, it's used as-is
- If empty, defaults to the current directory
Start speedplane with default settings (listens on all interfaces, port 8080):
./speedplane# Using a directory (looks for speedplane.config inside)
./speedplane --config /etc/speedplane
# Using a specific config file
./speedplane --config /etc/speedplane/custom.config./speedplane --listen 127.0.0.1 --listen-port 8080./speedplane --public./speedplane --versionOnce started, speedplane will print the HTTP addresses it's listening on. Access the web dashboard at:
http://localhost:8080(when listening on all interfaces)- Or the specific address shown in the startup output
The web interface provides:
- Dashboard with latest results and charts
- Historical results table
- Schedule management
GET /api/health- Health checkGET /api/summary- Get summary statisticsGET /api/history?from=...&to=...- Get historical resultsPOST /api/run- Run a speedtest immediatelyGET /api/schedules- List all schedulesPOST /api/schedules- Create a new scheduleGET /api/schedules/{id}- Get a specific schedulePUT /api/schedules/{id}- Update a scheduleDELETE /api/schedules/{id}- Delete a schedule
Schedules can be created via the API or web interface. Two types are supported:
- Interval: Run every X duration (e.g., "1h", "30m", "6h")
- Daily: Run at a specific time each day (e.g., "14:30")
Speedtest results are stored in a SQLite database. By default, the database is stored as speedplane.results in the same directory as the config file. You can customize the database path using the --db flag or db_path config option:
- If
db_pathis empty: uses{data_dir}/speedplane.results(wheredata_diris the directory containing the config file) - If
db_pathis a directory: uses{db_path}/speedplane.results - If
db_pathis a full path with filename: uses it as-is
/path/to/config/
speedplane.results # SQLite database containing all speedtest results (default)
speedplane.config
- Youtube MrPewPewLaser
See LICENSE file for details.