—
Everything this call measured was uploaded as it ended — every sample it sent, the issues it raised and how it scored, kept per client. The dashboard is where that is read back.
Open the session report ↗One browser tab joined to a loopback room: it sends its camera and microphone to a mediasoup SFU, the SFU sends them straight back, and @observertc/client-monitor-js watches both directions from inside the page. Every number here is read from that live monitor — nothing is simulated, and anything the browser does not report stays an em dash rather than becoming a plausible-looking zero.
The monitor's samples go to the SFU over a data channel, where observer-js accepts them and writes them out. The Samples tab shows those same objects as they leave.
A session is given a fixed number of samples — the pill beside the connection status counts them down — and the SFU closes the connection when they run out. It is a public demo on somebody's server: the cap is what keeps a forgotten tab from producing media and samples all night. Pressing Join starts a fresh session with a fresh allowance; the scores, issues and samples of the old one are gone, so download anything worth keeping first.
Observations from real calls are the most useful thing anyone can send. A condition no detector notices, a detector that fires on a call that was fine, a threshold that is wrong for your fleet, a change to how an existing one decides, or an idea for a detector that should exist — all of it is welcome as an issue on the client-monitor-js project: github.com/ObserveRTC/client-monitor-js/issues. A session from this page helps: the Samples tab downloads the ClientSamples as JSON, and the Issues tab has each episode's payload.