Skip to content

Commit a6c6b2a

Browse files
authored
feat(replay): Move sample rate tags into event context (#6659)
Move sample rate from tags into context as that is the more appropriate location for this type of data. This data is more for us to collect to debug rather than having as a top level field on the replay event.
1 parent 7f50c66 commit a6c6b2a

File tree

7 files changed

+67
-29
lines changed

7 files changed

+67
-29
lines changed

packages/integration-tests/suites/replay/captureReplay/test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ sentryTest('should capture replays', async ({ getLocalTestPath, page }) => {
6767
},
6868
},
6969
platform: 'javascript',
70-
tags: { sessionSampleRate: 1, errorSampleRate: 0 },
70+
contexts: { replay: { session_sample_rate: 1, error_sample_rate: 0 } },
7171
});
7272

7373
expect(replayEvent1).toBeDefined();
@@ -105,6 +105,6 @@ sentryTest('should capture replays', async ({ getLocalTestPath, page }) => {
105105
},
106106
},
107107
platform: 'javascript',
108-
tags: { sessionSampleRate: 1, errorSampleRate: 0 },
108+
contexts: { replay: { session_sample_rate: 1, error_sample_rate: 0 } },
109109
});
110110
});

packages/integration-tests/suites/replay/captureReplayViaBrowser/test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ sentryTest('should capture replays (@sentry/browser export)', async ({ getLocalT
6868
},
6969
},
7070
platform: 'javascript',
71-
tags: { sessionSampleRate: 1, errorSampleRate: 0 },
71+
contexts: { replay: { session_sample_rate: 1, error_sample_rate: 0 } },
7272
});
7373

7474
expect(replayEvent1).toBeDefined();
@@ -106,6 +106,6 @@ sentryTest('should capture replays (@sentry/browser export)', async ({ getLocalT
106106
},
107107
},
108108
platform: 'javascript',
109-
tags: { sessionSampleRate: 1, errorSampleRate: 0 },
109+
contexts: { replay: { session_sample_rate: 1, error_sample_rate: 0 } },
110110
});
111111
});

packages/replay/src/util/sendReplayRequest.ts

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -63,10 +63,13 @@ export async function sendReplayRequest({
6363
return;
6464
}
6565

66-
replayEvent.tags = {
67-
...replayEvent.tags,
68-
sessionSampleRate: options.sessionSampleRate,
69-
errorSampleRate: options.errorSampleRate,
66+
replayEvent.contexts = {
67+
...replayEvent.contexts,
68+
replay: {
69+
...(replayEvent.contexts && replayEvent.contexts.replay),
70+
session_sample_rate: options.sessionSampleRate,
71+
error_sample_rate: options.errorSampleRate,
72+
},
7073
};
7174

7275
/*
@@ -98,10 +101,12 @@ export async function sendReplayRequest({
98101
"version": "7.25.0"
99102
},
100103
"sdkProcessingMetadata": {},
101-
"tags": {
102-
"sessionSampleRate": 1,
103-
"errorSampleRate": 0,
104-
}
104+
"contexts": {
105+
"replay": {
106+
"session_sample_rate": 1,
107+
"error_sample_rate": 0,
108+
},
109+
},
105110
}
106111
*/
107112

packages/replay/test/integration/errorSampleRate.test.ts

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -70,10 +70,12 @@ describe('Integration | errorSampleRate', () => {
7070
recordingPayloadHeader: { segment_id: 0 },
7171
replayEventPayload: expect.objectContaining({
7272
replay_type: 'error',
73-
tags: expect.objectContaining({
74-
errorSampleRate: 1,
75-
sessionSampleRate: 0,
76-
}),
73+
contexts: {
74+
replay: {
75+
error_sample_rate: 1,
76+
session_sample_rate: 0,
77+
},
78+
},
7779
}),
7880
recordingData: JSON.stringify([
7981
{ data: { isCheckout: true }, timestamp: BASE_TIMESTAMP, type: 2 },
@@ -100,10 +102,12 @@ describe('Integration | errorSampleRate', () => {
100102
recordingPayloadHeader: { segment_id: 1 },
101103
replayEventPayload: expect.objectContaining({
102104
replay_type: 'error',
103-
tags: expect.objectContaining({
104-
errorSampleRate: 1,
105-
sessionSampleRate: 0,
106-
}),
105+
contexts: {
106+
replay: {
107+
error_sample_rate: 1,
108+
session_sample_rate: 0,
109+
},
110+
},
107111
}),
108112
recordingData: JSON.stringify([{ data: { isCheckout: true }, timestamp: BASE_TIMESTAMP + 5020, type: 2 }]),
109113
});

packages/replay/test/integration/events.test.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -130,11 +130,13 @@ describe('Integration | events', () => {
130130
expect(replay).toHaveLastSentReplay({
131131
replayEventPayload: expect.objectContaining({
132132
replay_start_timestamp: (BASE_TIMESTAMP - 10000) / 1000,
133+
contexts: {
134+
replay: {
135+
error_sample_rate: 0,
136+
session_sample_rate: 1,
137+
},
138+
},
133139
urls: ['http://localhost/'], // this doesn't truly test if we are capturing the right URL as we don't change URLs, but good enough
134-
tags: expect.objectContaining({
135-
errorSampleRate: 0,
136-
sessionSampleRate: 1,
137-
}),
138140
}),
139141
});
140142
});

packages/replay/test/unit/util/createReplayEnvelope.test.ts

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,13 @@ describe('Unit | util | createReplayEnvelope', () => {
2424
version: '7.25.0',
2525
},
2626
replay_type: 'error',
27-
tags: {
28-
sessionSampleRate: 1,
29-
errorSampleRate: 0,
27+
contexts: {
28+
replay: {
29+
error_sample_rate: 0,
30+
session_sample_rate: 1,
31+
},
3032
},
33+
tags: {},
3134
};
3235

3336
const payloadWithSequence = 'payload';
@@ -54,6 +57,12 @@ describe('Unit | util | createReplayEnvelope', () => {
5457
[
5558
{ type: 'replay_event' },
5659
{
60+
contexts: {
61+
replay: {
62+
error_sample_rate: 0,
63+
session_sample_rate: 1,
64+
},
65+
},
5766
environment: 'production',
5867
error_ids: ['errorId'],
5968
event_id: REPLAY_ID,
@@ -62,7 +71,7 @@ describe('Unit | util | createReplayEnvelope', () => {
6271
replay_type: 'error',
6372
sdk: { integrations: ['BrowserTracing', 'Replay'], name: 'sentry.javascript.unknown', version: '7.25.0' },
6473
segment_id: 3,
65-
tags: { errorSampleRate: 0, sessionSampleRate: 1 },
74+
tags: {},
6675
timestamp: 1670837008.634,
6776
trace_ids: ['traceId'],
6877
type: 'replay_event',
@@ -88,6 +97,12 @@ describe('Unit | util | createReplayEnvelope', () => {
8897
[
8998
{ type: 'replay_event' },
9099
{
100+
contexts: {
101+
replay: {
102+
error_sample_rate: 0,
103+
session_sample_rate: 1,
104+
},
105+
},
91106
environment: 'production',
92107
error_ids: ['errorId'],
93108
event_id: REPLAY_ID,
@@ -96,7 +111,7 @@ describe('Unit | util | createReplayEnvelope', () => {
96111
sdk: { integrations: ['BrowserTracing', 'Replay'], name: 'sentry.javascript.unknown', version: '7.25.0' },
97112
segment_id: 3,
98113
replay_type: 'error',
99-
tags: { errorSampleRate: 0, sessionSampleRate: 1 },
114+
tags: {},
100115
timestamp: 1670837008.634,
101116
trace_ids: ['traceId'],
102117
type: 'replay_event',

packages/replay/test/unit/util/prepareReplayEvent.test.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,12 @@ describe('Unit | util | prepareReplayEvent', () => {
4848
replay_id: replayId,
4949
replay_type: 'session',
5050
segment_id: 3,
51+
contexts: {
52+
replay: {
53+
error_sample_rate: 1.0,
54+
session_sample_rate: 0.1,
55+
},
56+
},
5157
};
5258

5359
const replayEvent = await prepareReplayEvent({ scope, client, replayId, event });
@@ -66,6 +72,12 @@ describe('Unit | util | prepareReplayEvent', () => {
6672
platform: 'javascript',
6773
event_id: 'replay-ID',
6874
environment: 'production',
75+
contexts: {
76+
replay: {
77+
error_sample_rate: 1.0,
78+
session_sample_rate: 0.1,
79+
},
80+
},
6981
sdk: {
7082
name: 'sentry.javascript.testSdk',
7183
version: '1.0.0',

0 commit comments

Comments
 (0)