Add read-only actor overview and per-actor dossier pages to the dashboard, fed by enriched per-actor runtime snapshots. - `dashboard/swactor/actor_view`: new `ActorPanelView`, a tolerant frame consumer over `runtime.actors`/`runtime.stats` that folds per-actor snapshots and serves `/view/swactor/actor-overview` (roster) and `/view/swactor/actor-dossier` (per-actor detail), each backed by an embedded HTML template (`actor_overview.html`, `actor_dossier.html`) - `dashboard`: register both views in `DashboardHandle` and export `actor_overview_view()`/`actor_dossier_view()` from the swactor module - `swactor` core: enrich `ActorSnapshot` with `actor_type` and `message_type` (populated from `slot.actor.metadata()` in `ActorPool`) and add `ActorAddress::to_full_hex()` for untruncated display - `myelin/orchestration`: publish actor stats to the dashboard via a `runtime.actors` channel producer (`stats_hook_on`) threaded through the distribution stack, and carry the orchestrator actor address into readiness signaling - workspace `Cargo.toml`: add `default-members` for native iteration and a centralized `[workspace.dependencies] tokio` so members share one feature set; `dashboard/Cargo.toml` switches to `tokio.workspace = true` Signed-off-by: Zachery Aaron Shores-Chmielewski <zacheryasc@gmail.com>
77 lines
2.1 KiB
TOML
77 lines
2.1 KiB
TOML
[workspace]
|
|
members = [
|
|
".",
|
|
"crates/bindings/python",
|
|
"crates/bindings/wasm-runtime",
|
|
"crates/process",
|
|
"crates/provisioning",
|
|
"crates/transport",
|
|
"crates/distribution",
|
|
"crates/iroh-driver",
|
|
"crates/datastream",
|
|
"crates/data-plane",
|
|
"crates/dashboard",
|
|
"apps/myelin",
|
|
"xtask",
|
|
"tools/vastai",
|
|
]
|
|
default-members = [
|
|
".",
|
|
"crates/process",
|
|
"crates/provisioning",
|
|
"crates/transport",
|
|
"crates/distribution",
|
|
"crates/iroh-driver",
|
|
"crates/datastream",
|
|
"crates/data-plane",
|
|
"crates/dashboard",
|
|
"apps/myelin",
|
|
"tools/vastai",
|
|
]
|
|
# The language bindings (python, wasm) and xtask are built on demand
|
|
# (-p / --workspace / cargo-xtask), not during normal native iteration.
|
|
exclude = ["crates/bindings/wasm-crypto", "examples"]
|
|
[workspace.dependencies]
|
|
# Centralized so every member resolves tokio with the SAME feature set.
|
|
# Without this, members declared tokio with different features, so building
|
|
# one member vs another (or `run` vs `test`) recompiled tokio each time.
|
|
tokio = { version = "1", features = ["rt", "rt-multi-thread", "macros", "process", "io-util", "sync", "time", "net", "signal"] }
|
|
|
|
[package]
|
|
name = "swactor"
|
|
version = "0.1.0"
|
|
edition = "2024"
|
|
autobenches = false
|
|
|
|
[profile.bench]
|
|
debug = true
|
|
strip = false
|
|
|
|
[lib]
|
|
crate-type = ["rlib"]
|
|
|
|
[features]
|
|
default = ["getrandom", "std"]
|
|
std = [] # OTP patterns: supervisors, registries, timers, routers
|
|
getrandom = ["dep:getrandom"]
|
|
serde = ["dep:serde"]
|
|
tracing = ["dep:tracing"]
|
|
no_random = [] # compile without access to a source of randomness
|
|
transport = [
|
|
] # transport-agnostic messaging (no mandatory deps; codec is user-provided)
|
|
wasm = ["no_random", "dep:web-time"] # browser/wasm32 target support
|
|
|
|
[dependencies]
|
|
getrandom = { version = "0.2", optional = true }
|
|
serde = { version = "1", features = ["derive"], optional = true }
|
|
tracing = { version = "0.1", optional = true }
|
|
web-time = { version = "0.2", optional = true }
|
|
crossbeam-queue = "0.3.12"
|
|
crossbeam-utils = "0.8.21"
|
|
parking_lot = "0.12"
|
|
|
|
[dev-dependencies]
|
|
criterion = { version = "0.5", features = ["html_reports"] }
|
|
proptest = "1"
|
|
proptest-state-machine = "0.3"
|
|
|