perf(core): Detect event loop blocking (#17805)

This commit is contained in:
Iván Ovejero
2025-07-30 11:53:02 +02:00
committed by GitHub
parent 80513ae66b
commit b8b8507ad6
3 changed files with 54 additions and 24 deletions

View File

@@ -47,6 +47,7 @@
"@n8n/decorators": "workspace:*", "@n8n/decorators": "workspace:*",
"@n8n/di": "workspace:*", "@n8n/di": "workspace:*",
"@sentry/node": "catalog:", "@sentry/node": "catalog:",
"@sentry/node-native": "^9.42.1",
"axios": "catalog:", "axios": "catalog:",
"callsites": "catalog:", "callsites": "catalog:",
"chardet": "2.0.0", "chardet": "2.0.0",

View File

@@ -4,6 +4,7 @@ import { Service } from '@n8n/di';
import type { ReportingOptions } from '@n8n/errors'; import type { ReportingOptions } from '@n8n/errors';
import type { ErrorEvent, EventHint } from '@sentry/core'; import type { ErrorEvent, EventHint } from '@sentry/core';
import type { NodeOptions } from '@sentry/node'; import type { NodeOptions } from '@sentry/node';
import { eventLoopBlockIntegration } from '@sentry/node-native';
import { AxiosError } from 'axios'; import { AxiosError } from 'axios';
import { ApplicationError, ExecutionCancelledError, BaseError } from 'n8n-workflow'; import { ApplicationError, ExecutionCancelledError, BaseError } from 'n8n-workflow';
import { createHash } from 'node:crypto'; import { createHash } from 'node:crypto';
@@ -146,6 +147,7 @@ export class ErrorReporter {
url: true, url: true,
}, },
}), }),
eventLoopBlockIntegration(),
], ],
}); });

75
pnpm-lock.yaml generated
View File

@@ -922,7 +922,7 @@ importers:
version: 4.3.0 version: 4.3.0
'@getzep/zep-cloud': '@getzep/zep-cloud':
specifier: 1.0.12 specifier: 1.0.12
version: 1.0.12(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(encoding@0.1.13)(langchain@0.3.29(e83255224da9386305dfb90eaf104268)) version: 1.0.12(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(encoding@0.1.13)(langchain@0.3.29(685a0af47c92c1c99f5d7c1501acb3dd))
'@getzep/zep-js': '@getzep/zep-js':
specifier: 0.9.0 specifier: 0.9.0
version: 0.9.0 version: 0.9.0
@@ -949,7 +949,7 @@ importers:
version: 0.3.4(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(encoding@0.1.13) version: 0.3.4(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(encoding@0.1.13)
'@langchain/community': '@langchain/community':
specifier: 'catalog:' specifier: 'catalog:'
version: 0.3.47(dc9073baf40e018f46d70486a38ca362) version: 0.3.47(d020f0fdc951e6780c547ab03e43240e)
'@langchain/core': '@langchain/core':
specifier: 'catalog:' specifier: 'catalog:'
version: 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) version: 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67))
@@ -1066,7 +1066,7 @@ importers:
version: 23.0.1 version: 23.0.1
langchain: langchain:
specifier: 0.3.29 specifier: 0.3.29
version: 0.3.29(e83255224da9386305dfb90eaf104268) version: 0.3.29(685a0af47c92c1c99f5d7c1501acb3dd)
lodash: lodash:
specifier: 'catalog:' specifier: 'catalog:'
version: 4.17.21 version: 4.17.21
@@ -1730,6 +1730,9 @@ importers:
'@sentry/node': '@sentry/node':
specifier: 'catalog:' specifier: 'catalog:'
version: 9.42.1 version: 9.42.1
'@sentry/node-native':
specifier: ^9.42.1
version: 9.42.1
axios: axios:
specifier: 'catalog:' specifier: 'catalog:'
version: 1.8.3 version: 1.8.3
@@ -6314,6 +6317,10 @@ packages:
resolution: {integrity: sha512-ocyN85ndnWRHMtS6kJpYbQiovvXT09UJLIzZfsyj/cIl/kBYaljDVoPHhSWMaMVUWQrP/Ut2Zuse9wnowDvXWg==} resolution: {integrity: sha512-ocyN85ndnWRHMtS6kJpYbQiovvXT09UJLIzZfsyj/cIl/kBYaljDVoPHhSWMaMVUWQrP/Ut2Zuse9wnowDvXWg==}
engines: {node: '>=18'} engines: {node: '>=18'}
'@sentry-internal/node-native-stacktrace@0.2.2':
resolution: {integrity: sha512-ZRS+a1Ik+w6awjp9na5vHBqLNkIxysfGDswLVAkjtVdBUxtfsEVI8OA6r8PijJC5Gm1oAJJap2e9H7TSiCUQIQ==}
engines: {node: '>=18'}
'@sentry-internal/replay-canvas@9.42.1': '@sentry-internal/replay-canvas@9.42.1':
resolution: {integrity: sha512-z2Pm7vl5SaK1k/MhYV/CRkDYT32Y6q/CLlV3toKphAK1gZFmJ8FGjYE6DU2Zju2upb9ulgyoU8bLU5DLLZCsZA==} resolution: {integrity: sha512-z2Pm7vl5SaK1k/MhYV/CRkDYT32Y6q/CLlV3toKphAK1gZFmJ8FGjYE6DU2Zju2upb9ulgyoU8bLU5DLLZCsZA==}
engines: {node: '>=18'} engines: {node: '>=18'}
@@ -6342,6 +6349,10 @@ packages:
'@opentelemetry/sdk-trace-base': ^1.30.1 || ^2.0.0 '@opentelemetry/sdk-trace-base': ^1.30.1 || ^2.0.0
'@opentelemetry/semantic-conventions': ^1.34.0 '@opentelemetry/semantic-conventions': ^1.34.0
'@sentry/node-native@9.42.1':
resolution: {integrity: sha512-K64I5I5tqqLeH0CFJitoVP+mPOA558dxvC9Vm6x79fl/W8mgFCGiRROjdpeF0aUWghRGAJUbNREFbI3VrIlUOg==}
engines: {node: '>=18'}
'@sentry/node@9.42.1': '@sentry/node@9.42.1':
resolution: {integrity: sha512-6alU59CUp3NzRWt0zaHl3A1Rv9PeABhtj8cD9fdI5QYj5oFQnxbERY/Y/V9R+pNx3ejwCQRbd+SDApfYeQgejg==} resolution: {integrity: sha512-6alU59CUp3NzRWt0zaHl3A1Rv9PeABhtj8cD9fdI5QYj5oFQnxbERY/Y/V9R+pNx3ejwCQRbd+SDApfYeQgejg==}
engines: {node: '>=18'} engines: {node: '>=18'}
@@ -12768,6 +12779,10 @@ packages:
resolution: {integrity: sha512-p7eGEiQil0YUV3ItH4/tBb781L5impVmmx2E9FRKF7d18XXzp4PGT2tdYMFY6wQqgxD0IwNZOiSJ0/K0fSi/OA==} resolution: {integrity: sha512-p7eGEiQil0YUV3ItH4/tBb781L5impVmmx2E9FRKF7d18XXzp4PGT2tdYMFY6wQqgxD0IwNZOiSJ0/K0fSi/OA==}
engines: {node: '>=10'} engines: {node: '>=10'}
node-abi@3.75.0:
resolution: {integrity: sha512-OhYaY5sDsIka7H7AtijtI9jwGYLyl29eQn/W623DiN/MIv5sUqc4g7BIDThX+gb7di9f6xK02nkp8sdfFWZLTg==}
engines: {node: '>=10'}
node-abort-controller@3.1.1: node-abort-controller@3.1.1:
resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==} resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==}
@@ -18375,7 +18390,7 @@ snapshots:
'@currents/commit-info': 1.0.1-beta.0 '@currents/commit-info': 1.0.1-beta.0
async-retry: 1.3.3 async-retry: 1.3.3
axios: 1.10.0(debug@4.4.1) axios: 1.10.0(debug@4.4.1)
axios-retry: 4.5.0(axios@1.10.0(debug@4.4.1)) axios-retry: 4.5.0(axios@1.10.0)
c12: 1.11.2(magicast@0.3.5) c12: 1.11.2(magicast@0.3.5)
chalk: 4.1.2 chalk: 4.1.2
commander: 12.1.0 commander: 12.1.0
@@ -18678,7 +18693,7 @@ snapshots:
'@gar/promisify@1.1.3': '@gar/promisify@1.1.3':
optional: true optional: true
'@getzep/zep-cloud@1.0.12(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(encoding@0.1.13)(langchain@0.3.29(e83255224da9386305dfb90eaf104268))': '@getzep/zep-cloud@1.0.12(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(encoding@0.1.13)(langchain@0.3.29(685a0af47c92c1c99f5d7c1501acb3dd))':
dependencies: dependencies:
form-data: 4.0.4 form-data: 4.0.4
node-fetch: 2.7.0(encoding@0.1.13) node-fetch: 2.7.0(encoding@0.1.13)
@@ -18687,7 +18702,7 @@ snapshots:
zod: 3.25.67 zod: 3.25.67
optionalDependencies: optionalDependencies:
'@langchain/core': 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) '@langchain/core': 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67))
langchain: 0.3.29(e83255224da9386305dfb90eaf104268) langchain: 0.3.29(685a0af47c92c1c99f5d7c1501acb3dd)
transitivePeerDependencies: transitivePeerDependencies:
- encoding - encoding
@@ -19241,7 +19256,7 @@ snapshots:
- aws-crt - aws-crt
- encoding - encoding
'@langchain/community@0.3.47(dc9073baf40e018f46d70486a38ca362)': '@langchain/community@0.3.47(d020f0fdc951e6780c547ab03e43240e)':
dependencies: dependencies:
'@browserbasehq/stagehand': 1.9.0(@playwright/test@1.53.0)(deepmerge@4.3.1)(dotenv@16.5.0)(encoding@0.1.13)(openai@5.8.1(ws@8.18.2)(zod@3.25.67))(zod@3.25.67) '@browserbasehq/stagehand': 1.9.0(@playwright/test@1.53.0)(deepmerge@4.3.1)(dotenv@16.5.0)(encoding@0.1.13)(openai@5.8.1(ws@8.18.2)(zod@3.25.67))(zod@3.25.67)
'@ibm-cloud/watsonx-ai': 1.1.2 '@ibm-cloud/watsonx-ai': 1.1.2
@@ -19253,7 +19268,7 @@ snapshots:
flat: 5.0.2 flat: 5.0.2
ibm-cloud-sdk-core: 5.3.2 ibm-cloud-sdk-core: 5.3.2
js-yaml: 4.1.0 js-yaml: 4.1.0
langchain: 0.3.29(e83255224da9386305dfb90eaf104268) langchain: 0.3.29(685a0af47c92c1c99f5d7c1501acb3dd)
langsmith: 0.3.45(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) langsmith: 0.3.45(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67))
openai: 5.8.1(ws@8.18.2)(zod@3.25.67) openai: 5.8.1(ws@8.18.2)(zod@3.25.67)
uuid: 10.0.0 uuid: 10.0.0
@@ -19267,7 +19282,7 @@ snapshots:
'@aws-sdk/credential-provider-node': 3.808.0 '@aws-sdk/credential-provider-node': 3.808.0
'@azure/storage-blob': 12.26.0 '@azure/storage-blob': 12.26.0
'@browserbasehq/sdk': 2.6.0(encoding@0.1.13) '@browserbasehq/sdk': 2.6.0(encoding@0.1.13)
'@getzep/zep-cloud': 1.0.12(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(encoding@0.1.13)(langchain@0.3.29(e83255224da9386305dfb90eaf104268)) '@getzep/zep-cloud': 1.0.12(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(encoding@0.1.13)(langchain@0.3.29(685a0af47c92c1c99f5d7c1501acb3dd))
'@getzep/zep-js': 0.9.0 '@getzep/zep-js': 0.9.0
'@google-ai/generativelanguage': 2.6.0(encoding@0.1.13) '@google-ai/generativelanguage': 2.6.0(encoding@0.1.13)
'@google-cloud/storage': 7.12.1(encoding@0.1.13) '@google-cloud/storage': 7.12.1(encoding@0.1.13)
@@ -20482,6 +20497,11 @@ snapshots:
dependencies: dependencies:
'@sentry/core': 9.42.1 '@sentry/core': 9.42.1
'@sentry-internal/node-native-stacktrace@0.2.2':
dependencies:
detect-libc: 2.0.4
node-abi: 3.75.0
'@sentry-internal/replay-canvas@9.42.1': '@sentry-internal/replay-canvas@9.42.1':
dependencies: dependencies:
'@sentry-internal/replay': 9.42.1 '@sentry-internal/replay': 9.42.1
@@ -20515,6 +20535,14 @@ snapshots:
'@sentry/opentelemetry': 9.42.1(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.36.0) '@sentry/opentelemetry': 9.42.1(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.36.0)
import-in-the-middle: 1.14.2 import-in-the-middle: 1.14.2
'@sentry/node-native@9.42.1':
dependencies:
'@sentry-internal/node-native-stacktrace': 0.2.2
'@sentry/core': 9.42.1
'@sentry/node': 9.42.1
transitivePeerDependencies:
- supports-color
'@sentry/node@9.42.1': '@sentry/node@9.42.1':
dependencies: dependencies:
'@opentelemetry/api': 1.9.0 '@opentelemetry/api': 1.9.0
@@ -22968,11 +22996,6 @@ snapshots:
axe-core@4.7.2: {} axe-core@4.7.2: {}
axios-retry@4.5.0(axios@1.10.0(debug@4.4.1)):
dependencies:
axios: 1.10.0(debug@4.4.1)
is-retry-allowed: 2.2.0
axios-retry@4.5.0(axios@1.10.0): axios-retry@4.5.0(axios@1.10.0):
dependencies: dependencies:
axios: 1.10.0 axios: 1.10.0
@@ -25016,7 +25039,7 @@ snapshots:
eslint-import-resolver-node@0.3.9: eslint-import-resolver-node@0.3.9:
dependencies: dependencies:
debug: 3.2.7(supports-color@5.5.0) debug: 3.2.7(supports-color@8.1.1)
is-core-module: 2.16.1 is-core-module: 2.16.1
resolve: 1.22.10 resolve: 1.22.10
transitivePeerDependencies: transitivePeerDependencies:
@@ -25040,7 +25063,7 @@ snapshots:
eslint-module-utils@2.12.1(@typescript-eslint/parser@8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@4.4.3)(eslint@9.29.0(jiti@1.21.7)): eslint-module-utils@2.12.1(@typescript-eslint/parser@8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@4.4.3)(eslint@9.29.0(jiti@1.21.7)):
dependencies: dependencies:
debug: 3.2.7(supports-color@5.5.0) debug: 3.2.7(supports-color@8.1.1)
optionalDependencies: optionalDependencies:
'@typescript-eslint/parser': 8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3) '@typescript-eslint/parser': 8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)
eslint: 9.29.0(jiti@1.21.7) eslint: 9.29.0(jiti@1.21.7)
@@ -25079,7 +25102,7 @@ snapshots:
array.prototype.findlastindex: 1.2.6 array.prototype.findlastindex: 1.2.6
array.prototype.flat: 1.3.3 array.prototype.flat: 1.3.3
array.prototype.flatmap: 1.3.3 array.prototype.flatmap: 1.3.3
debug: 3.2.7(supports-color@5.5.0) debug: 3.2.7(supports-color@8.1.1)
doctrine: 2.1.0 doctrine: 2.1.0
eslint: 9.29.0(jiti@1.21.7) eslint: 9.29.0(jiti@1.21.7)
eslint-import-resolver-node: 0.3.9 eslint-import-resolver-node: 0.3.9
@@ -26016,7 +26039,7 @@ snapshots:
array-parallel: 0.1.3 array-parallel: 0.1.3
array-series: 0.1.5 array-series: 0.1.5
cross-spawn: 7.0.6 cross-spawn: 7.0.6
debug: 3.2.7(supports-color@5.5.0) debug: 3.2.7(supports-color@8.1.1)
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@@ -26358,7 +26381,7 @@ snapshots:
'@types/debug': 4.1.12 '@types/debug': 4.1.12
'@types/node': 20.19.1 '@types/node': 20.19.1
'@types/tough-cookie': 4.0.5 '@types/tough-cookie': 4.0.5
axios: 1.10.0(debug@4.4.1) axios: 1.10.0
camelcase: 6.3.0 camelcase: 6.3.0
debug: 4.4.1(supports-color@8.1.1) debug: 4.4.1(supports-color@8.1.1)
dotenv: 16.5.0 dotenv: 16.5.0
@@ -26368,7 +26391,7 @@ snapshots:
isstream: 0.1.2 isstream: 0.1.2
jsonwebtoken: 9.0.2 jsonwebtoken: 9.0.2
mime-types: 2.1.35 mime-types: 2.1.35
retry-axios: 2.6.0(axios@1.10.0) retry-axios: 2.6.0(axios@1.10.0(debug@4.4.1))
tough-cookie: 4.1.4 tough-cookie: 4.1.4
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@@ -27582,7 +27605,7 @@ snapshots:
kuler@2.0.0: {} kuler@2.0.0: {}
langchain@0.3.29(e83255224da9386305dfb90eaf104268): langchain@0.3.29(685a0af47c92c1c99f5d7c1501acb3dd):
dependencies: dependencies:
'@langchain/core': 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)) '@langchain/core': 0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67))
'@langchain/openai': 0.5.16(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(ws@8.18.2) '@langchain/openai': 0.5.16(@langchain/core@0.3.61(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(ws@8.18.2)
@@ -28757,6 +28780,10 @@ snapshots:
dependencies: dependencies:
semver: 7.7.2 semver: 7.7.2
node-abi@3.75.0:
dependencies:
semver: 7.7.2
node-abort-controller@3.1.1: {} node-abort-controller@3.1.1: {}
node-addon-api@7.1.0: {} node-addon-api@7.1.0: {}
@@ -29349,7 +29376,7 @@ snapshots:
pdf-parse@1.1.1: pdf-parse@1.1.1:
dependencies: dependencies:
debug: 3.2.7(supports-color@5.5.0) debug: 3.2.7(supports-color@8.1.1)
node-ensure: 0.0.0 node-ensure: 0.0.0
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@@ -30292,7 +30319,7 @@ snapshots:
onetime: 5.1.2 onetime: 5.1.2
signal-exit: 3.0.7 signal-exit: 3.0.7
retry-axios@2.6.0(axios@1.10.0): retry-axios@2.6.0(axios@1.10.0(debug@4.4.1)):
dependencies: dependencies:
axios: 1.10.0 axios: 1.10.0
@@ -30319,7 +30346,7 @@ snapshots:
rhea@1.0.24: rhea@1.0.24:
dependencies: dependencies:
debug: 3.2.7(supports-color@5.5.0) debug: 3.2.7(supports-color@8.1.1)
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color