@@ -28,7 +28,7 @@ internal class AgentWriter : IAgentWriter
2828 private static readonly ArraySegment < byte > EmptyPayload = new ( new byte [ ] { 0x90 } ) ;
2929
3030 private readonly ConcurrentQueue < WorkItem > _pendingTraces = new ConcurrentQueue < WorkItem > ( ) ;
31- private readonly IDogStatsd _statsd ;
31+ private readonly IStatsdManager _statsd ;
3232 private readonly Task _flushTask ;
3333 private readonly Task _serializationTask ;
3434 private readonly TaskCompletionSource < bool > _processExit = new TaskCompletionSource < bool > ( ) ;
@@ -67,7 +67,7 @@ internal class AgentWriter : IAgentWriter
6767
6868 private bool _traceMetricsEnabled ;
6969
70- public AgentWriter ( IApi api , IStatsAggregator statsAggregator , IDogStatsd statsd , TracerSettings settings )
70+ public AgentWriter ( IApi api , IStatsAggregator statsAggregator , IStatsdManager statsd , TracerSettings settings )
7171 : this ( api , statsAggregator , statsd , maxBufferSize : settings . TraceBufferSize , batchInterval : settings . TraceBatchInterval , apmTracingEnabled : settings . ApmTracingEnabled , initialTracerMetricsEnabled : settings . Manager . InitialMutableSettings . TracerMetricsEnabled )
7272 {
7373 settings . Manager . SubscribeToChanges ( changes =>
@@ -76,16 +76,17 @@ public AgentWriter(IApi api, IStatsAggregator statsAggregator, IDogStatsd statsd
7676 && mutable . TracerMetricsEnabled != changes . PreviousMutable . TracerMetricsEnabled )
7777 {
7878 Volatile . Write ( ref _traceMetricsEnabled , mutable . TracerMetricsEnabled ) ;
79+ _statsd . SetRequired ( StatsdConsumer . AgentWriter , mutable . TracerMetricsEnabled ) ;
7980 }
8081 } ) ;
8182 }
8283
83- public AgentWriter ( IApi api , IStatsAggregator statsAggregator , IDogStatsd statsd , bool automaticFlush = true , int maxBufferSize = 1024 * 1024 * 10 , int batchInterval = 100 , bool apmTracingEnabled = true , bool initialTracerMetricsEnabled = false )
84+ public AgentWriter ( IApi api , IStatsAggregator statsAggregator , IStatsdManager statsd , bool automaticFlush = true , int maxBufferSize = 1024 * 1024 * 10 , int batchInterval = 100 , bool apmTracingEnabled = true , bool initialTracerMetricsEnabled = false )
8485 : this ( api , statsAggregator , statsd , MovingAverageKeepRateCalculator . CreateDefaultKeepRateCalculator ( ) , automaticFlush , maxBufferSize , batchInterval , apmTracingEnabled , initialTracerMetricsEnabled )
8586 {
8687 }
8788
88- internal AgentWriter ( IApi api , IStatsAggregator statsAggregator , IDogStatsd statsd , IKeepRateCalculator traceKeepRateCalculator , bool automaticFlush , int maxBufferSize , int batchInterval , bool apmTracingEnabled , bool initialTracerMetricsEnabled )
89+ internal AgentWriter ( IApi api , IStatsAggregator statsAggregator , IStatsdManager statsd , IKeepRateCalculator traceKeepRateCalculator , bool automaticFlush , int maxBufferSize , int batchInterval , bool apmTracingEnabled , bool initialTracerMetricsEnabled )
8990 {
9091 _statsAggregator = statsAggregator ;
9192
@@ -104,6 +105,7 @@ internal AgentWriter(IApi api, IStatsAggregator statsAggregator, IDogStatsd stat
104105
105106 _apmTracingEnabled = apmTracingEnabled ;
106107 _traceMetricsEnabled = initialTracerMetricsEnabled ;
108+ _statsd . SetRequired ( StatsdConsumer . AgentWriter , initialTracerMetricsEnabled ) ;
107109
108110 _serializationTask = automaticFlush ? Task . Factory . StartNew ( SerializeTracesLoop , TaskCreationOptions . LongRunning ) : Task . CompletedTask ;
109111 _serializationTask . ContinueWith ( t => Log . Error ( t . Exception , "Error in serialization task" ) , TaskContinuationOptions . OnlyOnFaulted ) ;
@@ -151,8 +153,12 @@ public void WriteTrace(ArraySegment<Span> trace)
151153
152154 if ( Volatile . Read ( ref _traceMetricsEnabled ) )
153155 {
154- _statsd . Increment ( TracerMetricNames . Queue . EnqueuedTraces ) ;
155- _statsd . Increment ( TracerMetricNames . Queue . EnqueuedSpans , trace . Count ) ;
156+ using var lease = _statsd . TryGetClientLease ( ) ;
157+ if ( lease . Client is { } statsd )
158+ {
159+ statsd . Increment ( TracerMetricNames . Queue . EnqueuedTraces ) ;
160+ statsd . Increment ( TracerMetricNames . Queue . EnqueuedSpans , trace . Count ) ;
161+ }
156162 }
157163 }
158164
@@ -327,8 +333,12 @@ async Task InternalBufferFlush()
327333 {
328334 if ( Volatile . Read ( ref _traceMetricsEnabled ) )
329335 {
330- _statsd . Increment ( TracerMetricNames . Queue . DequeuedTraces , buffer . TraceCount ) ;
331- _statsd . Increment ( TracerMetricNames . Queue . DequeuedSpans , buffer . SpanCount ) ;
336+ using var lease = _statsd . TryGetClientLease ( ) ;
337+ if ( lease . Client is { } statsd )
338+ {
339+ statsd . Increment ( TracerMetricNames . Queue . DequeuedTraces , buffer . TraceCount ) ;
340+ statsd . Increment ( TracerMetricNames . Queue . DequeuedSpans , buffer . SpanCount ) ;
341+ }
332342 }
333343
334344 var droppedTraces = Interlocked . Exchange ( ref _droppedTraces , 0 ) ;
@@ -525,8 +535,12 @@ private void DropTrace(ArraySegment<Span> spans)
525535
526536 if ( Volatile . Read ( ref _traceMetricsEnabled ) )
527537 {
528- _statsd . Increment ( TracerMetricNames . Queue . DroppedTraces ) ;
529- _statsd . Increment ( TracerMetricNames . Queue . DroppedSpans , spans . Count ) ;
538+ using var lease = _statsd . TryGetClientLease ( ) ;
539+ if ( lease . Client is { } statsd )
540+ {
541+ statsd . Increment ( TracerMetricNames . Queue . DroppedTraces ) ;
542+ statsd . Increment ( TracerMetricNames . Queue . DroppedSpans , spans . Count ) ;
543+ }
530544 }
531545 }
532546
0 commit comments