@@ -8,6 +8,7 @@ use std::{
8
8
} ;
9
9
10
10
use datadog_trace_protobuf:: pb:: Span ;
11
+ use serde_json:: Value ;
11
12
use tracing:: debug;
12
13
13
14
#[ derive( Debug , Clone , PartialEq ) ]
@@ -127,7 +128,7 @@ pub struct ContextBuffer {
127
128
128
129
struct UniversalInstrumentationData {
129
130
headers : HashMap < String , String > ,
130
- payload : Vec < u8 > ,
131
+ payload_value : Value ,
131
132
}
132
133
133
134
impl Default for ContextBuffer {
@@ -227,12 +228,14 @@ impl ContextBuffer {
227
228
pub fn pair_invoke_event (
228
229
& mut self ,
229
230
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 ( )
233
236
{
234
237
// Bad scenario, we found an `UniversalInstrumentationStart`
235
- Some ( ( headers, payload ) )
238
+ Some ( ( headers, payload_value ) )
236
239
} else {
237
240
// `UniversalInstrumentationStart` event hasn't occurred yet, this is good,
238
241
// push the Invoke event to the queue and return `None`
@@ -248,7 +251,7 @@ impl ContextBuffer {
248
251
pub fn pair_universal_instrumentation_start_event (
249
252
& mut self ,
250
253
headers : & HashMap < String , String > ,
251
- payload : & [ u8 ] ,
254
+ payload_value : & Value ,
252
255
) -> Option < String > {
253
256
if let Some ( request_id) = self . invoke_events_request_ids . pop_front ( ) {
254
257
// Bad scenario, we found an `UniversalInstrumentationStart`
@@ -259,7 +262,7 @@ impl ContextBuffer {
259
262
self . universal_instrumentation_start_events
260
263
. push_back ( UniversalInstrumentationData {
261
264
headers : headers. clone ( ) ,
262
- payload : payload . to_vec ( ) ,
265
+ payload_value : payload_value . clone ( ) ,
263
266
} ) ;
264
267
None
265
268
}
@@ -271,7 +274,7 @@ impl ContextBuffer {
271
274
pub fn pair_universal_instrumentation_end_event (
272
275
& mut self ,
273
276
headers : & HashMap < String , String > ,
274
- payload : & [ u8 ] ,
277
+ payload_value : & Value ,
275
278
) -> Option < String > {
276
279
if let Some ( request_id) = self . platform_runtime_done_events_request_ids . pop_front ( ) {
277
280
// Bad scenario, we found a `PlatformRuntimeDone`
@@ -282,7 +285,7 @@ impl ContextBuffer {
282
285
self . universal_instrumentation_end_events
283
286
. push_back ( UniversalInstrumentationData {
284
287
headers : headers. clone ( ) ,
285
- payload : payload . to_vec ( ) ,
288
+ payload_value : payload_value . clone ( ) ,
286
289
} ) ;
287
290
None
288
291
}
@@ -294,12 +297,14 @@ impl ContextBuffer {
294
297
pub fn pair_platform_runtime_done_event (
295
298
& mut self ,
296
299
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 ( )
300
305
{
301
306
// Good scenario, we found an `UniversalInstrumentationEnd`
302
- Some ( ( headers, payload ) )
307
+ Some ( ( headers, payload_value ) )
303
308
} else {
304
309
// `UniversalInstrumentationEnd` hasn't occurred yet, this is bad,
305
310
// push the `PlatformRuntimeDone` event to the queue and return `None`
@@ -425,6 +430,7 @@ impl ContextBuffer {
425
430
#[ allow( clippy:: unwrap_used) ]
426
431
mod tests {
427
432
use crate :: proc:: { CPUData , NetworkData } ;
433
+ use serde_json:: json;
428
434
use std:: collections:: HashMap ;
429
435
use tokio:: sync:: watch;
430
436
@@ -619,14 +625,14 @@ mod tests {
619
625
let request_id = "test-request-1" . to_string ( ) ;
620
626
let mut headers = HashMap :: new ( ) ;
621
627
headers. insert ( "test-header" . to_string ( ) , "test-value" . to_string ( ) ) ;
622
- let payload = vec ! [ 1 , 2 , 3 ] ;
628
+ let payload = json ! ( { "test" : "payload" } ) ;
623
629
624
630
// Test case 1: UniversalInstrumentationStart arrives before Invoke
625
631
buffer
626
632
. universal_instrumentation_start_events
627
633
. push_back ( UniversalInstrumentationData {
628
634
headers : headers. clone ( ) ,
629
- payload : payload. clone ( ) ,
635
+ payload_value : payload. clone ( ) ,
630
636
} ) ;
631
637
632
638
// When Invoke arrives, it should pair with the existing UniversalInstrumentationStart
@@ -653,7 +659,7 @@ mod tests {
653
659
let request_id = "test-request-1" . to_string ( ) ;
654
660
let mut headers = HashMap :: new ( ) ;
655
661
headers. insert ( "test-header" . to_string ( ) , "test-value" . to_string ( ) ) ;
656
- let payload = vec ! [ 1 , 2 , 3 ] ;
662
+ let payload = json ! ( { "test" : "payload" } ) ;
657
663
658
664
// Test case 1: Invoke arrives before UniversalInstrumentationStart
659
665
buffer
@@ -674,7 +680,7 @@ mod tests {
674
680
. front ( )
675
681
. unwrap ( ) ;
676
682
assert_eq ! ( stored_event. headers, headers) ;
677
- assert_eq ! ( stored_event. payload , payload) ;
683
+ assert_eq ! ( stored_event. payload_value , payload) ;
678
684
}
679
685
680
686
#[ test]
@@ -683,7 +689,7 @@ mod tests {
683
689
let request_id = "test-request-1" . to_string ( ) ;
684
690
let mut headers = HashMap :: new ( ) ;
685
691
headers. insert ( "test-header" . to_string ( ) , "test-value" . to_string ( ) ) ;
686
- let payload = vec ! [ 1 , 2 , 3 ] ;
692
+ let payload = json ! ( { "test" : "payload" } ) ;
687
693
688
694
// Test case 1: PlatformRuntimeDone arrives before UniversalInstrumentationEnd
689
695
buffer
@@ -701,7 +707,7 @@ mod tests {
701
707
assert_eq ! ( buffer. universal_instrumentation_end_events. len( ) , 1 ) ;
702
708
let stored_event = buffer. universal_instrumentation_end_events . front ( ) . unwrap ( ) ;
703
709
assert_eq ! ( stored_event. headers, headers) ;
704
- assert_eq ! ( stored_event. payload , payload) ;
710
+ assert_eq ! ( stored_event. payload_value , payload) ;
705
711
}
706
712
707
713
#[ test]
@@ -710,14 +716,14 @@ mod tests {
710
716
let request_id = "test-request-1" . to_string ( ) ;
711
717
let mut headers = HashMap :: new ( ) ;
712
718
headers. insert ( "test-header" . to_string ( ) , "test-value" . to_string ( ) ) ;
713
- let payload = vec ! [ 1 , 2 , 3 ] ;
719
+ let payload = json ! ( { "test" : "payload" } ) ;
714
720
715
721
// Test case 1: UniversalInstrumentationEnd arrives before PlatformRuntimeDone
716
722
buffer
717
723
. universal_instrumentation_end_events
718
724
. push_back ( UniversalInstrumentationData {
719
725
headers : headers. clone ( ) ,
720
- payload : payload. clone ( ) ,
726
+ payload_value : payload. clone ( ) ,
721
727
} ) ;
722
728
723
729
// When PlatformRuntimeDone arrives, it should pair with the existing UniversalInstrumentationEnd
@@ -747,15 +753,15 @@ mod tests {
747
753
let request_id = "test-request-1" . to_string ( ) ;
748
754
let mut headers = HashMap :: new ( ) ;
749
755
headers. insert ( "test-header" . to_string ( ) , "test-value" . to_string ( ) ) ;
750
- let payload = vec ! [ 1 , 2 , 3 ] ;
756
+ let payload = json ! ( { "test" : "payload" } ) ;
751
757
752
758
// Test the complete flow with events arriving in different orders
753
759
// Case 1: Events arrive in reverse order
754
760
buffer
755
761
. universal_instrumentation_end_events
756
762
. push_back ( UniversalInstrumentationData {
757
763
headers : headers. clone ( ) ,
758
- payload : payload. clone ( ) ,
764
+ payload_value : payload. clone ( ) ,
759
765
} ) ;
760
766
buffer
761
767
. platform_runtime_done_events_request_ids
0 commit comments