@@ -35,6 +35,7 @@ use crate::service::debugger_diagnostics_bookkeeper::{
3535} ;
3636use crate :: service:: exception_hash_rate_limiter:: EXCEPTION_HASH_LIMITER ;
3737use crate :: service:: remote_configs:: { RemoteConfigNotifyTarget , RemoteConfigs } ;
38+ use crate :: service:: stats_flusher:: { ensure_stats_concentrator, flush_all_stats_now, get_hostname, stats_endpoint, ConcentratorKey , SpanConcentratorState , StatsConfig } ;
3839use crate :: service:: tracing:: trace_flusher:: TraceFlusherStats ;
3940use crate :: tokio_util:: run_or_spawn_shared;
4041use datadog_live_debugger:: sender:: { agent_info_supports_debugger_v2_endpoint, DebuggerType } ;
@@ -103,14 +104,7 @@ pub struct SidecarServer {
103104 /// Diagnostics bookkeeper
104105 debugger_diagnostics_bookkeeper : Arc < DebuggerDiagnosticsBookkeeper > ,
105106 /// Per-env&version SHM span concentrators (global across all sessions).
106- pub ( crate ) span_concentrators : Arc <
107- Mutex <
108- HashMap <
109- crate :: service:: stats_flusher:: ConcentratorKey ,
110- crate :: service:: stats_flusher:: SpanConcentratorState ,
111- > ,
112- > ,
113- > ,
107+ pub ( crate ) span_concentrators : Arc < Mutex < HashMap < ConcentratorKey , Arc < SpanConcentratorState > > > > ,
114108}
115109
116110/// Per-connection handler wrapper that tracks sessions/instances for cleanup on disconnect.
@@ -635,10 +629,14 @@ impl SidecarInterface for ConnectionSidecarHandler {
635629 } ) ;
636630 * session. agent_infos . lock_or_panic ( ) = Some ( agent_info) ;
637631 }
638- * session. stats_config . lock_or_panic ( ) = Some ( crate :: service:: stats_flusher:: StatsConfig {
639- endpoint : config. endpoint . clone ( ) ,
640- tracer_version : config. tracer_version . clone ( ) ,
632+ * session. stats_config . lock_or_panic ( ) = Some ( StatsConfig {
633+ endpoint : stats_endpoint ( & config. endpoint ) . unwrap_or_else ( || config. endpoint . clone ( ) ) ,
641634 flush_interval : config. flush_interval ,
635+ hostname : if config. hostname . is_empty ( ) { get_hostname ( ) } else { config. hostname . clone ( ) } ,
636+ process_tags : config. process_tags . iter ( ) . map ( |t| t. to_string ( ) ) . collect :: < Vec < _ > > ( ) . join ( "," ) ,
637+ root_service : config. root_service . clone ( ) ,
638+ language : config. language . clone ( ) ,
639+ tracer_version : config. tracer_version . clone ( ) ,
642640 } ) ;
643641
644642 session. set_remote_config_invariants ( ConfigOptions {
@@ -848,10 +846,18 @@ impl SidecarInterface for ConnectionSidecarHandler {
848846 debug ! ( "Registered remote config metadata: instance {instance_id:?}, queue_id: {queue_id:?}, service: {service_name}, env: {env_name}, version: {app_version}" ) ;
849847
850848 let session = self . server . get_session ( & instance_id. session_id ) ;
851- let concentrator_guard = crate :: service:: stats_flusher:: ensure_stats_concentrator (
849+ let concentrator_service = session
850+ . stats_config
851+ . lock ( )
852+ . unwrap_or_else ( |e| e. into_inner ( ) )
853+ . as_ref ( )
854+ . map ( |c| c. root_service . clone ( ) )
855+ . unwrap_or_default ( ) ;
856+ let concentrator_guard = ensure_stats_concentrator (
852857 & self . server . span_concentrators ,
853858 & env_name,
854859 & app_version,
860+ & concentrator_service,
855861 & instance_id. session_id ,
856862 & session,
857863 ) ;
@@ -920,7 +926,16 @@ impl SidecarInterface for ConnectionSidecarHandler {
920926 version : String ,
921927 span : datadog_ipc:: shm_stats:: OwnedShmSpanInput ,
922928 ) {
923- let map_key = crate :: service:: stats_flusher:: ConcentratorKey { env, version } ;
929+ let session_id = self . session_id . get ( ) . map ( |s| s. as_str ( ) ) . unwrap_or ( "" ) ;
930+ let session = self . server . get_session ( session_id) ;
931+ let service = session
932+ . stats_config
933+ . lock ( )
934+ . unwrap_or_else ( |e| e. into_inner ( ) )
935+ . as_ref ( )
936+ . map ( |c| c. root_service . clone ( ) )
937+ . unwrap_or_default ( ) ;
938+ let map_key = ConcentratorKey { env, version, root_service : service } ;
924939 let guard = self
925940 . server
926941 . span_concentrators
@@ -938,7 +953,7 @@ impl SidecarInterface for ConnectionSidecarHandler {
938953 if let Err ( e) = tokio:: spawn ( async move { flusher. flush ( ) . await } ) . await {
939954 error ! ( "Failed flushing traces: {e:?}" ) ;
940955 }
941- crate :: service :: stats_flusher :: flush_all_stats_now ( & self . server . span_concentrators ) . await ;
956+ flush_all_stats_now ( & self . server . span_concentrators ) . await ;
942957 }
943958
944959 async fn set_test_session_token ( & self , _peer : PeerCredentials , token : String ) {
0 commit comments