From 5f6bff5dcb958bd7acc588ad8295ba7e33a4aeb2 Mon Sep 17 00:00:00 2001 From: Nils Andreas Svee Date: Mon, 11 May 2026 09:50:16 +0700 Subject: [PATCH] feat(client): add timestamp to ClientEvent::Warning Include a timestamp when reporting warnings to allow consumers like the machine-readable formatter to provide temporal context for troubleshooting. --- crates/irtt-cli/src/lib.rs | 9 ++++++--- crates/irtt-client/src/client.rs | 4 ++++ crates/irtt-client/src/client/tests/probes_replies.rs | 2 +- crates/irtt-client/src/event.rs | 1 + crates/irtt-client/src/managed/hub.rs | 1 + 5 files changed, 13 insertions(+), 4 deletions(-) diff --git a/crates/irtt-cli/src/lib.rs b/crates/irtt-cli/src/lib.rs index 8b5308a..b849bd9 100644 --- a/crates/irtt-cli/src/lib.rs +++ b/crates/irtt-cli/src/lib.rs @@ -442,7 +442,7 @@ pub fn format_human_event_with_options( write_human_received_stats(&mut out, *received_stats); out } - ClientEvent::Warning { kind, message } => { + ClientEvent::Warning { kind, message, .. } => { format!("warning kind={} message={message}", warning_kind(*kind)) } } @@ -565,8 +565,9 @@ fn format_machine(event: &ClientEvent) -> String { write_packet_meta(&mut out, *packet_meta); out.push_str(" warning=late"); } - ClientEvent::Warning { kind, message } => { + ClientEvent::Warning { kind, message, at } => { write_common(&mut out, "warning"); + write_wall(&mut out, "at", at.wall); write!( out, " warning_kind={} message={}", @@ -637,7 +638,7 @@ fn format_simple(event: &ClientEvent) -> String { } out } - ClientEvent::Warning { kind, message } => { + ClientEvent::Warning { kind, message, .. } => { format!("warning kind={} message={message}", warning_kind(*kind)) } } @@ -1205,6 +1206,7 @@ mod tests { &ClientEvent::Warning { kind: WarningKind::WrongToken, message: "bad".to_owned(), + at: ClientTimestamp::now() }, OutputMode::RttUs ), @@ -1475,6 +1477,7 @@ mod tests { ClientEvent::Warning { kind: WarningKind::UntrackedReply, message: "untracked reply".to_owned(), + at: ClientTimestamp::now(), }, ]; diff --git a/crates/irtt-client/src/client.rs b/crates/irtt-client/src/client.rs index 4d54fb4..f89d86d 100644 --- a/crates/irtt-client/src/client.rs +++ b/crates/irtt-client/src/client.rs @@ -319,6 +319,7 @@ impl Client { return Ok(vec![ClientEvent::Warning { kind: WarningKind::MalformedOrUnrelatedPacket, message: "dropped malformed or unrelated packet".to_owned(), + at: now, }]); }; self.process_echo_reply(reply, packet_len, now, datagram.meta) @@ -415,6 +416,7 @@ impl Client { return Ok(vec![ClientEvent::Warning { kind: WarningKind::MalformedOrUnrelatedPacket, message: "dropped malformed or unrelated packet".to_owned(), + at: now, }]); }; self.process_echo_reply(reply, packet_len, now, meta) @@ -447,6 +449,7 @@ impl Client { "dropped reply with wrong token: expected {token:#x}, got {:#x}", reply.token ), + at: now, }]); } @@ -561,6 +564,7 @@ impl Client { message: format!( "dropped reply with untracked seq {wire_seq} (no pending or completed entry)" ), + at: now, }]) } } diff --git a/crates/irtt-client/src/client/tests/probes_replies.rs b/crates/irtt-client/src/client/tests/probes_replies.rs index 135e11c..89e3d0c 100644 --- a/crates/irtt-client/src/client/tests/probes_replies.rs +++ b/crates/irtt-client/src/client/tests/probes_replies.rs @@ -1678,7 +1678,7 @@ fn receive_metadata_does_not_broaden_malformed_warning() { assert_eq!(events.len(), 1); match &events[0] { - ClientEvent::Warning { kind, message } => { + ClientEvent::Warning { kind, message, .. } => { assert_eq!(*kind, WarningKind::MalformedOrUnrelatedPacket); assert_eq!(message, "dropped malformed or unrelated packet"); } diff --git a/crates/irtt-client/src/event.rs b/crates/irtt-client/src/event.rs index 4d361de..16ecaa6 100644 --- a/crates/irtt-client/src/event.rs +++ b/crates/irtt-client/src/event.rs @@ -96,6 +96,7 @@ pub enum ClientEvent { Warning { kind: WarningKind, message: String, + at: ClientTimestamp, }, } diff --git a/crates/irtt-client/src/managed/hub.rs b/crates/irtt-client/src/managed/hub.rs index 3e9a6b7..81e1400 100644 --- a/crates/irtt-client/src/managed/hub.rs +++ b/crates/irtt-client/src/managed/hub.rs @@ -279,6 +279,7 @@ mod tests { ClientEvent::Warning { kind: WarningKind::UntrackedReply, message: format!("event-{n}"), + at: ClientTimestamp::now(), } }