@@ -7,16 +7,20 @@ import { startInactiveSpan, startSpanManual } from '@sentry/core';
77 * This is not perfect but handles easy/common use cases.
88 */
99export function setupOpenTelemetryTracer ( ) : void {
10- trace . setGlobalTracerProvider ( new SentryCloudflareTraceProvider ( ) ) ;
10+ const current = trace . getTracerProvider ( ) ;
11+ trace . setGlobalTracerProvider ( new SentryCloudflareTraceProvider ( current ) ) ;
1112}
1213
1314class SentryCloudflareTraceProvider implements TracerProvider {
1415 private readonly _tracers : Map < string , Tracer > = new Map ( ) ;
1516
17+ public constructor ( private readonly _provider : TracerProvider ) { }
18+
1619 public getTracer ( name : string , version ?: string , options ?: { schemaUrl ?: string } ) : Tracer {
1720 const key = `${ name } @${ version || '' } :${ options ?. schemaUrl || '' } ` ;
1821 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 ) ) ;
2024 }
2125
2226 // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
@@ -25,15 +29,20 @@ class SentryCloudflareTraceProvider implements TracerProvider {
2529}
2630
2731class SentryCloudflareTracer implements Tracer {
32+ public constructor ( private readonly _tracer : Tracer ) { }
2833 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+ }
3746 }
3847
3948 /**
0 commit comments