Skip to content

Commit 77c3df9

Browse files
authored
ref: Better handling of fingerprints (#1734)
1 parent 8d59db0 commit 77c3df9

File tree

5 files changed

+41
-6
lines changed

5 files changed

+41
-6
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
## Unreleased
44

55
- [core] feat: Filter internal Sentry errors from transports/sdk
6+
- [core] ref: Better fingerprint handling
67

78
## 4.3.0
89

packages/browser/src/backend.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,6 @@ export class BrowserBackend extends BaseBackend<BrowserOptions> {
112112
): Promise<SentryEvent> {
113113
const event: SentryEvent = {
114114
event_id: hint && hint.event_id,
115-
fingerprint: [message],
116115
level,
117116
message,
118117
};

packages/hub/src/scope.ts

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,32 @@ export class Scope {
172172
this.notifyScopeListeners();
173173
}
174174

175+
/**
176+
* Applies fingerprint from the scope to the event if there's one,
177+
* uses message if there's one instead or get rid of empty fingerprint
178+
*/
179+
private applyFingerprint(event: SentryEvent): void {
180+
// Make sure it's an array first and we actually have something in place
181+
event.fingerprint = event.fingerprint
182+
? Array.isArray(event.fingerprint)
183+
? event.fingerprint
184+
: [event.fingerprint]
185+
: [];
186+
187+
// If we have something on the scope, then merge it with event
188+
if (this.fingerprint) {
189+
event.fingerprint = event.fingerprint.concat(this.fingerprint);
190+
} else if (event.message) {
191+
// If not, but we have message, use it instead
192+
event.fingerprint = event.fingerprint.concat(event.message);
193+
}
194+
195+
// If we have no data at all, remove empty array default
196+
if (event.fingerprint && !event.fingerprint.length) {
197+
delete event.fingerprint;
198+
}
199+
}
200+
175201
/**
176202
* Applies the current context and fingerprint to the event.
177203
* Note that breadcrumbs will be added by the client.
@@ -194,12 +220,12 @@ export class Scope {
194220
if (this.user && Object.keys(this.user).length) {
195221
event.user = { ...this.user, ...event.user };
196222
}
197-
if (this.fingerprint && event.fingerprint === undefined) {
198-
event.fingerprint = this.fingerprint;
199-
}
200223
if (this.level) {
201224
event.level = this.level;
202225
}
226+
227+
this.applyFingerprint(event);
228+
203229
const hasNoBreadcrumbs = !event.breadcrumbs || event.breadcrumbs.length === 0;
204230
if (hasNoBreadcrumbs && this.breadcrumbs.length > 0) {
205231
event.breadcrumbs =

packages/hub/test/scope.test.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,10 +122,20 @@ describe('Scope', () => {
122122
expect(event.extra).toEqual({ a: 2, b: 3 });
123123
expect(event.tags).toEqual({ a: 'b', b: 'c' });
124124
expect(event.user).toEqual({ id: '3' });
125-
expect(event.fingerprint).toEqual(['efgh']);
125+
expect(event.fingerprint).toEqual(['efgh', 'abcd']);
126126
expect(event.breadcrumbs).toEqual([{ message: 'test2' }]);
127127
});
128128

129+
test('applyToEvent message fingerprint', async () => {
130+
const scope = new Scope();
131+
const event: SentryEvent = {
132+
fingerprint: ['bar'],
133+
message: 'foo',
134+
};
135+
await scope.applyToEvent(event);
136+
expect(event.fingerprint).toEqual(['bar', 'foo']);
137+
});
138+
129139
test('applyToEvent scope level should be stronger', async () => {
130140
const scope = new Scope();
131141
scope.setLevel(Severity.Warning);

packages/node/src/backend.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,6 @@ export class NodeBackend extends BaseBackend<NodeOptions> {
6868
): Promise<SentryEvent> {
6969
const event: SentryEvent = {
7070
event_id: hint && hint.event_id,
71-
fingerprint: [message],
7271
level,
7372
message,
7473
};

0 commit comments

Comments
 (0)