Playout: slate fallback, strict ffprobe validation, Prometheus metrics Chat: history on join, DM offline delivery, env-config rate limits, Redis auto-reconnect, heartbeat, ban/mute enforcement, DM metrics Viewer: presence indicators, schedule overlay, public /api/schedule Admin: playlist drag-reorder, schedule overrides CRUD, user actions, inline mod buttons, CSV export, config editor, restart buttons, upload normalization gate, analytics time range nginx: CORS preflight, JSON health, stub_status Docs: test-lab vs production distinction across all configs/docs Infra: Redis maxmemory, CD health IP-agnostic, slate volume mount
75 lines
2.7 KiB
HTML
75 lines
2.7 KiB
HTML
<h1>System Configuration</h1>
|
|
<div class="panel-card split-grid">
|
|
<section>
|
|
<h2>Redis Stats</h2>
|
|
<dl class="kv-list">
|
|
<div>
|
|
<dt>Memory Used</dt>
|
|
<dd id="system-redis-memory">loading...</dd>
|
|
</div>
|
|
<div>
|
|
<dt>Connected Clients</dt>
|
|
<dd id="system-redis-clients">0</dd>
|
|
</div>
|
|
<div>
|
|
<dt>Redis Enabled</dt>
|
|
<dd id="system-redis-enabled">no</dd>
|
|
</div>
|
|
</dl>
|
|
</section>
|
|
<section>
|
|
<h2>Storage</h2>
|
|
<dl class="kv-list">
|
|
<div>
|
|
<dt>Database Driver</dt>
|
|
<dd id="system-db-driver">loading...</dd>
|
|
</div>
|
|
<div>
|
|
<dt>Stored Messages</dt>
|
|
<dd id="system-stored-messages">0</dd>
|
|
</div>
|
|
<div>
|
|
<dt>Last Refresh</dt>
|
|
<dd id="system-generated-at">loading...</dd>
|
|
</div>
|
|
<div>
|
|
<dt>Playlist Path</dt>
|
|
<dd id="system-playlist-path">loading...</dd>
|
|
</div>
|
|
<div>
|
|
<dt>Playlist Present</dt>
|
|
<dd id="system-playlist-present">no</dd>
|
|
</div>
|
|
</dl>
|
|
</section>
|
|
</div>
|
|
|
|
<div class="panel-card">
|
|
<div class="panel-header-row">
|
|
<h2>Service Health</h2>
|
|
<button id="reload-system-btn" type="button" class="btn btn-secondary">Reload health</button>
|
|
</div>
|
|
<div id="system-services" class="service-list"></div>
|
|
<p id="system-status" class="status-line" aria-live="polite">Loading system summary...</p>
|
|
</div>
|
|
|
|
<div class="panel-card">
|
|
<h2>Runtime Configuration</h2>
|
|
<form id="config-form" class="form-stack" style="max-width:400px">
|
|
<label>Rate Limit Max <input id="config-rate-max" type="number" class="text-input" /></label>
|
|
<label>Rate Limit Window (seconds) <input id="config-rate-window" type="number" class="text-input" /></label>
|
|
<button type="submit" class="btn btn-primary">Save Config</button>
|
|
</form>
|
|
<p id="config-status" class="status-line" aria-live="polite"></p>
|
|
</div>
|
|
|
|
<div class="panel-card">
|
|
<h2>Service Control</h2>
|
|
<p class="small-muted">Restart individual services (manual — container restart commands returned by API).</p>
|
|
<div class="button-row">
|
|
<button class="btn btn-secondary restart-btn" data-service="playout">Restart Playout</button>
|
|
<button class="btn btn-secondary restart-btn" data-service="chat">Restart Chat</button>
|
|
<button class="btn btn-secondary restart-btn" data-service="nginx">Restart Nginx</button>
|
|
</div>
|
|
<p id="restart-status" class="status-line" aria-live="polite"></p>
|
|
</div> |