From 08fec696f1d7cf648da81fa7562fe364e6ed5165 Mon Sep 17 00:00:00 2001 From: serversdown Date: Tue, 9 Jun 2026 17:56:29 +0000 Subject: [PATCH] fix(slm): don't blank L1/L10 on percentile-less live-stream frames MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The DRD stream carries Lp/Leq/Lmax but not the Ln percentiles (those come from DOD polling), so updateLiveMetrics/updateDashboardMetrics were overwriting the DOD-sourced L1/L10 values with '--' on every stream frame. Guard the value updates on `data.lnN != null` so a frame without the key leaves the existing value intact — mirrors the existing label guards. Co-Authored-By: Claude Opus 4.8 (1M context) --- templates/partials/slm_live_view.html | 11 +++++++---- templates/sound_level_meters.html | 6 ++++-- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/templates/partials/slm_live_view.html b/templates/partials/slm_live_view.html index dc5e363..0779dac 100644 --- a/templates/partials/slm_live_view.html +++ b/templates/partials/slm_live_view.html @@ -570,14 +570,17 @@ function updateLiveMetrics(data) { if (document.getElementById('live-lmax')) { document.getElementById('live-lmax').textContent = data.lmax || '--'; } - if (document.getElementById('live-ln1')) { - document.getElementById('live-ln1').textContent = data.ln1 || '--'; + // Only update Ln values when the frame actually carries them. DRD stream + // frames omit percentiles (DOD-only), so without this guard a live stream + // would blank L1/L10 over the values rendered from the cached DOD snapshot. + if (data.ln1 != null && document.getElementById('live-ln1')) { + document.getElementById('live-ln1').textContent = data.ln1; } if (data.ln1_label && document.getElementById('live-ln1-label')) { document.getElementById('live-ln1-label').textContent = data.ln1_label; } - if (document.getElementById('live-ln2')) { - document.getElementById('live-ln2').textContent = data.ln2 || '--'; + if (data.ln2 != null && document.getElementById('live-ln2')) { + document.getElementById('live-ln2').textContent = data.ln2; } if (data.ln2_label && document.getElementById('live-ln2-label')) { document.getElementById('live-ln2-label').textContent = data.ln2_label; diff --git a/templates/sound_level_meters.html b/templates/sound_level_meters.html index b1f0407..697f6e7 100644 --- a/templates/sound_level_meters.html +++ b/templates/sound_level_meters.html @@ -322,8 +322,10 @@ function updateDashboardMetrics(data) { document.getElementById('chart-lp').textContent = data.lp || '--'; document.getElementById('chart-leq').textContent = data.leq || '--'; document.getElementById('chart-lmax').textContent = data.lmax || '--'; - document.getElementById('chart-ln1').textContent = data.ln1 || '--'; - document.getElementById('chart-ln2').textContent = data.ln2 || '--'; + // Guard: DRD stream frames omit percentiles, so only overwrite when present + // (else the live stream blanks L1/L10 over the cached DOD snapshot values). + if (data.ln1 != null) document.getElementById('chart-ln1').textContent = data.ln1; + if (data.ln2 != null) document.getElementById('chart-ln2').textContent = data.ln2; if (data.ln1_label) document.getElementById('chart-ln1-label').textContent = data.ln1_label; if (data.ln2_label) document.getElementById('chart-ln2-label').textContent = data.ln2_label; }