Skip to content

Commit 4df32cd

Browse files
committed
feat(core): Ensure trace context only includes relevant data
1 parent 9a7e276 commit 4df32cd

File tree

8 files changed

+16
-39
lines changed

8 files changed

+16
-39
lines changed

dev-packages/browser-integration-tests/suites/tracing/trace-lifetime/navigation/test.ts

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -161,14 +161,6 @@ sentryTest('error during navigation has new navigation traceId', async ({ getLoc
161161

162162
const errorTraceContext = errorEvent?.contexts?.trace;
163163
expect(errorTraceContext).toEqual({
164-
data: {
165-
'sentry.op': 'navigation',
166-
'sentry.origin': 'auto.navigation.browser',
167-
'sentry.sample_rate': 1,
168-
'sentry.source': 'url',
169-
},
170-
op: 'navigation',
171-
origin: 'auto.navigation.browser',
172164
trace_id: navigationTraceContext?.trace_id,
173165
span_id: expect.stringMatching(/^[0-9a-f]{16}$/),
174166
});

dev-packages/browser-integration-tests/suites/tracing/trace-lifetime/pageload-meta/test.ts

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -168,14 +168,6 @@ sentryTest('error during <meta> tag pageload has pageload traceId', async ({ get
168168
});
169169

170170
expect(errorEvent?.contexts?.trace).toEqual({
171-
data: {
172-
'sentry.op': 'pageload',
173-
'sentry.origin': 'auto.pageload.browser',
174-
'sentry.sample_rate': 1,
175-
'sentry.source': 'url',
176-
},
177-
op: 'pageload',
178-
origin: 'auto.pageload.browser',
179171
trace_id: META_TAG_TRACE_ID,
180172
parent_span_id: META_TAG_PARENT_SPAN_ID,
181173
span_id: expect.stringMatching(/^[0-9a-f]{16}$/),

dev-packages/browser-integration-tests/suites/tracing/trace-lifetime/pageload/test.ts

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -158,14 +158,6 @@ sentryTest('error during pageload has pageload traceId', async ({ getLocalTestPa
158158

159159
const errorTraceContext = errorEvent?.contexts?.trace;
160160
expect(errorTraceContext).toEqual({
161-
data: {
162-
'sentry.op': 'pageload',
163-
'sentry.origin': 'auto.pageload.browser',
164-
'sentry.sample_rate': 1,
165-
'sentry.source': 'url',
166-
},
167-
op: 'pageload',
168-
origin: 'auto.pageload.browser',
169161
trace_id: pageloadTraceContext?.trace_id,
170162
span_id: expect.stringMatching(/^[0-9a-f]{16}$/),
171163
});

packages/core/src/server-runtime-client.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,7 @@ export class ServerRuntimeClient<
257257
if (span) {
258258
const rootSpan = getRootSpan(span);
259259
const samplingContext = getDynamicSamplingContextFromSpan(rootSpan);
260-
return [samplingContext, spanToTraceContext(rootSpan)];
260+
return [samplingContext, spanToTraceContext(rootSpan, false)];
261261
}
262262

263263
const { traceId, spanId, parentSpanId, dsc } = scope.getPropagationContext();

packages/core/src/tracing/sentrySpan.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -270,7 +270,7 @@ export class SentrySpan implements Span {
270270

271271
const transaction: TransactionEvent = {
272272
contexts: {
273-
trace: spanToTraceContext(this),
273+
trace: spanToTraceContext(this, true),
274274
},
275275
spans,
276276
start_timestamp: this._startTime,

packages/core/src/utils/applyScopeDataToEvent.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,10 @@ function applySdkMetadataToEvent(event: Event, sdkProcessingMetadata: ScopeData[
161161
}
162162

163163
function applySpanToEvent(event: Event, span: Span): void {
164-
event.contexts = { trace: spanToTraceContext(span), ...event.contexts };
164+
event.contexts = {
165+
trace: spanToTraceContext(span, false),
166+
...event.contexts,
167+
};
165168

166169
event.sdkProcessingMetadata = {
167170
dynamicSamplingContext: getDynamicSamplingContextFromSpan(span),

packages/core/src/utils/spanUtils.ts

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -31,20 +31,18 @@ export const TRACE_FLAG_SAMPLED = 0x1;
3131

3232
/**
3333
* Convert a span to a trace context, which can be sent as the `trace` context in an event.
34+
* By default, this will only include trace_id, span_id & parent_span_id.
35+
* If `includeAllData` is true, it will also include data, op, status & origin.
3436
*/
35-
export function spanToTraceContext(span: Span): TraceContext {
37+
export function spanToTraceContext(span: Span, includeAllData = false): TraceContext {
3638
const { spanId: span_id, traceId: trace_id } = span.spanContext();
3739
const { data, op, parent_span_id, status, origin } = spanToJSON(span);
3840

39-
return dropUndefinedKeys({
40-
data,
41-
op,
42-
parent_span_id,
43-
span_id,
44-
status,
45-
trace_id,
46-
origin,
47-
});
41+
const reqFields = { parent_span_id, span_id, trace_id };
42+
// These are only included if `includeAllData` is true
43+
const optFields = { data, op, status, origin };
44+
45+
return dropUndefinedKeys(includeAllData ? { ...reqFields, ...optFields } : reqFields);
4846
}
4947

5048
/**

packages/core/test/lib/tracing/sentrySpan.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { timestampInSeconds } from '@sentry/utils';
22
import { SentrySpan } from '../../../src/tracing/sentrySpan';
33
import { SPAN_STATUS_ERROR } from '../../../src/tracing/spanstatus';
4-
import { TRACE_FLAG_NONE, TRACE_FLAG_SAMPLED, spanToJSON, spanToTraceContext } from '../../../src/utils/spanUtils';
4+
import { TRACE_FLAG_NONE, TRACE_FLAG_SAMPLED, spanToJSON } from '../../../src/utils/spanUtils';
55

66
describe('SentrySpan', () => {
77
describe('name', () => {
@@ -33,7 +33,7 @@ describe('SentrySpan', () => {
3333
test('setStatus', () => {
3434
const span = new SentrySpan({});
3535
span.setStatus({ code: SPAN_STATUS_ERROR, message: 'permission_denied' });
36-
expect(spanToTraceContext(span).status).toBe('permission_denied');
36+
expect(spanToJSON(span).status).toBe('permission_denied');
3737
});
3838
});
3939

0 commit comments

Comments
 (0)