T2.3-T2.6: BWE guard, relay conformance Tier A/B/C, Prometheus metrics

This commit is contained in:
Siavash Sameni
2026-05-11 20:50:01 +04:00
parent 3de56cf1f9
commit 54c1a35186
16 changed files with 977 additions and 38 deletions

View File

@@ -17,6 +17,7 @@ use wzp_proto::packet::TrunkFrame;
use wzp_proto::quality::{AdaptiveQualityController, Tier};
use wzp_proto::traits::QualityController;
use crate::conformance::ConformanceMeter;
use crate::metrics::RelayMetrics;
use crate::trunk::TrunkBatcher;
@@ -780,6 +781,7 @@ async fn run_participant_plain(
let mut max_forward_ms = 0u64;
let mut send_errors = 0u64;
let mut last_log_instant = std::time::Instant::now();
let mut conformance = ConformanceMeter::new();
let mut tap_stats = if debug_tap.as_ref().map_or(false, |t| t.matches(&room_name)) {
Some(TapStats::new())
@@ -829,6 +831,22 @@ async fn run_participant_plain(
);
}
// Conformance check (Tier A/B/C — observe-only)
let violation = conformance
.observe(&pkt.header, pkt.payload.len(), std::time::Instant::now())
.err();
metrics.record_conformance(&pkt.header, pkt.payload.len(), recv_gap_ms, violation);
if let Some(v) = violation {
warn!(
room = %room_name,
participant = participant_id,
codec = ?pkt.header.codec_id,
seq = pkt.header.seq,
violation = ?v,
"conformance violation"
);
}
// Update per-session quality metrics if a quality report is present
if let Some(ref report) = pkt.quality_report {
metrics.update_session_quality(session_id, report);
@@ -998,6 +1016,7 @@ async fn run_participant_trunked(
let mut max_forward_ms = 0u64;
let mut send_errors = 0u64;
let mut last_log_instant = std::time::Instant::now();
let mut conformance = ConformanceMeter::new();
info!(
room = %room_name,
@@ -1051,6 +1070,22 @@ async fn run_participant_trunked(
);
}
// Conformance check (Tier A/B/C — observe-only)
let violation = conformance
.observe(&pkt.header, pkt.payload.len(), std::time::Instant::now())
.err();
metrics.record_conformance(&pkt.header, pkt.payload.len(), recv_gap_ms, violation);
if let Some(v) = violation {
warn!(
room = %room_name,
participant = participant_id,
codec = ?pkt.header.codec_id,
seq = pkt.header.seq,
violation = ?v,
"conformance violation (trunked)"
);
}
if let Some(ref report) = pkt.quality_report {
metrics.update_session_quality(session_id, report);
}