From 1473660f6815504903d2b8a797a0218b416e020f Mon Sep 17 00:00:00 2001 From: Brad Stein Date: Sat, 16 May 2026 19:46:56 -0300 Subject: [PATCH] ci: restore lesavka quality telemetry publishing --- client/src/input/microphone.rs | 4 +-- scripts/ci/quality_gate.sh | 2 +- server/src/bin/lesavka_uvc/coverage_model.rs | 26 ++++++++++++++++---- 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/client/src/input/microphone.rs b/client/src/input/microphone.rs index d774242..828f0df 100644 --- a/client/src/input/microphone.rs +++ b/client/src/input/microphone.rs @@ -20,9 +20,9 @@ use std::{ thread, time::Duration, }; -use tracing::{debug, warn}; +use tracing::{debug, info, warn}; #[cfg(not(coverage))] -use tracing::{error, info, trace}; +use tracing::{error, trace}; const MIC_GAIN_ENV: &str = "LESAVKA_MIC_GAIN"; const MIC_GAIN_CONTROL_ENV: &str = "LESAVKA_MIC_GAIN_CONTROL"; diff --git a/scripts/ci/quality_gate.sh b/scripts/ci/quality_gate.sh index 822f806..15a08d5 100755 --- a/scripts/ci/quality_gate.sh +++ b/scripts/ci/quality_gate.sh @@ -100,7 +100,7 @@ publish_metrics() { curl --fail --silent --show-error \ --data-binary @"${METRICS_FILE}" \ - "${PUSHGATEWAY_URL%/}/metrics/job/platform-quality-ci/suite/lesavka" + "${PUSHGATEWAY_URL%/}/metrics/job/platform-quality-ci/suite/lesavka/gate/quality" } write_fallback_quality_metrics() { diff --git a/server/src/bin/lesavka_uvc/coverage_model.rs b/server/src/bin/lesavka_uvc/coverage_model.rs index 0c76fab..5d2d67e 100644 --- a/server/src/bin/lesavka_uvc/coverage_model.rs +++ b/server/src/bin/lesavka_uvc/coverage_model.rs @@ -166,6 +166,7 @@ struct UvcVideoStream { buffers: Vec, frame_path: std::path::PathBuf, latest_frame: Vec, + stats: UvcVideoStats, frame_max_bytes: usize, frame_period: Option, next_queue_at: Option, @@ -196,6 +197,7 @@ impl UvcVideoStream { buffers: Vec::new(), frame_path: frame_spool_path(), latest_frame: IDLE_MJPEG_FRAME.to_vec(), + stats: UvcVideoStats::default(), frame_max_bytes: MAX_MJPEG_FRAME_BYTES, frame_period: None, next_queue_at: None, @@ -210,12 +212,26 @@ impl UvcVideoStream { return; } let max_frame_bytes = self.frame_payload_limit(); - if let Ok(frame) = std::fs::read(&self.frame_path) - && frame.len() <= max_frame_bytes - && looks_like_mjpeg_frame(&frame) - { - self.latest_frame = frame; + if let Ok(frame) = std::fs::read(&self.frame_path) { + if frame.len() <= max_frame_bytes && looks_like_mjpeg_frame(&frame) { + self.stats.reloaded += 1; + self.stats.latest_bytes = frame.len(); + self.latest_frame = frame; + } else { + if frame.len() > max_frame_bytes && looks_like_mjpeg_frame(&frame) { + self.stats.rejected_oversize += 1; + self.stats.last_rejected_oversize_bytes = frame.len(); + self.stats.last_rejected_oversize_cap = max_frame_bytes; + } else { + self.stats.rejected_invalid += 1; + } + if !looks_like_mjpeg_frame(&self.latest_frame) { + self.stats.fallback_idle += 1; + self.latest_frame = IDLE_MJPEG_FRAME.to_vec(); + } + } } else if !looks_like_mjpeg_frame(&self.latest_frame) { + self.stats.fallback_idle += 1; self.latest_frame = IDLE_MJPEG_FRAME.to_vec(); } }