Operations Dashboard
Purpose#
The Operations Dashboard is the app's landing page at /, headed
"Real-time command center for every pipeline, connection, and byte across
the platform." It answers three questions without leaving the page: is the
platform healthy, is data moving, and is anything broken right now.
The dashboard is a widget grid, not a fixed report. Thirty widgets ship across ten categories; you decide which ones you look at and in what order, and that choice is stored against your user account.
Before you begin#
- Required role: any authenticated role.
viewersees the dashboard. - Two widgets need
adminto show their data (see Widgets that degrade for non-admins). - Arranging needs a viewport of 768 px or wider.
Your layout is yours alone — there is no shared or team dashboard, and no role can edit another user's layout.
Reading the page#
Data refreshes every 15 seconds. On large deployments some history widgets read from sampled history rather than every row; when that happens the widget carries a note saying so, so a smoothed curve is never mistaken for the raw truth.
Note. A widget with no data renders its own empty state. That is a statement about your deployment (no streams configured, no email feeds), not a failure — check the matching surface in the left nav before treating it as an incident.
Tasks#
Add a widget#
- Select Add widget in the toolbar.
- The drawer titled "Add a widget" opens, listing every currently hidden widget grouped by category.
- Select Add next to the widget you want.
- The widget is appended to the bottom of the grid. Drag it into place with Arrange if the position matters.
When nothing is hidden the drawer shows its empty state: "All widgets are on the dashboard. 🎉"
Hide a widget#
- Open the ⋯ menu on the widget's header.
- Choose Hide.
Hiding is not deleting. The widget moves into the "Add a widget" drawer and can be brought back at any time — it returns at the bottom of the grid, not at its old position. No widget is ever destroyed, and the nine always-on widgets have no Hide entry in their menu at all.
Reorder widgets#
For a single step, use the ⋯ menu's Move up / Move down.
For bigger changes:
- Select Arrange in the toolbar — the grid becomes draggable and resizable, and the control changes to Done.
- Drag widgets to new positions, or drag a widget's corner to resize it.
- Select Done to leave arrange mode.
Below 768 px the control is disabled and reads "Arranging is disabled on small screens" — the grid stays a single readable column on a phone rather than becoming a drag target.
Reset the dashboard#
Select Reset to discard your customisations and return to the shipped default layout: default visibility, default order, default sizes. Reset affects only your own layout.
How your layout is saved#
| Field | Required | Validation | Effect |
|---|---|---|---|
layout.widgets |
yes | At most 200 entries; over that the API returns 422 with layout.widgets exceeds 200 entries |
The ordered list of widget placements the grid renders |
| Widget visibility | yes, per entry | Must reference a widget id in the registry; always-on ids cannot be hidden | Hidden widgets move to the "Add a widget" drawer |
| Position and size | yes, per entry | Resolved by the grid; changes are committed on drag or resize end, not during the gesture | Where each widget sits and how much room it takes |
Persistence uses GET and PUT /api/v1/me/dashboard-layout. Any
authenticated role may call it, and only for their own layout — there
is no endpoint for reading or writing someone else's dashboard. Writes are
debounced by 500 ms, so a burst of drags becomes one save.
Tip. If a change seems not to have stuck, finish the gesture and let go. Nothing is saved mid-drag by design; the save fires when the drag or resize ends.
Widget catalogue#
Ten categories, thirty widgets. "Default" is what a brand-new user sees before customising.
| Category | Widget id | Title | Default | Always-on |
|---|---|---|---|---|
| Overview | platform-health |
Platform Health | visible | yes |
| Pipelines | running-pipelines |
Running Pipelines | visible | no |
| Pipelines | runs-today |
Runs Today | visible | no |
| Pipelines | pipeline-executions-24h |
Pipeline Executions | visible | yes |
| Pipelines | pipeline-trend-14d |
Pipeline Trend | hidden | no |
| Pipelines | top-pipelines |
Top Pipelines | visible | no |
| Jobs | total-jobs |
Jobs | visible | yes |
| Jobs | job-runs-7d |
Runs · 7d | visible | yes |
| Jobs | job-success-rate |
Success rate | visible | yes |
| Jobs | job-failed-7d |
Failed · 7d | visible | yes |
| Jobs | job-run-outcomes |
Run outcomes | hidden | no |
| Jobs | recent-job-runs |
Recent job runs | visible | no |
| Data Movement | live-data-flow-map |
Live Data Movement | visible | yes |
| Data Movement | records-today |
Records Today | visible | no |
| Data Movement | records-processed |
Records Processed | hidden | no |
| Data Movement | files-processed |
Files Processed | hidden | no |
| Data Movement | api-syncs |
API Syncs | hidden | no |
| Connections | connection-health |
Connection Health | visible | yes |
| Connections | active-connections |
Active Connections | visible | no |
| Connections | top-sources |
Top Sources | hidden | no |
| Connections | top-destinations |
Top Destinations | hidden | no |
| Execution | executions-terminal |
Executions | visible | no |
| Execution | failures |
Failures | visible | no |
| Execution | execution-volume |
Execution Volume | hidden | no |
| Execution | execution-engine |
Execution Engine | hidden | no |
| Execution | run-performance |
Run Performance | hidden | no |
| Activity | recent-activity-timeline |
Recent Activity | hidden | no |
| Alerts | alerts-issues |
Alerts & Issues | visible | yes |
| Lineage | data-lineage-preview |
Data Lineage | hidden | no |
| Insights | smart-insights |
Smart Insights | visible | no |
Always-on widgets#
Nine widgets cannot be hidden, because a dashboard without them can hide
an outage: platform-health, live-data-flow-map,
pipeline-executions-24h, total-jobs, job-runs-7d,
job-success-rate, job-failed-7d, connection-health, and
alerts-issues.
You can still move and resize them — they simply have no Hide action, and Reset always brings them back to their default place.
Widgets that degrade for non-admins#
Two widgets read admin-only data. For a viewer or editor the widget
still renders, in place, with an explanation instead of content:
| Widget | Message shown to non-admins |
|---|---|
recent-activity-timeline |
Audit log requires an admin role. |
run-performance |
Engine config requires an admin role. |
This is deliberate: the widget does not vanish, so nobody wastes time hunting for a panel a colleague can see. If you need the data, you need the role — see Roles and permissions.
Failure modes#
| What you see | What it means | What to do |
|---|---|---|
422 with layout.widgets exceeds 200 entries |
A saved layout carried more than 200 widget entries — normally a client or automation looping | Select Reset to return to the default layout, then re-customise |
Arrange is greyed out, Arranging is disabled on small screens |
The viewport is under 768 px | Arrange on a laptop or desktop; the layout you save applies on every screen |
The drawer says All widgets are on the dashboard. 🎉 |
Nothing is hidden, so there is nothing to add | Hide something first, or use Reset to return to the default mix |
A widget shows Audit log requires an admin role. or Engine config requires an admin role. |
You are viewer or editor |
Ask an administrator; hiding the widget also removes the reminder |
| Layout changes do not persist across sign-ins | The PUT /api/v1/me/dashboard-layout save did not complete |
Re-apply the change and let the drag or resize finish; check the browser network log for the failing request |
| Numbers look smoother than the raw runs | The widget is reading sampled history on a large deployment | Read the widget's own note; use Executions for run-exact detail |