@@ -8,6 +8,7 @@ use std::{
88} ;
99
1010use datadog_trace_protobuf:: pb:: Span ;
11+ use serde_json:: Value ;
1112use tracing:: debug;
1213
1314#[ derive( Debug , Clone , PartialEq ) ]
@@ -127,7 +128,7 @@ pub struct ContextBuffer {
127128
128129struct UniversalInstrumentationData {
129130 headers : HashMap < String , String > ,
130- payload : Vec < u8 > ,
131+ payload_value : Value ,
131132}
132133
133134impl Default for ContextBuffer {
@@ -227,12 +228,14 @@ impl ContextBuffer {
227228 pub fn pair_invoke_event (
228229 & mut self ,
229230 request_id : & str ,
230- ) -> Option < ( HashMap < String , String > , Vec < u8 > ) > {
231- if let Some ( UniversalInstrumentationData { headers, payload } ) =
232- self . universal_instrumentation_start_events . pop_front ( )
231+ ) -> Option < ( HashMap < String , String > , Value ) > {
232+ if let Some ( UniversalInstrumentationData {
233+ headers,
234+ payload_value,
235+ } ) = self . universal_instrumentation_start_events . pop_front ( )
233236 {
234237 // Bad scenario, we found an `UniversalInstrumentationStart`
235- Some ( ( headers, payload ) )
238+ Some ( ( headers, payload_value ) )
236239 } else {
237240 // `UniversalInstrumentationStart` event hasn't occurred yet, this is good,
238241 // push the Invoke event to the queue and return `None`
@@ -248,7 +251,7 @@ impl ContextBuffer {
248251 pub fn pair_universal_instrumentation_start_event (
249252 & mut self ,
250253 headers : & HashMap < String , String > ,
251- payload : & [ u8 ] ,
254+ payload_value : & Value ,
252255 ) -> Option < String > {
253256 if let Some ( request_id) = self . invoke_events_request_ids . pop_front ( ) {
254257 // Bad scenario, we found an `UniversalInstrumentationStart`
@@ -259,7 +262,7 @@ impl ContextBuffer {
259262 self . universal_instrumentation_start_events
260263 . push_back ( UniversalInstrumentationData {
261264 headers : headers. clone ( ) ,
262- payload : payload . to_vec ( ) ,
265+ payload_value : payload_value . clone ( ) ,
263266 } ) ;
264267 None
265268 }
@@ -271,7 +274,7 @@ impl ContextBuffer {
271274 pub fn pair_universal_instrumentation_end_event (
272275 & mut self ,
273276 headers : & HashMap < String , String > ,
274- payload : & [ u8 ] ,
277+ payload_value : & Value ,
275278 ) -> Option < String > {
276279 if let Some ( request_id) = self . platform_runtime_done_events_request_ids . pop_front ( ) {
277280 // Bad scenario, we found a `PlatformRuntimeDone`
@@ -282,7 +285,7 @@ impl ContextBuffer {
282285 self . universal_instrumentation_end_events
283286 . push_back ( UniversalInstrumentationData {
284287 headers : headers. clone ( ) ,
285- payload : payload . to_vec ( ) ,
288+ payload_value : payload_value . clone ( ) ,
286289 } ) ;
287290 None
288291 }
@@ -294,12 +297,14 @@ impl ContextBuffer {
294297 pub fn pair_platform_runtime_done_event (
295298 & mut self ,
296299 request_id : & str ,
297- ) -> Option < ( HashMap < String , String > , Vec < u8 > ) > {
298- if let Some ( UniversalInstrumentationData { headers, payload } ) =
299- self . universal_instrumentation_end_events . pop_front ( )
300+ ) -> Option < ( HashMap < String , String > , Value ) > {
301+ if let Some ( UniversalInstrumentationData {
302+ headers,
303+ payload_value,
304+ } ) = self . universal_instrumentation_end_events . pop_front ( )
300305 {
301306 // Good scenario, we found an `UniversalInstrumentationEnd`
302- Some ( ( headers, payload ) )
307+ Some ( ( headers, payload_value ) )
303308 } else {
304309 // `UniversalInstrumentationEnd` hasn't occurred yet, this is bad,
305310 // push the `PlatformRuntimeDone` event to the queue and return `None`
@@ -425,6 +430,7 @@ impl ContextBuffer {
425430#[ allow( clippy:: unwrap_used) ]
426431mod tests {
427432 use crate :: proc:: { CPUData , NetworkData } ;
433+ use serde_json:: json;
428434 use std:: collections:: HashMap ;
429435 use tokio:: sync:: watch;
430436
@@ -619,14 +625,14 @@ mod tests {
619625 let request_id = "test-request-1" . to_string ( ) ;
620626 let mut headers = HashMap :: new ( ) ;
621627 headers. insert ( "test-header" . to_string ( ) , "test-value" . to_string ( ) ) ;
622- let payload = vec ! [ 1 , 2 , 3 ] ;
628+ let payload = json ! ( { "test" : "payload" } ) ;
623629
624630 // Test case 1: UniversalInstrumentationStart arrives before Invoke
625631 buffer
626632 . universal_instrumentation_start_events
627633 . push_back ( UniversalInstrumentationData {
628634 headers : headers. clone ( ) ,
629- payload : payload. clone ( ) ,
635+ payload_value : payload. clone ( ) ,
630636 } ) ;
631637
632638 // When Invoke arrives, it should pair with the existing UniversalInstrumentationStart
@@ -653,7 +659,7 @@ mod tests {
653659 let request_id = "test-request-1" . to_string ( ) ;
654660 let mut headers = HashMap :: new ( ) ;
655661 headers. insert ( "test-header" . to_string ( ) , "test-value" . to_string ( ) ) ;
656- let payload = vec ! [ 1 , 2 , 3 ] ;
662+ let payload = json ! ( { "test" : "payload" } ) ;
657663
658664 // Test case 1: Invoke arrives before UniversalInstrumentationStart
659665 buffer
@@ -674,7 +680,7 @@ mod tests {
674680 . front ( )
675681 . unwrap ( ) ;
676682 assert_eq ! ( stored_event. headers, headers) ;
677- assert_eq ! ( stored_event. payload , payload) ;
683+ assert_eq ! ( stored_event. payload_value , payload) ;
678684 }
679685
680686 #[ test]
@@ -683,7 +689,7 @@ mod tests {
683689 let request_id = "test-request-1" . to_string ( ) ;
684690 let mut headers = HashMap :: new ( ) ;
685691 headers. insert ( "test-header" . to_string ( ) , "test-value" . to_string ( ) ) ;
686- let payload = vec ! [ 1 , 2 , 3 ] ;
692+ let payload = json ! ( { "test" : "payload" } ) ;
687693
688694 // Test case 1: PlatformRuntimeDone arrives before UniversalInstrumentationEnd
689695 buffer
@@ -701,7 +707,7 @@ mod tests {
701707 assert_eq ! ( buffer. universal_instrumentation_end_events. len( ) , 1 ) ;
702708 let stored_event = buffer. universal_instrumentation_end_events . front ( ) . unwrap ( ) ;
703709 assert_eq ! ( stored_event. headers, headers) ;
704- assert_eq ! ( stored_event. payload , payload) ;
710+ assert_eq ! ( stored_event. payload_value , payload) ;
705711 }
706712
707713 #[ test]
@@ -710,14 +716,14 @@ mod tests {
710716 let request_id = "test-request-1" . to_string ( ) ;
711717 let mut headers = HashMap :: new ( ) ;
712718 headers. insert ( "test-header" . to_string ( ) , "test-value" . to_string ( ) ) ;
713- let payload = vec ! [ 1 , 2 , 3 ] ;
719+ let payload = json ! ( { "test" : "payload" } ) ;
714720
715721 // Test case 1: UniversalInstrumentationEnd arrives before PlatformRuntimeDone
716722 buffer
717723 . universal_instrumentation_end_events
718724 . push_back ( UniversalInstrumentationData {
719725 headers : headers. clone ( ) ,
720- payload : payload. clone ( ) ,
726+ payload_value : payload. clone ( ) ,
721727 } ) ;
722728
723729 // When PlatformRuntimeDone arrives, it should pair with the existing UniversalInstrumentationEnd
@@ -747,15 +753,15 @@ mod tests {
747753 let request_id = "test-request-1" . to_string ( ) ;
748754 let mut headers = HashMap :: new ( ) ;
749755 headers. insert ( "test-header" . to_string ( ) , "test-value" . to_string ( ) ) ;
750- let payload = vec ! [ 1 , 2 , 3 ] ;
756+ let payload = json ! ( { "test" : "payload" } ) ;
751757
752758 // Test the complete flow with events arriving in different orders
753759 // Case 1: Events arrive in reverse order
754760 buffer
755761 . universal_instrumentation_end_events
756762 . push_back ( UniversalInstrumentationData {
757763 headers : headers. clone ( ) ,
758- payload : payload. clone ( ) ,
764+ payload_value : payload. clone ( ) ,
759765 } ) ;
760766 buffer
761767 . platform_runtime_done_events_request_ids
0 commit comments