Build dashboard (co-located)
Mosquitto + nornir-dashboard for MQTT build telemetry on the same machine as the
build appliance.
Start / restart:
.\nornir-docker\start-dashboard.ps1
# or after Initialize-NornirBuildAppliance.ps1 (starts automatically)
Rebuild the dashboard image from local nornir-builddashboard sources and
recreate only the dashboard container (Mosquitto keeps retained run meta):
.\nornir-docker\start-dashboard.ps1 -Rebuild
.\nornir-docker\start-dashboard.ps1 -Rebuild -NoCache
Hard-refresh the browser afterward (or wait for the WebSocket reconnect, which
reloads /api/runs). Progress published while the dashboard was down is not
replayed; the run should reappear from SQLite and/or retained MQTT meta.
Run env template: nornir-docker/example.dashboard.run.env →
<NORNIR_DOCKER_USER_ROOT>\Run\nornir-dashboard\dashboard.run.env.
Sources live in the nornir-builddashboard git submodule at the monorepo root
(Docker image and compose service are named nornir-dashboard). If the
submodule is missing, run git submodule update --init nornir-builddashboard
or use Initialize-NornirBuildAppliance.ps1 / start-dashboard.ps1, which
initialize it automatically when a local image build is required.
Default UI bind: 127.0.0.1:8087. Build containers publish with
NORNIR_MQTT_HOST=host.docker.internal (set by start-nornir-build.ps1).
Compose file: nornir-docker/compose.dashboard.yaml.
Log retention and UI history
NORNIR_DASHBOARD_MAX_EVENTS (default 0 = unlimited / no prune; template in
example.dashboard.run.env) optionally caps how many events SQLite keeps
per run. Set a positive value to enable prune. Disk growth with the default
is then operator-owned (whole runs still age out via
NORNIR_DASHBOARD_RETENTION_DAYS). Events removed by prune or by retention are
gone from the dashboard DB; authoritative full session files remain under
NORNIR_LOG_ROOT.
The log pane loads a newest page first, then Load older / scroll-to-edge
pages through retained history without dumping the full multi‑MB transcript into
the DOM. Search and level checkboxes (errors, warnings, info, debug, events,
status) are applied on the server against all retained events for the run;
unchecked types are excluded from search results, filtered pages, live matches
while filtering, and Download logs
(GET /api/runs/{run_id}/events/export).