swarm.js: migrate pending-row fallback + queue-summary banner off DagView
hyperhive#2822/PR#3026 moved swarm.js's per-agent in-flight status off the rebuild queue. Two other reads of the same rebuild_queue field survived that PR by design (a different feature, atlas flagged it on #2985) and are the last DagView/NodeView consumers on the frontend: queuedOpsByAgent()'s pending-row fallback and the SW4RM queue-summary banner. Both now read GET /api/jobq/graph (hive-jobq-wire's generic GraphNode shape) instead, matching the pattern builds.js already established for <hive-jobq-graph>. Along the way: DagView no longer carries state/kind fields (removed in an earlier refactor that pushed roll-up derivation client-side), so both migrated functions were silently reading undefined fields and had become permanent no-ops — the pending-badge fallback never lit and the queue-summary banner never rendered. This restores real behavior rather than porting broken logic forward. The queue-summary banner's node-count-vs-group-count question (flagged on hyperhive#3028 as needing a decision) resolves cleanly: a GraphNode group root (parent: null) is an ordinary node whose own state already IS the group's roll-up per hive-jobq-wire's contract, so counting roots by state is a direct filter, not a parent-chain walk or a client-side rollup calculation. Verified the derivation logic against constructed GraphNode fixtures (multi-step chains, settled history that must not count, Finishing roots, multi-agent single-DAG groups) before wiring it in — 13/13 checks passed. docs/web-ui/dashboard.md's Container-row + BU1LDS sections updated to match.
This commit is contained in:
parent
8a16d4ca7e
commit
45710ab739
3 changed files with 121 additions and 70 deletions
|
|
@ -42,7 +42,7 @@ import {
|
|||
renderQuestions, activeQuestionCount,
|
||||
} from './call.js';
|
||||
import {
|
||||
syncRebuildQueueFromSnapshot, syncTransientsFromSnapshot,
|
||||
refreshJobqGraph, syncTransientsFromSnapshot,
|
||||
applyRebuildQueueChanged, applyContainerStateChanged, applyContainerRemoved,
|
||||
applyTransientSet, applyTransientCleared,
|
||||
renderContainers, renderContainersFromState,
|
||||
|
|
@ -234,9 +234,14 @@ window.marked = marked;
|
|||
// `transientsState` + `containersState`, not from `s.*`).
|
||||
syncTransientsFromSnapshot(s);
|
||||
syncContainersFromSnapshot(s);
|
||||
// Rebuild-queue state feeds the SW4RM agent-card badges
|
||||
// (inFlightOpsByAgent); its own panel now lives on /core.html.
|
||||
syncRebuildQueueFromSnapshot(s);
|
||||
// Job-queue graph feeds the SW4RM agent-card badges
|
||||
// (queuedOpsByAgent) + the queue-summary banner; its own detailed
|
||||
// view lives on /builds.html. Self-fetches GET /api/jobq/graph —
|
||||
// not read off `s` (this page's snapshot carries no jobq field) —
|
||||
// fire-and-forget: renderContainers below runs off whatever
|
||||
// jobqNodesState already holds, and refreshJobqGraph's own
|
||||
// re-render catches up once the fetch resolves.
|
||||
refreshJobqGraph();
|
||||
renderContainers(s);
|
||||
// Sync the derived approvals + questions stores from the
|
||||
// snapshot, then render. Live `*_added` / `*_resolved` events
|
||||
|
|
|
|||
Loading…
Reference in a new issue