Skip to content

service with a web ui that runs speedtests on a schedule (or manually)

License

Notifications You must be signed in to change notification settings

network-plane/speedplane

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

47 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

speedplane

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.

Features

  • 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

Screenshots

All graphs

dashboard-all-graphs

Single Graph (log)

dashboard-combined-graph

Results

results

Preferences

preferences

Installation

Building from source

make build

Or manually:

# Build frontend
make frontend

# Build backend
go build -o speedplane .

Configuration

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.

Config File Format

Create a speedplane.config file:

{
  "data_dir": "/path/to/data",
  "db_path": "/path/to/database.results",
  "listen_addr": ":8080",
  "public_dashboard": false
}

Command-Line Flags

  • --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.config or speedplane.results) is appended
  • If a full file path is provided, it's used as-is
  • If empty, defaults to the current directory

Usage

Basic Usage

Start speedplane with default settings (listens on all interfaces, port 8080):

./speedplane

Custom Config File Location

# Using a directory (looks for speedplane.config inside)
./speedplane --config /etc/speedplane

# Using a specific config file
./speedplane --config /etc/speedplane/custom.config

Listen on Specific Interface

./speedplane --listen 127.0.0.1 --listen-port 8080

Enable Public Dashboard

./speedplane --public

Check Version

./speedplane --version

Web Interface

Once 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

API Endpoints

  • GET /api/health - Health check
  • GET /api/summary - Get summary statistics
  • GET /api/history?from=...&to=... - Get historical results
  • POST /api/run - Run a speedtest immediately
  • GET /api/schedules - List all schedules
  • POST /api/schedules - Create a new schedule
  • GET /api/schedules/{id} - Get a specific schedule
  • PUT /api/schedules/{id} - Update a schedule
  • DELETE /api/schedules/{id} - Delete a schedule

Schedules

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")

Data Storage

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_path is empty: uses {data_dir}/speedplane.results (where data_dir is the directory containing the config file)
  • If db_path is a directory: uses {db_path}/speedplane.results
  • If db_path is a full path with filename: uses it as-is
/path/to/config/
  speedplane.results  # SQLite database containing all speedtest results (default)
  speedplane.config

Template Subsmissions

License

See LICENSE file for details.