A live monitoring dashboard for Nalix servers, built with Blazor WebAssembly. It talks to the server over the same encrypted Nalix WebSocket channel the application already uses — no extra HTTP endpoint, no agent, no metrics database.
- One request per tick. The server samples every subsystem the open views need into a single JSON payload (compressed by the Nalix frame pipeline), instead of one round-trip per report.
- Every report, no hand-written parsers. Reports render generically from their JSON, so new server-side fields show up without a dashboard release. Click any number to chart its history.
- Diagnostics in the browser. Rolling z-score spike detection and least-squares leak detection (with a Student-t p-value) run over the kept history.
- Recordings. Capture every metric of every sample and export a wide CSV.
- No third-party packages. Only the Blazor WebAssembly runtime and the first-party
Nalix.SDK. Controls, SVG charts, styling and statistics are written in this repository.
Add the Nalix.Observability
extension to the server and expose a WebSocket listener:
NetworkApplication host = NetworkApplication.CreateBuilder()
.UseObservability()
.ListenWebSocket<DefaultProtocol>()
.OnPort(57207)
.WithPath("/ws/")
.Bind()
.Build();On first start the server writes a random 64-character hex access key to observability.private in its
configuration directory. That key grants supervisor access; treat it like a password.
dotnet run --project src/Nalix.DashboardOpen the printed URL, enter host, port, path and the access key. The key is kept in session storage (forgotten when the browser closes) unless you tick Remember the key on this device.
The published build is a static site (dotnet publish src/Nalix.Dashboard -c Release); the
deploy workflow deploys it to Cloudflare Pages.
dotnet build src/Nalix.Dashboard.slnx -c Release
dotnet run --project tests/Nalix.Dashboard.Tests -c ReleaseThe test runner is dependency-free; exit code 0 means every test passed.
See ARCHITECTURE.md for the project layout and data flow.