use offline_protocol_reliability::{DeduplicatorStats, RetryQueueStats};
use offline_protocol_transport::{TransportMetrics, TransportType};
#[derive(Debug, Clone)]
pub struct MetricsFrame {
pub timestamp_ms: i64,
pub transports: Vec<(TransportType, TransportMetrics)>,
pub retry_queue: RetryQueueStats,
pub dedup: DeduplicatorStats,
pub ack_pending: usize,
pub neighbor_count: usize,
pub is_local_relay: bool,
pub current_transport: Option<TransportType>,
}
impl MetricsFrame {
pub const NAME: &'static str = "protocol.metrics.snapshot";
pub fn telemetry_name(&self) -> &'static str {
Self::NAME
}
}
#[cfg(test)]
mod tests {
use super::*;
use offline_protocol_reliability::DeduplicatorMode;
fn sample_frame() -> MetricsFrame {
MetricsFrame {
timestamp_ms: 0,
transports: Vec::new(),
retry_queue: RetryQueueStats {
total_count: 0,
ready_count: 0,
critical_priority_count: 0,
high_priority_count: 0,
medium_priority_count: 0,
low_priority_count: 0,
},
dedup: DeduplicatorStats {
total_tracked: 0,
recent_tracked: 0,
capacity_used_percent: 0,
false_positive_rate: None,
mode: DeduplicatorMode::HashMap,
},
ack_pending: 0,
neighbor_count: 0,
is_local_relay: false,
current_transport: None,
}
}
#[test]
fn name_is_stable() {
assert_eq!(MetricsFrame::NAME, "protocol.metrics.snapshot");
assert_eq!(sample_frame().telemetry_name(), "protocol.metrics.snapshot");
}
}