refactor(irtt-stats): extract event normalization boundary

This commit is contained in:
Nils Andreas Svee committed 2026-05-13 13:31:27 +07:00
1 parent c1b2486046
commit 969d26d0f1
1 file changed
+77 -77
+77 -77
View File
@@ -74,7 +74,7 @@ impl StatsCollector {
} }
pub fn process(&mut self, event: &ClientEvent) -> EventStatsUpdate { pub fn process(&mut self, event: &ClientEvent) -> EventStatsUpdate {
let Some(stats_event) = StatsEvent::from_client_event(event) else { let Some(stats_event) = normalize_event(event) else {
return EventStatsUpdate::default(); return EventStatsUpdate::default();
}; };
@@ -428,83 +428,83 @@ enum StatsEvent {
}, },
} }
impl StatsEvent { fn normalize_event(event: &ClientEvent) -> Option<StatsEvent> {
fn from_client_event(event: &ClientEvent) -> Option<Self> { match event {
match event { ClientEvent::EchoSent {
ClientEvent::EchoSent { sent_at,
sent_at, bytes,
bytes, send_call,
send_call, timer_error,
timer_error, ..
.. } => Some(StatsEvent::Sent {
} => Some(Self::Sent { at: sent_at.mono,
at: sent_at.mono, bytes: *bytes,
bytes: *bytes, send_call_ns: duration_ns_i128(*send_call),
send_call_ns: duration_ns_i128(*send_call), timer_error_ns: duration_ns_i128(*timer_error),
timer_error_ns: duration_ns_i128(*timer_error), }),
}), ClientEvent::EchoReply {
ClientEvent::EchoReply { seq,
seq, sent_at,
sent_at, received_at,
received_at, rtt,
rtt, server_timing,
server_timing, one_way,
one_way, received_stats,
received_stats, bytes,
bytes, ..
.. } => Some(StatsEvent::UniqueReply {
} => Some(Self::UniqueReply { at: received_at.mono,
at: received_at.mono, is_late: false,
is_late: false, sample: Box::new(ReplySample::from_reply_parts(
sample: Box::new(ReplySample::new( *seq,
*seq, *sent_at,
*sent_at, *received_at,
*received_at, *rtt,
*rtt, *server_timing,
*server_timing, *one_way,
*one_way, *received_stats,
*received_stats, *bytes,
*bytes, )),
)), }),
}), ClientEvent::LateReply {
ClientEvent::LateReply { seq,
seq, sent_at: Some(sent_at),
sent_at: Some(sent_at), received_at,
received_at, rtt: Some(rtt),
rtt: Some(rtt), server_timing,
server_timing, one_way,
one_way, received_stats,
received_stats, bytes,
bytes, ..
.. } => Some(StatsEvent::UniqueReply {
} => Some(Self::UniqueReply { at: received_at.mono,
at: received_at.mono, is_late: true,
is_late: true, sample: Box::new(ReplySample::from_reply_parts(
sample: Box::new(ReplySample::new( *seq,
*seq, *sent_at,
*sent_at, *received_at,
*received_at, *rtt,
*rtt, *server_timing,
*server_timing, *one_way,
*one_way, *received_stats,
*received_stats, *bytes,
*bytes, )),
)), }),
}), ClientEvent::LateReply { received_at, .. } => Some(StatsEvent::UntrackedLate {
ClientEvent::LateReply { received_at, .. } => Some(Self::UntrackedLate { at: received_at.mono,
at: received_at.mono, }),
}), ClientEvent::DuplicateReply { received_at, .. } => Some(StatsEvent::DuplicateReply {
ClientEvent::DuplicateReply { received_at, .. } => Some(Self::DuplicateReply { at: received_at.mono,
at: received_at.mono, }),
}), ClientEvent::EchoLoss { timeout_at, .. } => Some(StatsEvent::Loss { at: *timeout_at }),
ClientEvent::EchoLoss { timeout_at, .. } => Some(Self::Loss { at: *timeout_at }), ClientEvent::Warning { at, .. } => Some(StatsEvent::Warning { at: at.mono }),
ClientEvent::Warning { at, .. } => Some(Self::Warning { at: at.mono }), ClientEvent::SessionStarted { .. }
ClientEvent::SessionStarted { .. } | ClientEvent::NoTestCompleted { .. }
| ClientEvent::NoTestCompleted { .. } | ClientEvent::SessionClosed { .. } => None,
| ClientEvent::SessionClosed { .. } => None,
}
} }
}
impl StatsEvent {
fn at(&self) -> Instant { fn at(&self) -> Instant {
match self { match self {
Self::Sent { at, .. } Self::Sent { at, .. }
@@ -546,7 +546,7 @@ struct IpdvSample {
impl ReplySample { impl ReplySample {
#[allow(clippy::too_many_arguments)] #[allow(clippy::too_many_arguments)]
fn new( fn from_reply_parts(
seq: u32, seq: u32,
sent_at: ClientTimestamp, sent_at: ClientTimestamp,
received_at: ClientTimestamp, received_at: ClientTimestamp,