Skip to content

Commit 4716e3b

Browse files
committed
fix(core): Don't emit trace data in getTraceData and getTraceMetaTags if SDK is disabled
1 parent de9cf8a commit 4716e3b

File tree

2 files changed

+55
-1
lines changed
  • dev-packages/node-integration-tests/suites/tracing/meta-tags
  • packages/core/src/utils

2 files changed

+55
-1
lines changed

dev-packages/node-integration-tests/suites/tracing/meta-tags/test.ts

+50-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ describe('getTraceMetaTags', () => {
55
cleanupChildProcesses();
66
});
77

8-
test('injects sentry tracing <meta> tags', async () => {
8+
test('injects <meta> tags with trace from incoming headers', async () => {
99
const traceId = 'cd7ee7a6fe3ebe7ab9c3271559bc203c';
1010
const parentSpanId = '100ff0980e7a4ead';
1111

@@ -22,4 +22,53 @@ describe('getTraceMetaTags', () => {
2222
expect(html).toMatch(/<meta name="sentry-trace" content="cd7ee7a6fe3ebe7ab9c3271559bc203c-[a-z0-9]{16}-1"\/>/);
2323
expect(html).toContain('<meta name="baggage" content="sentry-environment=production"/>');
2424
});
25+
26+
test('injects <meta> tags with new trace if no incoming headers', async () => {
27+
const runner = createRunner(__dirname, 'server.js').start();
28+
29+
const response = await runner.makeRequest('get', '/test');
30+
31+
// @ts-ignore - response is defined, types just don't reflect it
32+
const html = response?.response as unknown as string;
33+
34+
const traceId = html.match(/<meta name="sentry-trace" content="([a-z0-9]{32})-[a-z0-9]{16}-1"\/>/)?.[1];
35+
expect(traceId).not.toBeUndefined();
36+
37+
expect(html).toContain('<meta name="baggage"');
38+
expect(html).toContain(`sentry-trace_id=${traceId}`);
39+
});
40+
41+
test('injects <meta> tags with negative sampling decision if tracesSampleRate is 0', async () => {
42+
const runner = createRunner(__dirname, 'server-tracesSampleRate-zero.js').start();
43+
44+
const response = await runner.makeRequest('get', '/test');
45+
46+
// @ts-ignore - response is defined, types just don't reflect it
47+
const html = response?.response as unknown as string;
48+
49+
const traceId = html.match(/<meta name="sentry-trace" content="([a-z0-9]{32})-[a-z0-9]{16}-0"\/>/)?.[1];
50+
expect(traceId).not.toBeUndefined();
51+
52+
expect(html).toContain('<meta name="baggage"');
53+
expect(html).toContain(`sentry-trace_id=${traceId}`);
54+
expect(html).toContain('sentry-sampled=false');
55+
});
56+
57+
test("doesn't inject sentry tracing <meta> tags if SDK is disabled", async () => {
58+
const traceId = 'cd7ee7a6fe3ebe7ab9c3271559bc203c';
59+
const parentSpanId = '100ff0980e7a4ead';
60+
61+
const runner = createRunner(__dirname, 'server-sdk-disabled.js').start();
62+
63+
const response = await runner.makeRequest('get', '/test', {
64+
'sentry-trace': `${traceId}-${parentSpanId}-1`,
65+
baggage: 'sentry-environment=production',
66+
});
67+
68+
// @ts-ignore - response is defined, types just don't reflect it
69+
const html = response?.response as unknown as string;
70+
71+
expect(html).not.toContain('"sentry-trace"');
72+
expect(html).not.toContain('"baggage"');
73+
});
2574
});

packages/core/src/utils/traceData.ts

+5
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
import { getAsyncContextStrategy } from '../asyncContext';
99
import { getMainCarrier } from '../carrier';
1010
import { getClient, getCurrentScope } from '../currentScopes';
11+
import { isEnabled } from '../exports';
1112
import { getDynamicSamplingContextFromClient, getDynamicSamplingContextFromSpan } from '../tracing';
1213
import { getActiveSpan, getRootSpan, spanToTraceHeader } from './spanUtils';
1314

@@ -23,6 +24,10 @@ import { getActiveSpan, getRootSpan, spanToTraceHeader } from './spanUtils';
2324
* or meta tag name.
2425
*/
2526
export function getTraceData(): SerializedTraceData {
27+
if (!isEnabled()) {
28+
return {};
29+
}
30+
2631
const carrier = getMainCarrier();
2732
const acs = getAsyncContextStrategy(carrier);
2833
if (acs.getTraceData) {

0 commit comments

Comments
 (0)