masqueradarr
operations · 09 observe & maintain

Watch it, schedule it, back it up

Everything you need to run masqueradarr day-to-day: live streaming telemetry, historical QoE analytics, system stats, categorized logs, the automatic scheduler, and full-system backup / restore.

01 Active Streams

Who's watching what, right now

A real-time monitor of everything currently being watched. Each session shows the channel, its playlist/source, the viewer, current bitrate, uptime, and a health indicator. It's live telemetry pushed over a WebSocket — no refresh button, held in memory, always the present moment.

Active Streams screen
Active Streams · live sessions over a WebSocket
reading health

A healthy session shows a steady bitrate and climbing uptime. A session flagged failing is one the server couldn't keep fed — worth investigating, and it drives the live pulse dot next to Active Streams in the sidebar. An empty screen is normal when nobody is watching. To investigate: note the channel + source, open View logs filtered to that source, and cross-check the channel on its Playlist detail.

a session carried by a backup

When a channel's own upstream failed and one of its failover backups is carrying the stream, the session is badged failover → <child>, and its detail panel names the backup's position in the line. The parent may simultaneously show as probe-dead on its playlist — that is coherent, not a contradiction: the probe tests each channel on its own, while the session is being served by a stand-in.

02 History / Metrics

The quality-of-experience record

Where Active Streams shows the present, History / Metrics shows the past: every completed viewing session, from persisted view-session history. It grows over time; a fresh install is empty.

● stat cards

Headline totals

Sessions, viewers, data served, and similar rollups across the recorded history.

● buffer histogram

Smooth or stutter

A distribution of buffering events — a long tail toward high buffering means trouble.

● problem channels

Fix the noisy few

The channels with the worst experience, surfaced so you can prioritize them.

● session table + detail

Per-view timeline

Every recorded session; select a row for its full timeline. Toggle SessionsUser Metrics to analyze by event or by person.

History and Metrics screen
History / Metrics · persisted QoE analytics
03 System stats

Live CPU & memory on the Dashboard

The admin Dashboard pushes live system-performance stats (CPU / memory) over a WebSocket, alongside the stat cards (Playlists, Channels, Channels live/down, EPG sources, Unmatched) and the Activity panel (live Active Sessions + recent History). Glance at Channels live vs down to spot a source problem, and Unmatched to know when to head to Channel Mapping.

04 Logs · 14 categories

MongoDB-backed application logs

Every [tag] msg the server logs is persisted to the Log model (14-day TTL) via an injected sink, and fanned out to a live "View logs" drawer (/api/logs REST + /api/logs-stream WebSocket, admin-only). A tag→category map derives one of 14 categories, at three levels — info · warn · error.

dashboard active playlists epg-sources mapping history users import settings api core mongodb proxy failover
the two cross-boundary categories

proxy holds the Rust data-plane's full resolve→fetch→rewrite→serve lineage, ingested over the log seam (POST /api/internal/log) — persisted without a console re-print, since the sidecar already printed to its inherited stdout. failover is the newest, and the other one written from both planes: Node records group saves, EPG cascades, auto-disbands and exhausted chains (naming the parent and its playlist); Rust records the walk itself (carrying the session id). See Playlist Failover. The single logLevel (1|2|3) knob on Settings gates verbosity for every subsystem, Node and Rust alike, live with no restart.

05 Scheduler & cronjobs

Keep the catalog fresh, automatically

A croner-backed runtime scheduler runs the persisted cronjobs collection. Enabled jobs register at boot; a PUT/DELETE on /api/cronjobs re-registers or unschedules immediately. Each tick dispatches on its targetType.

targetTypeWhat the tick does
epg-sourceEPG re-sync
playlistPlaylist source live-sync
playlist-m3uPlaylist M3U (+ XMLTV guide sibling) recompose
backupScheduled on-disk backup
channel-probeThe Rust-assisted channel health sweep
06 Backup, restore & maintenance

One-click snapshots of the whole system

● backup

Full-system gzip

A gzipped snapshot of every collection — downloaded, or written to a configured backup directory on a schedule.

● restore

In-place re-orchestration

Restore from an uploaded backup or a saved file; the restore re-orchestrates the dependent subsystems (boot init, DNS, scheduler) in place.

● maintenance

Indexes & reset

From Settings: rebuild MongoDB indexes, or reset the workspace (wipe content, keep users / settings).

the load-bearing setting

Domain (Settings) is built into every published playlist URL — changing it cascades and rewrites the URL of every playlist. Set it to your real public address once; any links users already saved point at the old address until they re-copy the updated URLs. Outbound-fetch DNS nameservers and the global logLevel also live in Settings.

README · Observability · Scheduling · Backup & restore logs skill · the 14 categories · the log seam src/docs · active-streams · history-metrics · settings next → Architecture
masqueradarr · operations next → architecture