|
1 | | -import type { Span as OtelSpan } from '@opentelemetry/api'; |
| 1 | +import type { Span } from '@opentelemetry/api'; |
| 2 | +import type { ReadableSpan } from '@opentelemetry/sdk-trace-base'; |
2 | 3 | import type { Hub, Scope, TransactionMetadata } from '@sentry/types'; |
3 | 4 |
|
| 5 | +// We allow passing either a Span (=which is bascially a WriteableSpan), or a ReadableSpan |
| 6 | +// As we check by identity anyhow we don't really care |
| 7 | +type AbstractSpan = Span | ReadableSpan; |
| 8 | + |
4 | 9 | // We store the parent span, scope & metadata in separate weakmaps, so we can access them for a given span |
5 | 10 | // This way we can enhance the data that an OTEL Span natively gives us |
6 | 11 | // and since we are using weakmaps, we do not need to clean up after ourselves |
7 | | -const otelSpanScope = new WeakMap<OtelSpan, Scope>(); |
8 | | -const otelSpanHub = new WeakMap<OtelSpan, Hub>(); |
9 | | -const otelSpanParent = new WeakMap<OtelSpan, OtelSpan>(); |
10 | | -const otelSpanMetadata = new WeakMap<OtelSpan, Partial<TransactionMetadata>>(); |
| 12 | +const SpanScope = new WeakMap<AbstractSpan, Scope>(); |
| 13 | +const SpanHub = new WeakMap<AbstractSpan, Hub>(); |
| 14 | +const SpanParent = new WeakMap<AbstractSpan, Span>(); |
| 15 | +const SpanMetadata = new WeakMap<AbstractSpan, Partial<TransactionMetadata>>(); |
11 | 16 |
|
12 | 17 | /** Set the Sentry scope on an OTEL span. */ |
13 | | -export function setOtelSpanScope(span: OtelSpan, scope: Scope): void { |
14 | | - otelSpanScope.set(span, scope); |
| 18 | +export function setSpanScope(span: AbstractSpan, scope: Scope): void { |
| 19 | + SpanScope.set(span, scope); |
15 | 20 | } |
16 | 21 |
|
17 | 22 | /** Get the Sentry scope of an OTEL span. */ |
18 | | -export function getOtelSpanScope(span: OtelSpan): Scope | undefined { |
19 | | - return otelSpanScope.get(span); |
| 23 | +export function getSpanScope(span: AbstractSpan): Scope | undefined { |
| 24 | + return SpanScope.get(span); |
20 | 25 | } |
21 | 26 |
|
22 | 27 | /** Set the Sentry hub on an OTEL span. */ |
23 | | -export function setOtelSpanHub(span: OtelSpan, hub: Hub): void { |
24 | | - otelSpanHub.set(span, hub); |
| 28 | +export function setSpanHub(span: AbstractSpan, hub: Hub): void { |
| 29 | + SpanHub.set(span, hub); |
25 | 30 | } |
26 | 31 |
|
27 | 32 | /** Get the Sentry hub of an OTEL span. */ |
28 | | -export function getOtelSpanHub(span: OtelSpan): Hub | undefined { |
29 | | - return otelSpanHub.get(span); |
| 33 | +export function getSpanHub(span: AbstractSpan): Hub | undefined { |
| 34 | + return SpanHub.get(span); |
30 | 35 | } |
31 | 36 |
|
32 | 37 | /** Set the parent OTEL span on an OTEL span. */ |
33 | | -export function setOtelSpanParent(span: OtelSpan, parentSpan: OtelSpan): void { |
34 | | - otelSpanParent.set(span, parentSpan); |
| 38 | +export function setSpanParent(span: AbstractSpan, parentSpan: Span): void { |
| 39 | + SpanParent.set(span, parentSpan); |
35 | 40 | } |
36 | 41 |
|
37 | 42 | /** Get the parent OTEL span of an OTEL span. */ |
38 | | -export function getOtelSpanParent(span: OtelSpan): OtelSpan | undefined { |
39 | | - return otelSpanParent.get(span); |
| 43 | +export function getSpanParent(span: AbstractSpan): Span | undefined { |
| 44 | + return SpanParent.get(span); |
40 | 45 | } |
41 | 46 |
|
42 | 47 | /** Set metadata for an OTEL span. */ |
43 | | -export function setOtelSpanMetadata(span: OtelSpan, metadata: Partial<TransactionMetadata>): void { |
44 | | - otelSpanMetadata.set(span, metadata); |
| 48 | +export function setSpanMetadata(span: AbstractSpan, metadata: Partial<TransactionMetadata>): void { |
| 49 | + SpanMetadata.set(span, metadata); |
45 | 50 | } |
46 | 51 |
|
47 | 52 | /** Get metadata for an OTEL span. */ |
48 | | -export function getOtelSpanMetadata(span: OtelSpan): Partial<TransactionMetadata> | undefined { |
49 | | - return otelSpanMetadata.get(span); |
| 53 | +export function getSpanMetadata(span: AbstractSpan): Partial<TransactionMetadata> | undefined { |
| 54 | + return SpanMetadata.get(span); |
50 | 55 | } |
0 commit comments