Goal
Capture real listener + quality telemetry from Icecast and surface it to the admin dashboard (req #5, Phase 4 of #164).
Tasks
Files
backend/ (new metrics poller + /api/stream/metrics handler), admin SPA display.
Acceptance
Admin dashboard shows live listener count + bitrate sourced from Icecast; the icestats.source object-vs-array case is handled.
Depends on
#164 Phase-2 stack ticket (Icecast must be live).
Parent: #164 (Phase 4).
Goal
Capture real listener + quality telemetry from Icecast and surface it to the admin dashboard (req #5, Phase 4 of #164).
Tasks
GET /status-json.xsl→ per-mountlisteners(a genuine concurrent count, which HLS structurally can't give),audio_bitrate,samplerate,channels. Handleicestats.sourcebeing an object (1 mount) vs array (N mounts).ffprobe -print_format json -show_streams <mount>for codec/bitrate. Poll every 10–15 s and cache in the backend; surface to the admin SPA + a new/api/stream/metrics.Files
backend/(new metrics poller +/api/stream/metricshandler), admin SPA display.Acceptance
Admin dashboard shows live listener count + bitrate sourced from Icecast; the
icestats.sourceobject-vs-array case is handled.Depends on
#164 Phase-2 stack ticket (Icecast must be live).
Parent: #164 (Phase 4).