@@ -7,16 +7,20 @@ import { startInactiveSpan, startSpanManual } from '@sentry/core';
7
7
* This is not perfect but handles easy/common use cases.
8
8
*/
9
9
export function setupOpenTelemetryTracer ( ) : void {
10
- trace . setGlobalTracerProvider ( new SentryCloudflareTraceProvider ( ) ) ;
10
+ const current = trace . getTracerProvider ( ) ;
11
+ trace . setGlobalTracerProvider ( new SentryCloudflareTraceProvider ( current ) ) ;
11
12
}
12
13
13
14
class SentryCloudflareTraceProvider implements TracerProvider {
14
15
private readonly _tracers : Map < string , Tracer > = new Map ( ) ;
15
16
17
+ public constructor ( private readonly _provider : TracerProvider ) { }
18
+
16
19
public getTracer ( name : string , version ?: string , options ?: { schemaUrl ?: string } ) : Tracer {
17
20
const key = `${ name } @${ version || '' } :${ options ?. schemaUrl || '' } ` ;
18
21
if ( ! this . _tracers . has ( key ) ) {
19
- this . _tracers . set ( key , new SentryCloudflareTracer ( ) ) ;
22
+ const tracer = this . _provider . getTracer ( key , version , options ) ;
23
+ this . _tracers . set ( key , new SentryCloudflareTracer ( tracer ) ) ;
20
24
}
21
25
22
26
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
@@ -25,15 +29,20 @@ class SentryCloudflareTraceProvider implements TracerProvider {
25
29
}
26
30
27
31
class SentryCloudflareTracer implements Tracer {
32
+ public constructor ( private readonly _tracer : Tracer ) { }
28
33
public startSpan ( name : string , options ?: SpanOptions ) : Span {
29
- return startInactiveSpan ( {
30
- name,
31
- ...options ,
32
- attributes : {
33
- ...options ?. attributes ,
34
- 'sentry.cloudflare_tracer' : true ,
35
- } ,
36
- } ) ;
34
+ try {
35
+ return startInactiveSpan ( {
36
+ name,
37
+ ...options ,
38
+ attributes : {
39
+ ...options ?. attributes ,
40
+ 'sentry.cloudflare_tracer' : true ,
41
+ } ,
42
+ } ) ;
43
+ } finally {
44
+ this . _tracer . startSpan ( name , options ) ;
45
+ }
37
46
}
38
47
39
48
/**
0 commit comments