@@ -13,6 +13,7 @@ import type {
1313 Transaction ,
1414} from '@sentry/types' ;
1515import { dropUndefinedKeys , logger , timestampInSeconds , uuid4 } from '@sentry/utils' ;
16+ import { getClient } from '../currentScopes' ;
1617
1718import { DEBUG_BUILD } from '../debug-build' ;
1819import { getMetricSummaryJsonForSpan } from '../metrics/metric-summary' ;
@@ -277,7 +278,7 @@ export class SentrySpan implements Span {
277278 * @deprecated Use `startSpan()`, `startSpanManual()` or `startInactiveSpan()` instead.
278279 */
279280 public startChild (
280- spanContext ? : Pick < SpanContext , Exclude < keyof SpanContext , 'sampled' | 'traceId' | 'parentSpanId' > > ,
281+ spanContext : Pick < SpanContext , Exclude < keyof SpanContext , 'sampled' | 'traceId' | 'parentSpanId' > > = { } ,
281282 ) : Span {
282283 const childSpan = new SentrySpan ( {
283284 ...spanContext ,
@@ -315,6 +316,15 @@ export class SentrySpan implements Span {
315316 this . _logMessage = logMessage ;
316317 }
317318
319+ const client = getClient ( ) ;
320+ if ( client ) {
321+ client . emit ( 'spanStart' , childSpan ) ;
322+ // If it has an endTimestamp, it's already ended
323+ if ( spanContext . endTimestamp ) {
324+ client . emit ( 'spanEnd' , childSpan ) ;
325+ }
326+ }
327+
318328 return childSpan ;
319329 }
320330
@@ -397,6 +407,8 @@ export class SentrySpan implements Span {
397407 }
398408
399409 this . _endTime = spanTimeInputToSeconds ( endTimestamp ) ;
410+
411+ this . _onSpanEnded ( ) ;
400412 }
401413
402414 /**
@@ -499,4 +511,12 @@ export class SentrySpan implements Span {
499511
500512 return hasData ? data : attributes ;
501513 }
514+
515+ /** Emit `spanEnd` when the span is ended. */
516+ private _onSpanEnded ( ) : void {
517+ const client = getClient ( ) ;
518+ if ( client ) {
519+ client . emit ( 'spanEnd' , this ) ;
520+ }
521+ }
502522}
0 commit comments