From 97d8310db926bfffa890385fd2b1be4d33fb6469 Mon Sep 17 00:00:00 2001 From: Nicholas Hulston Date: Mon, 27 Jan 2025 14:12:30 -0500 Subject: [PATCH] Create and implement `AddSpanLinks` method --- ddtrace/ddtrace.go | 3 +++ ddtrace/internal/globaltracer.go | 3 +++ ddtrace/mocktracer/mockspan.go | 5 +++++ ddtrace/tracer/civisibility_tslv.go | 9 +++++++++ ddtrace/tracer/span.go | 5 +++++ 5 files changed, 25 insertions(+) diff --git a/ddtrace/ddtrace.go b/ddtrace/ddtrace.go index fc645aff88..c6b939959f 100644 --- a/ddtrace/ddtrace.go +++ b/ddtrace/ddtrace.go @@ -79,6 +79,9 @@ type Span interface { // item should propagate to all descendant spans, both in- and cross-process. SetBaggageItem(key, val string) + // AddSpanLinks appends the given links to the span's span links. + AddSpanLinks(spanLinks ...SpanLink) + // Finish finishes the current span with the given options. Finish calls should be idempotent. Finish(opts ...FinishOption) diff --git a/ddtrace/internal/globaltracer.go b/ddtrace/internal/globaltracer.go index 363d1f9983..8ab17cb55d 100644 --- a/ddtrace/internal/globaltracer.go +++ b/ddtrace/internal/globaltracer.go @@ -80,6 +80,9 @@ func (NoopSpan) BaggageItem(_ string) string { return "" } // SetBaggageItem implements ddtrace.Span. func (NoopSpan) SetBaggageItem(_, _ string) {} +// AddSpanLinks implements ddtrace.Span. +func (s NoopSpan) AddSpanLinks(_ ...ddtrace.SpanLink) {} + // Finish implements ddtrace.Span. func (NoopSpan) Finish(_ ...ddtrace.FinishOption) {} diff --git a/ddtrace/mocktracer/mockspan.go b/ddtrace/mocktracer/mockspan.go index 4701d96c7f..c30f3704d5 100644 --- a/ddtrace/mocktracer/mockspan.go +++ b/ddtrace/mocktracer/mockspan.go @@ -188,6 +188,11 @@ func (s *mockspan) SetBaggageItem(key, val string) { return } +// AddSpanLinks appends the given links to the span's span links. +func (s *mockspan) AddSpanLinks(spanLinks ...ddtrace.SpanLink) { + s.links = append(s.links, spanLinks...) +} + // Finish finishes the current span with the given options. func (s *mockspan) Finish(opts ...ddtrace.FinishOption) { var cfg ddtrace.FinishConfig diff --git a/ddtrace/tracer/civisibility_tslv.go b/ddtrace/tracer/civisibility_tslv.go index ef6614d48f..a69d8620bd 100644 --- a/ddtrace/tracer/civisibility_tslv.go +++ b/ddtrace/tracer/civisibility_tslv.go @@ -200,6 +200,15 @@ func (e *ciVisibilityEvent) SetBaggageItem(key, val string) { e.span.SetBaggageItem(key, val) } +// AddSpanLinks appends the given links to the span's span links. +// +// Parameters: +// +// spanLinks - list of span links to append. +func (e *ciVisibilityEvent) AddSpanLinks(spanLinks ...ddtrace.SpanLink) { + e.span.SpanLinks = append(e.span.SpanLinks, spanLinks...) +} + // Finish completes the event's span with optional finish options. // // Parameters: diff --git a/ddtrace/tracer/span.go b/ddtrace/tracer/span.go index 6b7568ec48..75051ea172 100644 --- a/ddtrace/tracer/span.go +++ b/ddtrace/tracer/span.go @@ -464,6 +464,11 @@ func (s *span) setMetric(key string, v float64) { } } +// AddSpanLinks appends the given links to the span's span links. +func (s *span) AddSpanLinks(spanLinks ...ddtrace.SpanLink) { + s.SpanLinks = append(s.SpanLinks, spanLinks...) +} + // Finish closes this Span (but not its children) providing the duration // of its part of the tracing session. func (s *span) Finish(opts ...ddtrace.FinishOption) {