@sentry/node 10.66.0 → 10.67.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cjs/index.js +20 -19
- package/build/cjs/index.js.map +1 -1
- package/build/cjs/integrations/tracing/koa/vendored/utils.js +4 -1
- package/build/cjs/integrations/tracing/koa/vendored/utils.js.map +1 -1
- package/build/cjs/integrations/tracing/mongo/vendored/patches.js +8 -9
- package/build/cjs/integrations/tracing/mongo/vendored/patches.js.map +1 -1
- package/build/cjs/integrations/tracing/mongo/vendored/utils.js +5 -118
- package/build/cjs/integrations/tracing/mongo/vendored/utils.js.map +1 -1
- package/build/cjs/integrations/tracing/mongoose/vendored/mongoose.js +33 -23
- package/build/cjs/integrations/tracing/mongoose/vendored/mongoose.js.map +1 -1
- package/build/cjs/integrations/tracing/mongoose/vendored/utils.js +0 -16
- package/build/cjs/integrations/tracing/mongoose/vendored/utils.js.map +1 -1
- package/build/cjs/sdk/index.js +11 -0
- package/build/cjs/sdk/index.js.map +1 -1
- package/build/cjs/sdk/initOtel.js +26 -2
- package/build/cjs/sdk/initOtel.js.map +1 -1
- package/build/esm/index.js +1 -1
- package/build/esm/integrations/tracing/koa/vendored/utils.js +5 -2
- package/build/esm/integrations/tracing/koa/vendored/utils.js.map +1 -1
- package/build/esm/integrations/tracing/mongo/vendored/patches.js +3 -4
- package/build/esm/integrations/tracing/mongo/vendored/patches.js.map +1 -1
- package/build/esm/integrations/tracing/mongo/vendored/utils.js +6 -118
- package/build/esm/integrations/tracing/mongo/vendored/utils.js.map +1 -1
- package/build/esm/integrations/tracing/mongoose/vendored/mongoose.js +35 -25
- package/build/esm/integrations/tracing/mongoose/vendored/mongoose.js.map +1 -1
- package/build/esm/integrations/tracing/mongoose/vendored/utils.js +1 -16
- package/build/esm/integrations/tracing/mongoose/vendored/utils.js.map +1 -1
- package/build/esm/package.json +1 -1
- package/build/esm/sdk/index.js +11 -1
- package/build/esm/sdk/index.js.map +1 -1
- package/build/esm/sdk/initOtel.js +27 -3
- package/build/esm/sdk/initOtel.js.map +1 -1
- package/build/types/index.d.ts +1 -1
- package/build/types/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/koa/vendored/utils.d.ts.map +1 -1
- package/build/types/integrations/tracing/mongo/vendored/patches.d.ts.map +1 -1
- package/build/types/integrations/tracing/mongo/vendored/utils.d.ts +6 -15
- package/build/types/integrations/tracing/mongo/vendored/utils.d.ts.map +1 -1
- package/build/types/integrations/tracing/mongoose/vendored/mongoose.d.ts +0 -1
- package/build/types/integrations/tracing/mongoose/vendored/mongoose.d.ts.map +1 -1
- package/build/types/integrations/tracing/mongoose/vendored/utils.d.ts +1 -3
- package/build/types/integrations/tracing/mongoose/vendored/utils.d.ts.map +1 -1
- package/build/types/sdk/index.d.ts +18 -0
- package/build/types/sdk/index.d.ts.map +1 -1
- package/build/types/sdk/initOtel.d.ts.map +1 -1
- package/build/types-ts3.8/index.d.ts +1 -1
- package/build/types-ts3.8/integrations/tracing/mongo/vendored/utils.d.ts +6 -15
- package/build/types-ts3.8/integrations/tracing/mongoose/vendored/mongoose.d.ts +0 -1
- package/build/types-ts3.8/integrations/tracing/mongoose/vendored/utils.d.ts +1 -3
- package/build/types-ts3.8/sdk/index.d.ts +18 -0
- package/package.json +5 -5
- package/build/cjs/integrations/tracing/mongo/vendored/internal-types.js +0 -14
- package/build/cjs/integrations/tracing/mongo/vendored/internal-types.js.map +0 -1
- package/build/cjs/integrations/tracing/mongo/vendored/semconv.js +0 -10
- package/build/cjs/integrations/tracing/mongo/vendored/semconv.js.map +0 -1
- package/build/cjs/integrations/tracing/mongoose/vendored/semconv.js +0 -6
- package/build/cjs/integrations/tracing/mongoose/vendored/semconv.js.map +0 -1
- package/build/esm/integrations/tracing/mongo/vendored/internal-types.js +0 -12
- package/build/esm/integrations/tracing/mongo/vendored/internal-types.js.map +0 -1
- package/build/esm/integrations/tracing/mongo/vendored/semconv.js +0 -6
- package/build/esm/integrations/tracing/mongo/vendored/semconv.js.map +0 -1
- package/build/esm/integrations/tracing/mongoose/vendored/semconv.js +0 -4
- package/build/esm/integrations/tracing/mongoose/vendored/semconv.js.map +0 -1
- package/build/types/integrations/tracing/mongo/vendored/semconv.d.ts +0 -17
- package/build/types/integrations/tracing/mongo/vendored/semconv.d.ts.map +0 -1
- package/build/types/integrations/tracing/mongoose/vendored/semconv.d.ts +0 -9
- package/build/types/integrations/tracing/mongoose/vendored/semconv.d.ts.map +0 -1
- package/build/types-ts3.8/integrations/tracing/mongo/vendored/semconv.d.ts +0 -17
- package/build/types-ts3.8/integrations/tracing/mongoose/vendored/semconv.d.ts +0 -9
package/build/cjs/index.js
CHANGED
|
@@ -2,9 +2,9 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
|
2
2
|
|
|
3
3
|
const http = require('./integrations/http.js');
|
|
4
4
|
const nodeFetch = require('./integrations/node-fetch.js');
|
|
5
|
-
const index$
|
|
5
|
+
const index$6 = require('./integrations/fs/index.js');
|
|
6
6
|
const express = require('./integrations/tracing/express.js');
|
|
7
|
-
const index$
|
|
7
|
+
const index$5 = require('./integrations/tracing/fastify/index.js');
|
|
8
8
|
const index$a = require('./integrations/tracing/graphql/index.js');
|
|
9
9
|
const index$d = require('./integrations/tracing/kafka/index.js');
|
|
10
10
|
const index$i = require('./integrations/tracing/lrumemoizer/index.js');
|
|
@@ -19,11 +19,11 @@ const serverUtils = require('@sentry/server-utils');
|
|
|
19
19
|
const index$b = require('./integrations/tracing/hapi/index.js');
|
|
20
20
|
const index$c = require('./integrations/tracing/hono/index.js');
|
|
21
21
|
const index$f = require('./integrations/tracing/koa/index.js');
|
|
22
|
-
const index$
|
|
22
|
+
const index$3 = require('./integrations/tracing/connect/index.js');
|
|
23
23
|
const index$e = require('./integrations/tracing/knex/index.js');
|
|
24
24
|
const index$q = require('./integrations/tracing/tedious/index.js');
|
|
25
|
-
const index$
|
|
26
|
-
const index$
|
|
25
|
+
const index$7 = require('./integrations/tracing/genericPool/index.js');
|
|
26
|
+
const index$4 = require('./integrations/tracing/dataloader/index.js');
|
|
27
27
|
const index = require('./integrations/tracing/amqplib/index.js');
|
|
28
28
|
const index$r = require('./integrations/tracing/vercelai/index.js');
|
|
29
29
|
const index$n = require('./integrations/tracing/openai/index.js');
|
|
@@ -37,11 +37,11 @@ const statsig = require('./integrations/featureFlagShims/statsig.js');
|
|
|
37
37
|
const unleash = require('./integrations/featureFlagShims/unleash.js');
|
|
38
38
|
const growthbook = require('./integrations/featureFlagShims/growthbook.js');
|
|
39
39
|
const firebase = require('./integrations/tracing/firebase/firebase.js');
|
|
40
|
-
const index$
|
|
40
|
+
const index$2 = require('./sdk/index.js');
|
|
41
41
|
const experimentalUseDiagnosticsChannelInjection = require('./sdk/experimentalUseDiagnosticsChannelInjection.js');
|
|
42
42
|
const diagnosticsChannelInjection = require('./sdk/diagnosticsChannelInjection.js');
|
|
43
43
|
const initOtel = require('./sdk/initOtel.js');
|
|
44
|
-
const index$
|
|
44
|
+
const index$8 = require('./integrations/tracing/index.js');
|
|
45
45
|
const opentelemetry = require('@sentry/opentelemetry');
|
|
46
46
|
const core = require('@sentry/core');
|
|
47
47
|
const nodeCore = require('@sentry/node-core');
|
|
@@ -50,11 +50,11 @@ const nodeCore = require('@sentry/node-core');
|
|
|
50
50
|
|
|
51
51
|
exports.httpIntegration = http.httpIntegration;
|
|
52
52
|
exports.nativeNodeFetchIntegration = nodeFetch.nativeNodeFetchIntegration;
|
|
53
|
-
exports.fsIntegration = index$
|
|
53
|
+
exports.fsIntegration = index$6.fsIntegration;
|
|
54
54
|
exports.expressIntegration = express.expressIntegration;
|
|
55
55
|
exports.setupExpressErrorHandler = express.setupExpressErrorHandler;
|
|
56
|
-
exports.fastifyIntegration = index$
|
|
57
|
-
exports.setupFastifyErrorHandler = index$
|
|
56
|
+
exports.fastifyIntegration = index$5.fastifyIntegration;
|
|
57
|
+
exports.setupFastifyErrorHandler = index$5.setupFastifyErrorHandler;
|
|
58
58
|
exports.graphqlIntegration = index$a.graphqlIntegration;
|
|
59
59
|
exports.kafkaIntegration = index$d.kafkaIntegration;
|
|
60
60
|
exports.lruMemoizerIntegration = index$i.lruMemoizerIntegration;
|
|
@@ -72,12 +72,12 @@ exports.honoIntegration = index$c.honoIntegration;
|
|
|
72
72
|
exports.setupHonoErrorHandler = index$c.setupHonoErrorHandler;
|
|
73
73
|
exports.koaIntegration = index$f.koaIntegration;
|
|
74
74
|
exports.setupKoaErrorHandler = index$f.setupKoaErrorHandler;
|
|
75
|
-
exports.connectIntegration = index$
|
|
76
|
-
exports.setupConnectErrorHandler = index$
|
|
75
|
+
exports.connectIntegration = index$3.connectIntegration;
|
|
76
|
+
exports.setupConnectErrorHandler = index$3.setupConnectErrorHandler;
|
|
77
77
|
exports.knexIntegration = index$e.knexIntegration;
|
|
78
78
|
exports.tediousIntegration = index$q.tediousIntegration;
|
|
79
|
-
exports.genericPoolIntegration = index$
|
|
80
|
-
exports.dataloaderIntegration = index$
|
|
79
|
+
exports.genericPoolIntegration = index$7.genericPoolIntegration;
|
|
80
|
+
exports.dataloaderIntegration = index$4.dataloaderIntegration;
|
|
81
81
|
exports.amqplibIntegration = index.amqplibIntegration;
|
|
82
82
|
exports.vercelAIIntegration = index$r.vercelAIIntegration;
|
|
83
83
|
exports.openAIIntegration = index$n.openAIIntegration;
|
|
@@ -93,16 +93,17 @@ exports.statsigIntegration = statsig.statsigIntegrationShim;
|
|
|
93
93
|
exports.unleashIntegration = unleash.unleashIntegrationShim;
|
|
94
94
|
exports.growthbookIntegration = growthbook.growthbookIntegrationShim;
|
|
95
95
|
exports.firebaseIntegration = firebase.firebaseIntegration;
|
|
96
|
-
exports.
|
|
97
|
-
exports.
|
|
98
|
-
exports.
|
|
99
|
-
exports.
|
|
96
|
+
exports.applyDiagnosticsChannelInjectionIntegrations = index$2.applyDiagnosticsChannelInjectionIntegrations;
|
|
97
|
+
exports.getDefaultIntegrations = index$2.getDefaultIntegrations;
|
|
98
|
+
exports.getDefaultIntegrationsWithoutPerformance = index$2.getDefaultIntegrationsWithoutPerformance;
|
|
99
|
+
exports.init = index$2.init;
|
|
100
|
+
exports.initWithoutDefaultIntegrations = index$2.initWithoutDefaultIntegrations;
|
|
100
101
|
exports.diagnosticsChannelInjectionIntegrations = experimentalUseDiagnosticsChannelInjection.diagnosticsChannelInjectionIntegrations;
|
|
101
102
|
exports.experimentalUseDiagnosticsChannelInjection = experimentalUseDiagnosticsChannelInjection.experimentalUseDiagnosticsChannelInjection;
|
|
102
103
|
exports.isDiagnosticsChannelInjectionEnabled = diagnosticsChannelInjection.isDiagnosticsChannelInjectionEnabled;
|
|
103
104
|
exports.initOpenTelemetry = initOtel.initOpenTelemetry;
|
|
104
105
|
exports.preloadOpenTelemetry = initOtel.preloadOpenTelemetry;
|
|
105
|
-
exports.getAutoPerformanceIntegrations = index$
|
|
106
|
+
exports.getAutoPerformanceIntegrations = index$8.getAutoPerformanceIntegrations;
|
|
106
107
|
exports.setNodeAsyncContextStrategy = opentelemetry.setOpenTelemetryContextAsyncContextStrategy;
|
|
107
108
|
exports.SDK_VERSION = core.SDK_VERSION;
|
|
108
109
|
exports.SEMANTIC_ATTRIBUTE_SENTRY_OP = core.SEMANTIC_ATTRIBUTE_SENTRY_OP;
|
package/build/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -9,6 +9,7 @@ const getMiddlewareMetadata = (context, layer, isRouter, layerPath) => {
|
|
|
9
9
|
return {
|
|
10
10
|
attributes: {
|
|
11
11
|
[AttributeNames.AttributeNames.KOA_NAME]: layerPath?.toString(),
|
|
12
|
+
// TODO(v11): remove, replaced by http.route
|
|
12
13
|
[AttributeNames.AttributeNames.KOA_TYPE]: types.KoaLayerType.ROUTER,
|
|
13
14
|
[attributes.HTTP_ROUTE]: layerPath?.toString()
|
|
14
15
|
},
|
|
@@ -18,7 +19,9 @@ const getMiddlewareMetadata = (context, layer, isRouter, layerPath) => {
|
|
|
18
19
|
return {
|
|
19
20
|
attributes: {
|
|
20
21
|
[AttributeNames.AttributeNames.KOA_NAME]: layer.name ?? "middleware",
|
|
21
|
-
|
|
22
|
+
// TODO(v11): remove, replaced by code.function.name
|
|
23
|
+
[AttributeNames.AttributeNames.KOA_TYPE]: types.KoaLayerType.MIDDLEWARE,
|
|
24
|
+
[attributes.CODE_FUNCTION_NAME]: layer.name ?? "middleware"
|
|
22
25
|
},
|
|
23
26
|
name: `middleware - ${layer.name}`
|
|
24
27
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../../../../../../src/integrations/tracing/koa/vendored/utils.ts"],"sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-koa\n * - Upstream version: @opentelemetry/instrumentation-koa@0.66.0\n */\n\nimport { KoaLayerType, type KoaInstrumentationConfig } from './types';\nimport type { KoaContext, KoaMiddleware } from './internal-types';\nimport { AttributeNames } from './enums/AttributeNames';\nimport type { Attributes } from '@opentelemetry/api';\nimport { HTTP_ROUTE } from '@sentry/conventions/attributes';\n\nexport const getMiddlewareMetadata = (\n context: KoaContext,\n layer: KoaMiddleware,\n isRouter: boolean,\n layerPath?: string | RegExp,\n): {\n attributes: Attributes;\n name: string;\n} => {\n if (isRouter) {\n return {\n attributes: {\n [AttributeNames.KOA_NAME]: layerPath?.toString()
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../../../../../src/integrations/tracing/koa/vendored/utils.ts"],"sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-koa\n * - Upstream version: @opentelemetry/instrumentation-koa@0.66.0\n */\n\nimport { KoaLayerType, type KoaInstrumentationConfig } from './types';\nimport type { KoaContext, KoaMiddleware } from './internal-types';\nimport { AttributeNames } from './enums/AttributeNames';\nimport type { Attributes } from '@opentelemetry/api';\nimport { CODE_FUNCTION_NAME, HTTP_ROUTE } from '@sentry/conventions/attributes';\n\nexport const getMiddlewareMetadata = (\n context: KoaContext,\n layer: KoaMiddleware,\n isRouter: boolean,\n layerPath?: string | RegExp,\n): {\n attributes: Attributes;\n name: string;\n} => {\n if (isRouter) {\n return {\n attributes: {\n [AttributeNames.KOA_NAME]: layerPath?.toString(), // TODO(v11): remove, replaced by http.route\n [AttributeNames.KOA_TYPE]: KoaLayerType.ROUTER,\n [HTTP_ROUTE]: layerPath?.toString(),\n },\n name: context._matchedRouteName || `router - ${layerPath}`,\n };\n } else {\n return {\n attributes: {\n [AttributeNames.KOA_NAME]: layer.name ?? 'middleware', // TODO(v11): remove, replaced by code.function.name\n [AttributeNames.KOA_TYPE]: KoaLayerType.MIDDLEWARE,\n [CODE_FUNCTION_NAME]: layer.name ?? 'middleware',\n },\n name: `middleware - ${layer.name}`,\n };\n }\n};\n\n/**\n * Check whether the given request is ignored by configuration\n * @param [list] List of ignore patterns\n * @param [onException] callback for doing something when an exception has\n * occurred\n */\nexport const isLayerIgnored = (type: KoaLayerType, config?: KoaInstrumentationConfig): boolean => {\n return !!(Array.isArray(config?.ignoreLayersType) && config?.ignoreLayersType?.includes(type));\n};\n"],"names":["AttributeNames","KoaLayerType","HTTP_ROUTE","CODE_FUNCTION_NAME"],"mappings":";;;;;;AAeO,MAAM,qBAAA,GAAwB,CACnC,OAAA,EACA,KAAA,EACA,UACA,SAAA,KAIG;AACH,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,OAAO;AAAA,MACL,UAAA,EAAY;AAAA,QACV,CAACA,6BAAA,CAAe,QAAQ,GAAG,WAAW,QAAA,EAAS;AAAA;AAAA,QAC/C,CAACA,6BAAA,CAAe,QAAQ,GAAGC,kBAAA,CAAa,MAAA;AAAA,QACxC,CAACC,qBAAU,GAAG,SAAA,EAAW,QAAA;AAAS,OACpC;AAAA,MACA,IAAA,EAAM,OAAA,CAAQ,iBAAA,IAAqB,CAAA,SAAA,EAAY,SAAS,CAAA;AAAA,KAC1D;AAAA,EACF,CAAA,MAAO;AACL,IAAA,OAAO;AAAA,MACL,UAAA,EAAY;AAAA,QACV,CAACF,6BAAA,CAAe,QAAQ,GAAG,MAAM,IAAA,IAAQ,YAAA;AAAA;AAAA,QACzC,CAACA,6BAAA,CAAe,QAAQ,GAAGC,kBAAA,CAAa,UAAA;AAAA,QACxC,CAACE,6BAAkB,GAAG,KAAA,CAAM,IAAA,IAAQ;AAAA,OACtC;AAAA,MACA,IAAA,EAAM,CAAA,aAAA,EAAgB,KAAA,CAAM,IAAI,CAAA;AAAA,KAClC;AAAA,EACF;AACF;AAQO,MAAM,cAAA,GAAiB,CAAC,IAAA,EAAoB,MAAA,KAA+C;AAChG,EAAA,OAAO,CAAC,EAAE,KAAA,CAAM,OAAA,CAAQ,MAAA,EAAQ,gBAAgB,CAAA,IAAK,MAAA,EAAQ,gBAAA,EAAkB,QAAA,CAAS,IAAI,CAAA,CAAA;AAC9F;;;;;"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
2
|
|
|
3
3
|
const core = require('@sentry/core');
|
|
4
|
-
const internalTypes = require('./internal-types.js');
|
|
5
4
|
const utils = require('./utils.js');
|
|
5
|
+
const serverUtils = require('@sentry/server-utils');
|
|
6
6
|
|
|
7
7
|
function getV3PatchOperation(operationName) {
|
|
8
8
|
return (original) => {
|
|
@@ -15,7 +15,7 @@ function getV3PatchOperation(operationName) {
|
|
|
15
15
|
return original.call(this, server, ns, ops, options, callback);
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
|
-
const span =
|
|
18
|
+
const span = serverUtils.startMongoSpan(utils.getV3SpanAttributes(ns, server, ops[0], operationName));
|
|
19
19
|
const patchedCallback = utils.patchEnd(span, resultHandler);
|
|
20
20
|
if (typeof options === "function") {
|
|
21
21
|
return original.call(this, server, ns, ops, patchedCallback);
|
|
@@ -36,9 +36,8 @@ function getV3PatchCommand() {
|
|
|
36
36
|
return original.call(this, server, ns, cmd, options, callback);
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
|
-
const
|
|
40
|
-
const
|
|
41
|
-
const span = utils.startMongoSpan(utils.getV3SpanAttributes(ns, server, cmd, operationName));
|
|
39
|
+
const operationName = serverUtils.getV3CommandOperation(cmd);
|
|
40
|
+
const span = serverUtils.startMongoSpan(utils.getV3SpanAttributes(ns, server, cmd, operationName));
|
|
42
41
|
const patchedCallback = utils.patchEnd(span, resultHandler);
|
|
43
42
|
if (typeof options === "function") {
|
|
44
43
|
return original.call(this, server, ns, cmd, patchedCallback);
|
|
@@ -58,7 +57,7 @@ function getV4PatchCommandCallback() {
|
|
|
58
57
|
}
|
|
59
58
|
let span = void 0;
|
|
60
59
|
if (!utils.shouldSkipInstrumentation()) {
|
|
61
|
-
span =
|
|
60
|
+
span = serverUtils.startMongoSpan(utils.getV4SpanAttributes(this, ns, cmd, commandType));
|
|
62
61
|
}
|
|
63
62
|
const patchedCallback = utils.patchEnd(span, resultHandler);
|
|
64
63
|
return original.call(this, ns, cmd, options, patchedCallback);
|
|
@@ -76,7 +75,7 @@ function getV4PatchCommandPromise() {
|
|
|
76
75
|
}
|
|
77
76
|
let span = void 0;
|
|
78
77
|
if (!utils.shouldSkipInstrumentation()) {
|
|
79
|
-
span =
|
|
78
|
+
span = serverUtils.startMongoSpan(utils.getV4SpanAttributes(this, ns, cmd, commandType));
|
|
80
79
|
}
|
|
81
80
|
const patchedCallback = utils.patchEnd(span, resultHandler);
|
|
82
81
|
const result = original.apply(this, args);
|
|
@@ -99,7 +98,7 @@ function getV3PatchFind() {
|
|
|
99
98
|
return original.call(this, server, ns, cmd, cursorState, options, callback);
|
|
100
99
|
}
|
|
101
100
|
}
|
|
102
|
-
const span =
|
|
101
|
+
const span = serverUtils.startMongoSpan(utils.getV3SpanAttributes(ns, server, cmd, "find"));
|
|
103
102
|
const patchedCallback = utils.patchEnd(span, resultHandler);
|
|
104
103
|
if (typeof options === "function") {
|
|
105
104
|
return original.call(this, server, ns, cmd, cursorState, patchedCallback);
|
|
@@ -120,7 +119,7 @@ function getV3PatchCursor() {
|
|
|
120
119
|
return original.call(this, server, ns, cursorState, batchSize, options, callback);
|
|
121
120
|
}
|
|
122
121
|
}
|
|
123
|
-
const span =
|
|
122
|
+
const span = serverUtils.startMongoSpan(utils.getV3SpanAttributes(ns, server, cursorState.cmd, "getMore"));
|
|
124
123
|
const patchedCallback = utils.patchEnd(span, resultHandler);
|
|
125
124
|
if (typeof options === "function") {
|
|
126
125
|
return original.call(this, server, ns, cursorState, batchSize, patchedCallback);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"patches.js","sources":["../../../../../../src/integrations/tracing/mongo/vendored/patches.ts"],"sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-mongodb\n * - Upstream version: @opentelemetry/instrumentation-mongodb@0.71.0\n * - Refactored to use Sentry's span APIs instead of OpenTelemetry tracing APIs\n */\n\nimport { getActiveSpan, withActiveSpan } from '@sentry/core';\nimport type {\n CursorState,\n MongodbNamespace,\n MongoInternalCommand,\n MongoInternalTopology,\n V4Connection,\n V4ConnectionPool,\n WireProtocolInternal,\n} from './internal-types';\nimport { MongodbCommandType } from './internal-types';\nimport {\n getCommandType,\n getV3SpanAttributes,\n getV4SpanAttributes,\n patchEnd,\n shouldSkipInstrumentation,\n startMongoSpan,\n} from './utils';\n\n/** Creates spans for v3 common operations (insert/update/remove). */\nexport function getV3PatchOperation(operationName: 'insert' | 'update' | 'remove') {\n return (original: WireProtocolInternal[typeof operationName]) => {\n return function patchedServerCommand(\n this: unknown,\n server: MongoInternalTopology,\n ns: string,\n ops: unknown[],\n options: unknown | Function,\n callback?: Function,\n ) {\n const resultHandler = typeof options === 'function' ? options : callback;\n if (shouldSkipInstrumentation() || typeof resultHandler !== 'function' || typeof ops !== 'object') {\n if (typeof options === 'function') {\n return original.call(this, server, ns, ops, options);\n } else {\n return original.call(this, server, ns, ops, options, callback);\n }\n }\n\n const span = startMongoSpan(getV3SpanAttributes(ns, server, ops[0] as any, operationName));\n\n const patchedCallback = patchEnd(span, resultHandler);\n // handle when options is the callback to send the correct number of args\n if (typeof options === 'function') {\n return original.call(this, server, ns, ops, patchedCallback);\n } else {\n return original.call(this, server, ns, ops, options, patchedCallback);\n }\n };\n };\n}\n\n/** Creates spans for the v3 command operation. */\nexport function getV3PatchCommand() {\n return (original: WireProtocolInternal['command']) => {\n return function patchedServerCommand(\n this: unknown,\n server: MongoInternalTopology,\n ns: string,\n cmd: MongoInternalCommand,\n options: unknown | Function,\n callback?: Function,\n ) {\n const resultHandler = typeof options === 'function' ? options : callback;\n\n if (shouldSkipInstrumentation() || typeof resultHandler !== 'function' || typeof cmd !== 'object') {\n if (typeof options === 'function') {\n return original.call(this, server, ns, cmd, options);\n } else {\n return original.call(this, server, ns, cmd, options, callback);\n }\n }\n\n const commandType = getCommandType(cmd);\n const operationName = commandType === MongodbCommandType.UNKNOWN ? undefined : commandType;\n const span = startMongoSpan(getV3SpanAttributes(ns, server, cmd, operationName));\n\n const patchedCallback = patchEnd(span, resultHandler);\n // handle when options is the callback to send the correct number of args\n if (typeof options === 'function') {\n return original.call(this, server, ns, cmd, patchedCallback);\n } else {\n return original.call(this, server, ns, cmd, options, patchedCallback);\n }\n };\n };\n}\n\n/** Creates spans for the v4 (<6.4) callback-style command operation. */\nexport function getV4PatchCommandCallback() {\n return (original: V4Connection['commandCallback']) => {\n return function patchedV4ServerCommand(\n this: any,\n ns: MongodbNamespace,\n cmd: any,\n options: undefined | unknown,\n callback: any,\n ) {\n const resultHandler = callback;\n const commandType = Object.keys(cmd)[0];\n\n if (typeof cmd !== 'object' || cmd.ismaster || cmd.hello) {\n return original.call(this, ns, cmd, options, callback);\n }\n\n let span = undefined;\n if (!shouldSkipInstrumentation()) {\n span = startMongoSpan(getV4SpanAttributes(this, ns, cmd, commandType));\n }\n const patchedCallback = patchEnd(span, resultHandler);\n\n return original.call(this, ns, cmd, options, patchedCallback);\n };\n };\n}\n\n/** Creates spans for the v4 (>=6.4) promise-style command operation. */\nexport function getV4PatchCommandPromise() {\n return (original: V4Connection['commandPromise']) => {\n return function patchedV4ServerCommand(this: any, ...args: Parameters<V4Connection['commandPromise']>) {\n const [ns, cmd] = args;\n const commandType = Object.keys(cmd)[0];\n const resultHandler = () => undefined;\n\n if (typeof cmd !== 'object' || cmd.ismaster || cmd.hello) {\n return original.apply(this, args);\n }\n\n let span = undefined;\n if (!shouldSkipInstrumentation()) {\n span = startMongoSpan(getV4SpanAttributes(this, ns, cmd, commandType));\n }\n\n const patchedCallback = patchEnd(span, resultHandler);\n\n const result = original.apply(this, args);\n result.then(\n (res: any) => patchedCallback(null, res),\n (err: any) => patchedCallback(err),\n );\n\n return result;\n };\n };\n}\n\n/** Creates spans for the v3 find operation. */\nexport function getV3PatchFind() {\n return (original: WireProtocolInternal['query']) => {\n return function patchedServerCommand(\n this: unknown,\n server: MongoInternalTopology,\n ns: string,\n cmd: MongoInternalCommand,\n cursorState: CursorState,\n options: unknown | Function,\n callback?: Function,\n ) {\n const resultHandler = typeof options === 'function' ? options : callback;\n\n if (shouldSkipInstrumentation() || typeof resultHandler !== 'function' || typeof cmd !== 'object') {\n if (typeof options === 'function') {\n return original.call(this, server, ns, cmd, cursorState, options);\n } else {\n return original.call(this, server, ns, cmd, cursorState, options, callback);\n }\n }\n\n const span = startMongoSpan(getV3SpanAttributes(ns, server, cmd, 'find'));\n\n const patchedCallback = patchEnd(span, resultHandler);\n // handle when options is the callback to send the correct number of args\n if (typeof options === 'function') {\n return original.call(this, server, ns, cmd, cursorState, patchedCallback);\n } else {\n return original.call(this, server, ns, cmd, cursorState, options, patchedCallback);\n }\n };\n };\n}\n\n/** Creates spans for the v3 getMore (cursor) operation. */\nexport function getV3PatchCursor() {\n return (original: WireProtocolInternal['getMore']) => {\n return function patchedServerCommand(\n this: unknown,\n server: MongoInternalTopology,\n ns: string,\n cursorState: CursorState,\n batchSize: number,\n options: unknown | Function,\n callback?: Function,\n ) {\n const resultHandler = typeof options === 'function' ? options : callback;\n\n if (shouldSkipInstrumentation() || typeof resultHandler !== 'function') {\n if (typeof options === 'function') {\n return original.call(this, server, ns, cursorState, batchSize, options);\n } else {\n return original.call(this, server, ns, cursorState, batchSize, options, callback);\n }\n }\n\n const span = startMongoSpan(getV3SpanAttributes(ns, server, cursorState.cmd, 'getMore'));\n\n const patchedCallback = patchEnd(span, resultHandler);\n // handle when options is the callback to send the correct number of args\n if (typeof options === 'function') {\n return original.call(this, server, ns, cursorState, batchSize, patchedCallback);\n } else {\n return original.call(this, server, ns, cursorState, batchSize, options, patchedCallback);\n }\n };\n };\n}\n\n// This patch will become unnecessary once https://jira.mongodb.org/browse/NODE-5639 is done.\nexport function getV4ConnectionPoolCheckOut() {\n return (original: V4ConnectionPool['checkOut']) => {\n return function patchedCheckout(this: unknown, callback: (error: any, connection: any) => void) {\n // The pool runs the callback in a detached context, so re-activate the span that was\n // active when `checkOut` was called — otherwise the pooled operation finds no parent.\n const parentSpan = getActiveSpan();\n return original.call(this, function (this: unknown, ...args: [any, any]) {\n return withActiveSpan(parentSpan ?? null, () => callback.apply(this, args));\n });\n };\n };\n}\n"],"names":["shouldSkipInstrumentation","startMongoSpan","getV3SpanAttributes","patchEnd","getCommandType","MongodbCommandType","getV4SpanAttributes","getActiveSpan","withActiveSpan"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"patches.js","sources":["../../../../../../src/integrations/tracing/mongo/vendored/patches.ts"],"sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-mongodb\n * - Upstream version: @opentelemetry/instrumentation-mongodb@0.71.0\n * - Refactored to use Sentry's span APIs instead of OpenTelemetry tracing APIs\n */\n\nimport { getActiveSpan, withActiveSpan } from '@sentry/core';\nimport type {\n CursorState,\n MongodbNamespace,\n MongoInternalCommand,\n MongoInternalTopology,\n V4Connection,\n V4ConnectionPool,\n WireProtocolInternal,\n} from './internal-types';\nimport {\n getV3CommandOperation,\n getV3SpanAttributes,\n getV4SpanAttributes,\n patchEnd,\n shouldSkipInstrumentation,\n startMongoSpan,\n} from './utils';\n\n/** Creates spans for v3 common operations (insert/update/remove). */\nexport function getV3PatchOperation(operationName: 'insert' | 'update' | 'remove') {\n return (original: WireProtocolInternal[typeof operationName]) => {\n return function patchedServerCommand(\n this: unknown,\n server: MongoInternalTopology,\n ns: string,\n ops: unknown[],\n options: unknown | Function,\n callback?: Function,\n ) {\n const resultHandler = typeof options === 'function' ? options : callback;\n if (shouldSkipInstrumentation() || typeof resultHandler !== 'function' || typeof ops !== 'object') {\n if (typeof options === 'function') {\n return original.call(this, server, ns, ops, options);\n } else {\n return original.call(this, server, ns, ops, options, callback);\n }\n }\n\n const span = startMongoSpan(getV3SpanAttributes(ns, server, ops[0] as any, operationName));\n\n const patchedCallback = patchEnd(span, resultHandler);\n // handle when options is the callback to send the correct number of args\n if (typeof options === 'function') {\n return original.call(this, server, ns, ops, patchedCallback);\n } else {\n return original.call(this, server, ns, ops, options, patchedCallback);\n }\n };\n };\n}\n\n/** Creates spans for the v3 command operation. */\nexport function getV3PatchCommand() {\n return (original: WireProtocolInternal['command']) => {\n return function patchedServerCommand(\n this: unknown,\n server: MongoInternalTopology,\n ns: string,\n cmd: MongoInternalCommand,\n options: unknown | Function,\n callback?: Function,\n ) {\n const resultHandler = typeof options === 'function' ? options : callback;\n\n if (shouldSkipInstrumentation() || typeof resultHandler !== 'function' || typeof cmd !== 'object') {\n if (typeof options === 'function') {\n return original.call(this, server, ns, cmd, options);\n } else {\n return original.call(this, server, ns, cmd, options, callback);\n }\n }\n\n const operationName = getV3CommandOperation(cmd as unknown as Record<string, unknown>);\n const span = startMongoSpan(getV3SpanAttributes(ns, server, cmd, operationName));\n\n const patchedCallback = patchEnd(span, resultHandler);\n // handle when options is the callback to send the correct number of args\n if (typeof options === 'function') {\n return original.call(this, server, ns, cmd, patchedCallback);\n } else {\n return original.call(this, server, ns, cmd, options, patchedCallback);\n }\n };\n };\n}\n\n/** Creates spans for the v4 (<6.4) callback-style command operation. */\nexport function getV4PatchCommandCallback() {\n return (original: V4Connection['commandCallback']) => {\n return function patchedV4ServerCommand(\n this: any,\n ns: MongodbNamespace,\n cmd: any,\n options: undefined | unknown,\n callback: any,\n ) {\n const resultHandler = callback;\n const commandType = Object.keys(cmd)[0];\n\n if (typeof cmd !== 'object' || cmd.ismaster || cmd.hello) {\n return original.call(this, ns, cmd, options, callback);\n }\n\n let span = undefined;\n if (!shouldSkipInstrumentation()) {\n span = startMongoSpan(getV4SpanAttributes(this, ns, cmd, commandType));\n }\n const patchedCallback = patchEnd(span, resultHandler);\n\n return original.call(this, ns, cmd, options, patchedCallback);\n };\n };\n}\n\n/** Creates spans for the v4 (>=6.4) promise-style command operation. */\nexport function getV4PatchCommandPromise() {\n return (original: V4Connection['commandPromise']) => {\n return function patchedV4ServerCommand(this: any, ...args: Parameters<V4Connection['commandPromise']>) {\n const [ns, cmd] = args;\n const commandType = Object.keys(cmd)[0];\n const resultHandler = () => undefined;\n\n if (typeof cmd !== 'object' || cmd.ismaster || cmd.hello) {\n return original.apply(this, args);\n }\n\n let span = undefined;\n if (!shouldSkipInstrumentation()) {\n span = startMongoSpan(getV4SpanAttributes(this, ns, cmd, commandType));\n }\n\n const patchedCallback = patchEnd(span, resultHandler);\n\n const result = original.apply(this, args);\n result.then(\n (res: any) => patchedCallback(null, res),\n (err: any) => patchedCallback(err),\n );\n\n return result;\n };\n };\n}\n\n/** Creates spans for the v3 find operation. */\nexport function getV3PatchFind() {\n return (original: WireProtocolInternal['query']) => {\n return function patchedServerCommand(\n this: unknown,\n server: MongoInternalTopology,\n ns: string,\n cmd: MongoInternalCommand,\n cursorState: CursorState,\n options: unknown | Function,\n callback?: Function,\n ) {\n const resultHandler = typeof options === 'function' ? options : callback;\n\n if (shouldSkipInstrumentation() || typeof resultHandler !== 'function' || typeof cmd !== 'object') {\n if (typeof options === 'function') {\n return original.call(this, server, ns, cmd, cursorState, options);\n } else {\n return original.call(this, server, ns, cmd, cursorState, options, callback);\n }\n }\n\n const span = startMongoSpan(getV3SpanAttributes(ns, server, cmd, 'find'));\n\n const patchedCallback = patchEnd(span, resultHandler);\n // handle when options is the callback to send the correct number of args\n if (typeof options === 'function') {\n return original.call(this, server, ns, cmd, cursorState, patchedCallback);\n } else {\n return original.call(this, server, ns, cmd, cursorState, options, patchedCallback);\n }\n };\n };\n}\n\n/** Creates spans for the v3 getMore (cursor) operation. */\nexport function getV3PatchCursor() {\n return (original: WireProtocolInternal['getMore']) => {\n return function patchedServerCommand(\n this: unknown,\n server: MongoInternalTopology,\n ns: string,\n cursorState: CursorState,\n batchSize: number,\n options: unknown | Function,\n callback?: Function,\n ) {\n const resultHandler = typeof options === 'function' ? options : callback;\n\n if (shouldSkipInstrumentation() || typeof resultHandler !== 'function') {\n if (typeof options === 'function') {\n return original.call(this, server, ns, cursorState, batchSize, options);\n } else {\n return original.call(this, server, ns, cursorState, batchSize, options, callback);\n }\n }\n\n const span = startMongoSpan(getV3SpanAttributes(ns, server, cursorState.cmd, 'getMore'));\n\n const patchedCallback = patchEnd(span, resultHandler);\n // handle when options is the callback to send the correct number of args\n if (typeof options === 'function') {\n return original.call(this, server, ns, cursorState, batchSize, patchedCallback);\n } else {\n return original.call(this, server, ns, cursorState, batchSize, options, patchedCallback);\n }\n };\n };\n}\n\n// This patch will become unnecessary once https://jira.mongodb.org/browse/NODE-5639 is done.\nexport function getV4ConnectionPoolCheckOut() {\n return (original: V4ConnectionPool['checkOut']) => {\n return function patchedCheckout(this: unknown, callback: (error: any, connection: any) => void) {\n // The pool runs the callback in a detached context, so re-activate the span that was\n // active when `checkOut` was called — otherwise the pooled operation finds no parent.\n const parentSpan = getActiveSpan();\n return original.call(this, function (this: unknown, ...args: [any, any]) {\n return withActiveSpan(parentSpan ?? null, () => callback.apply(this, args));\n });\n };\n };\n}\n"],"names":["shouldSkipInstrumentation","startMongoSpan","getV3SpanAttributes","patchEnd","getV3CommandOperation","getV4SpanAttributes","getActiveSpan","withActiveSpan"],"mappings":"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"}
|
|
@@ -1,127 +1,14 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
2
|
|
|
3
3
|
const core = require('@sentry/core');
|
|
4
|
-
const
|
|
5
|
-
const semconv = require('./semconv.js');
|
|
6
|
-
const internalTypes = require('./internal-types.js');
|
|
4
|
+
const serverUtils = require('@sentry/server-utils');
|
|
7
5
|
|
|
8
6
|
const ORIGIN = "auto.db.otel.mongo";
|
|
9
|
-
function serializeDbStatement(commandObj) {
|
|
10
|
-
return JSON.stringify(scrubStatement(commandObj));
|
|
11
|
-
}
|
|
12
|
-
function scrubStatement(value) {
|
|
13
|
-
if (Array.isArray(value)) {
|
|
14
|
-
return value.map((element) => scrubStatement(element));
|
|
15
|
-
}
|
|
16
|
-
if (isCommandObj(value)) {
|
|
17
|
-
const initial = {};
|
|
18
|
-
return Object.entries(value).map(([key, element]) => [key, scrubStatement(element)]).reduce((prev, current) => {
|
|
19
|
-
if (isCommandEntry(current)) {
|
|
20
|
-
prev[current[0]] = current[1];
|
|
21
|
-
}
|
|
22
|
-
return prev;
|
|
23
|
-
}, initial);
|
|
24
|
-
}
|
|
25
|
-
return "?";
|
|
26
|
-
}
|
|
27
|
-
function isCommandObj(value) {
|
|
28
|
-
return core.isObjectLike(value) && !isBuffer(value);
|
|
29
|
-
}
|
|
30
|
-
function isBuffer(value) {
|
|
31
|
-
return typeof Buffer !== "undefined" && Buffer.isBuffer(value);
|
|
32
|
-
}
|
|
33
|
-
function isCommandEntry(value) {
|
|
34
|
-
return Array.isArray(value);
|
|
35
|
-
}
|
|
36
|
-
function getCommandType(command) {
|
|
37
|
-
if (command.createIndexes !== void 0) {
|
|
38
|
-
return internalTypes.MongodbCommandType.CREATE_INDEXES;
|
|
39
|
-
} else if (command.findandmodify !== void 0) {
|
|
40
|
-
return internalTypes.MongodbCommandType.FIND_AND_MODIFY;
|
|
41
|
-
} else if (command.ismaster !== void 0) {
|
|
42
|
-
return internalTypes.MongodbCommandType.IS_MASTER;
|
|
43
|
-
} else if (command.count !== void 0) {
|
|
44
|
-
return internalTypes.MongodbCommandType.COUNT;
|
|
45
|
-
} else if (command.aggregate !== void 0) {
|
|
46
|
-
return internalTypes.MongodbCommandType.AGGREGATE;
|
|
47
|
-
} else {
|
|
48
|
-
return internalTypes.MongodbCommandType.UNKNOWN;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
7
|
function getV4SpanAttributes(connectionCtx, ns, command, operation) {
|
|
52
|
-
|
|
53
|
-
if (connectionCtx) {
|
|
54
|
-
const hostParts = typeof connectionCtx.address === "string" ? connectionCtx.address.split(":") : "";
|
|
55
|
-
if (hostParts.length === 2) {
|
|
56
|
-
host = hostParts[0];
|
|
57
|
-
port = hostParts[1];
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
let commandObj;
|
|
61
|
-
if (command?.documents && command.documents[0]) {
|
|
62
|
-
commandObj = command.documents[0];
|
|
63
|
-
} else if (command?.cursors) {
|
|
64
|
-
commandObj = command.cursors;
|
|
65
|
-
} else {
|
|
66
|
-
commandObj = command;
|
|
67
|
-
}
|
|
68
|
-
return getSpanAttributes(ns.db, ns.collection, host, port, commandObj, operation);
|
|
8
|
+
return serverUtils.getV4SpanAttributes(connectionCtx, ns, command, operation, ORIGIN);
|
|
69
9
|
}
|
|
70
10
|
function getV3SpanAttributes(ns, topology, command, operation) {
|
|
71
|
-
|
|
72
|
-
let port;
|
|
73
|
-
if (topology?.s) {
|
|
74
|
-
host = topology.s.options?.host ?? topology.s.host;
|
|
75
|
-
port = (topology.s.options?.port ?? topology.s.port)?.toString();
|
|
76
|
-
if (host == null || port == null) {
|
|
77
|
-
const address = topology.description?.address;
|
|
78
|
-
if (address) {
|
|
79
|
-
const addressSegments = address.split(":");
|
|
80
|
-
host = addressSegments[0];
|
|
81
|
-
port = addressSegments[1];
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
const [dbName, dbCollection] = ns.toString().split(".");
|
|
86
|
-
const commandObj = command?.query ?? command?.q ?? command;
|
|
87
|
-
return getSpanAttributes(dbName, dbCollection, host, port, commandObj, operation);
|
|
88
|
-
}
|
|
89
|
-
function getSpanAttributes(dbName, dbCollection, host, port, commandObj, operation) {
|
|
90
|
-
const attributes$1 = {
|
|
91
|
-
[core.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN,
|
|
92
|
-
// eslint-disable-next-line typescript/no-deprecated
|
|
93
|
-
[attributes.DB_SYSTEM]: semconv.DB_SYSTEM_VALUE_MONGODB,
|
|
94
|
-
// eslint-disable-next-line typescript/no-deprecated
|
|
95
|
-
[attributes.DB_NAME]: dbName,
|
|
96
|
-
// eslint-disable-next-line typescript/no-deprecated
|
|
97
|
-
[semconv.ATTR_DB_MONGODB_COLLECTION]: dbCollection,
|
|
98
|
-
// eslint-disable-next-line typescript/no-deprecated
|
|
99
|
-
[attributes.DB_OPERATION]: operation,
|
|
100
|
-
// eslint-disable-next-line typescript/no-deprecated
|
|
101
|
-
[semconv.ATTR_DB_CONNECTION_STRING]: `mongodb://${host}:${port}/${dbName}`
|
|
102
|
-
};
|
|
103
|
-
if (host && port) {
|
|
104
|
-
attributes$1[attributes.NET_PEER_NAME] = host;
|
|
105
|
-
const portNumber = parseInt(port, 10);
|
|
106
|
-
if (!isNaN(portNumber)) {
|
|
107
|
-
attributes$1[attributes.NET_PEER_PORT] = portNumber;
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
if (commandObj) {
|
|
111
|
-
try {
|
|
112
|
-
attributes$1[attributes.DB_STATEMENT] = serializeDbStatement(commandObj);
|
|
113
|
-
} catch {
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
return attributes$1;
|
|
117
|
-
}
|
|
118
|
-
function startMongoSpan(attributes$1) {
|
|
119
|
-
return core.startInactiveSpan({
|
|
120
|
-
// eslint-disable-next-line typescript/no-deprecated
|
|
121
|
-
name: `mongodb.${attributes$1[attributes.DB_OPERATION] || "command"}`,
|
|
122
|
-
kind: core.SPAN_KIND.CLIENT,
|
|
123
|
-
attributes: attributes$1
|
|
124
|
-
});
|
|
11
|
+
return serverUtils.getV3SpanAttributes(ns, topology, command, operation, ORIGIN);
|
|
125
12
|
}
|
|
126
13
|
function patchEnd(span, resultHandler) {
|
|
127
14
|
const parentSpan = core.getActiveSpan();
|
|
@@ -144,10 +31,10 @@ function shouldSkipInstrumentation() {
|
|
|
144
31
|
return !core.getActiveSpan();
|
|
145
32
|
}
|
|
146
33
|
|
|
147
|
-
exports.
|
|
34
|
+
exports.getV3CommandOperation = serverUtils.getV3CommandOperation;
|
|
35
|
+
exports.startMongoSpan = serverUtils.startMongoSpan;
|
|
148
36
|
exports.getV3SpanAttributes = getV3SpanAttributes;
|
|
149
37
|
exports.getV4SpanAttributes = getV4SpanAttributes;
|
|
150
38
|
exports.patchEnd = patchEnd;
|
|
151
39
|
exports.shouldSkipInstrumentation = shouldSkipInstrumentation;
|
|
152
|
-
exports.startMongoSpan = startMongoSpan;
|
|
153
40
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../../../../../../src/integrations/tracing/mongo/vendored/utils.ts"],"sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-mongodb\n * - Upstream version: @opentelemetry/instrumentation-mongodb@0.71.0\n * - Refactored to use Sentry's span APIs instead of OpenTelemetry tracing APIs\n */\n\nimport type { Span, SpanAttributes } from '@sentry/core';\nimport {\n getActiveSpan,\n isObjectLike,\n SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n SPAN_KIND,\n SPAN_STATUS_ERROR,\n startInactiveSpan,\n withActiveSpan,\n} from '@sentry/core';\nimport {\n DB_NAME,\n DB_OPERATION,\n DB_STATEMENT,\n DB_SYSTEM,\n NET_PEER_NAME,\n NET_PEER_PORT,\n} from '@sentry/conventions/attributes';\nimport { ATTR_DB_CONNECTION_STRING, ATTR_DB_MONGODB_COLLECTION, DB_SYSTEM_VALUE_MONGODB } from './semconv';\nimport type { MongodbNamespace, MongoInternalCommand, MongoInternalTopology } from './internal-types';\nimport { MongodbCommandType } from './internal-types';\n\nconst ORIGIN = 'auto.db.otel.mongo';\n\n/**\n * Replaces values in the command object with '?', hiding PII and helping grouping.\n */\nfunction serializeDbStatement(commandObj: Record<string, unknown>): string {\n return JSON.stringify(scrubStatement(commandObj));\n}\n\nfunction scrubStatement(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map(element => scrubStatement(element));\n }\n\n if (isCommandObj(value)) {\n const initial: Record<string, unknown> = {};\n return Object.entries(value)\n .map(([key, element]) => [key, scrubStatement(element)])\n .reduce((prev, current) => {\n if (isCommandEntry(current)) {\n prev[current[0]] = current[1];\n }\n return prev;\n }, initial);\n }\n\n // A value like string or number, possibly contains PII, scrub it\n return '?';\n}\n\nfunction isCommandObj(value: Record<string, unknown> | unknown): value is Record<string, unknown> {\n return isObjectLike(value) && !isBuffer(value);\n}\n\nfunction isBuffer(value: unknown): boolean {\n return typeof Buffer !== 'undefined' && Buffer.isBuffer(value);\n}\n\nfunction isCommandEntry(value: [string, unknown] | unknown): value is [string, unknown] {\n return Array.isArray(value);\n}\n\n/**\n * Get the mongodb command type from the object.\n */\nexport function getCommandType(command: MongoInternalCommand): MongodbCommandType {\n if (command.createIndexes !== undefined) {\n return MongodbCommandType.CREATE_INDEXES;\n } else if (command.findandmodify !== undefined) {\n return MongodbCommandType.FIND_AND_MODIFY;\n } else if (command.ismaster !== undefined) {\n return MongodbCommandType.IS_MASTER;\n } else if (command.count !== undefined) {\n return MongodbCommandType.COUNT;\n } else if (command.aggregate !== undefined) {\n return MongodbCommandType.AGGREGATE;\n } else {\n return MongodbCommandType.UNKNOWN;\n }\n}\n\n/**\n * Determine a span's attributes by fetching related metadata from the v4 connection context.\n */\nexport function getV4SpanAttributes(\n connectionCtx: any,\n ns: MongodbNamespace,\n command?: any,\n operation?: string,\n): SpanAttributes {\n let host, port: undefined | string;\n if (connectionCtx) {\n const hostParts = typeof connectionCtx.address === 'string' ? connectionCtx.address.split(':') : '';\n if (hostParts.length === 2) {\n host = hostParts[0];\n port = hostParts[1];\n }\n }\n let commandObj: Record<string, unknown>;\n if (command?.documents && command.documents[0]) {\n commandObj = command.documents[0];\n } else if (command?.cursors) {\n commandObj = command.cursors;\n } else {\n commandObj = command;\n }\n\n return getSpanAttributes(ns.db, ns.collection, host, port, commandObj, operation);\n}\n\n/**\n * Determine a span's attributes by fetching related metadata from the v3 topology.\n */\nexport function getV3SpanAttributes(\n ns: string,\n topology: MongoInternalTopology,\n command?: MongoInternalCommand,\n operation?: string | undefined,\n): SpanAttributes {\n let host: undefined | string;\n let port: undefined | string;\n if (topology?.s) {\n host = topology.s.options?.host ?? topology.s.host;\n port = (topology.s.options?.port ?? topology.s.port)?.toString();\n if (host == null || port == null) {\n const address = topology.description?.address;\n if (address) {\n const addressSegments = address.split(':');\n host = addressSegments[0];\n port = addressSegments[1];\n }\n }\n }\n\n // The namespace is a combination of the database name and the name of the\n // collection or index, like so: [database-name].[collection-or-index-name].\n // It could be a string or an instance of MongoDBNamespace, as such we\n // always coerce to a string to extract db and collection.\n const [dbName, dbCollection] = ns.toString().split('.');\n const commandObj = command?.query ?? command?.q ?? command;\n\n return getSpanAttributes(dbName, dbCollection, host, port, commandObj, operation);\n}\n\nfunction getSpanAttributes(\n dbName?: string,\n dbCollection?: string,\n host?: undefined | string,\n port?: undefined | string,\n commandObj?: any,\n operation?: string | undefined,\n): SpanAttributes {\n const attributes: SpanAttributes = {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN,\n // eslint-disable-next-line typescript/no-deprecated\n [DB_SYSTEM]: DB_SYSTEM_VALUE_MONGODB,\n // eslint-disable-next-line typescript/no-deprecated\n [DB_NAME]: dbName,\n // eslint-disable-next-line typescript/no-deprecated\n [ATTR_DB_MONGODB_COLLECTION]: dbCollection,\n // eslint-disable-next-line typescript/no-deprecated\n [DB_OPERATION]: operation,\n // eslint-disable-next-line typescript/no-deprecated\n [ATTR_DB_CONNECTION_STRING]: `mongodb://${host}:${port}/${dbName}`,\n };\n\n if (host && port) {\n // eslint-disable-next-line typescript/no-deprecated\n attributes[NET_PEER_NAME] = host;\n const portNumber = parseInt(port, 10);\n if (!isNaN(portNumber)) {\n // eslint-disable-next-line typescript/no-deprecated\n attributes[NET_PEER_PORT] = portNumber;\n }\n }\n\n if (commandObj) {\n try {\n // eslint-disable-next-line typescript/no-deprecated\n attributes[DB_STATEMENT] = serializeDbStatement(commandObj);\n } catch {\n // ignore serialization errors — the statement is best-effort metadata\n }\n }\n\n return attributes;\n}\n\nexport function startMongoSpan(attributes: SpanAttributes): Span {\n return startInactiveSpan({\n // eslint-disable-next-line typescript/no-deprecated\n name: `mongodb.${attributes[DB_OPERATION] || 'command'}`,\n kind: SPAN_KIND.CLIENT,\n attributes,\n });\n}\n\n/**\n * Wraps the result handler so it ends the span (with error status on failure) and runs the\n * original callback re-activated under the parent span — mongodb loses the async context when\n * it invokes the callback on a later tick.\n */\nexport function patchEnd(span: Span | undefined, resultHandler: Function): Function {\n const parentSpan = getActiveSpan();\n let spanEnded = false;\n\n return function patchedEnd(this: {}, ...args: unknown[]) {\n if (!spanEnded) {\n spanEnded = true;\n const error = args[0];\n if (span) {\n if (error instanceof Error) {\n span.setStatus({ code: SPAN_STATUS_ERROR, message: error.message });\n }\n span.end();\n }\n }\n\n return withActiveSpan(parentSpan ?? null, () => resultHandler.apply(this, args));\n };\n}\n\n// The instrumentation only creates spans when there is an active parent span, to avoid emitting\n// orphaned mongodb spans.\nexport function shouldSkipInstrumentation(): boolean {\n return !getActiveSpan();\n}\n"],"names":["isObjectLike","MongodbCommandType","attributes","SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN","DB_SYSTEM","DB_SYSTEM_VALUE_MONGODB","DB_NAME","ATTR_DB_MONGODB_COLLECTION","DB_OPERATION","ATTR_DB_CONNECTION_STRING","NET_PEER_NAME","NET_PEER_PORT","DB_STATEMENT","startInactiveSpan","SPAN_KIND","getActiveSpan","SPAN_STATUS_ERROR","withActiveSpan"],"mappings":";;;;;;;AAgCA,MAAM,MAAA,GAAS,oBAAA;AAKf,SAAS,qBAAqB,UAAA,EAA6C;AACzE,EAAA,OAAO,IAAA,CAAK,SAAA,CAAU,cAAA,CAAe,UAAU,CAAC,CAAA;AAClD;AAEA,SAAS,eAAe,KAAA,EAAyB;AAC/C,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAA,OAAA,KAAW,cAAA,CAAe,OAAO,CAAC,CAAA;AAAA,EACrD;AAEA,EAAA,IAAI,YAAA,CAAa,KAAK,CAAA,EAAG;AACvB,IAAA,MAAM,UAAmC,EAAC;AAC1C,IAAA,OAAO,MAAA,CAAO,QAAQ,KAAK,CAAA,CACxB,IAAI,CAAC,CAAC,KAAK,OAAO,CAAA,KAAM,CAAC,GAAA,EAAK,cAAA,CAAe,OAAO,CAAC,CAAC,EACtD,MAAA,CAAO,CAAC,MAAM,OAAA,KAAY;AACzB,MAAA,IAAI,cAAA,CAAe,OAAO,CAAA,EAAG;AAC3B,QAAA,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAC,CAAA,GAAI,QAAQ,CAAC,CAAA;AAAA,MAC9B;AACA,MAAA,OAAO,IAAA;AAAA,IACT,GAAG,OAAO,CAAA;AAAA,EACd;AAGA,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,aAAa,KAAA,EAA4E;AAChG,EAAA,OAAOA,iBAAA,CAAa,KAAK,CAAA,IAAK,CAAC,SAAS,KAAK,CAAA;AAC/C;AAEA,SAAS,SAAS,KAAA,EAAyB;AACzC,EAAA,OAAO,OAAO,MAAA,KAAW,WAAA,IAAe,MAAA,CAAO,SAAS,KAAK,CAAA;AAC/D;AAEA,SAAS,eAAe,KAAA,EAAgE;AACtF,EAAA,OAAO,KAAA,CAAM,QAAQ,KAAK,CAAA;AAC5B;AAKO,SAAS,eAAe,OAAA,EAAmD;AAChF,EAAA,IAAI,OAAA,CAAQ,kBAAkB,MAAA,EAAW;AACvC,IAAA,OAAOC,gCAAA,CAAmB,cAAA;AAAA,EAC5B,CAAA,MAAA,IAAW,OAAA,CAAQ,aAAA,KAAkB,MAAA,EAAW;AAC9C,IAAA,OAAOA,gCAAA,CAAmB,eAAA;AAAA,EAC5B,CAAA,MAAA,IAAW,OAAA,CAAQ,QAAA,KAAa,MAAA,EAAW;AACzC,IAAA,OAAOA,gCAAA,CAAmB,SAAA;AAAA,EAC5B,CAAA,MAAA,IAAW,OAAA,CAAQ,KAAA,KAAU,MAAA,EAAW;AACtC,IAAA,OAAOA,gCAAA,CAAmB,KAAA;AAAA,EAC5B,CAAA,MAAA,IAAW,OAAA,CAAQ,SAAA,KAAc,MAAA,EAAW;AAC1C,IAAA,OAAOA,gCAAA,CAAmB,SAAA;AAAA,EAC5B,CAAA,MAAO;AACL,IAAA,OAAOA,gCAAA,CAAmB,OAAA;AAAA,EAC5B;AACF;AAKO,SAAS,mBAAA,CACd,aAAA,EACA,EAAA,EACA,OAAA,EACA,SAAA,EACgB;AAChB,EAAA,IAAI,IAAA,EAAM,IAAA;AACV,EAAA,IAAI,aAAA,EAAe;AACjB,IAAA,MAAM,SAAA,GAAY,OAAO,aAAA,CAAc,OAAA,KAAY,WAAW,aAAA,CAAc,OAAA,CAAQ,KAAA,CAAM,GAAG,CAAA,GAAI,EAAA;AACjG,IAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAC1B,MAAA,IAAA,GAAO,UAAU,CAAC,CAAA;AAClB,MAAA,IAAA,GAAO,UAAU,CAAC,CAAA;AAAA,IACpB;AAAA,EACF;AACA,EAAA,IAAI,UAAA;AACJ,EAAA,IAAI,OAAA,EAAS,SAAA,IAAa,OAAA,CAAQ,SAAA,CAAU,CAAC,CAAA,EAAG;AAC9C,IAAA,UAAA,GAAa,OAAA,CAAQ,UAAU,CAAC,CAAA;AAAA,EAClC,CAAA,MAAA,IAAW,SAAS,OAAA,EAAS;AAC3B,IAAA,UAAA,GAAa,OAAA,CAAQ,OAAA;AAAA,EACvB,CAAA,MAAO;AACL,IAAA,UAAA,GAAa,OAAA;AAAA,EACf;AAEA,EAAA,OAAO,iBAAA,CAAkB,GAAG,EAAA,EAAI,EAAA,CAAG,YAAY,IAAA,EAAM,IAAA,EAAM,YAAY,SAAS,CAAA;AAClF;AAKO,SAAS,mBAAA,CACd,EAAA,EACA,QAAA,EACA,OAAA,EACA,SAAA,EACgB;AAChB,EAAA,IAAI,IAAA;AACJ,EAAA,IAAI,IAAA;AACJ,EAAA,IAAI,UAAU,CAAA,EAAG;AACf,IAAA,IAAA,GAAO,QAAA,CAAS,CAAA,CAAE,OAAA,EAAS,IAAA,IAAQ,SAAS,CAAA,CAAE,IAAA;AAC9C,IAAA,IAAA,GAAA,CAAQ,SAAS,CAAA,CAAE,OAAA,EAAS,QAAQ,QAAA,CAAS,CAAA,CAAE,OAAO,QAAA,EAAS;AAC/D,IAAA,IAAI,IAAA,IAAQ,IAAA,IAAQ,IAAA,IAAQ,IAAA,EAAM;AAChC,MAAA,MAAM,OAAA,GAAU,SAAS,WAAA,EAAa,OAAA;AACtC,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,MAAM,eAAA,GAAkB,OAAA,CAAQ,KAAA,CAAM,GAAG,CAAA;AACzC,QAAA,IAAA,GAAO,gBAAgB,CAAC,CAAA;AACxB,QAAA,IAAA,GAAO,gBAAgB,CAAC,CAAA;AAAA,MAC1B;AAAA,IACF;AAAA,EACF;AAMA,EAAA,MAAM,CAAC,QAAQ,YAAY,CAAA,GAAI,GAAG,QAAA,EAAS,CAAE,MAAM,GAAG,CAAA;AACtD,EAAA,MAAM,UAAA,GAAa,OAAA,EAAS,KAAA,IAAS,OAAA,EAAS,CAAA,IAAK,OAAA;AAEnD,EAAA,OAAO,kBAAkB,MAAA,EAAQ,YAAA,EAAc,IAAA,EAAM,IAAA,EAAM,YAAY,SAAS,CAAA;AAClF;AAEA,SAAS,kBACP,MAAA,EACA,YAAA,EACA,IAAA,EACA,IAAA,EACA,YACA,SAAA,EACgB;AAChB,EAAA,MAAMC,YAAA,GAA6B;AAAA,IACjC,CAACC,qCAAgC,GAAG,MAAA;AAAA;AAAA,IAEpC,CAACC,oBAAS,GAAGC,+BAAA;AAAA;AAAA,IAEb,CAACC,kBAAO,GAAG,MAAA;AAAA;AAAA,IAEX,CAACC,kCAA0B,GAAG,YAAA;AAAA;AAAA,IAE9B,CAACC,uBAAY,GAAG,SAAA;AAAA;AAAA,IAEhB,CAACC,iCAAyB,GAAG,CAAA,UAAA,EAAa,IAAI,CAAA,CAAA,EAAI,IAAI,IAAI,MAAM,CAAA;AAAA,GAClE;AAEA,EAAA,IAAI,QAAQ,IAAA,EAAM;AAEhB,IAAAP,YAAA,CAAWQ,wBAAa,CAAA,GAAI,IAAA;AAC5B,IAAA,MAAM,UAAA,GAAa,QAAA,CAAS,IAAA,EAAM,EAAE,CAAA;AACpC,IAAA,IAAI,CAAC,KAAA,CAAM,UAAU,CAAA,EAAG;AAEtB,MAAAR,YAAA,CAAWS,wBAAa,CAAA,GAAI,UAAA;AAAA,IAC9B;AAAA,EACF;AAEA,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,IAAI;AAEF,MAAAT,YAAA,CAAWU,uBAAY,CAAA,GAAI,oBAAA,CAAqB,UAAU,CAAA;AAAA,IAC5D,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AAEA,EAAA,OAAOV,YAAA;AACT;AAEO,SAAS,eAAeA,YAAA,EAAkC;AAC/D,EAAA,OAAOW,sBAAA,CAAkB;AAAA;AAAA,IAEvB,IAAA,EAAM,CAAA,QAAA,EAAWX,YAAA,CAAWM,uBAAY,KAAK,SAAS,CAAA,CAAA;AAAA,IACtD,MAAMM,cAAA,CAAU,MAAA;AAAA,gBAChBZ;AAAA,GACD,CAAA;AACH;AAOO,SAAS,QAAA,CAAS,MAAwB,aAAA,EAAmC;AAClF,EAAA,MAAM,aAAaa,kBAAA,EAAc;AACjC,EAAA,IAAI,SAAA,GAAY,KAAA;AAEhB,EAAA,OAAO,SAAS,cAAwB,IAAA,EAAiB;AACvD,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA,SAAA,GAAY,IAAA;AACZ,MAAA,MAAM,KAAA,GAAQ,KAAK,CAAC,CAAA;AACpB,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,IAAI,iBAAiB,KAAA,EAAO;AAC1B,UAAA,IAAA,CAAK,UAAU,EAAE,IAAA,EAAMC,wBAAmB,OAAA,EAAS,KAAA,CAAM,SAAS,CAAA;AAAA,QACpE;AACA,QAAA,IAAA,CAAK,GAAA,EAAI;AAAA,MACX;AAAA,IACF;AAEA,IAAA,OAAOC,mBAAA,CAAe,cAAc,IAAA,EAAM,MAAM,cAAc,KAAA,CAAM,IAAA,EAAM,IAAI,CAAC,CAAA;AAAA,EACjF,CAAA;AACF;AAIO,SAAS,yBAAA,GAAqC;AACnD,EAAA,OAAO,CAACF,kBAAA,EAAc;AACxB;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../../../../../src/integrations/tracing/mongo/vendored/utils.ts"],"sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-mongodb\n * - Upstream version: @opentelemetry/instrumentation-mongodb@0.71.0\n * - Refactored to use Sentry's span APIs instead of OpenTelemetry tracing APIs\n * - The db/net attribute extraction, `db.statement` scrubbing and span\n * builder are shared with the orchestrion mongodb integration in\n * `@sentry/server-utils` so the two emit an identical span shape.\n * Only the OTel-specific callback/context helpers below remain here.\n */\n\nimport type { Span, SpanAttributes } from '@sentry/core';\nimport { getActiveSpan, SPAN_STATUS_ERROR, withActiveSpan } from '@sentry/core';\nimport {\n getV3CommandOperation,\n getV3SpanAttributes as sharedGetV3SpanAttributes,\n getV4SpanAttributes as sharedGetV4SpanAttributes,\n startMongoSpan,\n} from '@sentry/server-utils';\n\nconst ORIGIN = 'auto.db.otel.mongo';\n\nexport { getV3CommandOperation, startMongoSpan };\n\n/** Determine a span's attributes from the v4 connection context (OTel origin). */\nexport function getV4SpanAttributes(connectionCtx: any, ns: any, command?: any, operation?: string): SpanAttributes {\n return sharedGetV4SpanAttributes(connectionCtx, ns, command, operation, ORIGIN);\n}\n\n/** Determine a span's attributes from the v3 topology (OTel origin). */\nexport function getV3SpanAttributes(ns: string, topology: any, command?: any, operation?: string): SpanAttributes {\n return sharedGetV3SpanAttributes(ns, topology, command, operation, ORIGIN);\n}\n\n/**\n * Wraps the result handler so it ends the span (with error status on failure) and runs the\n * original callback re-activated under the parent span — mongodb loses the async context when\n * it invokes the callback on a later tick.\n */\nexport function patchEnd(span: Span | undefined, resultHandler: Function): Function {\n const parentSpan = getActiveSpan();\n let spanEnded = false;\n\n return function patchedEnd(this: {}, ...args: unknown[]) {\n if (!spanEnded) {\n spanEnded = true;\n const error = args[0];\n if (span) {\n if (error instanceof Error) {\n span.setStatus({ code: SPAN_STATUS_ERROR, message: error.message });\n }\n span.end();\n }\n }\n\n return withActiveSpan(parentSpan ?? null, () => resultHandler.apply(this, args));\n };\n}\n\n// The instrumentation only creates spans when there is an active parent span, to avoid emitting\n// orphaned mongodb spans.\nexport function shouldSkipInstrumentation(): boolean {\n return !getActiveSpan();\n}\n"],"names":["sharedGetV4SpanAttributes","sharedGetV3SpanAttributes","getActiveSpan","SPAN_STATUS_ERROR","withActiveSpan"],"mappings":";;;;;AAuBA,MAAM,MAAA,GAAS,oBAAA;AAKR,SAAS,mBAAA,CAAoB,aAAA,EAAoB,EAAA,EAAS,OAAA,EAAe,SAAA,EAAoC;AAClH,EAAA,OAAOA,+BAAA,CAA0B,aAAA,EAAe,EAAA,EAAI,OAAA,EAAS,WAAW,MAAM,CAAA;AAChF;AAGO,SAAS,mBAAA,CAAoB,EAAA,EAAY,QAAA,EAAe,OAAA,EAAe,SAAA,EAAoC;AAChH,EAAA,OAAOC,+BAAA,CAA0B,EAAA,EAAI,QAAA,EAAU,OAAA,EAAS,WAAW,MAAM,CAAA;AAC3E;AAOO,SAAS,QAAA,CAAS,MAAwB,aAAA,EAAmC;AAClF,EAAA,MAAM,aAAaC,kBAAA,EAAc;AACjC,EAAA,IAAI,SAAA,GAAY,KAAA;AAEhB,EAAA,OAAO,SAAS,cAAwB,IAAA,EAAiB;AACvD,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA,SAAA,GAAY,IAAA;AACZ,MAAA,MAAM,KAAA,GAAQ,KAAK,CAAC,CAAA;AACpB,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,IAAI,iBAAiB,KAAA,EAAO;AAC1B,UAAA,IAAA,CAAK,UAAU,EAAE,IAAA,EAAMC,wBAAmB,OAAA,EAAS,KAAA,CAAM,SAAS,CAAA;AAAA,QACpE;AACA,QAAA,IAAA,CAAK,GAAA,EAAI;AAAA,MACX;AAAA,IACF;AAEA,IAAA,OAAOC,mBAAA,CAAe,cAAc,IAAA,EAAM,MAAM,cAAc,KAAA,CAAM,IAAA,EAAM,IAAI,CAAC,CAAA;AAAA,EACjF,CAAA;AACF;AAIO,SAAS,yBAAA,GAAqC;AACnD,EAAA,OAAO,CAACF,kBAAA,EAAc;AACxB;;;;;;;;;"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
2
|
|
|
3
3
|
const instrumentation = require('@opentelemetry/instrumentation');
|
|
4
|
-
const attributes = require('@sentry/conventions/attributes');
|
|
5
4
|
const core = require('@sentry/core');
|
|
5
|
+
const serverUtils = require('@sentry/server-utils');
|
|
6
6
|
const utils = require('./utils.js');
|
|
7
7
|
|
|
8
8
|
const PACKAGE_NAME = "@sentry/instrumentation-mongoose";
|
|
@@ -111,7 +111,13 @@ class MongooseInstrumentation extends instrumentation.InstrumentationBase {
|
|
|
111
111
|
return (originalAggregate) => {
|
|
112
112
|
return function exec(callback) {
|
|
113
113
|
const parentSpan = this[_STORED_PARENT_SPAN];
|
|
114
|
-
const span =
|
|
114
|
+
const span = serverUtils.startMongooseLegacySpan({
|
|
115
|
+
collection: this._model.collection,
|
|
116
|
+
modelName: this._model?.modelName,
|
|
117
|
+
operation: "aggregate",
|
|
118
|
+
origin: ORIGIN,
|
|
119
|
+
parentSpan
|
|
120
|
+
});
|
|
115
121
|
return self._handleResponse(span, originalAggregate, this, arguments, callback);
|
|
116
122
|
};
|
|
117
123
|
};
|
|
@@ -124,7 +130,13 @@ class MongooseInstrumentation extends instrumentation.InstrumentationBase {
|
|
|
124
130
|
return originalExec.apply(this, arguments);
|
|
125
131
|
}
|
|
126
132
|
const parentSpan = this[_STORED_PARENT_SPAN];
|
|
127
|
-
const span =
|
|
133
|
+
const span = serverUtils.startMongooseLegacySpan({
|
|
134
|
+
collection: this.mongooseCollection,
|
|
135
|
+
modelName: this.model.modelName,
|
|
136
|
+
operation: this.op,
|
|
137
|
+
origin: ORIGIN,
|
|
138
|
+
parentSpan
|
|
139
|
+
});
|
|
128
140
|
return self._handleResponse(span, originalExec, this, arguments, callback);
|
|
129
141
|
};
|
|
130
142
|
};
|
|
@@ -133,7 +145,12 @@ class MongooseInstrumentation extends instrumentation.InstrumentationBase {
|
|
|
133
145
|
const self = this;
|
|
134
146
|
return (originalOnModelFunction) => {
|
|
135
147
|
return function method(options, callback) {
|
|
136
|
-
const span =
|
|
148
|
+
const span = serverUtils.startMongooseLegacySpan({
|
|
149
|
+
collection: this.constructor.collection,
|
|
150
|
+
modelName: this.constructor.modelName,
|
|
151
|
+
operation: op,
|
|
152
|
+
origin: ORIGIN
|
|
153
|
+
});
|
|
137
154
|
if (options instanceof Function) {
|
|
138
155
|
callback = options;
|
|
139
156
|
}
|
|
@@ -152,7 +169,12 @@ class MongooseInstrumentation extends instrumentation.InstrumentationBase {
|
|
|
152
169
|
} else if (typeof options === "function") {
|
|
153
170
|
actualCallback = options;
|
|
154
171
|
}
|
|
155
|
-
const span =
|
|
172
|
+
const span = serverUtils.startMongooseLegacySpan({
|
|
173
|
+
collection: this.constructor.collection,
|
|
174
|
+
modelName: this.constructor.modelName,
|
|
175
|
+
operation: op,
|
|
176
|
+
origin: ORIGIN
|
|
177
|
+
});
|
|
156
178
|
const result = self._handleResponse(span, originalMethod, this, arguments, actualCallback);
|
|
157
179
|
if (result && typeof result === "object") {
|
|
158
180
|
result[_ALREADY_INSTRUMENTED] = true;
|
|
@@ -168,7 +190,12 @@ class MongooseInstrumentation extends instrumentation.InstrumentationBase {
|
|
|
168
190
|
if (typeof options === "function") {
|
|
169
191
|
callback = options;
|
|
170
192
|
}
|
|
171
|
-
const span =
|
|
193
|
+
const span = serverUtils.startMongooseLegacySpan({
|
|
194
|
+
collection: this.collection,
|
|
195
|
+
modelName: this.modelName,
|
|
196
|
+
operation: op,
|
|
197
|
+
origin: ORIGIN
|
|
198
|
+
});
|
|
172
199
|
return self._handleResponse(span, original, this, arguments, callback);
|
|
173
200
|
};
|
|
174
201
|
};
|
|
@@ -195,23 +222,6 @@ class MongooseInstrumentation extends instrumentation.InstrumentationBase {
|
|
|
195
222
|
};
|
|
196
223
|
};
|
|
197
224
|
}
|
|
198
|
-
_startSpan(collection, modelName, operation, parentSpan) {
|
|
199
|
-
const attributes$1 = {
|
|
200
|
-
...utils.getAttributesFromCollection(collection),
|
|
201
|
-
// oxlint-disable-next-line typescript/no-deprecated
|
|
202
|
-
[attributes.DB_OPERATION]: operation,
|
|
203
|
-
// oxlint-disable-next-line typescript/no-deprecated
|
|
204
|
-
[attributes.DB_SYSTEM]: "mongoose",
|
|
205
|
-
// keep for backwards compatibility
|
|
206
|
-
[core.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN
|
|
207
|
-
};
|
|
208
|
-
return core.startInactiveSpan({
|
|
209
|
-
name: `mongoose.${modelName}.${operation}`,
|
|
210
|
-
kind: core.SPAN_KIND.CLIENT,
|
|
211
|
-
attributes: attributes$1,
|
|
212
|
-
parentSpan
|
|
213
|
-
});
|
|
214
|
-
}
|
|
215
225
|
_handleResponse(span, exec, originalThis, args, callback) {
|
|
216
226
|
return core.withActiveSpan(span, () => {
|
|
217
227
|
if (callback instanceof Function) {
|