dashboard #38

Merged
zacheryasc merged 10 commits from dashboard into master 2026-02-13 14:42:11 +00:00
Owner
No description provided.
zacheryasc added 10 commits 2026-02-13 14:41:14 +00:00
Cycle 0 research complete. Analyzed Erlang Observer, observer_cli,
wobserver, Phoenix LiveDashboard, Akka Insights, Ray Dashboard,
Orleans Dashboard, tokio-console, RabbitMQ Management, and
Consul/Nomad UIs. Identified 8 implementation stages prioritized
P0-P2: time-series history, actor detail drill-down, search/filter,
worker viz, warning detection, topology, logging, and msg-type
breakdown.

Full research notes in CLAUDE/notes/ (gitignored, session-local).

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Add in-process ring buffer history for per-worker and per-actor stats,
with sparkline rendering on both web (SVG) and TUI (ratatui) surfaces.

- history.rs: DashboardHistory with bounded VecDeque ring buffers, LRU
  actor eviction, thread-safe RwLock, 4 unit tests
- SSE producer records stats every tick, sends initial history snapshot
- /api/history REST endpoint for on-demand history JSON
- Web: inline SVG sparklines in worker detail headers (rates + mailbox)
- TUI: per-worker Sparkline widgets in overview layout

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Add dedicated actor detail page accessible from both web and TUI surfaces.

Web:
- /actor/<hex> page with live-updating stats, sparkline charts for message
  rate and mailbox depth, status badge, worker assignment
- Actor addresses in overview and actors pages now link to detail page
- Actors page detail panel links to dedicated detail page

TUI:
- ViewMode::ActorDetail with per-actor sparklines (rate + mailbox)
- Enter on actor row opens detail, Esc returns to previous view
- Per-actor ring buffer history (60 samples) tracked in App state

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
TUI:
- Press / to enter search mode (vim-style), type to filter actors in
  real-time by address, message type, or worker ID
- Enter locks the filter, Esc clears it
- Navigation bounds respect filtered results

Web (actors page):
- Worker dropdown filter (dynamically populated from live data)
- Status filter (All / Healthy / Poisoned)
- Mailbox depth threshold filter (min depth)
- Text search now also matches message type names

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Replace the basic canvas bar chart on the web overview with rich worker
cards showing:
- Stacked phase-timing bars (processing/delivery/spawns/overhead)
- Load percentage derived from tick timing active ratio
- Inline sparklines from history (message rate trends)
- Actor count, messages processed, mailbox depth stats
- Color legend for phase identification

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Add automated detection of 6 runtime anomaly types with severity levels:

- PoisonedActor (critical): actor panicked
- StalledActor (high): no message processing while mailbox > 0
- GrowingMailbox (medium): consecutive increases in mailbox depth
- MailboxOverflow (medium): messages dropped (backpressure triggered)
- WorkerImbalance (low): one worker has >2x average actor count
- EmptyWorker (low): worker has 0 actors while others have many

Configurable thresholds with sensible defaults. 7 scenario tests covering
all warning types, threshold behavior, and streak reset logic.

Web: warning banner at top of overview page with severity-colored alerts
TUI: warning count in summary bar (yellow when active)
SSE: new "warnings" event sent with each stats tick

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Add worker-level message flow topology with force-directed graph
visualization on a dedicated /topology web page.

- topology.rs: worker_topology() derives graph from cross_sends/local_sends
  stats (TopologyNode, TopologyEdge, TopologySnapshot)
- /topology page with interactive force-directed graph layout:
  - Nodes sized by actor count, colored by worker
  - Edges show local sends (green self-loops) and cross-worker sends (blue)
  - Edge thickness proportional to message volume
  - Physics simulation with repulsion, attraction, and gravity
- SSE "topology" event emitted every ~1s (every 5th stats tick)
- /api/topology REST endpoint for on-demand snapshot

Infrastructure ready for future per-actor topology with core instrumentation.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Add actor-level tracing span in worker tick_all to propagate actor_addr
to user log events. DashboardLayer now extracts actor_addr from both
span extensions and event fields. EventStore gains read_for_actor() for
filtered log queries.

Web actor detail page gets a live-updating log panel with per-level
filter buttons (ERR/WARN/INFO/DBG/TRC) and auto-scroll. TUI actor
detail view adds scrollable log panel with j/k navigation and 1-5 keys
for level toggling. REST endpoint at /api/logs?actor=<hex>&limit=N&level=L.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
Track per-actor message type histogram in ActorSlot (bounded to 32
distinct types). Extend ActorSnapshot and ActorInfo to carry sorted
type counts through the stats pipeline.

Web actor detail page shows horizontal bar chart with per-type colors,
counts, and percentages. TUI actor detail view renders text-based bar
table with 6-color rotation. Data flows through existing SSE stats
events with no additional endpoints needed.

Authored by Claude, lovingly guided by Zachery Aaron Shores-Chmielewski
zacheryasc merged commit 1169f0322d into master 2026-02-13 14:42:11 +00:00
zacheryasc deleted branch dashboard 2026-02-13 14:42:11 +00:00
zacheryasc referenced this pull request from a commit 2026-02-13 14:42:12 +00:00
zacheryasc referenced this pull request from a commit 2026-08-09 14:00:18 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: zacheryasc/swactor#38
No description provided.