Repository navigation
feat(web): worker sources graph, Workers on queue list, drop Submitted - #15
Merged
Merged
Conversation
Remove EndpointSlice discovery, the kubernetes config block, wizard prompts, KUBECONFIG in the collector lease, pod noun and k8s label mode. Config with a kubernetes block now fails to load: "kubernetes discovery was removed; use static or dns". Static and DNS unchanged. Drop client-go deps. Lease keeps its unused kubeconfig column (written empty). BREAKING CHANGE: kubernetes servers in config.json no longer load.
- config error names file path; text says endpoints or dns - workers hint only on ErrConfigNotFound - fix Close/PoolFor docs, stale Kubernetes comments, README typo - test loadOrOnboard rejects kubernetes config
go directive stays 1.26.0 (contract needs 1.24). no fallout.
QueueSummary gains Paused (*bool: nil = varmq < 1.2.0) and PausedAt.
QueueAction PATCHes /queues/{id}/actions/{pause|resume}, decodes entry.
QueueActionUnsupported: router 404, 405, 501. JobStates adds cancelled.
One PATCH per unit reporting the queue; older unit (no paused) sent nothing, no change. 501/405/router 404 = failed, not supported. JSON 404 = no change. Returns first ok entry for the badge. Group paused merged from any copy that reports it. fake varmq: queue action route, shared pause flag, ActionStatus.
Cancelled tab: count -, hollow bad dot, own timeline step; varmq 400 on
state=cancelled = note, not error. stateCount no longer falls through to
failed. POST /queues/{id}/actions/{pause|resume}: bind guards, confirm
panel, results, #qstate oob from PATCH answer. Buttons hidden when no
unit reports paused. Paused dot on queue list. Tabs scroll on phones.
api: paused decode, QueueAction path + body, unsupported mapping. fleet: QueueAct fan-out, older unit skipped, 501/404/503/drop outcomes. web: confirm then act, oob badge, list badge, older varmq hidden, 501 result, unreadable queue 409, cancelled tab, stale refusal.
Resume alone when every reporting instance says paused, Pause alone when none does, both when mixed or unknown (nil paused). Group keeps per-unit paused; QueueAct returns group as units answered, for the oob #qstate.
A unit that stores the flag but answers {id,error} (200) left the
group's paused nil: #qstate lost Pause/Resume after a good pause.
Take paused from the first answer that has one; keep the unit's own.
fleettest.Queue.ActionDrop: transport error on a queue action.
fleettest.Queue.JobsStatus; jobs route lists cancelled when Jobs has it.
200 means the flag was stored: that unit's paused, and the entry's when no answer has paused, is the action's target. #qstate shows Resume alone after such a pause, not both buttons. paused_at: g's on a repeat pause, else unknown.
ListWorkflows, GetWorkflow, CancelWorkflow (undo=false opt). Router 404/405 -> RouteMissing, JSON 404 -> WorkflowNotFound, 409 -> WorkflowAmbiguous. '.'/'..' IDs never sent: would name another route.
Group by (ID, created_at): durable one shared by units = one row, units as On; in-memory twin = own row. Read skew: most advanced copy wins. List merge reads each unit's first offset+limit+1, paged by route cap. Cancel goes to first unit that takes it (stored with workflow), next on fail/404/409. fleettest: workflow routes + SampleWorkflows (diamond w/ always, running ETL w/ long edge, compensated saga, cancelled report).
- nav Workflows; list: state tabs, progress bar, duration, reported-by, merged; page 1 live, later pages browsed. - detail: DAG laid out in Go (longest-path layers, dummy slots for long edges, barycenter sweeps), inline SVG. Always edges dashed, in-flight tasks pulse, edges into them flow; reduced motion off. - workflow.js: pan/zoom (drag, ctrl+wheel, pinch, buttons, keys), trace up/downstream, task panel; view/panel/focus kept across polls. - #live polls itself until workflow ends; #results hx-preserve. - cancel / cancel without undo: confirm panel, bind() guards, re-read + created_at match, refused when ended; #wfctl oob. - graph skipped past 5000 slots; table is fallback. - liveClients shared by queue + workflow pages.
Cancel, zoom, panel close, graph well sit in #live (state follows record); poll swap dropped their focus. workflow.js re-focuses same control. Hint: Ctrl/Cmd + scroll.
Panel no longer covers graph: well narrows while open (below graph on phone). Opening shows whole graph, else task lineage, else task + downstream, else task centred; zoom stays >= 0.6.
Fan-in adds no dummies: r*r edges slipped under the cap (1M paths at r=1000). Cap now tasks + edges + dummies; over it: note + table. sortLayer re-placed whole graph per layer per sweep; now only the sorted layer (column heights fixed). Deps filtered once.
FetchWorkflows stopped each unit at 10000 records; merged page at offset=10000 then mixed truncated lists. Stop only past 10000, so a unit yields up to 10000+limit and no request offset passes the cap.
- workflow.js loads on every workflow page (OwnPoll): a graph a later poll brings in still pans/zooms. - focus restore keys task node, panel aside, panel links; oob afterSwap no longer re-inits a taken graph (dropped panel focus). - stale at= with other workflows of the ID left: picker, not 404.
Edge cap (fan-in), BenchmarkLayoutDAG, hostile fields escaped, dup task names, forms carry server, confirm posts confirm=1 back, cancel refused by every unit keeps buttons, failing units keep polling, stale at, merge ended-over-running tie, offset-cap paging, 503 cancel unit, guard route tables. fleettest: WorkflowStatus knob, locked SetActionStatus.
Queue list rows and the worker page Queues line sort by name, namespace, ID, as they show. GroupQueues keeps ID order for Group's search. QueueConfirmView drops ID (Queue.ID holds it); ownersOf keeps every ID, name() checks the backend; dup .qtitle CSS cut. Tests: confirm panel names the queue, namespace cell and chip, workflow page owners, workers on the queue order, older varmq worker lists none, redisq brace guard.
GET /queues/{id}/jobs/{jobId}: state, timeline with waited/ran/total
(live ones tick in job.js), errors, payload, result. Cancel behind bind
and confirm panel, only while pending or processing. Queue list and
workflow task rows/panel link job IDs; none for '.', '..', empty.
…erves cancel only
…, cut result, hostile job, job.js
Worker page loses the Submitted card; a queue's submitted is its totals.submitted on the queue pages.
Sources in pick order: store glyph, name, kind, priority chip under priority strategy, link to queue page; topic and ID-less nodes. Worker node says the strategy (2+ sources) or 'Pulls directly'. Older varmq: nodes from queue_ids, a note. Queue list: Workers chips (by queue_ids), instances as fallback. Queue page: 'Read from' line, muted.
…ps, live owners, older row
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Stacked on #14 (feat/job-page).
metrics.submittedfrom workers (a queue's submitted is itstotals.submitted). Removed from api types, store record (older rows' value read and dropped) and fleet view; four cards in one row.prioritystrategy when set. Topic: broadcast glyph. ID-less storage: "custom storage", no link.queue_idsjoin too. Strategy = first instance's.sources): nodes fromqueue_ids, no label, short note.strategy,sources(priority*int64), omitempty, no StoreVersion bump.SourceWorkers(3-source priority, 1-source, round-robin with topic + ID-less, older worker).Evidence
go vet ./...clean;go test -race -count=1 ./...green (GOTOOLCHAIN=go1.27.0).vartop webover fake varmq.Merge Danger
queue_idsnodes.docs/images/worker-*.pngstill show the Submitted card. Two in-memory queues on different instances can share a name ("report-maker feat: add vartop web browser dashboard #1"), as before.