Phase 3 PR 27 — Fleet status dashboard page #26
Reference in New Issue
Block a user
Delete Branch "phase-3-pr27-fleet-dashboard"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Adds
/fleetAdmin UI route that surfaces per-node apply state — joinsClusterNodeGenerationStatetoClusterNodefor theClusterId, renders a sortable table plus summary cards (Total / Applied / Stale / Failed).Behavior
LastSeenAtolder than 30s →table-warningrow class + yellow count card.LastAppliedStatus == Failed→table-dangerrow + red card.bg-success, Failed=bg-danger, Applying=bg-info, unknown=bg-secondary.42s ago/15m ago/3h ago) and absolute for >24h.Refresh cadence
OnInitializedAsync.Timerthat callsInvokeAsync(RefreshAsync)— matchesFleetStatusPoller's 5s cadence so the dashboard never polls ahead of the broadcaster.Refreshbutton;_refreshinggate prevents double-runs when the timer fires mid-query.DI scoping
Uses
IServiceScopeFactoryto open a fresh scope per refresh (matchesFleetStatusPoller.PollOnceAsync). Avoids cross-threadDbContextraces between the render thread and the timer. No new DI registrations needed.Deferred
FleetStatusHub+NodeStateChangedMessagealready work for external JS clients; wiring an in-process Blazor consumer withHubConnectionBuilderis worth its own focused PR.IHostConnectivityProbe.GetHostStatusesfrom the Server process — that's the live-SignalR follow-up.Sidebar
MainLayout.razorgains aFleet statuslink betweenOverviewandClusters.Closes
LMX follow-up #7 at the fleet level (per-driver dashboard). Per-host still open.
Tests