From 699c8782d9351b2812670225c9de39b8eb39f37e Mon Sep 17 00:00:00 2001 From: Nils Andreas Svee Date: Mon, 13 Apr 2026 17:21:14 +0700 Subject: [PATCH] fix(observability): send individual metrics over UDP to avoid packet size limits Differentiate flushing logic between transport types to prevent UDP payload truncation while maintaining batched delivery for TCP. --- src/metrics.rs | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/metrics.rs b/src/metrics.rs index dc3ccc0..ec11219 100644 --- a/src/metrics.rs +++ b/src/metrics.rs @@ -185,11 +185,23 @@ impl Metrics { } fn flush(&self, transport: &mut Transport, batch: &[Metric], host_tag: &str) { - let mut data = String::with_capacity(batch.len() * 300); - for metric in batch { - self.write_lines(metric, host_tag, &mut data); + match transport { + Transport::Udp(_) => { + let mut data = String::with_capacity(300); + for metric in batch { + data.clear(); + self.write_lines(metric, host_tag, &mut data); + transport.send(&data); + } + } + Transport::Tcp { .. } => { + let mut data = String::with_capacity(batch.len() * 300); + for metric in batch { + self.write_lines(metric, host_tag, &mut data); + } + transport.send(&data); + } } - transport.send(&data); } fn write_lines(&self, metric: &Metric, host_tag: &str, out: &mut String) {