@@ -113,13 +113,13 @@ async fn main() -> anyhow::Result<()> {
113113 debug ! ( "Starting Datadog Extension v{version_without_next}" ) ;
114114
115115 // Debug: Wait for debugger to attach if DD_DEBUG_WAIT_FOR_ATTACH is set
116- if let Ok ( wait_secs) = env:: var ( "DD_DEBUG_WAIT_FOR_ATTACH" ) {
117- if let Ok ( secs) = wait_secs. parse :: < u64 > ( ) {
118- debug ! ( "DD_DEBUG_WAIT_FOR_ATTACH: Waiting {secs} seconds for debugger to attach..." ) ;
119- debug ! ( "Connect your debugger to port 2345 now! " ) ;
120- tokio :: time :: sleep ( tokio :: time :: Duration :: from_secs ( secs ) ) . await ;
121- debug ! ( "DD_DEBUG_WAIT_FOR_ATTACH: Continuing execution..." ) ;
122- }
116+ if let Ok ( wait_secs) = env:: var ( "DD_DEBUG_WAIT_FOR_ATTACH" )
117+ && let Ok ( secs) = wait_secs. parse :: < u64 > ( )
118+ {
119+ debug ! ( "DD_DEBUG_WAIT_FOR_ATTACH: Waiting {secs} seconds for debugger to attach... " ) ;
120+ debug ! ( "Connect your debugger to port 2345 now!" ) ;
121+ tokio :: time :: sleep ( tokio :: time :: Duration :: from_secs ( secs ) ) . await ;
122+ debug ! ( "DD_DEBUG_WAIT_FOR_ATTACH: Continuing execution..." ) ;
123123 }
124124
125125 prepare_client_provider ( ) ?;
@@ -273,7 +273,7 @@ async fn extension_loop_idle(
273273 error ! ( "Error getting next event: {e:?}" ) ;
274274 return Err ( e. into ( ) ) ;
275275 }
276- } ;
276+ }
277277 }
278278}
279279
@@ -288,11 +288,7 @@ async fn extension_loop_active(
288288) -> anyhow:: Result < ( ) > {
289289 let ( mut event_bus, event_bus_tx) = EventBus :: run ( ) ;
290290
291- let account_id = r
292- . account_id
293- . as_ref ( )
294- . unwrap_or ( & "none" . to_string ( ) )
295- . to_string ( ) ;
291+ let account_id = r. account_id . as_ref ( ) . unwrap_or ( & "none" . to_string ( ) ) . clone ( ) ;
296292 let tags_provider = setup_tag_provider ( & Arc :: clone ( & aws_config) , config, & account_id) ;
297293
298294 let ( logs_agent_channel, logs_flusher, logs_agent_cancel_token, logs_aggregator_handle) =
@@ -450,10 +446,8 @@ async fn extension_loop_active(
450446 // Wait for any pending flushes
451447 flushing_service. await_handles( ) . await ;
452448 // Final flush to capture any data that accumulated since the last
453- // spawn_non_blocking(). We pass force_stats=true since this is our
454- // last opportunity to send data before shutdown.
455- let mut locked_metrics = flushing_service. metrics_flushers( ) . lock( ) . await ;
456- flushing_service. flush_blocking( true , & mut locked_metrics) . await ;
449+ // spawn_non_blocking(). This is our last opportunity to send data.
450+ flushing_service. flush_blocking_final( ) . await ;
457451 break ;
458452 }
459453 }
@@ -519,7 +513,6 @@ async fn extension_loop_active(
519513 "Transient network error waiting for shutdown event: {}. Retrying..." ,
520514 e
521515 ) ;
522- continue ;
523516 }
524517 Err ( e) => {
525518 error ! (
@@ -628,26 +621,19 @@ async fn extension_loop_active(
628621 tokio:: select! {
629622 biased;
630623 Some ( event) = event_bus. rx. recv( ) => {
631- if let Some ( telemetry_event) = handle_event_bus_event( event, invocation_processor_handle. clone( ) , appsec_processor. clone( ) , tags_provider. clone( ) , trace_processor. clone( ) , trace_agent_channel. clone( ) , stats_concentrator. clone( ) ) . await {
632- if let TelemetryRecord :: PlatformRuntimeDone { .. } = telemetry_event. record {
624+ if let Some ( telemetry_event) = handle_event_bus_event( event, invocation_processor_handle. clone( ) , appsec_processor. clone( ) , tags_provider. clone( ) , trace_processor. clone( ) , trace_agent_channel. clone( ) , stats_concentrator. clone( ) ) . await
625+ && let TelemetryRecord :: PlatformRuntimeDone { .. } = telemetry_event. record {
633626 break ' flush_end;
634627 }
635- }
636628 }
637629 _ = race_flush_interval. tick( ) => {
638- let mut locked_metrics = metrics_flushers. lock( ) . await ;
639- flushing_service
640- . flush_blocking( false , & mut locked_metrics)
641- . await ;
630+ flushing_service. flush_blocking( ) . await ;
642631 race_flush_interval. reset( ) ;
643632 }
644633 }
645634 }
646635 // flush
647- let mut locked_metrics = metrics_flushers. lock ( ) . await ;
648- flushing_service
649- . flush_blocking ( false , & mut locked_metrics)
650- . await ;
636+ flushing_service. flush_blocking ( ) . await ;
651637 race_flush_interval. reset ( ) ;
652638 let next_response =
653639 extension:: next_event ( client, & aws_config. runtime_api , & r. extension_id ) . await ;
@@ -664,10 +650,7 @@ async fn extension_loop_active(
664650 }
665651 }
666652 FlushDecision :: Periodic => {
667- let mut locked_metrics = metrics_flushers. lock ( ) . await ;
668- flushing_service
669- . flush_blocking ( false , & mut locked_metrics)
670- . await ;
653+ flushing_service. flush_blocking ( ) . await ;
671654 race_flush_interval. reset ( ) ;
672655 }
673656 _ => {
@@ -695,10 +678,7 @@ async fn extension_loop_active(
695678 }
696679 _ = race_flush_interval. tick( ) => {
697680 if flush_control. flush_strategy == FlushStrategy :: Default {
698- let mut locked_metrics = metrics_flushers. lock( ) . await ;
699- flushing_service
700- . flush_blocking( false , & mut locked_metrics)
701- . await ;
681+ flushing_service. flush_blocking( ) . await ;
702682 race_flush_interval. reset( ) ;
703683 }
704684 }
@@ -744,11 +724,8 @@ async fn extension_loop_active(
744724 & lifecycle_listener_shutdown_token,
745725 ) ;
746726
747- // Final flush with force_stats=true since this is our last opportunity
748- let mut locked_metrics = metrics_flushers. lock ( ) . await ;
749- flushing_service
750- . flush_blocking ( true , & mut locked_metrics)
751- . await ;
727+ // Final flush - this is our last opportunity to send data before shutdown
728+ flushing_service. flush_blocking_final ( ) . await ;
752729
753730 // Even though we're shutting down, we need to reset the flush interval to prevent any future flushes
754731 race_flush_interval. reset ( ) ;
@@ -1178,7 +1155,7 @@ async fn start_dogstatsd(
11781155 api_key_factory : Arc < ApiKeyFactory > ,
11791156 config : & Arc < Config > ,
11801157) -> (
1181- Arc < TokioMutex < Vec < MetricsFlusher > > > ,
1158+ Arc < Vec < MetricsFlusher > > ,
11821159 MetricsAggregatorHandle ,
11831160 CancellationToken ,
11841161) {
@@ -1200,17 +1177,20 @@ async fn start_dogstatsd(
12001177 } ) ;
12011178
12021179 // Get flushers with aggregator handle
1203- let flushers = Arc :: new ( TokioMutex :: new ( start_metrics_flushers (
1180+ let flushers = Arc :: new ( start_metrics_flushers (
12041181 Arc :: clone ( & api_key_factory) ,
12051182 & aggregator_handle,
12061183 config,
1207- ) ) ) ;
1184+ ) ) ;
12081185
12091186 // Create Dogstatsd server
12101187 let dogstatsd_config = DogStatsDConfig {
12111188 host : EXTENSION_HOST . to_string ( ) ,
12121189 port : DOGSTATSD_PORT ,
12131190 metric_namespace : config. statsd_metric_namespace . clone ( ) ,
1191+ so_rcvbuf : config. dogstatsd_so_rcvbuf ,
1192+ buffer_size : config. dogstatsd_buffer_size ,
1193+ queue_size : config. dogstatsd_queue_size ,
12141194 } ;
12151195 let cancel_token = tokio_util:: sync:: CancellationToken :: new ( ) ;
12161196 let dogstatsd_agent = DogStatsD :: new (
0 commit comments