From b25388b29e9502a8408f9cadd663c86f7a5b6709 Mon Sep 17 00:00:00 2001 From: Tim Fish Date: Tue, 19 Nov 2024 10:20:15 +0100 Subject: [PATCH 1/4] feat(node): Add `disableAnrDetectionForCallback` function --- packages/bun/src/index.ts | 1 + packages/google-cloud-serverless/src/index.ts | 1 + packages/node/src/index.ts | 2 +- packages/node/src/integrations/anr/index.ts | 35 ++++++++++++++++++- packages/remix/src/index.server.ts | 1 + packages/solidstart/src/server/index.ts | 1 + packages/sveltekit/src/server/index.ts | 1 + 7 files changed, 40 insertions(+), 2 deletions(-) diff --git a/packages/bun/src/index.ts b/packages/bun/src/index.ts index d8c97d6e8246..fdeac139c2ac 100644 --- a/packages/bun/src/index.ts +++ b/packages/bun/src/index.ts @@ -69,6 +69,7 @@ export { extractRequestData, createGetModuleFromFilename, anrIntegration, + disableAnrDetectionForCallback, consoleIntegration, httpIntegration, nativeNodeFetchIntegration, diff --git a/packages/google-cloud-serverless/src/index.ts b/packages/google-cloud-serverless/src/index.ts index 53cf4c026868..280b02481cb6 100644 --- a/packages/google-cloud-serverless/src/index.ts +++ b/packages/google-cloud-serverless/src/index.ts @@ -47,6 +47,7 @@ export { extractRequestData, createGetModuleFromFilename, anrIntegration, + disableAnrDetectionForCallback, consoleIntegration, httpIntegration, nativeNodeFetchIntegration, diff --git a/packages/node/src/index.ts b/packages/node/src/index.ts index cc81dce37577..df4886612fc1 100644 --- a/packages/node/src/index.ts +++ b/packages/node/src/index.ts @@ -9,7 +9,7 @@ export { localVariablesIntegration } from './integrations/local-variables'; export { modulesIntegration } from './integrations/modules'; export { onUncaughtExceptionIntegration } from './integrations/onuncaughtexception'; export { onUnhandledRejectionIntegration } from './integrations/onunhandledrejection'; -export { anrIntegration } from './integrations/anr'; +export { anrIntegration, disableAnrDetectionForCallback } from './integrations/anr'; export { expressIntegration, expressErrorHandler, setupExpressErrorHandler } from './integrations/tracing/express'; export { fastifyIntegration, setupFastifyErrorHandler } from './integrations/tracing/fastify'; diff --git a/packages/node/src/integrations/anr/index.ts b/packages/node/src/integrations/anr/index.ts index c5f5b28e0888..be4b67c387e5 100644 --- a/packages/node/src/integrations/anr/index.ts +++ b/packages/node/src/integrations/anr/index.ts @@ -1,12 +1,22 @@ import * as diagnosticsChannel from 'node:diagnostics_channel'; +import { types } from 'node:util'; import { Worker } from 'node:worker_threads'; -import { defineIntegration, getCurrentScope, getGlobalScope, getIsolationScope, mergeScopeData } from '@sentry/core'; +import { + defineIntegration, + getClient, + getCurrentScope, + getGlobalScope, + getIsolationScope, + mergeScopeData, +} from '@sentry/core'; import type { Contexts, Event, EventHint, Integration, IntegrationFn, ScopeData } from '@sentry/types'; import { GLOBAL_OBJ, getFilenameToDebugIdMap, logger } from '@sentry/utils'; import { NODE_VERSION } from '../../nodeVersion'; import type { NodeClient } from '../../sdk/client'; import type { AnrIntegrationOptions, WorkerStartData } from './common'; +const { isPromise } = types; + // This string is a placeholder that gets overwritten with the worker code. export const base64WorkerScript = '###AnrWorkerScript###'; @@ -219,3 +229,26 @@ async function _startWorker( clearInterval(timer); }; } + +export function disableAnrDetectionForCallback(callback: () => T): T; +export function disableAnrDetectionForCallback(callback: () => Promise): Promise; +/** + * Disables ANR detection for the duration of the callback + */ +export function disableAnrDetectionForCallback(callback: () => T | Promise): T | Promise { + const integration = getClient()?.getIntegrationByName(INTEGRATION_NAME) as AnrInternal | undefined; + + if (!integration) { + return callback(); + } + + integration.stopWorker(); + + const result = callback(); + if (isPromise(result)) { + return result.finally(() => integration.startWorker()); + } + + integration.startWorker(); + return result; +} diff --git a/packages/remix/src/index.server.ts b/packages/remix/src/index.server.ts index 1291a3fb8767..820f851e3ad1 100644 --- a/packages/remix/src/index.server.ts +++ b/packages/remix/src/index.server.ts @@ -20,6 +20,7 @@ export { addRequestDataToEvent, amqplibIntegration, anrIntegration, + disableAnrDetectionForCallback, captureCheckIn, captureConsoleIntegration, captureEvent, diff --git a/packages/solidstart/src/server/index.ts b/packages/solidstart/src/server/index.ts index 54e0e8cf68ab..72ed8b815eec 100644 --- a/packages/solidstart/src/server/index.ts +++ b/packages/solidstart/src/server/index.ts @@ -11,6 +11,7 @@ export { addRequestDataToEvent, amqplibIntegration, anrIntegration, + disableAnrDetectionForCallback, captureCheckIn, captureConsoleIntegration, captureEvent, diff --git a/packages/sveltekit/src/server/index.ts b/packages/sveltekit/src/server/index.ts index 05f105c252a8..269182ea6b75 100644 --- a/packages/sveltekit/src/server/index.ts +++ b/packages/sveltekit/src/server/index.ts @@ -11,6 +11,7 @@ export { addRequestDataToEvent, amqplibIntegration, anrIntegration, + disableAnrDetectionForCallback, captureCheckIn, captureConsoleIntegration, captureEvent, From e3d3f29b27e8c4d338e8bcb6c0c9960d78544f47 Mon Sep 17 00:00:00 2001 From: Tim Fish Date: Tue, 19 Nov 2024 10:46:56 +0100 Subject: [PATCH 2/4] Missing exports --- packages/astro/src/index.server.ts | 1 + packages/aws-serverless/src/index.ts | 1 + 2 files changed, 2 insertions(+) diff --git a/packages/astro/src/index.server.ts b/packages/astro/src/index.server.ts index 853623abbc8a..b8da6f6f4f5b 100644 --- a/packages/astro/src/index.server.ts +++ b/packages/astro/src/index.server.ts @@ -15,6 +15,7 @@ export { addRequestDataToEvent, amqplibIntegration, anrIntegration, + disableAnrDetectionForCallback, captureCheckIn, captureConsoleIntegration, captureEvent, diff --git a/packages/aws-serverless/src/index.ts b/packages/aws-serverless/src/index.ts index 8341b01719c1..39dc757e8b7f 100644 --- a/packages/aws-serverless/src/index.ts +++ b/packages/aws-serverless/src/index.ts @@ -47,6 +47,7 @@ export { extractRequestData, createGetModuleFromFilename, anrIntegration, + disableAnrDetectionForCallback, consoleIntegration, httpIntegration, nativeNodeFetchIntegration, From 02e51d5067a9390f951981856922303f9b01621b Mon Sep 17 00:00:00 2001 From: Tim Fish Date: Tue, 26 Nov 2024 09:59:58 -0800 Subject: [PATCH 3/4] Fix linting --- packages/node/src/integrations/anr/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/node/src/integrations/anr/index.ts b/packages/node/src/integrations/anr/index.ts index bab97677237f..0ce0a770fd50 100644 --- a/packages/node/src/integrations/anr/index.ts +++ b/packages/node/src/integrations/anr/index.ts @@ -2,13 +2,13 @@ import * as diagnosticsChannel from 'node:diagnostics_channel'; import { types } from 'node:util'; import { Worker } from 'node:worker_threads'; import { + GLOBAL_OBJ, defineIntegration, getClient, getCurrentScope, getFilenameToDebugIdMap, getGlobalScope, getIsolationScope, - GLOBAL_OBJ, logger, mergeScopeData, } from '@sentry/core'; From 74c8461b3dc196abfc6ef7b1e4b08b39c1ac4fe3 Mon Sep 17 00:00:00 2001 From: Tim Fish Date: Wed, 27 Nov 2024 09:59:45 -0800 Subject: [PATCH 4/4] Lint --- packages/node/src/integrations/anr/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/node/src/integrations/anr/index.ts b/packages/node/src/integrations/anr/index.ts index 6dbef833234f..efa0452cf942 100644 --- a/packages/node/src/integrations/anr/index.ts +++ b/packages/node/src/integrations/anr/index.ts @@ -1,5 +1,5 @@ -import { Worker } from 'node:worker_threads'; import { types } from 'node:util'; +import { Worker } from 'node:worker_threads'; import { GLOBAL_OBJ, defineIntegration,