From ed71b66c5d09b620f029084b388e18a57583ab90 Mon Sep 17 00:00:00 2001 From: Jan Svabenik Date: Sat, 21 Mar 2026 21:29:57 +0100 Subject: [PATCH] feat: show surveillance level summary in UI --- web/app.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/web/app.js b/web/app.js index a8cb679..d40c25a 100644 --- a/web/app.js +++ b/web/app.js @@ -763,6 +763,14 @@ async function loadRefinement() { } catch {} } +function formatLevelSummary(level) { + if (!level) return 'n/a'; + const name = level.name || 'level'; + const fft = level.fft_size ? `${level.fft_size} bins` : 'bins n/a'; + const span = level.span_hz ? fmtHz(level.span_hz) : 'span n/a'; + return `${name} · ${fft} · ${span}`; +} + function queueConfigUpdate(partial) { if (isSyncingConfig) return; pendingConfigUpdate = { ...(pendingConfigUpdate || {}), ...partial }; @@ -868,7 +876,8 @@ function updateHeroMetrics() { if (healthRefineWindows) { const stats = refinementInfo.window_stats || null; if (stats && stats.count) { - healthRefineWindows.textContent = `${fmtHz(stats.min_span_hz || 0)}–${fmtHz(stats.max_span_hz || 0)}`; + const levels = refinementInfo.surveillance_level ? ` · ${formatLevelSummary(refinementInfo.surveillance_level)}` : ''; + healthRefineWindows.textContent = `${fmtHz(stats.min_span_hz || 0)}–${fmtHz(stats.max_span_hz || 0)}${levels}`; } else { const windows = refinementInfo.windows || []; if (!Array.isArray(windows) || windows.length === 0) {