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:
helloon connect:{"server_time": …}.tickafter new events:{project_id, issue_id, issue_title, level, kind, ts, count}. Events within half a second are coalesced into one tick, withcountsaying how many. The fields describe the latest one.
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.