From 3d88a5ecd5c0933954552b53966a9d81ed46143c Mon Sep 17 00:00:00 2001 From: Yiming Luo Date: Thu, 10 Jul 2025 17:12:09 -0400 Subject: [PATCH 01/14] Add SendData.get_target_mut() --- datadog-trace-utils/src/send_data/mod.rs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/datadog-trace-utils/src/send_data/mod.rs b/datadog-trace-utils/src/send_data/mod.rs index acc4fb2ff7..25645ecb71 100644 --- a/datadog-trace-utils/src/send_data/mod.rs +++ b/datadog-trace-utils/src/send_data/mod.rs @@ -187,6 +187,15 @@ impl SendData { &self.target } + /// Returns the target endpoint as mutable. + /// + /// # Returns + /// + /// A mutable reference to the target endpoint. + pub fn get_target_mut(&mut self) -> &mut Endpoint { + &mut self.target + } + /// Returns the payloads to be sent. /// /// # Returns From 7ab2463139f75e37c7d8ac99c37f27c004594ba2 Mon Sep 17 00:00:00 2001 From: Yiming Luo Date: Mon, 14 Jul 2025 11:39:13 -0400 Subject: [PATCH 02/14] Add SendData.set_api_key() --- datadog-trace-utils/src/send_data/mod.rs | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/datadog-trace-utils/src/send_data/mod.rs b/datadog-trace-utils/src/send_data/mod.rs index 25645ecb71..708616b74f 100644 --- a/datadog-trace-utils/src/send_data/mod.rs +++ b/datadog-trace-utils/src/send_data/mod.rs @@ -17,7 +17,7 @@ use ddcommon::{ }; use futures::stream::FuturesUnordered; use futures::StreamExt; -use hyper::header::CONTENT_TYPE; +use hyper::header::{CONTENT_TYPE, HeaderValue}; use send_data_result::SendDataResult; use std::collections::HashMap; #[cfg(feature = "compression")] @@ -187,15 +187,6 @@ impl SendData { &self.target } - /// Returns the target endpoint as mutable. - /// - /// # Returns - /// - /// A mutable reference to the target endpoint. - pub fn get_target_mut(&mut self) -> &mut Endpoint { - &mut self.target - } - /// Returns the payloads to be sent. /// /// # Returns @@ -226,6 +217,15 @@ impl SendData { } } + /// Overrides the set API key. + /// + /// # Arguments + /// + /// * `api_key`: The new API key to be used. + pub fn set_api_key(&mut self, api_key: &str) { + self.target.api_key = Some(api_key.to_string().into()); + } + /// Sends the data to the target endpoint. /// /// # Returns From 687d72c63682e96c57d0a87c8ef98b0ca80534db Mon Sep 17 00:00:00 2001 From: Yiming Luo Date: Mon, 14 Jul 2025 11:50:50 -0400 Subject: [PATCH 03/14] fmt --- datadog-trace-utils/src/send_data/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/datadog-trace-utils/src/send_data/mod.rs b/datadog-trace-utils/src/send_data/mod.rs index 708616b74f..6d69308116 100644 --- a/datadog-trace-utils/src/send_data/mod.rs +++ b/datadog-trace-utils/src/send_data/mod.rs @@ -17,7 +17,7 @@ use ddcommon::{ }; use futures::stream::FuturesUnordered; use futures::StreamExt; -use hyper::header::{CONTENT_TYPE, HeaderValue}; +use hyper::header::{HeaderValue, CONTENT_TYPE}; use send_data_result::SendDataResult; use std::collections::HashMap; #[cfg(feature = "compression")] From 1d216e9690087337e78a2a4dd582f8a5580ebd99 Mon Sep 17 00:00:00 2001 From: Yiming Luo Date: Mon, 14 Jul 2025 16:07:01 -0400 Subject: [PATCH 04/14] SendDataBuilder.with_api_key() --- datadog-trace-utils/src/send_data/mod.rs | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/datadog-trace-utils/src/send_data/mod.rs b/datadog-trace-utils/src/send_data/mod.rs index 6d69308116..2bd9824a8a 100644 --- a/datadog-trace-utils/src/send_data/mod.rs +++ b/datadog-trace-utils/src/send_data/mod.rs @@ -17,7 +17,7 @@ use ddcommon::{ }; use futures::stream::FuturesUnordered; use futures::StreamExt; -use hyper::header::{HeaderValue, CONTENT_TYPE}; +use hyper::header::{CONTENT_TYPE}; use send_data_result::SendDataResult; use std::collections::HashMap; #[cfg(feature = "compression")] @@ -114,6 +114,11 @@ impl SendDataBuilder { self } + pub fn with_api_key(mut self, api_key: &str) -> SendDataBuilder { + self.target.api_key = Some(api_key.to_string().into()); + self + } + pub fn build(self) -> SendData { SendData { tracer_payloads: self.tracer_payloads, @@ -217,15 +222,6 @@ impl SendData { } } - /// Overrides the set API key. - /// - /// # Arguments - /// - /// * `api_key`: The new API key to be used. - pub fn set_api_key(&mut self, api_key: &str) { - self.target.api_key = Some(api_key.to_string().into()); - } - /// Sends the data to the target endpoint. /// /// # Returns From b5f1ac78ef5c6a867216d6ac51d0a2416c4f22fc Mon Sep 17 00:00:00 2001 From: Yiming Luo Date: Mon, 14 Jul 2025 16:57:37 -0400 Subject: [PATCH 05/14] Add SendDataBuilder.is_empty() --- datadog-trace-utils/src/send_data/mod.rs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/datadog-trace-utils/src/send_data/mod.rs b/datadog-trace-utils/src/send_data/mod.rs index 2bd9824a8a..c9910c0fb0 100644 --- a/datadog-trace-utils/src/send_data/mod.rs +++ b/datadog-trace-utils/src/send_data/mod.rs @@ -119,6 +119,15 @@ impl SendDataBuilder { self } + /// Checks if the user defined approximate size of the data to be sent is zero. + /// + /// # Returns + /// + /// `true` if size is 0, `false` otherwise. + pub fn is_empty(&self) -> bool { + self.size == 0 + } + pub fn build(self) -> SendData { SendData { tracer_payloads: self.tracer_payloads, From 6e215246454dc6c72dfeb4f0dbb0ffe1d7c6277a Mon Sep 17 00:00:00 2001 From: Yiming Luo Date: Mon, 14 Jul 2025 17:02:39 -0400 Subject: [PATCH 06/14] Add SendDataBuilder.with_retry_strategy() --- datadog-trace-utils/src/send_data/mod.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/datadog-trace-utils/src/send_data/mod.rs b/datadog-trace-utils/src/send_data/mod.rs index c9910c0fb0..ea13b2ba67 100644 --- a/datadog-trace-utils/src/send_data/mod.rs +++ b/datadog-trace-utils/src/send_data/mod.rs @@ -119,6 +119,11 @@ impl SendDataBuilder { self } + pub fn with_retry_strategy(mut self, retry_strategy: RetryStrategy) -> SendDataBuilder { + self.retry_strategy = retry_strategy; + self + } + /// Checks if the user defined approximate size of the data to be sent is zero. /// /// # Returns From a520f69ca4c08f5392d83c6473e55f438c415625 Mon Sep 17 00:00:00 2001 From: Yiming Luo Date: Mon, 14 Jul 2025 17:05:53 -0400 Subject: [PATCH 07/14] Add SendDataBuilder.len() --- datadog-trace-utils/src/send_data/mod.rs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/datadog-trace-utils/src/send_data/mod.rs b/datadog-trace-utils/src/send_data/mod.rs index ea13b2ba67..9f84a3dfe7 100644 --- a/datadog-trace-utils/src/send_data/mod.rs +++ b/datadog-trace-utils/src/send_data/mod.rs @@ -124,6 +124,15 @@ impl SendDataBuilder { self } + /// Returns the user defined approximate size of the data to be sent in bytes. + /// + /// # Returns + /// + /// The size of the data. + pub fn len(&self) -> usize { + self.size + } + /// Checks if the user defined approximate size of the data to be sent is zero. /// /// # Returns From 13472102804acff6c172b9699ce916aebb56e61d Mon Sep 17 00:00:00 2001 From: Yiming Luo Date: Mon, 14 Jul 2025 17:26:04 -0400 Subject: [PATCH 08/14] Add SendDataBuilder.clone() --- datadog-trace-utils/src/send_data/mod.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/datadog-trace-utils/src/send_data/mod.rs b/datadog-trace-utils/src/send_data/mod.rs index 9f84a3dfe7..edcf3d3334 100644 --- a/datadog-trace-utils/src/send_data/mod.rs +++ b/datadog-trace-utils/src/send_data/mod.rs @@ -78,6 +78,7 @@ pub enum Compression { None, } +#[derive(Clone)] pub struct SendDataBuilder { pub(crate) tracer_payloads: TracerPayloadCollection, pub(crate) size: usize, From f0b8baec28c400a68b34ba30966ef4fec7c2c04b Mon Sep 17 00:00:00 2001 From: Yiming Luo Date: Tue, 15 Jul 2025 10:06:24 -0400 Subject: [PATCH 09/14] Add test --- datadog-trace-utils/src/send_data/mod.rs | 26 +++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/datadog-trace-utils/src/send_data/mod.rs b/datadog-trace-utils/src/send_data/mod.rs index edcf3d3334..0dad0b8483 100644 --- a/datadog-trace-utils/src/send_data/mod.rs +++ b/datadog-trace-utils/src/send_data/mod.rs @@ -17,7 +17,7 @@ use ddcommon::{ }; use futures::stream::FuturesUnordered; use futures::StreamExt; -use hyper::header::{CONTENT_TYPE}; +use hyper::header::CONTENT_TYPE; use send_data_result::SendDataResult; use std::collections::HashMap; #[cfg(feature = "compression")] @@ -449,6 +449,7 @@ where #[cfg(test)] mod tests { use super::*; + use crate::send_with_retry::{RetryBackoffType, RetryStrategy}; use crate::test_utils::create_test_no_alloc_span; use crate::trace_utils::{construct_trace_chunk, construct_tracer_payload, RootSpanTags}; use crate::tracer_header_tags::TracerHeaderTags; @@ -1059,4 +1060,27 @@ mod tests { #[cfg(feature = "compression")] assert!(matches!(new_data.compression, Compression::None)); } + + #[test] + fn test_builder() { + let header_tags = HEADER_TAGS; + let payload = setup_payload(&header_tags); + let retry_strategy = RetryStrategy::new(5, 100, RetryBackoffType::Constant, None); + + let send_data_builder = SendDataBuilder::new( + 100, + TracerPayloadCollection::V07(vec![payload]), + header_tags, + &Endpoint::default(), + ) + .with_api_key("TEST-KEY") + .with_retry_strategy(retry_strategy.clone()); + + assert_eq!(send_data_builder.len(), 100); + assert_eq!( + send_data_builder.target.api_key, + Some(std::borrow::Cow::Borrowed("TEST-KEY")) + ); + assert_eq!(send_data_builder.retry_strategy, retry_strategy); + } } From 01146a8f0a6ff71fab63a5665d767ba69733503f Mon Sep 17 00:00:00 2001 From: Yiming Luo Date: Tue, 15 Jul 2025 10:14:00 -0400 Subject: [PATCH 10/14] Add test for is_empty() --- datadog-trace-utils/src/send_data/mod.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/datadog-trace-utils/src/send_data/mod.rs b/datadog-trace-utils/src/send_data/mod.rs index 0dad0b8483..c0ff2bacf9 100644 --- a/datadog-trace-utils/src/send_data/mod.rs +++ b/datadog-trace-utils/src/send_data/mod.rs @@ -1077,6 +1077,7 @@ mod tests { .with_retry_strategy(retry_strategy.clone()); assert_eq!(send_data_builder.len(), 100); + assert_eq!(send_data_builder.is_empty(), false); assert_eq!( send_data_builder.target.api_key, Some(std::borrow::Cow::Borrowed("TEST-KEY")) From e44b069279383157ada7502443be3880c9414814 Mon Sep 17 00:00:00 2001 From: Yiming Luo Date: Tue, 15 Jul 2025 16:05:13 -0400 Subject: [PATCH 11/14] Fix clippy --- datadog-trace-utils/src/send_data/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/datadog-trace-utils/src/send_data/mod.rs b/datadog-trace-utils/src/send_data/mod.rs index c0ff2bacf9..a472402ac1 100644 --- a/datadog-trace-utils/src/send_data/mod.rs +++ b/datadog-trace-utils/src/send_data/mod.rs @@ -1077,7 +1077,7 @@ mod tests { .with_retry_strategy(retry_strategy.clone()); assert_eq!(send_data_builder.len(), 100); - assert_eq!(send_data_builder.is_empty(), false); + assert!(!send_data_builder.is_empty()); assert_eq!( send_data_builder.target.api_key, Some(std::borrow::Cow::Borrowed("TEST-KEY")) From c66eeb19de2a137584acfd442d8ca096935cf7be Mon Sep 17 00:00:00 2001 From: Yiming Luo Date: Wed, 16 Jul 2025 11:18:58 -0400 Subject: [PATCH 12/14] Remove getters from builder --- datadog-trace-utils/src/send_data/mod.rs | 31 ++++++------------------ 1 file changed, 7 insertions(+), 24 deletions(-) diff --git a/datadog-trace-utils/src/send_data/mod.rs b/datadog-trace-utils/src/send_data/mod.rs index a472402ac1..b09102cf53 100644 --- a/datadog-trace-utils/src/send_data/mod.rs +++ b/datadog-trace-utils/src/send_data/mod.rs @@ -125,24 +125,6 @@ impl SendDataBuilder { self } - /// Returns the user defined approximate size of the data to be sent in bytes. - /// - /// # Returns - /// - /// The size of the data. - pub fn len(&self) -> usize { - self.size - } - - /// Checks if the user defined approximate size of the data to be sent is zero. - /// - /// # Returns - /// - /// `true` if size is 0, `false` otherwise. - pub fn is_empty(&self) -> bool { - self.size == 0 - } - pub fn build(self) -> SendData { SendData { tracer_payloads: self.tracer_payloads, @@ -1067,21 +1049,22 @@ mod tests { let payload = setup_payload(&header_tags); let retry_strategy = RetryStrategy::new(5, 100, RetryBackoffType::Constant, None); - let send_data_builder = SendDataBuilder::new( + let send_data = SendDataBuilder::new( 100, TracerPayloadCollection::V07(vec![payload]), header_tags, &Endpoint::default(), ) + // Test with_api_key() .with_api_key("TEST-KEY") - .with_retry_strategy(retry_strategy.clone()); + // Test with_retry_strategy() + .with_retry_strategy(retry_strategy.clone()) + .build(); - assert_eq!(send_data_builder.len(), 100); - assert!(!send_data_builder.is_empty()); assert_eq!( - send_data_builder.target.api_key, + send_data.target.api_key, Some(std::borrow::Cow::Borrowed("TEST-KEY")) ); - assert_eq!(send_data_builder.retry_strategy, retry_strategy); + assert_eq!(send_data.retry_strategy, retry_strategy); } } From 587cfae2c88781539679568582cfd3aea2649b4d Mon Sep 17 00:00:00 2001 From: Yiming Luo Date: Wed, 16 Jul 2025 12:30:48 -0400 Subject: [PATCH 13/14] Remove clone --- datadog-trace-utils/src/send_data/mod.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/datadog-trace-utils/src/send_data/mod.rs b/datadog-trace-utils/src/send_data/mod.rs index b09102cf53..e55ba30670 100644 --- a/datadog-trace-utils/src/send_data/mod.rs +++ b/datadog-trace-utils/src/send_data/mod.rs @@ -78,7 +78,6 @@ pub enum Compression { None, } -#[derive(Clone)] pub struct SendDataBuilder { pub(crate) tracer_payloads: TracerPayloadCollection, pub(crate) size: usize, From 6c28f32e99d910331fc5dc4b8885304a7512ac93 Mon Sep 17 00:00:00 2001 From: Yiming Luo Date: Wed, 16 Jul 2025 12:38:04 -0400 Subject: [PATCH 14/14] Add back Clone() --- datadog-trace-utils/src/send_data/mod.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/datadog-trace-utils/src/send_data/mod.rs b/datadog-trace-utils/src/send_data/mod.rs index e55ba30670..b09102cf53 100644 --- a/datadog-trace-utils/src/send_data/mod.rs +++ b/datadog-trace-utils/src/send_data/mod.rs @@ -78,6 +78,7 @@ pub enum Compression { None, } +#[derive(Clone)] pub struct SendDataBuilder { pub(crate) tracer_payloads: TracerPayloadCollection, pub(crate) size: usize,