← ChronoForge

The dashboard

A mountable Rails engine for visibility and recovery. It is built on the step history each workflow records as it runs, and adds the controls to act on what it surfaces.

Ships as a separate gem, chrono_forge-dashboard, so the core stays lean. See the dashboard README for setup, authentication, and configuration.

Overview: fleet summary with per-class rows
Overview. A fleet summary: total processed / in-flight / blocked, then one row per workflow class with a share-of-processed bar. Every count drills into the matching filtered list; each class name opens its Analytics.
Workflow list with filters and state badges
Workflow list. Filter by state, job class, or workflow key, with keyset pagination and a per-row duration meter that turns rose when a run is stranded.
Workflow detail step-replay timeline
Workflow detail. A step-replay timeline with errors inlined on the step that failed, periodic-task health, and arguments/context. Durations get a proportional meter, and a banner names where a blocked run stopped.
Per-run definition graph DAG
Definition graph. A per-run static DAG of the durable steps a workflow will run, parsed from perform with Prism (never executed), with live status painted on each node: done, in progress, failed, not-yet-reached.
Definition graph of a scheduled-payment recurrence
Definition graph, branching run. A scheduled-payment recurrence with three reminder-ordering branches that reconverge on the charge. This run took the auto-charge branch (green); the others were never reached (dimmed), and the final process_payment failed.
Analytics: completion and failure rates
Analytics. Completion/failure rate with a window trend, throughput bars carrying a per-day completion-rate pill (amber-flagged on a failure spike), top error classes, and per-class queue health.
Waiting workflows view
Waiting. Leads with a banner for a stalled continue_if event wait, the silent stall that never self-resumes. Event vs poll waits read as pills, and each row's age is a meter.
Stranded workflows view
Stranded. Workflows stuck in running with a stale lock, the set Workflow.reap_stalled re-enqueues. Lock-age meters, the dead worker named, per-row Reap, and a Reap all background sweep.
Stranded workflow detail with reap action
Reap. A workflow whose lock has gone stale is flagged stranded: its worker was hard-killed mid-pass, so nothing is driving the run. The banner offers Reap, which re-enqueues it to steal the lock and replay.
Periodic-task repetitions view
Repetitions. A durably_repeat step's per-iteration runs as status pills, with duration and lateness meters, attempts in words, and catch-up skips shown as per-tick tombstones or a summary.
Branch fan-out panel
Branches. Fan-out branches with exact spawned / pending / never-started counts, plus blocked count and merge state. In-flight merges show live throughput (children/s) and ETA while draining.
Branch children view
Branch children. One branch's children with a live stats header (throughput/ETA, spawned, pending, never-started, dropped-child recovery): blocked-first triage, capped state filters, retry per child.