diff --git a/tracer/src/Datadog.Trace/Activity/OtlpHelpers.cs b/tracer/src/Datadog.Trace/Activity/OtlpHelpers.cs index 781a8fe364cb..764dbc4e0f61 100644 --- a/tracer/src/Datadog.Trace/Activity/OtlpHelpers.cs +++ b/tracer/src/Datadog.Trace/Activity/OtlpHelpers.cs @@ -12,6 +12,7 @@ using Datadog.Trace.Activity.DuckTypes; using Datadog.Trace.DuckTyping; using Datadog.Trace.Logging; +using Datadog.Trace.Tagging; using Datadog.Trace.Util; using Datadog.Trace.Vendors.Newtonsoft.Json; @@ -216,21 +217,23 @@ private static void ExtractActivityLinks(Span span, IActivity5? activity return; } - var links = new List(); foreach (var link in (activity5.Links)) { var duckLink = link.DuckCast(); - links.Add(duckLink!); - } - if (links.Count <= 0) - { - return; - } + _ = HexString.TryParseTraceId(duckLink!.Context.TraceId.TraceId!, out var newActivityTraceId); + _ = HexString.TryParseUInt64(duckLink.Context.SpanId.SpanId!, out var newActivitySpanId); + + var spanContext = new SpanContext( + newActivityTraceId, + newActivitySpanId, + samplingPriority: (int?)duckLink!.Context.TraceFlags == (int?)ActivityTraceFlags.None ? 0 : 1, + serviceName: null, + origin: null); - var settings = new JsonSerializerSettings { Converters = new List { new ActivityLinkConverter() }, Formatting = Formatting.None }; - var jsonArray = JsonConvert.SerializeObject(links, settings); - span.SetTag("_dd.span_links", jsonArray); + var duckLinkSpan = new Span(spanContext, DateTimeOffset.Now, new CommonTags()); + span.AddSpanLink(duckLinkSpan); + } } internal static string GetSpanKind(ActivityKind activityKind) =>