2026-02-09 09:04:57 +00:00
|
|
|
[package]
|
2026-02-19 14:39:33 +00:00
|
|
|
name = "dashboard"
|
2026-02-09 09:04:57 +00:00
|
|
|
version = "0.1.0"
|
|
|
|
|
edition = "2024"
|
|
|
|
|
|
|
|
|
|
[dependencies]
|
|
|
|
|
swactor = { path = "../..", features = ["serde", "tracing"] }
|
|
|
|
|
tracing = "0.1"
|
|
|
|
|
tracing-subscriber = { version = "0.3", features = ["registry"] }
|
|
|
|
|
serde = { version = "1", features = ["derive"] }
|
|
|
|
|
serde_json = "1"
|
2026-02-19 14:39:33 +00:00
|
|
|
axum = "0.8"
|
|
|
|
|
tokio = { version = "1", features = ["net", "rt-multi-thread", "sync", "time"] }
|
|
|
|
|
tokio-stream = "0.1"
|
2026-02-11 15:23:26 +00:00
|
|
|
crossbeam-queue = "0.3.12"
|
|
|
|
|
ratatui = { version = "0.29", optional = true, default-features = false, features = ["crossterm"] }
|
|
|
|
|
crossterm = { version = "0.28", optional = true }
|
2026-02-13 17:34:01 +00:00
|
|
|
clap = { version = "4", features = ["derive"], optional = true }
|
|
|
|
|
ctrlc = "3"
|
2026-05-25 18:19:06 +00:00
|
|
|
anyhow = { version = "1", optional = true }
|
|
|
|
|
distribution = { path = "../distribution", optional = true }
|
2026-02-11 15:23:26 +00:00
|
|
|
|
|
|
|
|
[features]
|
2026-02-24 09:12:28 +00:00
|
|
|
default = []
|
2026-02-11 15:23:26 +00:00
|
|
|
tui = ["dep:ratatui", "dep:crossterm"]
|
2026-05-25 18:19:06 +00:00
|
|
|
# Offline replay viewer example: loads a finalized diagnostics bundle
|
|
|
|
|
# (tarball or spool dir) and serves a localhost web UI for scrubbing
|
|
|
|
|
# through the event timeline.
|
|
|
|
|
replay-viewer = ["dep:anyhow", "dep:distribution", "distribution/collector"]
|
2026-05-29 08:55:10 +00:00
|
|
|
# Live collector + fleet dashboard: the dashboard process *is* the HTTP
|
|
|
|
|
# diagnostics collector (receives broadcast POSTs) and serves a unified live
|
|
|
|
|
# SSE UI folding the vast.ai fleet telemetry and the orchestrator's
|
|
|
|
|
# distribution snapshot server-side.
|
|
|
|
|
live-collector = ["dep:distribution", "distribution/collector"]
|
2026-06-05 07:25:43 +00:00
|
|
|
# Datastream-backed dashboard: bind the demo's UDP telemetry sink, demux the
|
|
|
|
|
# per-node frames, and drive the live HTTP dashboard. Only needs the
|
|
|
|
|
# `distribution::datastream` module (not feature-gated there), so it stays free
|
|
|
|
|
# of the heavier collector/iroh stack.
|
|
|
|
|
datastream = ["dep:distribution"]
|
2026-02-11 15:23:26 +00:00
|
|
|
|
2026-02-12 09:13:50 +00:00
|
|
|
[[bin]]
|
|
|
|
|
name = "swactor-tui"
|
|
|
|
|
path = "src/bin/tui.rs"
|
2026-02-11 15:23:26 +00:00
|
|
|
required-features = ["tui"]
|
2026-05-25 18:19:06 +00:00
|
|
|
|
2026-05-29 08:55:10 +00:00
|
|
|
[[bin]]
|
|
|
|
|
name = "dashboard_collector"
|
|
|
|
|
path = "src/bin/dashboard_collector.rs"
|
|
|
|
|
required-features = ["live-collector"]
|
|
|
|
|
|
2026-06-05 07:25:43 +00:00
|
|
|
[[bin]]
|
|
|
|
|
name = "swactor-datastream-dashboard"
|
|
|
|
|
path = "src/bin/datastream_dashboard.rs"
|
|
|
|
|
required-features = ["datastream"]
|
|
|
|
|
|
2026-05-25 18:19:06 +00:00
|
|
|
[[example]]
|
|
|
|
|
name = "replay_viewer"
|
|
|
|
|
path = "examples/replay_viewer.rs"
|
|
|
|
|
required-features = ["replay-viewer"]
|