Skip to content

Commit d09166d

Browse files
committed
Fix many ad-hoc grabbing of settings objects
This "fixes" the places that were previously grabbing the environment/service etc from TracerSettings to use CurrentTracerSettings instead. This is effectively still just a refactoring, but prepares for the point where these settings aren't replaced on TracerSettings. The updates in this PR are for cases where you don't have long-lived services, and rather need to do ad-hoc Tracer.Instance grabbing of the setting values in a global context. Note too that many of these places can be updated in the future to subscribe to changes if that provides performance benefits. Also note that I elected not to change must calls to `IsIntegrationEnabled` in this PR as there are hundreds of locations, Also found a few cases that were incorrectly assuming that these values cannot change. Marked them with 'TODO: Subscribe to changes in settings'
1 parent c94374c commit d09166d

File tree

48 files changed

+173
-145
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+173
-145
lines changed

tracer/src/Datadog.Trace/Activity/OtlpHelpers.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ private static void AgentConvertSpan<TInner>(TInner activity, Span span)
6262
// Fixup "version" tag
6363
// Fallback to static instance if no tracer associated with the trace
6464
var tracer = span.Context.TraceContext?.Tracer ?? Tracer.Instance;
65-
if (tracer.Settings.ServiceVersion is null
65+
if (tracer.PerTraceSettings.Settings.ServiceVersion is null
6666
&& span.GetTag("service.version") is { Length: > 1 } otelServiceVersion)
6767
{
6868
span.SetTag(Tags.Version, otelServiceVersion);

tracer/src/Datadog.Trace/AppSec/Coordinator/SecurityReporter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ internal void TryReport(IResult result, bool blocked, int? status = null)
231231

232232
if (status is not null)
233233
{
234-
_span.SetHttpStatusCode(status.Value, isServer: true, Tracer.Instance.Settings);
234+
_span.SetHttpStatusCode(status.Value, isServer: true, Tracer.Instance.CurrentTraceSettings.Settings);
235235
}
236236
}
237237

tracer/src/Datadog.Trace/AspNet/TracingHttpModule.cs

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -103,14 +103,14 @@ private static string BuildResourceName(Tracer tracer, HttpRequest httpRequest)
103103

104104
internal static void AddHeaderTagsFromHttpResponse(HttpContext httpContext, Scope scope)
105105
{
106-
if (!Tracer.Instance.Settings.HeaderTags.IsNullOrEmpty() &&
106+
if (!Tracer.Instance.CurrentTraceSettings.Settings.HeaderTags.IsNullOrEmpty() &&
107107
httpContext != null &&
108108
HttpRuntime.UsingIntegratedPipeline &&
109109
_canReadHttpResponseHeaders)
110110
{
111111
try
112112
{
113-
scope.Span.SetHeaderTags(httpContext.Response.Headers.Wrap(), Tracer.Instance.Settings.HeaderTags, defaultTagPrefix: SpanContextPropagator.HttpResponseHeadersTagPrefix);
113+
scope.Span.SetHeaderTags(httpContext.Response.Headers.Wrap(), Tracer.Instance.CurrentTraceSettings.Settings.HeaderTags, defaultTagPrefix: SpanContextPropagator.HttpResponseHeadersTagPrefix);
114114
}
115115
catch (PlatformNotSupportedException ex)
116116
{
@@ -196,7 +196,7 @@ private void OnBeginRequest(object sender, EventArgs eventArgs)
196196
? BuildResourceName(tracer, httpRequest)
197197
: null;
198198
scope.Span.DecorateWebServerSpan(resourceName: resourceName, httpMethod, host, url, userAgent, tags);
199-
tracer.TracerManager.SpanContextPropagator.AddHeadersToSpanAsTags(scope.Span, headers, tracer.Settings.HeaderTags, defaultTagPrefix: SpanContextPropagator.HttpRequestHeadersTagPrefix);
199+
tracer.TracerManager.SpanContextPropagator.AddHeadersToSpanAsTags(scope.Span, headers, tracer.CurrentTraceSettings.Settings.HeaderTags, defaultTagPrefix: SpanContextPropagator.HttpRequestHeadersTagPrefix);
200200

201201
tracer.TracerManager.SpanContextPropagator.AddBaggageToSpanAsTags(scope.Span, extractedContext.Baggage, tracer.Settings.BaggageTagKeys);
202202

@@ -274,7 +274,8 @@ private void OnEndRequest(object sender, EventArgs eventArgs)
274274
try
275275
{
276276
var tracer = Tracer.Instance;
277-
if (!tracer.Settings.IsIntegrationEnabled(IntegrationId))
277+
var settings = tracer.CurrentTraceSettings.Settings;
278+
if (!settings.IsIntegrationEnabled(IntegrationId))
278279
{
279280
// integration disabled
280281
return;
@@ -384,21 +385,21 @@ private void OnEndRequest(object sender, EventArgs eventArgs)
384385
// add "http.status_code" tag to the root span
385386
if (!rootSpan.HasHttpStatusCode())
386387
{
387-
rootSpan.SetHttpStatusCode(status, isServer: true, Tracer.Instance.Settings);
388+
rootSpan.SetHttpStatusCode(status, isServer: true, settings);
388389
AddHeaderTagsFromHttpResponse(app.Context, rootScope);
389390
}
390391

391392
// also add "http.status_code" tag to the current span if it's not the root
392393
if (currentSpan != rootSpan && !currentSpan.HasHttpStatusCode())
393394
{
394-
currentSpan.SetHttpStatusCode(status, isServer: true, Tracer.Instance.Settings);
395+
currentSpan.SetHttpStatusCode(status, isServer: true, settings);
395396
AddHeaderTagsFromHttpResponse(app.Context, scope);
396397
}
397398

398399
// also add "http.status_code" tag to the inferred proxy span
399400
if (proxyScope?.Span is { } proxySpan && proxySpan != rootSpan && !proxySpan.HasHttpStatusCode())
400401
{
401-
proxySpan.SetHttpStatusCode(status, isServer: true, Tracer.Instance.Settings);
402+
proxySpan.SetHttpStatusCode(status, isServer: true, settings);
402403
AddHeaderTagsFromHttpResponse(app.Context, proxyScope);
403404
}
404405

@@ -433,7 +434,8 @@ private void OnError(object sender, EventArgs eventArgs)
433434
{
434435
var tracer = Tracer.Instance;
435436

436-
if (!tracer.Settings.IsIntegrationEnabled(IntegrationId))
437+
var settings = tracer.CurrentTraceSettings.Settings;
438+
if (!settings.IsIntegrationEnabled(IntegrationId))
437439
{
438440
// integration disabled
439441
return;
@@ -463,8 +465,8 @@ private void OnError(object sender, EventArgs eventArgs)
463465
{
464466
// in classic mode, the exception won't cause the correct status code to be set
465467
// even though a 500 response will be sent ultimately, so set it manually
466-
scope.Span.SetHttpStatusCode(500, isServer: true, tracer.Settings);
467-
proxyScope?.Span.SetHttpStatusCode(500, isServer: true, tracer.Settings);
468+
scope.Span.SetHttpStatusCode(500, isServer: true, settings);
469+
proxyScope?.Span.SetHttpStatusCode(500, isServer: true, settings);
468470
}
469471
}
470472
}

tracer/src/Datadog.Trace/Ci/TestOptimizationTracerManagerFactory.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ protected override ITelemetryController CreateTelemetryController(TracerSettings
6969
return TelemetryFactory.Instance.CreateCiVisibilityTelemetryController(settings, discoveryService, isAgentAvailable: !_settings.Agentless);
7070
}
7171

72-
protected override IGitMetadataTagsProvider GetGitMetadataTagsProvider(TracerSettings settings, IScopeManager scopeManager, ITelemetryController telemetry)
72+
protected override IGitMetadataTagsProvider GetGitMetadataTagsProvider(TracerSettings settings, MutableSettings initialMutableSettings, IScopeManager scopeManager, ITelemetryController telemetry)
7373
{
7474
return new CIGitMetadataTagsProvider(telemetry);
7575
}

tracer/src/Datadog.Trace/ClrProfiler/AutoInstrumentation/AWS/SDK/RuntimePipelineInvokeAsyncIntegration.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ internal static TResponse OnAsyncMethodEnd<TTarget, TResponse>(TTarget instance,
9494
if (response.Instance is not null)
9595
{
9696
tags.RequestId = response.ResponseMetadata?.RequestId;
97-
state.Scope.Span.SetHttpStatusCode((int)response.HttpStatusCode, false, Tracer.Instance.Settings);
97+
state.Scope.Span.SetHttpStatusCode((int)response.HttpStatusCode, false, Tracer.Instance.CurrentTraceSettings.Settings);
9898
}
9999
}
100100

tracer/src/Datadog.Trace/ClrProfiler/AutoInstrumentation/AWS/SDK/RuntimePipelineInvokeSyncIntegration.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ internal static CallTargetReturn<TResponseContext> OnMethodEnd<TTarget, TRespons
9494
if (responseContext.Instance is not null && responseContext.Response is { } response)
9595
{
9696
tags.RequestId = response.ResponseMetadata?.RequestId;
97-
state.Scope.Span.SetHttpStatusCode((int)response.HttpStatusCode, false, Tracer.Instance.Settings);
97+
state.Scope.Span.SetHttpStatusCode((int)response.HttpStatusCode, false, Tracer.Instance.CurrentTraceSettings.Settings);
9898
}
9999
}
100100

tracer/src/Datadog.Trace/ClrProfiler/AutoInstrumentation/AspNet/ApiController_ExecuteAsync_Integration.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ internal static TResponse OnAsyncMethodEnd<TTarget, TResponse>(TTarget instance,
126126
else
127127
{
128128
HttpContextHelper.AddHeaderTagsFromHttpResponse(HttpContext.Current, scope);
129-
scope.Span.SetHttpStatusCode(responseMessage.DuckCast<HttpResponseMessageStruct>().StatusCode, isServer: true, Tracer.Instance.Settings);
129+
scope.Span.SetHttpStatusCode(responseMessage.DuckCast<HttpResponseMessageStruct>().StatusCode, isServer: true, Tracer.Instance.CurrentTraceSettings.Settings);
130130
scope.Dispose();
131131
}
132132

@@ -136,7 +136,7 @@ internal static TResponse OnAsyncMethodEnd<TTarget, TResponse>(TTarget instance,
136136
private static void OnRequestCompletedAfterException(HttpContext httpContext, Scope scope, DateTimeOffset finishTime)
137137
{
138138
HttpContextHelper.AddHeaderTagsFromHttpResponse(httpContext, scope);
139-
scope.Span.SetHttpStatusCode(httpContext.Response.StatusCode, isServer: true, Tracer.Instance.Settings);
139+
scope.Span.SetHttpStatusCode(httpContext.Response.StatusCode, isServer: true, Tracer.Instance.CurrentTraceSettings.Settings);
140140
scope.Span.Finish(finishTime);
141141
}
142142
}

tracer/src/Datadog.Trace/ClrProfiler/AutoInstrumentation/AspNet/AspNetMvcIntegration.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ internal static Scope CreateScope(ControllerContextStruct controllerContext)
180180

181181
if (headers is not null)
182182
{
183-
tracer.TracerManager.SpanContextPropagator.AddHeadersToSpanAsTags(span, headers.Value, tracer.Settings.HeaderTags, SpanContextPropagator.HttpRequestHeadersTagPrefix);
183+
tracer.TracerManager.SpanContextPropagator.AddHeadersToSpanAsTags(span, headers.Value, tracer.CurrentTraceSettings.Settings.HeaderTags, SpanContextPropagator.HttpRequestHeadersTagPrefix);
184184
}
185185

186186
tracer.TracerManager.SpanContextPropagator.AddBaggageToSpanAsTags(span, extractedContext.Baggage, tracer.Settings.BaggageTagKeys);

tracer/src/Datadog.Trace/ClrProfiler/AutoInstrumentation/AspNet/AspNetWebApi2Integration.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ internal static Scope CreateScope(IHttpControllerContext controllerContext, out
101101

102102
if (headersCollection is not null)
103103
{
104-
tracer.TracerManager.SpanContextPropagator.AddHeadersToSpanAsTags(scope.Span, headersCollection.Value, tracer.Settings.HeaderTags, SpanContextPropagator.HttpRequestHeadersTagPrefix, request.Headers.UserAgent.ToString());
104+
tracer.TracerManager.SpanContextPropagator.AddHeadersToSpanAsTags(scope.Span, headersCollection.Value, tracer.CurrentTraceSettings.Settings.HeaderTags, SpanContextPropagator.HttpRequestHeadersTagPrefix, request.Headers.UserAgent.ToString());
105105
}
106106

107107
tracer.TracerManager.SpanContextPropagator.AddBaggageToSpanAsTags(scope.Span, extractedContext.Baggage, tracer.Settings.BaggageTagKeys);

tracer/src/Datadog.Trace/ClrProfiler/AutoInstrumentation/AspNet/AsyncControllerActionInvoker_EndInvokeAction_Integration.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -94,12 +94,12 @@ internal static CallTargetReturn<TResult> OnMethodEnd<TTarget, TResult>(TTarget
9494
else
9595
{
9696
HttpContextHelper.AddHeaderTagsFromHttpResponse(httpContext, scope);
97-
scope.Span.SetHttpStatusCode(httpContext.Response.StatusCode, isServer: true, Tracer.Instance.Settings);
97+
scope.Span.SetHttpStatusCode(httpContext.Response.StatusCode, isServer: true, Tracer.Instance.CurrentTraceSettings.Settings);
9898

9999
if (proxyScope?.Span != null)
100100
{
101101
HttpContextHelper.AddHeaderTagsFromHttpResponse(httpContext, proxyScope);
102-
proxyScope.Span.SetHttpStatusCode(httpContext.Response.StatusCode, isServer: true, Tracer.Instance.Settings);
102+
proxyScope.Span.SetHttpStatusCode(httpContext.Response.StatusCode, isServer: true, Tracer.Instance.CurrentTraceSettings.Settings);
103103
}
104104

105105
scope.Dispose();
@@ -129,12 +129,12 @@ private static void OnRequestCompletedAfterException(HttpContext httpContext, Sc
129129
if (proxyScope?.Span != null)
130130
{
131131
HttpContextHelper.AddHeaderTagsFromHttpResponse(httpContext, proxyScope);
132-
proxyScope.Span.SetHttpStatusCode(statusCode, isServer: true, Tracer.Instance.Settings);
132+
proxyScope.Span.SetHttpStatusCode(statusCode, isServer: true, Tracer.Instance.CurrentTraceSettings.Settings);
133133
proxyScope.Span.Finish(finishTime);
134134
}
135135

136136
HttpContextHelper.AddHeaderTagsFromHttpResponse(httpContext, scope);
137-
scope.Span.SetHttpStatusCode(statusCode, isServer: true, Tracer.Instance.Settings);
137+
scope.Span.SetHttpStatusCode(statusCode, isServer: true, Tracer.Instance.CurrentTraceSettings.Settings);
138138
scope.Span.Finish(finishTime);
139139
}
140140
catch (Exception ex)

0 commit comments

Comments
 (0)