@@ -7,7 +7,8 @@ use crate::service::{
77 telemetry:: { TelemetryCachedClient , TelemetryCachedClientSet } ,
88 tracing:: TraceFlusher ,
99 DynamicInstrumentationConfigState , InstanceId , QueueId , RuntimeInfo , RuntimeMetadata ,
10- SerializedTracerHeaderTags , SessionConfig , SessionInfo , SidecarAction , SidecarInterface ,
10+ SerializedTracerHeaderTags , SessionConfig , SessionInfo , SidecarAction , SidecarFlushOptions ,
11+ SidecarInterface ,
1112} ;
1213use datadog_ipc:: platform:: { FileBackedHandle , ShmHandle } ;
1314use datadog_ipc:: { PeerCredentials , SeqpacketConn } ;
@@ -991,12 +992,44 @@ impl SidecarInterface for ConnectionSidecarHandler {
991992 }
992993 }
993994
994- async fn flush_traces ( & self , _peer : PeerCredentials ) {
995- let flusher = self . server . trace_flusher . clone ( ) ;
996- if let Err ( e) = tokio:: spawn ( async move { flusher. flush ( ) . await } ) . await {
997- error ! ( "Failed flushing traces: {e:?}" ) ;
995+ async fn flush ( & self , _peer : PeerCredentials , options : SidecarFlushOptions ) {
996+ if options. traces_and_stats {
997+ let flusher = self . server . trace_flusher . clone ( ) ;
998+ if let Err ( e) = tokio:: spawn ( async move { flusher. flush ( ) . await } ) . await {
999+ error ! ( "Failed flushing traces: {e:?}" ) ;
1000+ }
1001+ flush_all_stats_now ( & self . server . span_concentrators ) . await ;
1002+ }
1003+ if options. telemetry {
1004+ let workers: Vec < _ > = {
1005+ let clients = self . server . telemetry_clients . inner . lock_or_panic ( ) ;
1006+ clients
1007+ . values ( )
1008+ . filter_map ( |entry| {
1009+ entry
1010+ . client
1011+ . lock_or_panic ( )
1012+ . as_ref ( )
1013+ . map ( |c| c. worker . clone ( ) )
1014+ } )
1015+ . collect ( )
1016+ } ;
1017+ futures:: future:: join_all ( workers. into_iter ( ) . map ( |worker| async move {
1018+ let _ = worker
1019+ . send_msg ( TelemetryActions :: Lifecycle (
1020+ LifecycleAction :: FlushMetricAggr ,
1021+ ) )
1022+ . await ;
1023+ let _ = worker
1024+ . send_msg ( TelemetryActions :: Lifecycle ( LifecycleAction :: FlushData ) )
1025+ . await ;
1026+ // now await completion
1027+ let ( tx, rx) = futures:: channel:: oneshot:: channel ( ) ;
1028+ let _ = worker. send_msg ( TelemetryActions :: CollectStats ( tx) ) . await ;
1029+ let _ = rx. await ;
1030+ } ) )
1031+ . await ;
9981032 }
999- flush_all_stats_now ( & self . server . span_concentrators ) . await ;
10001033 }
10011034
10021035 async fn set_test_session_token ( & self , _peer : PeerCredentials , token : String ) {
0 commit comments