swactor/crates/dashboard
Zachery Aaron Shores-Chmielewski cd3c05c045 fix(myelin): bootstrap pull telemetry and clean docker shutdown
Subscribe to each worker telemetry pull endpoint during runtime readiness, retry interrupted streams, and remove the obsolete telemetry actor-address path.

Make shutdown state sticky, clean local Docker resources on Ctrl+C, validate fleet controls, and keep dashboard node state honest under failure. Wait for bidirectional iroh routes before job submission and render the orchestrator role as a card header.
2026-08-18 14:23:12 +04:00
..
src fix(myelin): bootstrap pull telemetry and clean docker shutdown 2026-08-18 14:23:12 +04:00
.gitignore feat: stability for deployment and distribution (#44) 2026-02-19 14:39:33 +00:00
AGENTS.md feat(dashboard): fused control-plane view with unified navbar and stale pooling 2026-08-16 02:42:40 +04:00
Cargo.lock refactor: datastream crate is now telemetry 2026-08-15 12:18:56 +04:00
Cargo.toml feat(xtask): provisioning-reconciler-demo with live fleet control 2026-08-15 18:11:33 +04:00
README.md feat(dashboard): fused control-plane view with unified navbar and stale pooling 2026-08-16 02:42:40 +04:00

dashboard

Read-only HTML/SSE dashboard over incoming telemetry frames.

The crate owns the Axum server, bounded raw frame window, and view registry. Component crates can keep their own view implementations beside their code and register them through DashboardHandle::register_view. The built-in control-plane view is hosted here because worker/actor/message processing is universal to swactor programs.

The control-plane page fuses machine stats and actor stats per node stream: node cards (CPU/GPU/net + actor rollup) → per-node actor roster → per-actor dossier (identity, message diet, sampled message history). The Rust type name is the actor's display name; the address is the unique key. Stale streams (silent beyond the liveness window) render in a separate collapsed pool, superseded life generations are evicted immediately, and the stale pool is hard-capped.

Routes

  • GET / — fleet control plane (home; same page as /view/fleet)
  • GET /events — raw incoming frames as SSE
  • GET /api/frames — recent raw frame window
  • GET /api/views — registered view metadata
  • GET /view/telemetry/live — generic live explorer over retained and incoming telemetry frames
  • GET /api/view/telemetry/live — bounded per-stream/channel explorer snapshot
  • GET /view/fleet — fused control-plane page (machine + actors per node)
  • GET /api/view/fleet — live/stale pools with per-node machine and roster snapshot
  • GET /api/view/fleet/detail?stream=<node#life>&actor=<addr> — bounded per-actor dossier detail (diet, history, sampled receipts)

Every page carries the unified top navbar, built from the view registry at serve time — pages include a <!--swactor:nav--> placeholder and the server substitutes the links, so app-registered views appear automatically.

All state is derived from observed frames. The dashboard sends no control signals back to producers.