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
+14 -14
+14 -14
View File
@@ -74,7 +74,7 @@ impl StatsCollector {
}
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();
};
@@ -428,8 +428,7 @@ enum StatsEvent {
},
}
impl StatsEvent {
fn from_client_event(event: &ClientEvent) -> Option<Self> {
fn normalize_event(event: &ClientEvent) -> Option<StatsEvent> {
match event {
ClientEvent::EchoSent {
sent_at,
@@ -437,7 +436,7 @@ impl StatsEvent {
send_call,
timer_error,
..
} => Some(Self::Sent {
} => Some(StatsEvent::Sent {
at: sent_at.mono,
bytes: *bytes,
send_call_ns: duration_ns_i128(*send_call),
@@ -453,10 +452,10 @@ impl StatsEvent {
received_stats,
bytes,
..
} => Some(Self::UniqueReply {
} => Some(StatsEvent::UniqueReply {
at: received_at.mono,
is_late: false,
sample: Box::new(ReplySample::new(
sample: Box::new(ReplySample::from_reply_parts(
*seq,
*sent_at,
*received_at,
@@ -477,10 +476,10 @@ impl StatsEvent {
received_stats,
bytes,
..
} => Some(Self::UniqueReply {
} => Some(StatsEvent::UniqueReply {
at: received_at.mono,
is_late: true,
sample: Box::new(ReplySample::new(
sample: Box::new(ReplySample::from_reply_parts(
*seq,
*sent_at,
*received_at,
@@ -491,20 +490,21 @@ impl StatsEvent {
*bytes,
)),
}),
ClientEvent::LateReply { received_at, .. } => Some(Self::UntrackedLate {
ClientEvent::LateReply { received_at, .. } => Some(StatsEvent::UntrackedLate {
at: received_at.mono,
}),
ClientEvent::DuplicateReply { received_at, .. } => Some(Self::DuplicateReply {
ClientEvent::DuplicateReply { received_at, .. } => Some(StatsEvent::DuplicateReply {
at: received_at.mono,
}),
ClientEvent::EchoLoss { timeout_at, .. } => Some(Self::Loss { at: *timeout_at }),
ClientEvent::Warning { at, .. } => Some(Self::Warning { at: at.mono }),
ClientEvent::EchoLoss { timeout_at, .. } => Some(StatsEvent::Loss { at: *timeout_at }),
ClientEvent::Warning { at, .. } => Some(StatsEvent::Warning { at: at.mono }),
ClientEvent::SessionStarted { .. }
| ClientEvent::NoTestCompleted { .. }
| ClientEvent::SessionClosed { .. } => None,
}
}
}
impl StatsEvent {
fn at(&self) -> Instant {
match self {
Self::Sent { at, .. }
@@ -546,7 +546,7 @@ struct IpdvSample {
impl ReplySample {
#[allow(clippy::too_many_arguments)]
fn new(
fn from_reply_parts(
seq: u32,
sent_at: ClientTimestamp,
received_at: ClientTimestamp,