diff options
author | dan <dan.abramov@gmail.com> | 2023-12-06 16:32:47 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-12-06 16:32:47 +0000 |
commit | 7229cda5a52192266d8e0ee202ae3d3fee7c66a3 (patch) | |
tree | e20fa8773a737e3fd05447ab5890bafb1b3b55a7 /src | |
parent | df55c5fdeb5e67caac13dfdb77e1a80330cdd874 (diff) | |
download | voidsky-7229cda5a52192266d8e0ee202ae3d3fee7c66a3.tar.zst |
Throttle non-critical Sentry messages (#2110)
* Throttle non-critical Sentry messages * Run all timers in tests
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/sentry.ts | 1 | ||||
-rw-r--r-- | src/logger/__tests__/logger.test.ts | 2 | ||||
-rw-r--r-- | src/logger/index.ts | 30 |
3 files changed, 31 insertions, 2 deletions
diff --git a/src/lib/sentry.ts b/src/lib/sentry.ts index 63a21a43c..f564dcd44 100644 --- a/src/lib/sentry.ts +++ b/src/lib/sentry.ts @@ -37,6 +37,7 @@ const dist = `${Platform.OS}.${release}${ }` init({ + autoSessionTracking: false, dsn: 'https://05bc3789bf994b81bd7ce20c86ccd3ae@o4505071687041024.ingest.sentry.io/4505071690514432', debug: false, // If `true`, Sentry will try to print out useful debugging information if something goes wrong with sending the event. Set it to `false` in production enableInExpoDevelopment: true, diff --git a/src/logger/__tests__/logger.test.ts b/src/logger/__tests__/logger.test.ts index f8b588778..12d60abaa 100644 --- a/src/logger/__tests__/logger.test.ts +++ b/src/logger/__tests__/logger.test.ts @@ -179,6 +179,7 @@ describe('general functionality', () => { level: 'debug', // Sentry bug, log becomes debug timestamp: sentryTimestamp, }) + jest.runAllTimers() expect(Sentry.captureMessage).toHaveBeenCalledWith(message, { level: 'log', tags: undefined, @@ -193,6 +194,7 @@ describe('general functionality', () => { level: 'warning', timestamp: sentryTimestamp, }) + jest.runAllTimers() expect(Sentry.captureMessage).toHaveBeenCalledWith(message, { level: 'warning', tags: undefined, diff --git a/src/logger/index.ts b/src/logger/index.ts index f03850767..733d0e4b0 100644 --- a/src/logger/index.ts +++ b/src/logger/index.ts @@ -170,8 +170,8 @@ export const sentryTransport: Transport = ( [LogLevel.Warn]: 'warning', [LogLevel.Error]: 'error', }[level] || 'log') as Sentry.Breadcrumb['level'] - - Sentry.captureMessage(message, { + // Defer non-critical messages so they're sent in a batch + queueMessageForSentry(message, { level: messageLevel, tags, extra: meta, @@ -188,6 +188,32 @@ export const sentryTransport: Transport = ( } } +const queuedMessages: [string, Parameters<typeof Sentry.captureMessage>[1]][] = + [] +let sentrySendTimeout: ReturnType<typeof setTimeout> | null = null +function queueMessageForSentry( + message: string, + captureContext: Parameters<typeof Sentry.captureMessage>[1], +) { + queuedMessages.push([message, captureContext]) + if (!sentrySendTimeout) { + // Throttle sending messages with a leading delay + // so that we can get Sentry out of the critical path. + sentrySendTimeout = setTimeout(() => { + sentrySendTimeout = null + sendQueuedMessages() + }, 7000) + } +} +function sendQueuedMessages() { + while (queuedMessages.length > 0) { + const record = queuedMessages.shift() + if (record) { + Sentry.captureMessage(record[0], record[1]) + } + } +} + /** * Main class. Defaults are provided in the constructor so that subclasses are * technically possible, if we need to go that route in the future. |