internal static void UpdateTelemetryW3C()

in src/WebJobs.Extensions.DurableTask/Correlation/DurableTaskCorrelationTelemetryInitializer.cs [179:224]


        internal static void UpdateTelemetryW3C(ITelemetry telemetry, W3CTraceContext context)
        {
            OperationTelemetry opTelemetry = telemetry as OperationTelemetry;

            bool initializeFromCurrent = opTelemetry != null;

            if (initializeFromCurrent)
            {
                initializeFromCurrent &= !(opTelemetry is DependencyTelemetry dependency &&
                    dependency.Type == SqlRemoteDependencyType &&
                    dependency.Context.GetInternalContext().SdkVersion
                        .StartsWith(RddDiagnosticSourcePrefix, StringComparison.Ordinal));
            }

            if (!string.IsNullOrEmpty(context.TraceState))
            {
                opTelemetry.Properties["w3c_tracestate"] = context.TraceState;
            }

            TraceParent traceParent = TraceParent.FromString(context.TraceParent);

            if (initializeFromCurrent)
            {
                if (string.IsNullOrEmpty(opTelemetry.Id))
                {
                    opTelemetry.Id = traceParent.SpanId;
                }

                if (string.IsNullOrEmpty(context.ParentSpanId))
                {
                    telemetry.Context.Operation.ParentId = telemetry.Context.Operation.Id;
                }
            }
            else
            {
                if (telemetry.Context.Operation.Id == null)
                {
                    telemetry.Context.Operation.Id = traceParent.TraceId;
                }

                if (telemetry.Context.Operation.ParentId == null)
                {
                    telemetry.Context.Operation.ParentId = traceParent.SpanId;
                }
            }
        }