Skip to content

Commit a2cc41a

Browse files
authored
Fix ad-hoc use of TracerSettings to use MutableSettings where appropriate (#7543)
## Summary of changes Fix usages of `Tracer.Instance.Settings` to use `Tracer.Instance.CurrentTracerSettings.Settings` where appropriate ## Reason for change This PR "fixes" the places that were previously grabbing the environment/service etc from `TracerSettings` to use the `MutableSettings` exposed via `CurrentTracerSettings` instead, as the location where these settings will ultimately exist. This is effectively still just a refactoring, but prepares for the point where these settings aren't exposed on `TracerSettings` at all. 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 _could_ be updated in the future to subscribe to changes if that provides performance benefits. Also note that I elected not to change most calls to `IsIntegrationEnabled()` etc in this PR as there are hundreds of locations. The follow up PR handles that Also found a few cases that were incorrectly assuming that these values cannot change. Marked them with 'TODO: Subscribe to changes in settings' ## Implementation details - Mostly find and replace to use `CurrentTracerSettings.Settings` - Occasional extraction of a variable where it makes sense to avoid repeated access - Functionally identical currently (where `MutableSettings` is replaced on `TracerSettings`) but will be a required change once we stop replacing `TracerManager`. ## Test coverage Covered by existing tests ## Other details https://datadoghq.atlassian.net/browse/LANGPLAT-819 Part of a config stack - #7522 - #7525 - #7530 - #7532 - #7543 👈 - #7544
1 parent 042cf47 commit a2cc41a

File tree

66 files changed

+308
-210
lines changed

Some content is hidden

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

66 files changed

+308
-210
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
{
@@ -198,7 +198,7 @@ private void OnBeginRequest(object sender, EventArgs eventArgs)
198198
? BuildResourceName(tracer, httpRequest)
199199
: null;
200200
scope.Span.DecorateWebServerSpan(resourceName: resourceName, httpMethod, host, url, userAgent, tags);
201-
tracer.TracerManager.SpanContextPropagator.AddHeadersToSpanAsTags(scope.Span, headers, tracer.Settings.HeaderTags, defaultTagPrefix: SpanContextPropagator.HttpRequestHeadersTagPrefix);
201+
tracer.TracerManager.SpanContextPropagator.AddHeadersToSpanAsTags(scope.Span, headers, tracer.CurrentTraceSettings.Settings.HeaderTags, defaultTagPrefix: SpanContextPropagator.HttpRequestHeadersTagPrefix);
202202

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

@@ -276,7 +276,8 @@ private void OnEndRequest(object sender, EventArgs eventArgs)
276276
try
277277
{
278278
var tracer = Tracer.Instance;
279-
if (!tracer.Settings.IsIntegrationEnabled(IntegrationId))
279+
var settings = tracer.CurrentTraceSettings.Settings;
280+
if (!settings.IsIntegrationEnabled(IntegrationId))
280281
{
281282
// integration disabled
282283
return;
@@ -386,21 +387,21 @@ private void OnEndRequest(object sender, EventArgs eventArgs)
386387
// add "http.status_code" tag to the root span
387388
if (!rootSpan.HasHttpStatusCode())
388389
{
389-
rootSpan.SetHttpStatusCode(status, isServer: true, Tracer.Instance.Settings);
390+
rootSpan.SetHttpStatusCode(status, isServer: true, settings);
390391
AddHeaderTagsFromHttpResponse(app.Context, rootScope);
391392
}
392393

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

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

@@ -435,7 +436,8 @@ private void OnError(object sender, EventArgs eventArgs)
435436
{
436437
var tracer = Tracer.Instance;
437438

438-
if (!tracer.Settings.IsIntegrationEnabled(IntegrationId))
439+
var settings = tracer.CurrentTraceSettings.Settings;
440+
if (!settings.IsIntegrationEnabled(IntegrationId))
439441
{
440442
// integration disabled
441443
return;
@@ -465,8 +467,8 @@ private void OnError(object sender, EventArgs eventArgs)
465467
{
466468
// in classic mode, the exception won't cause the correct status code to be set
467469
// even though a 500 response will be sent ultimately, so set it manually
468-
scope.Span.SetHttpStatusCode(500, isServer: true, tracer.Settings);
469-
proxyScope?.Span.SetHttpStatusCode(500, isServer: true, tracer.Settings);
470+
scope.Span.SetHttpStatusCode(500, isServer: true, settings);
471+
proxyScope?.Span.SetHttpStatusCode(500, isServer: true, settings);
470472
}
471473
}
472474
}

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)