Skip to content

v0.14.0 — the dashboard, and the API to drive it

Choose a tag to compare

@gmpassos gmpassos released this 14 Jul 08:08
e4275f3

A browser you can run a fleet from — and the API, CLI and Hub features it needed, which turn out to be the ones the product was already half-built for.

omnyserver_web is a static, installable PWA that operates a Hub with no backend of its own. It is the REST API, seen.

Six things were already built and wired to nothing

Most of this release is not new machinery. It is connecting what was already there:

  • MetricRepository persisted a sample on every heartbeat, and nothing ever read one back. Now GET /nodes/{id}/metrics, node metrics --since 1h, and a chart.
  • DesiredState / StateReconciler — the product's thesis — existed in the domain, reachable from nothing. Now declare, diff, drift and reconcile, from state set|show|diff|reconcile and a declared-vs-actual panel.
  • NodeAgent.sendLogs shipped batches the Hub decoded and threw away. Now node logs -f.
  • NodeDescriptor.labels existed with no flag that could set one. Now node start --label env=prod, nodes list --label, and selectors that target them.
  • PresetRepository had no endpoint. Now a preset library: save once, apply by id, stop shipping preset files around.
  • The Hub had no persistence at all — no --data-dir. Grants, presets, desired state and alerts now survive a restart.

New

  • Grant-verified API auth. --principal + --token are checked against the Hub's grant table and resolve to real roles, rather than being an attribution header. A viewer link is now safe to hand out; mutations need operator or admin.
  • Live events over SSEGET /events/stream, events --follow. The feed is a console, not a poll.
  • Async operations. An install that outlives a request no longer times out in the browser: --async returns an operation id, ops list|show tracks it.
  • Fleet selectors — act on one node, on a label, or on all of them, with a per-node result matrix instead of a single verdict.
  • Alerts that hold a condition before they mean anything (disk over 90%, a node offline past its grace), announced once and resolved once.
  • Live grant management — an operator can be added or revoked without restarting the Hub.
  • CORS, so a browser can actually read the Hub's answers — including its errors.

Every endpoint landed with its CLI command in the same change, so the CLI never falls behind the UI.

Requires

  • omnyhub 1.6.0 — CORS and Server-Sent Events.
  • omnyshell_web 1.15.0 — the terminal, imported rather than rebuilt, so a node's shell opens in the dashboard.

Full notes: CHANGELOG.md