Skip to content

Commit 7ee4f2c

Browse files
committed
wip
1 parent c38d51e commit 7ee4f2c

File tree

2 files changed

+33
-36
lines changed

2 files changed

+33
-36
lines changed

packages/browser/src/tracing/browserTracingIntegration.ts

+17-20
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import {
2424
getDynamicSamplingContextFromSpan,
2525
getIsolationScope,
2626
getLocationHref,
27+
getRootSpan,
2728
logger,
2829
propagationContextFromHeaders,
2930
registerSpanErrorInstrumentation,
@@ -35,7 +36,6 @@ import { DEBUG_BUILD } from '../debug-build';
3536
import { WINDOW } from '../helpers';
3637
import { registerBackgroundTabDetection } from './backgroundtab';
3738
import { defaultRequestInstrumentationOptions, instrumentOutgoingRequests } from './request';
38-
import type { PreviousTraceInfo } from './previousTrace';
3939
import {
4040
addPreviousTraceSpanLink,
4141
getPreviousTraceFromSessionStorage,
@@ -274,19 +274,10 @@ export const browserTracingIntegration = ((_options: Partial<BrowserTracingOptio
274274
source: undefined,
275275
};
276276

277-
let previousTraceInfo: PreviousTraceInfo | undefined;
278-
if (enablePreviousTrace && persistPreviousTrace) {
279-
previousTraceInfo = getPreviousTraceFromSessionStorage();
280-
}
281-
282277
/** Create routing idle transaction. */
283278
function _createRouteSpan(client: Client, startSpanOptions: StartSpanOptions): void {
284279
const isPageloadTransaction = startSpanOptions.op === 'pageload';
285280

286-
if (enablePreviousTrace && previousTraceInfo) {
287-
previousTraceInfo = addPreviousTraceSpanLink(previousTraceInfo, startSpanOptions);
288-
}
289-
290281
const finalStartSpanOptions: StartSpanOptions = beforeStartSpan
291282
? beforeStartSpan(startSpanOptions)
292283
: startSpanOptions;
@@ -330,16 +321,6 @@ export const browserTracingIntegration = ((_options: Partial<BrowserTracingOptio
330321
});
331322
setActiveIdleSpan(client, idleSpan);
332323

333-
if (enablePreviousTrace) {
334-
previousTraceInfo = {
335-
spanContext: idleSpan.spanContext(),
336-
startTimestamp: spanToJSON(idleSpan).start_timestamp,
337-
};
338-
if (persistPreviousTrace) {
339-
storePreviousTraceInSessionStorage(previousTraceInfo);
340-
}
341-
}
342-
343324
function emitFinish(): void {
344325
if (optionalWindowDocument && ['interactive', 'complete'].includes(optionalWindowDocument.readyState)) {
345326
client.emit('idleSpanEnableAutoFinish', idleSpan);
@@ -468,6 +449,22 @@ export const browserTracingIntegration = ((_options: Partial<BrowserTracingOptio
468449
shouldCreateSpanForRequest,
469450
enableHTTPTimings,
470451
});
452+
453+
if (enablePreviousTrace) {
454+
let previousTraceInfo = persistPreviousTrace ? getPreviousTraceFromSessionStorage() : undefined;
455+
456+
client.on('spanStart', span => {
457+
if (getRootSpan(span) !== span) {
458+
return;
459+
}
460+
461+
previousTraceInfo = addPreviousTraceSpanLink(previousTraceInfo, span);
462+
463+
if (persistPreviousTrace) {
464+
storePreviousTraceInSessionStorage(previousTraceInfo);
465+
}
466+
});
467+
}
471468
},
472469
};
473470
}) satisfies IntegrationFn;

packages/browser/src/tracing/previousTrace.ts

+16-16
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import { logger, SEMANTIC_LINK_ATTRIBUTE_LINK_TYPE, type SpanContextData, type StartSpanOptions } from '@sentry/core';
1+
import type { Span } from '@sentry/core';
2+
import { logger, SEMANTIC_LINK_ATTRIBUTE_LINK_TYPE, spanToJSON, type SpanContextData } from '@sentry/core';
23
import { WINDOW } from '../exports';
34
import { DEBUG_BUILD } from '../debug-build';
45

@@ -25,23 +26,22 @@ const PREVIOUS_TRACE_KEY = 'sentry_previous_trace';
2526
* Returns @param previousTraceInfo if the previous trace is still valid, otherwise returns undefined.
2627
*/
2728
export function addPreviousTraceSpanLink(
28-
previousTraceInfo: PreviousTraceInfo,
29-
startSpanOptions: StartSpanOptions,
30-
): PreviousTraceInfo | undefined {
31-
if (Date.now() / 1000 - previousTraceInfo.startTimestamp <= PREVIOUS_TRACE_MAX_DURATION) {
32-
startSpanOptions.links = [
33-
...(startSpanOptions.links || []),
34-
{
35-
context: previousTraceInfo.spanContext,
36-
attributes: {
37-
[SEMANTIC_LINK_ATTRIBUTE_LINK_TYPE]: 'previous_trace',
38-
},
29+
previousTraceInfo: PreviousTraceInfo | undefined,
30+
span: Span,
31+
): PreviousTraceInfo {
32+
if (previousTraceInfo && Date.now() / 1000 - previousTraceInfo.startTimestamp <= PREVIOUS_TRACE_MAX_DURATION) {
33+
span.addLink({
34+
context: previousTraceInfo.spanContext,
35+
attributes: {
36+
[SEMANTIC_LINK_ATTRIBUTE_LINK_TYPE]: 'previous_trace',
3937
},
40-
];
41-
} else if (previousTraceInfo) {
42-
return undefined;
38+
});
4339
}
44-
return previousTraceInfo;
40+
41+
return {
42+
spanContext: span.spanContext(),
43+
startTimestamp: spanToJSON(span).start_timestamp,
44+
};
4545
}
4646

4747
/**

0 commit comments

Comments
 (0)