dashboard & report
Requires:
pip install env-doctor[dashboard]
The dashboard and report commands are part of the optional fleet monitoring add-on. The core CLI works without them.
env-doctor dashboard
Starts the fleet monitoring web UI on the local machine.
| Flag | Default | Description |
|---|---|---|
--host |
0.0.0.0 |
Network interface to bind to |
--port |
8765 |
Port to listen on |
Example
Open http://localhost:8765 in a browser to see the fleet overview.
The dashboard stores all machine data in ~/.env-doctor/dashboard.db (SQLite). No external database required.
env-doctor report
Manage periodic reporting from a GPU machine to a running dashboard instance. All report commands run on the GPU machine, not on the dashboard host.
report install
Set up a scheduled task to send diagnostic reports automatically. Uses cron on Linux/macOS and Windows Task Scheduler on Windows.
| Flag | Default | Description |
|---|---|---|
--url |
(required) | Dashboard URL (e.g., http://10.0.1.50:8765) |
--interval |
2m |
How often to run the check (cron interval or Task Scheduler interval) |
--heartbeat |
30m |
Re-send even if nothing changed, to confirm machine is alive |
What it does:
- Validates the dashboard is reachable
- Creates a scheduled task:
- Linux/macOS: cron job tagged
# env-doctor-report - Windows: Task Scheduler entry named
env-doctor-report
- Linux/macOS: cron job tagged
- Saves config to
~/.env-doctor/report-config.json - Sends the first report immediately
env-doctor report install --url http://10.0.1.50:8765 --interval 2m
# ✅ Reporting to http://10.0.1.50:8765 every 2m (heartbeat: 30m) via cron
# Sending first report...
Smart change detection — the scheduled task fires every 2 minutes, but does not POST every 2 minutes. Each run hashes the check result and compares it to the last sent hash in ~/.env-doctor/report-state.json. If nothing changed and the heartbeat timer hasn't expired, it skips entirely (no network call). Only actual state changes (new driver, new library, new issue) trigger an immediate report. On a stable machine, this means ~1 POST every 30 minutes instead of 720 per day.
report uninstall
Remove the scheduled task (cron job or Task Scheduler entry) and clean up local state.
report status
Show the current reporting configuration, scheduler status, and last report time. This is purely local — reads ~/.env-doctor/ files on this machine, no network call.
env-doctor report status
# Reporting to http://10.0.1.50:8765 every 2m (heartbeat: 30m)
# Scheduler: cron (active)
# Last report: 3m ago
# Last report hash: a1b2c3d4
One-time reporting (no cron)
Use --report-to on the check command to send a single report without setting up periodic reporting:
Add --force to bypass change detection and always send:
Machine Identity
Each machine gets a stable UUID stored in ~/.env-doctor/machine-id. This is generated on first use and persists across reboots.
If you're on a shared filesystem (NFS home dirs), override it with an environment variable:
API Reference
The dashboard exposes a REST API that machines post to:
| Endpoint | Method | Description |
|---|---|---|
/api/report |
POST | Receive a check report |
/api/machines |
GET | List all machines with latest status |
/api/machines/{id} |
GET | Full machine detail and latest report |
/api/machines/{id}/history |
GET | Snapshot timeline |
See the Fleet Monitoring Guide for full setup instructions.