| File: CommandFactory\CommandResolution\ActivityContextFactory.cs | Web Access |
| Project: src\sdk\src\Cli\dotnet\dotnet.csproj (dotnet) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Diagnostics; using Microsoft.DotNet.Cli.Utils; #if TARGET_WINDOWS using OpenTelemetry; using OpenTelemetry.Context.Propagation; #endif namespace Microsoft.DotNet.Cli.CommandFactory.CommandResolution; public static class ActivityContextFactory { public static Dictionary<string, string>? MakeActivityContextEnvironment() { var currentActivity = Activity.Current; if (currentActivity is null) { return null; } var activityContext = currentActivity.Context; if (activityContext.TraceState is null && activityContext.TraceId == default && activityContext.SpanId == default) { return null; } var environment = new Dictionary<string, string>(capacity: 2); #if TARGET_WINDOWS var propagationContext = new PropagationContext(activityContext, Baggage.Current); Propagators.DefaultTextMapPropagator.Inject(propagationContext, environment, WriteTraceStateIntoEnvironment); #endif return environment; } private static void WriteTraceStateIntoEnvironment(Dictionary<string, string> environment, string key, string value) { switch (key) { case "traceparent": environment[Activities.TRACEPARENT] = value; break; case "tracestate": environment[Activities.TRACESTATE] = value; break; } } }