Live & TV mode

Dashboards, issue lists and the TV screen update live. No polling and no websockets: one Server-Sent Events stream per open page.

The stream

GET /live?scope=all
GET /live?scope=project:<id>
GET /live?scope=issue:<id>

Auth is the browser session, or Authorization: Bearer of_…. A project-scoped token narrows what you see.

The stream sends:

Treat issue_title as text: it came from an SDK. It is control-character stripped and capped at 120 characters.

curl -N -H "Authorization: Bearer of_..." "https://errors.example.com/live?scope=all"

A server holds at most 256 live connections at once. Past that, new ones get 503 until a slot frees.

Summary

GET /live/summary?scope=…

Returns {unresolved, received_1h, received_24h, series_1h, latest}. series_1h is twelve 5-minute buckets. latest is the five most recently seen issues. Clients fetch it when a tick arrives.

HTTP/2 matters

Each open tab holds one stream. Browsers on HTTP/1.1 allow only 6 connections per host, so the seventh tab hangs. Serve OpenFault over HTTPS through a reverse proxy and you get HTTP/2, which multiplexes them. See Install.

TV mode

https://errors.example.com/tv
https://errors.example.com/tv?project=<slug>

Full screen, dark, no chrome: big numbers, live per-project charts, a 12-hour trend, the newest issues, and a QR code to open it on a phone. Leave it up on a team screen. It uses the same live stream, so the HTTP/2 note applies.