Skip to content

Commit 6e4e805

Browse files
authored
feat(core): Add sampling decision to trace envelope header (#8483)
1 parent 9b58519 commit 6e4e805

File tree

10 files changed

+27
-15
lines changed

10 files changed

+27
-15
lines changed

packages/browser-integration-tests/suites/replay/dsc/test.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ sentryTest(
4949
trace_id: expect.any(String),
5050
public_key: 'public',
5151
replay_id: replay.session?.id,
52+
sampled: 'true',
5253
});
5354
},
5455
);
@@ -93,6 +94,7 @@ sentryTest(
9394
sample_rate: '1',
9495
trace_id: expect.any(String),
9596
public_key: 'public',
97+
sampled: 'true',
9698
});
9799
},
98100
);
@@ -152,6 +154,7 @@ sentryTest(
152154
trace_id: expect.any(String),
153155
public_key: 'public',
154156
replay_id: replay.session?.id,
157+
sampled: 'true',
155158
});
156159
},
157160
);
@@ -199,6 +202,7 @@ sentryTest(
199202
sample_rate: '1',
200203
trace_id: expect.any(String),
201204
public_key: 'public',
205+
sampled: 'true',
202206
});
203207
},
204208
);

packages/browser-integration-tests/suites/tracing/envelope-header-transaction-name/test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ sentryTest(
2727
transaction: expect.stringContaining('/index.html'),
2828
trace_id: expect.any(String),
2929
public_key: 'public',
30+
sampled: 'true',
3031
});
3132
},
3233
);

packages/browser-integration-tests/suites/tracing/envelope-header/test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ sentryTest(
3030
sample_rate: '1',
3131
trace_id: expect.any(String),
3232
public_key: 'public',
33+
sampled: 'true',
3334
});
3435
},
3536
);

packages/core/src/tracing/transaction.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -264,11 +264,13 @@ export class Transaction extends SpanClass implements TransactionInterface {
264264
dsc.transaction = this.name;
265265
}
266266

267+
if (this.sampled !== undefined) {
268+
dsc.sampled = String(this.sampled);
269+
}
270+
267271
// Uncomment if we want to make DSC immutable
268272
// this._frozenDynamicSamplingContext = dsc;
269273

270-
client.emit && client.emit('createDsc', dsc);
271-
272274
return dsc;
273275
}
274276

packages/node-integration-tests/suites/express/sentry-trace/baggage-header-out/test.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ test('should attach a `baggage` header to an outgoing request.', async () => {
1414
host: 'somewhere.not.sentry',
1515
baggage:
1616
'sentry-environment=prod,sentry-release=1.0,sentry-user_segment=SegmentA,sentry-public_key=public' +
17-
',sentry-trace_id=86f39e84263a4de99c326acab3bfe3bd,sentry-sample_rate=1,sentry-transaction=GET%20%2Ftest%2Fexpress',
17+
',sentry-trace_id=86f39e84263a4de99c326acab3bfe3bd,sentry-sample_rate=1,sentry-transaction=GET%20%2Ftest%2Fexpress' +
18+
',sentry-sampled=true',
1819
},
1920
});
2021
});

packages/node/test/integrations/http.test.ts

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,8 @@ describe('tracing', () => {
131131
expect(baggageHeader).toEqual(
132132
'sentry-environment=production,sentry-release=1.0.0,' +
133133
'sentry-user_segment=segmentA,sentry-public_key=dogsarebadatkeepingsecrets,' +
134-
'sentry-trace_id=12312012123120121231201212312012,sentry-sample_rate=1,sentry-transaction=dogpark',
134+
'sentry-trace_id=12312012123120121231201212312012,sentry-sample_rate=1,' +
135+
'sentry-transaction=dogpark,sentry-sampled=true',
135136
);
136137
});
137138

@@ -143,10 +144,10 @@ describe('tracing', () => {
143144
const request = http.get({ host: 'http://dogs.are.great/', headers: { baggage: 'dog=great' } });
144145
const baggageHeader = request.getHeader('baggage') as string;
145146

146-
expect(baggageHeader).toEqual([
147-
'dog=great',
148-
'sentry-environment=production,sentry-release=1.0.0,sentry-user_segment=segmentA,sentry-public_key=dogsarebadatkeepingsecrets,sentry-trace_id=12312012123120121231201212312012,sentry-sample_rate=1,sentry-transaction=dogpark',
149-
]);
147+
expect(baggageHeader[0]).toEqual('dog=great');
148+
expect(baggageHeader[1]).toEqual(
149+
'sentry-environment=production,sentry-release=1.0.0,sentry-user_segment=segmentA,sentry-public_key=dogsarebadatkeepingsecrets,sentry-trace_id=12312012123120121231201212312012,sentry-sample_rate=1,sentry-transaction=dogpark,sentry-sampled=true',
150+
);
150151
});
151152

152153
it('adds the transaction name to the the baggage header if a valid transaction source is set', async () => {
@@ -159,7 +160,7 @@ describe('tracing', () => {
159160

160161
expect(baggageHeader).toEqual([
161162
'dog=great',
162-
'sentry-environment=production,sentry-release=1.0.0,sentry-user_segment=segmentA,sentry-public_key=dogsarebadatkeepingsecrets,sentry-trace_id=12312012123120121231201212312012,sentry-sample_rate=1,sentry-transaction=dogpark',
163+
'sentry-environment=production,sentry-release=1.0.0,sentry-user_segment=segmentA,sentry-public_key=dogsarebadatkeepingsecrets,sentry-trace_id=12312012123120121231201212312012,sentry-sample_rate=1,sentry-transaction=dogpark,sentry-sampled=true',
163164
]);
164165
});
165166

@@ -173,7 +174,7 @@ describe('tracing', () => {
173174

174175
expect(baggageHeader).toEqual([
175176
'dog=great',
176-
'sentry-environment=production,sentry-release=1.0.0,sentry-user_segment=segmentA,sentry-public_key=dogsarebadatkeepingsecrets,sentry-trace_id=12312012123120121231201212312012,sentry-sample_rate=1',
177+
'sentry-environment=production,sentry-release=1.0.0,sentry-user_segment=segmentA,sentry-public_key=dogsarebadatkeepingsecrets,sentry-trace_id=12312012123120121231201212312012,sentry-sample_rate=1,sentry-sampled=true',
177178
]);
178179
});
179180

@@ -191,7 +192,7 @@ describe('tracing', () => {
191192
expect(parts[2]).toEqual('1');
192193

193194
expect(baggageHeader).toEqual(
194-
'sentry-environment=production,sentry-release=1.0.0,sentry-user_segment=segmentA,sentry-public_key=dogsarebadatkeepingsecrets,sentry-trace_id=12312012123120121231201212312012,sentry-sample_rate=1',
195+
'sentry-environment=production,sentry-release=1.0.0,sentry-user_segment=segmentA,sentry-public_key=dogsarebadatkeepingsecrets,sentry-trace_id=12312012123120121231201212312012,sentry-sample_rate=1,sentry-sampled=true',
195196
);
196197
});
197198

packages/node/test/integrations/undici.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ conditionalTest({ min: 16 })('Undici integration', () => {
223223

224224
expect(requestHeaders['sentry-trace'].includes(propagationContext.traceId)).toBe(true);
225225
expect(requestHeaders['baggage']).toEqual(
226-
`sentry-environment=production,sentry-public_key=0,sentry-trace_id=${propagationContext.traceId}`,
226+
`sentry-environment=production,sentry-public_key=0,sentry-trace_id=${propagationContext.traceId},sentry-sample_rate=1,sentry-transaction=test-transaction,sentry-sampled=true`,
227227
);
228228
});
229229

packages/opentelemetry-node/test/propagator.test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ describe('SentryPropagator', () => {
8585
spanId: '6e0c63257de34c92',
8686
sampled: true,
8787
},
88-
'sentry-environment=production,sentry-release=1.0.0,sentry-public_key=abc,sentry-trace_id=d4cda95b652f4a1592b449d5929fda1b,sentry-transaction=sampled-transaction',
88+
'sentry-environment=production,sentry-release=1.0.0,sentry-public_key=abc,sentry-trace_id=d4cda95b652f4a1592b449d5929fda1b,sentry-transaction=sampled-transaction,sentry-sampled=true',
8989
'd4cda95b652f4a1592b449d5929fda1b-6e0c63257de34c92-1',
9090
],
9191
[
@@ -101,7 +101,7 @@ describe('SentryPropagator', () => {
101101
spanId: '6e0c63257de34c92',
102102
sampled: false,
103103
},
104-
'sentry-environment=production,sentry-release=1.0.0,sentry-public_key=abc,sentry-trace_id=d4cda95b652f4a1592b449d5929fda1b,sentry-transaction=not-sampled-transaction',
104+
'sentry-environment=production,sentry-release=1.0.0,sentry-public_key=abc,sentry-trace_id=d4cda95b652f4a1592b449d5929fda1b,sentry-transaction=not-sampled-transaction,sentry-sampled=false',
105105
'd4cda95b652f4a1592b449d5929fda1b-6e0c63257de34c92-0',
106106
],
107107
[
@@ -161,7 +161,7 @@ describe('SentryPropagator', () => {
161161
const baggage = propagation.createBaggage({ foo: { value: 'bar' } });
162162
propagator.inject(propagation.setBaggage(context, baggage), carrier, defaultTextMapSetter);
163163
expect(carrier[SENTRY_BAGGAGE_HEADER]).toBe(
164-
'foo=bar,sentry-environment=production,sentry-release=1.0.0,sentry-public_key=abc,sentry-trace_id=d4cda95b652f4a1592b449d5929fda1b,sentry-transaction=sampled-transaction',
164+
'foo=bar,sentry-environment=production,sentry-release=1.0.0,sentry-public_key=abc,sentry-trace_id=d4cda95b652f4a1592b449d5929fda1b,sentry-transaction=sampled-transaction,sentry-sampled=true',
165165
);
166166
});
167167

packages/tracing-internal/test/browser/browsertracing.test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -636,6 +636,7 @@ conditionalTest({ min: 10 })('BrowserTracing', () => {
636636
release: '1.0.0',
637637
environment: 'production',
638638
public_key: 'pubKey',
639+
sampled: 'false',
639640
trace_id: expect.not.stringMatching('12312012123120121231201212312012'),
640641
});
641642
});

packages/types/src/envelope.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ export type DynamicSamplingContext = {
2020
transaction?: string;
2121
user_segment?: string;
2222
replay_id?: string;
23+
sampled?: string;
2324
};
2425

2526
export type EnvelopeItemType =

0 commit comments

Comments
 (0)