Dashboards in the Cockpit app
Dashboards in Lumen mode are the same documents as on lumen.orkestia.dev. A board you save in the app opens unchanged on the web, and the other way round.
Viewing
Open a dashboard from the Dashboards section of the sidebar, from ⌘K, or from the dashboards index. Each panel reads its endpoint for the toolbar's time range and refreshes on the dashboard's auto-refresh interval while the window is visible. A panel that fails shows its own error and a retry; the others keep working.
Panel menu (…) | Does |
|---|---|
| View full screen | Opens the panel large in a drawer |
| Explore in Lumen | Opens the matching explore page with the panel's metric, aggregation and project (see the table below) |
| Customize dashboard… | Enters Customize mode (your own dashboards only) |
If the dashboard declares variables that a panel uses, a bar above the grid lets you pick a value. See Variables.
Panel types
Every panel is one of seven types; the type fixes the query source.
| Type | Source | Params you can set | Explore link |
|---|---|---|---|
KPI strip (stat_strip) | dashboard.summary | project | none |
Single stat (stat) | metrics.aggregate | metric_name, agg, interval, project, filter | Metrics |
Time series (timeseries) | metrics.aggregate | same, plus group_by (project or service_name) and max_groups (5, 10, 20) | Metrics |
Log pulse (log_pulse) | logs.pulse | interval (auto, 1m, 5m, 15m, 1h, 1d), project | Logs |
Error groups (error_groups) | dashboard.top-error-groups | limit (5, 10, 20, 50), project | Error groups |
Activity feed (events) | dashboard.events | limit, project | none |
Projects (projects) | dashboard.projects | none | Projects |
How the app turns a panel into a request:
windowon KPI strip, Error groups and Projects, andfrom/toon Log pulse and metrics, always follow the selected time range.interval: autoresolves from the range. Log pulse: 15m/1h →1m, 6h →5m, 24h →15m, 7d →1h. Metrics: 15m/1h/6h →5m, 24h/7d →1h(the metrics API only knows5m,1h,1d).- A
projectof*means all projects; it is dropped from the request. filterentries look likeattrs.key:valueorresource_attrs.key:value; they are sent as repeatedfilterparameters.
A Single stat reduces the buckets to one number: sum and count add every bucket, any other aggregation shows the last bucket. In a split Time series, a series named by an organization id shows the organization's name.
Customize mode
Choose Customize on a dashboard you own. The page gets an edit bar and the grid shows its guides.
| Control | Does |
|---|---|
| Drag a panel's title bar | Moves it on the 12-column grid |
| Drag a panel's corner | Resizes it, within the minimum size for its type |
| Add panel | Opens a gallery with one card per type, then the panel editor |
| Settings | Name, default time range, auto-refresh, variables |
| Reset layout | Packs panels left to right at their default sizes |
Cancel / Esc | Leaves edit mode; asks first if something changed |
Save / ⌘S | Saves. Disabled until something changed and while the document has problems; hover shows the first problem |
| Pencil / copy / trash on a panel | Edit, duplicate (beside the original when it fits, else below) or remove it |
The grid is 12 columns wide with 28 px rows and 12 px gaps. Default sizes (columns × rows): KPI strip 12×4, Log pulse 12×8, Projects 12×12, Error groups 7×10, Activity feed 5×10, Time series 6×9, Single stat 3×5. Below 720 px of width the grid stacks to one column in layout order. A layout change counts only when you finish a drag or resize, so the grid settling as it opens never marks a board as edited.
The panel editor
| Field | Applies to | Notes |
|---|---|---|
| Title | all | At most 80 characters |
| Visualization | all | Changing it resets the params to that type's defaults; a title you customized, and the metric settings when both types read metrics, are kept |
| Metric | Single stat, Time series | Suggestions come from GET /api/metrics/names. A metric is required |
| Aggregation | Single stat, Time series | avg, sum, min, max, count, p50, p90, p95, p99 |
| Bucket size | Single stat, Time series, Log pulse | auto unless you pin one |
| Split by / Show top | Time series | Project or service, and 5, 10 or 20 series; the rest combine as "other" |
| Rows shown | Error groups, Activity feed | |
| Project | most types | A project name, *, or a variable such as $project |
| Filters | metrics panels | One row per dimension : value; dimensions are service_name, project, attrs.<key>, resource_attrs.<key>; a value may be $variable |
A live preview under the form shows the panel with your current settings.
Settings
| Setting | Notes |
|---|---|
| Name | At most 80 characters |
| Default time range | 15m, 1h, 6h, 24h, 7d. A board saved on the web with a fixed from/to window keeps it until you pick a preset |
| Auto-refresh | Offered: 10 s, 30 s, 1 min, 5 min, 15 min. The API accepts 5 s to 1 h; a value outside the list is kept as is |
| Variables | name (letters, digits, underscores), dimension, default |
The viewer never changes your toolbar range on its own. If the board's default differs, it shows "Dashboard default: last X · Use it".
Variables
A variable is declared once and used as $name (or ${name}) in a panel's project or filter values. Viewers pick its value above the dashboard; All (*) drops that filter. Checks the app makes before saving, mirroring the API:
- the name matches
[A-Za-z_][A-Za-z0-9_]*and is unique; - the dimension is
project,service_name,attrs.<key>orresource_attrs.<key>; - every
$namea panel uses is a declared variable; - a metrics panel has a metric; the dashboard has a name and at most 40 panels.
Only variables that some panel uses get a picker. A project variable's picker lists your projects; other variables take free text. A choice lasts for the visit, not across launches.
System dashboards
System dashboards (for example Home) come from the server and are read-only. Duplicate to customize makes an editable copy named <name> (copy), then (copy 2) and so on.
Dashboards index
The grid icon in the Dashboards section header opens a searchable list of every board, system ones first, with a home marker, panel count and "updated
| Action | Notes |
|---|---|
| New dashboard | Name it, optionally start from an existing dashboard to copy its panels. An empty board opens in Customize mode; a copy opens for viewing |
| Duplicate | Any board |
| Delete | Your own boards, after a confirmation. Cannot be undone |
| Import from Grafana | See below |
An organization can have at most 50 dashboards; the buttons disable at the limit.
Import from Grafana
Paste a dashboard's JSON model (Grafana: Dashboard settings → JSON Model, or Share → Export → Save to file) or choose the file, then Preview import. The app sends it to POST /api/import/grafana. Nothing is saved until you create the dashboard.
The preview says N of M panels imported and lists each Grafana panel with its mapped Lumen type and a tag:
| Tag | Meaning |
|---|---|
| translated | The panel and its Prometheus query map cleanly |
| approximated | Imported with a best-effort query; the notes under the row say what differs |
| skipped | Not imported; the reason is shown |
Read the notes, rename the dashboard if you like, then Create dashboard. The button is disabled when no panel was imported.
Compatibility
The app saves each board with layout.grid (the 12-column placements) and layout.rows derived from it, so clients that only read rows still show a sensible order. A board that only has rows is read as a grid by splitting each row's width equally. Limits enforced on save: 40 panels per dashboard, 50 dashboards per organization, names and titles up to 80 characters; a slug is derived from the name and made unique.
Next: Explore and correlate, Query API.
Lumen in the Cockpit app
Flip the Orkestia Cockpit desktop app to Lumen mode — dashboards, observe, AI analytics, Pulse, rules and usage for the active organization
SDKs
Typed clients for Orkestia — Node and Python workflow SDKs, the browser OAuth SDK for Sign in with Orkestia, and the Pulse product analytics SDK
