dd-trace 5.101.0 → 5.103.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/ext/exporters.js +1 -0
- package/package.json +20 -17
- package/packages/datadog-esbuild/src/utils.js +2 -2
- package/packages/datadog-instrumentations/src/aerospike.js +2 -2
- package/packages/datadog-instrumentations/src/ai.js +9 -9
- package/packages/datadog-instrumentations/src/amqplib.js +6 -7
- package/packages/datadog-instrumentations/src/anthropic.js +10 -10
- package/packages/datadog-instrumentations/src/apollo-server-core.js +3 -3
- package/packages/datadog-instrumentations/src/apollo-server.js +5 -5
- package/packages/datadog-instrumentations/src/avsc.js +6 -6
- package/packages/datadog-instrumentations/src/aws-sdk.js +151 -67
- package/packages/datadog-instrumentations/src/azure-durable-functions.js +8 -8
- package/packages/datadog-instrumentations/src/bluebird.js +2 -2
- package/packages/datadog-instrumentations/src/body-parser.js +2 -2
- package/packages/datadog-instrumentations/src/cassandra-driver.js +7 -7
- package/packages/datadog-instrumentations/src/child_process.js +12 -12
- package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +41 -24
- package/packages/datadog-instrumentations/src/connect.js +7 -7
- package/packages/datadog-instrumentations/src/cookie-parser.js +4 -4
- package/packages/datadog-instrumentations/src/cookie.js +2 -2
- package/packages/datadog-instrumentations/src/couchbase.js +73 -238
- package/packages/datadog-instrumentations/src/crypto.js +4 -4
- package/packages/datadog-instrumentations/src/cucumber.js +78 -17
- package/packages/datadog-instrumentations/src/dns.js +0 -3
- package/packages/datadog-instrumentations/src/elasticsearch.js +8 -11
- package/packages/datadog-instrumentations/src/electron/preload.js +42 -0
- package/packages/datadog-instrumentations/src/electron.js +240 -0
- package/packages/datadog-instrumentations/src/express-mongo-sanitize.js +6 -6
- package/packages/datadog-instrumentations/src/express-session.js +4 -4
- package/packages/datadog-instrumentations/src/express.js +10 -11
- package/packages/datadog-instrumentations/src/fastify.js +2 -2
- package/packages/datadog-instrumentations/src/fetch.js +5 -5
- package/packages/datadog-instrumentations/src/fs.js +14 -14
- package/packages/datadog-instrumentations/src/google-cloud-pubsub.js +5 -7
- package/packages/datadog-instrumentations/src/google-genai.js +4 -4
- package/packages/datadog-instrumentations/src/graphql.js +13 -12
- package/packages/datadog-instrumentations/src/grpc/server.js +2 -2
- package/packages/datadog-instrumentations/src/hapi.js +2 -2
- package/packages/datadog-instrumentations/src/helpers/callback-instrumentor.js +9 -9
- package/packages/datadog-instrumentations/src/helpers/hook.js +4 -1
- package/packages/datadog-instrumentations/src/helpers/hooks.js +1 -0
- package/packages/datadog-instrumentations/src/helpers/instrument.js +2 -2
- package/packages/datadog-instrumentations/src/helpers/kafka.js +41 -0
- package/packages/datadog-instrumentations/src/helpers/promise.js +2 -2
- package/packages/datadog-instrumentations/src/hono.js +2 -2
- package/packages/datadog-instrumentations/src/http/client.js +6 -6
- package/packages/datadog-instrumentations/src/http/server.js +9 -9
- package/packages/datadog-instrumentations/src/ioredis.js +16 -12
- package/packages/datadog-instrumentations/src/jest.js +382 -81
- package/packages/datadog-instrumentations/src/kafkajs.js +165 -174
- package/packages/datadog-instrumentations/src/knex.js +17 -17
- package/packages/datadog-instrumentations/src/koa.js +12 -12
- package/packages/datadog-instrumentations/src/ldapjs.js +5 -5
- package/packages/datadog-instrumentations/src/light-my-request.js +2 -2
- package/packages/datadog-instrumentations/src/limitd-client.js +4 -4
- package/packages/datadog-instrumentations/src/lodash.js +4 -4
- package/packages/datadog-instrumentations/src/mariadb.js +13 -13
- package/packages/datadog-instrumentations/src/memcached.js +2 -2
- package/packages/datadog-instrumentations/src/microgateway-core.js +2 -2
- package/packages/datadog-instrumentations/src/mocha/common.js +3 -3
- package/packages/datadog-instrumentations/src/mocha/main.js +85 -11
- package/packages/datadog-instrumentations/src/mocha/utils.js +133 -16
- package/packages/datadog-instrumentations/src/mocha/worker.js +7 -5
- package/packages/datadog-instrumentations/src/mongodb-core.js +42 -30
- package/packages/datadog-instrumentations/src/mongodb.js +5 -5
- package/packages/datadog-instrumentations/src/mongoose.js +21 -21
- package/packages/datadog-instrumentations/src/mquery.js +5 -5
- package/packages/datadog-instrumentations/src/multer.js +4 -4
- package/packages/datadog-instrumentations/src/mysql.js +16 -16
- package/packages/datadog-instrumentations/src/mysql2.js +4 -4
- package/packages/datadog-instrumentations/src/net.js +14 -8
- package/packages/datadog-instrumentations/src/nyc.js +5 -5
- package/packages/datadog-instrumentations/src/openai.js +19 -19
- package/packages/datadog-instrumentations/src/oracledb.js +6 -6
- package/packages/datadog-instrumentations/src/passport-utils.js +5 -5
- package/packages/datadog-instrumentations/src/pg.js +39 -25
- package/packages/datadog-instrumentations/src/pino.js +6 -10
- package/packages/datadog-instrumentations/src/playwright.js +445 -68
- package/packages/datadog-instrumentations/src/protobufjs.js +16 -16
- package/packages/datadog-instrumentations/src/redis.js +20 -12
- package/packages/datadog-instrumentations/src/restify.js +2 -2
- package/packages/datadog-instrumentations/src/router.js +12 -12
- package/packages/datadog-instrumentations/src/stripe.js +12 -12
- package/packages/datadog-instrumentations/src/vitest.js +107 -26
- package/packages/datadog-instrumentations/src/winston.js +4 -4
- package/packages/datadog-instrumentations/src/ws.js +7 -7
- package/packages/datadog-plugin-apollo/src/gateway/request.js +1 -21
- package/packages/datadog-plugin-aws-sdk/src/base.js +70 -28
- package/packages/datadog-plugin-aws-sdk/src/services/cloudwatchlogs.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +20 -13
- package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +46 -36
- package/packages/datadog-plugin-aws-sdk/src/services/lambda.js +34 -23
- package/packages/datadog-plugin-aws-sdk/src/services/redshift.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/services/s3.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/services/sns.js +14 -15
- package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +74 -55
- package/packages/datadog-plugin-aws-sdk/src/services/stepfunctions.js +20 -18
- package/packages/datadog-plugin-aws-sdk/src/util.js +22 -0
- package/packages/datadog-plugin-child_process/src/scrub-cmd-params.js +6 -6
- package/packages/datadog-plugin-couchbase/src/index.js +58 -52
- package/packages/datadog-plugin-cucumber/src/index.js +5 -0
- package/packages/datadog-plugin-cypress/src/cypress-plugin.js +215 -26
- package/packages/datadog-plugin-cypress/src/support.js +13 -1
- package/packages/datadog-plugin-electron/src/index.js +17 -0
- package/packages/datadog-plugin-electron/src/ipc.js +143 -0
- package/packages/datadog-plugin-electron/src/net.js +82 -0
- package/packages/datadog-plugin-google-cloud-pubsub/src/consumer.js +1 -5
- package/packages/datadog-plugin-google-cloud-pubsub/src/producer.js +27 -18
- package/packages/datadog-plugin-google-cloud-pubsub/src/pubsub-push-subscription.js +3 -1
- package/packages/datadog-plugin-graphql/src/execute.js +6 -28
- package/packages/datadog-plugin-graphql/src/resolve.js +30 -35
- package/packages/datadog-plugin-graphql/src/tools/signature.js +32 -7
- package/packages/datadog-plugin-graphql/src/tools/transforms.js +118 -100
- package/packages/datadog-plugin-graphql/src/utils.js +29 -0
- package/packages/datadog-plugin-grpc/src/client.js +6 -7
- package/packages/datadog-plugin-grpc/src/util.js +57 -22
- package/packages/datadog-plugin-http/src/client.js +3 -7
- package/packages/datadog-plugin-jest/src/index.js +92 -50
- package/packages/datadog-plugin-jest/src/util.js +1 -2
- package/packages/datadog-plugin-mocha/src/index.js +5 -0
- package/packages/datadog-plugin-mongodb-core/src/index.js +36 -69
- package/packages/datadog-plugin-mysql/src/index.js +1 -1
- package/packages/datadog-plugin-openai/src/services.js +2 -1
- package/packages/datadog-plugin-openai/src/tracing.js +12 -23
- package/packages/datadog-plugin-pg/src/index.js +3 -3
- package/packages/datadog-plugin-playwright/src/index.js +5 -1
- package/packages/datadog-plugin-redis/src/index.js +18 -23
- package/packages/datadog-plugin-vitest/src/index.js +8 -1
- package/packages/datadog-shimmer/src/shimmer.js +7 -1
- package/packages/dd-trace/src/aiguard/index.js +3 -1
- package/packages/dd-trace/src/aiguard/sdk.js +36 -30
- package/packages/dd-trace/src/aiguard/tags.js +20 -11
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-password-rules.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secret-rules.js +81 -81
- package/packages/dd-trace/src/appsec/iast/security-controls/index.js +2 -2
- package/packages/dd-trace/src/appsec/iast/taint-tracking/plugins/kafka.js +2 -2
- package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +4 -4
- package/packages/dd-trace/src/appsec/iast/taint-tracking/taint-tracking-impl.js +2 -2
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-handler.js +2 -0
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/index.js +1 -3
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/utils.js +83 -48
- package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +1 -1
- package/packages/dd-trace/src/appsec/index.js +21 -24
- package/packages/dd-trace/src/appsec/reporter.js +3 -1
- package/packages/dd-trace/src/appsec/rule_manager.js +4 -2
- package/packages/dd-trace/src/appsec/waf/waf_context_wrapper.js +31 -16
- package/packages/dd-trace/src/azure_metadata.js +17 -6
- package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/index.js +4 -4
- package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +4 -2
- package/packages/dd-trace/src/ci-visibility/exporters/test-worker/index.js +6 -4
- package/packages/dd-trace/src/ci-visibility/requests/fs-cache.js +1 -1
- package/packages/dd-trace/src/config/defaults.js +3 -14
- package/packages/dd-trace/src/config/generated-config-types.d.ts +3 -1
- package/packages/dd-trace/src/config/git_properties.js +2 -2
- package/packages/dd-trace/src/config/helper.js +4 -0
- package/packages/dd-trace/src/config/index.js +2 -2
- package/packages/dd-trace/src/config/major-overrides.js +98 -0
- package/packages/dd-trace/src/config/parsers.js +7 -1
- package/packages/dd-trace/src/config/supported-configurations.json +51 -38
- package/packages/dd-trace/src/datastreams/checkpointer.js +2 -2
- package/packages/dd-trace/src/datastreams/index.js +2 -1
- package/packages/dd-trace/src/datastreams/manager.js +1 -1
- package/packages/dd-trace/src/datastreams/processor.js +3 -4
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/collector.js +2 -2
- package/packages/dd-trace/src/debugger/devtools_client/snapshot-pruner.js +1 -0
- package/packages/dd-trace/src/debugger/devtools_client/source-maps.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/state.js +2 -1
- package/packages/dd-trace/src/debugger/index.js +7 -7
- package/packages/dd-trace/src/dogstatsd.js +2 -2
- package/packages/dd-trace/src/encode/0.4.js +748 -232
- package/packages/dd-trace/src/encode/0.5.js +47 -10
- package/packages/dd-trace/src/encode/agentless-json.js +1 -1
- package/packages/dd-trace/src/exporter.js +2 -0
- package/packages/dd-trace/src/exporters/agent/index.js +2 -1
- package/packages/dd-trace/src/exporters/agentless/index.js +3 -2
- package/packages/dd-trace/src/exporters/agentless/writer.js +2 -2
- package/packages/dd-trace/src/exporters/common/buffering-exporter.js +2 -1
- package/packages/dd-trace/src/exporters/common/request.js +1 -1
- package/packages/dd-trace/src/exporters/electron/index.js +49 -0
- package/packages/dd-trace/src/external-logger/src/index.js +2 -1
- package/packages/dd-trace/src/git_metadata.js +10 -8
- package/packages/dd-trace/src/lambda/handler-paths.js +52 -0
- package/packages/dd-trace/src/lambda/index.js +62 -14
- package/packages/dd-trace/src/lambda/runtime/patch.js +21 -46
- package/packages/dd-trace/src/llmobs/index.js +13 -2
- package/packages/dd-trace/src/llmobs/plugins/ai/util.js +1 -2
- package/packages/dd-trace/src/llmobs/plugins/bedrockruntime.js +45 -15
- package/packages/dd-trace/src/llmobs/plugins/genai/util.js +6 -3
- package/packages/dd-trace/src/llmobs/sdk.js +24 -26
- package/packages/dd-trace/src/llmobs/span_processor.js +25 -5
- package/packages/dd-trace/src/llmobs/util.js +1 -0
- package/packages/dd-trace/src/llmobs/writers/base.js +2 -1
- package/packages/dd-trace/src/msgpack/chunk.js +6 -3
- package/packages/dd-trace/src/openfeature/noop.js +40 -36
- package/packages/dd-trace/src/openfeature/writers/base.js +2 -1
- package/packages/dd-trace/src/openfeature/writers/exposures.js +33 -52
- package/packages/dd-trace/src/opentelemetry/metrics/periodic_metric_reader.js +2 -1
- package/packages/dd-trace/src/opentelemetry/otlp/otlp_transformer_base.js +1 -2
- package/packages/dd-trace/src/opentelemetry/tracer.js +0 -22
- package/packages/dd-trace/src/opentracing/propagation/text_map.js +20 -9
- package/packages/dd-trace/src/opentracing/propagation/text_map_dsm.js +2 -11
- package/packages/dd-trace/src/payload-tagging/config/index.js +2 -2
- package/packages/dd-trace/src/plugins/ci_plugin.js +49 -4
- package/packages/dd-trace/src/plugins/database.js +54 -12
- package/packages/dd-trace/src/plugins/index.js +1 -0
- package/packages/dd-trace/src/plugins/plugin.js +2 -4
- package/packages/dd-trace/src/plugins/util/ci.js +9 -9
- package/packages/dd-trace/src/plugins/util/git-cache.js +23 -23
- package/packages/dd-trace/src/plugins/util/stacktrace.js +2 -2
- package/packages/dd-trace/src/plugins/util/test.js +56 -12
- package/packages/dd-trace/src/plugins/util/url.js +1 -3
- package/packages/dd-trace/src/plugins/util/user-provided-git.js +18 -16
- package/packages/dd-trace/src/plugins/util/web.js +5 -7
- package/packages/dd-trace/src/priority_sampler.js +1 -1
- package/packages/dd-trace/src/profiling/profiler.js +1 -1
- package/packages/dd-trace/src/profiling/profilers/events.js +3 -23
- package/packages/dd-trace/src/profiling/profilers/wall.js +5 -6
- package/packages/dd-trace/src/profiling/ssi-heuristics.js +1 -1
- package/packages/dd-trace/src/rate_limiter.js +1 -1
- package/packages/dd-trace/src/remote_config/scheduler.js +1 -1
- package/packages/dd-trace/src/ritm.js +2 -1
- package/packages/dd-trace/src/runtime_metrics/index.js +2 -2
- package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +5 -8
- package/packages/dd-trace/src/scope.js +3 -10
- package/packages/dd-trace/src/serverless.js +6 -6
- package/packages/dd-trace/src/service-naming/schemas/v0/messaging.js +27 -1
- package/packages/dd-trace/src/service-naming/schemas/v0/web.js +4 -0
- package/packages/dd-trace/src/service-naming/schemas/v1/messaging.js +24 -0
- package/packages/dd-trace/src/service-naming/schemas/v1/web.js +4 -0
- package/packages/dd-trace/src/span_stats.js +1 -1
- package/packages/dd-trace/src/telemetry/dependencies.js +1 -1
- package/packages/dd-trace/src/telemetry/endpoints.js +1 -1
- package/packages/dd-trace/src/telemetry/telemetry.js +2 -2
- package/packages/dd-trace/src/tracer.js +7 -7
- package/packages/dd-trace/src/lambda/runtime/ritm.js +0 -133
|
@@ -8,7 +8,7 @@ const sessionMiddlewareFinishCh = channel('datadog:express-session:middleware:fi
|
|
|
8
8
|
function wrapSessionMiddleware (sessionMiddleware) {
|
|
9
9
|
return function wrappedSessionMiddleware (req, res, next) {
|
|
10
10
|
shimmer.wrap(arguments, 2, function wrapNext (next) {
|
|
11
|
-
return function wrappedNext () {
|
|
11
|
+
return function wrappedNext (...args) {
|
|
12
12
|
if (sessionMiddlewareFinishCh.hasSubscribers) {
|
|
13
13
|
const abortController = new AbortController()
|
|
14
14
|
|
|
@@ -17,7 +17,7 @@ function wrapSessionMiddleware (sessionMiddleware) {
|
|
|
17
17
|
if (abortController.signal.aborted) return
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
return next.apply(this,
|
|
20
|
+
return next.apply(this, args)
|
|
21
21
|
}
|
|
22
22
|
})
|
|
23
23
|
|
|
@@ -26,8 +26,8 @@ function wrapSessionMiddleware (sessionMiddleware) {
|
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
function wrapSession (session) {
|
|
29
|
-
return function wrappedSession () {
|
|
30
|
-
const sessionMiddleware = session.apply(this,
|
|
29
|
+
return function wrappedSession (...args) {
|
|
30
|
+
const sessionMiddleware = session.apply(this, args)
|
|
31
31
|
|
|
32
32
|
return shimmer.wrapFunction(sessionMiddleware, wrapSessionMiddleware)
|
|
33
33
|
}
|
|
@@ -54,13 +54,12 @@ function wrapResponseRender (render) {
|
|
|
54
54
|
|
|
55
55
|
const abortController = new AbortController()
|
|
56
56
|
return responseRenderChannel.traceSync(
|
|
57
|
-
function () {
|
|
57
|
+
function (...args) {
|
|
58
58
|
if (abortController.signal.aborted) {
|
|
59
|
-
|
|
60
|
-
throw error
|
|
59
|
+
throw abortController.signal.reason || new Error('Aborted')
|
|
61
60
|
}
|
|
62
61
|
|
|
63
|
-
return render.apply(this,
|
|
62
|
+
return render.apply(this, args)
|
|
64
63
|
},
|
|
65
64
|
{
|
|
66
65
|
req: this.req,
|
|
@@ -173,7 +172,7 @@ addHook({ name: 'express', versions: ['4'], file: 'lib/express.js' }, express =>
|
|
|
173
172
|
const queryParserReadCh = channel('datadog:query:read:finish')
|
|
174
173
|
|
|
175
174
|
function publishQueryParsedAndNext (req, res, next) {
|
|
176
|
-
return shimmer.wrapFunction(next, next => function () {
|
|
175
|
+
return shimmer.wrapFunction(next, next => function (...args) {
|
|
177
176
|
if (queryParserReadCh.hasSubscribers && req) {
|
|
178
177
|
const abortController = new AbortController()
|
|
179
178
|
const query = req.query
|
|
@@ -183,7 +182,7 @@ function publishQueryParsedAndNext (req, res, next) {
|
|
|
183
182
|
if (abortController.signal.aborted) return
|
|
184
183
|
}
|
|
185
184
|
|
|
186
|
-
return next.apply(this,
|
|
185
|
+
return next.apply(this, args)
|
|
187
186
|
})
|
|
188
187
|
}
|
|
189
188
|
|
|
@@ -192,8 +191,8 @@ addHook({
|
|
|
192
191
|
versions: ['4'],
|
|
193
192
|
file: 'lib/middleware/query.js',
|
|
194
193
|
}, query => {
|
|
195
|
-
return shimmer.wrapFunction(query, query => function () {
|
|
196
|
-
const queryMiddleware = query.apply(this,
|
|
194
|
+
return shimmer.wrapFunction(query, query => function (...args) {
|
|
195
|
+
const queryMiddleware = query.apply(this, args)
|
|
197
196
|
|
|
198
197
|
return shimmer.wrapFunction(queryMiddleware, queryMiddleware => function (req, res, next) {
|
|
199
198
|
arguments[2] = publishQueryParsedAndNext(req, res, next)
|
|
@@ -205,9 +204,9 @@ addHook({
|
|
|
205
204
|
const processParamsStartCh = channel('datadog:express:process_params:start')
|
|
206
205
|
function wrapProcessParamsMethod (requestPositionInArguments) {
|
|
207
206
|
return function wrapProcessParams (original) {
|
|
208
|
-
return function wrappedProcessParams () {
|
|
207
|
+
return function wrappedProcessParams (...args) {
|
|
209
208
|
if (processParamsStartCh.hasSubscribers) {
|
|
210
|
-
const req =
|
|
209
|
+
const req = args[requestPositionInArguments]
|
|
211
210
|
const abortController = new AbortController()
|
|
212
211
|
|
|
213
212
|
processParamsStartCh.publish({
|
|
@@ -220,7 +219,7 @@ function wrapProcessParamsMethod (requestPositionInArguments) {
|
|
|
220
219
|
if (abortController.signal.aborted) return
|
|
221
220
|
}
|
|
222
221
|
|
|
223
|
-
return original.apply(this,
|
|
222
|
+
return original.apply(this, args)
|
|
224
223
|
}
|
|
225
224
|
}
|
|
226
225
|
}
|
|
@@ -25,8 +25,8 @@ const bodyPublished = new WeakSet()
|
|
|
25
25
|
function wrapFastify (fastify, hasParsingEvents) {
|
|
26
26
|
if (typeof fastify !== 'function') return fastify
|
|
27
27
|
|
|
28
|
-
return function fastifyWithTrace () {
|
|
29
|
-
const app = fastify.apply(this,
|
|
28
|
+
return function fastifyWithTrace (...args) {
|
|
29
|
+
const app = fastify.apply(this, args)
|
|
30
30
|
|
|
31
31
|
if (!app || typeof app.addHook !== 'function') return app
|
|
32
32
|
|
|
@@ -5,10 +5,10 @@ const { IS_SERVERLESS } = require('../../dd-trace/src/serverless')
|
|
|
5
5
|
if (globalThis.fetch) {
|
|
6
6
|
const globalFetch = globalThis.fetch
|
|
7
7
|
|
|
8
|
-
let
|
|
8
|
+
let wrappedFetch = (input, init) => {
|
|
9
9
|
wrapRealFetch()
|
|
10
10
|
|
|
11
|
-
return
|
|
11
|
+
return wrappedFetch(input, init)
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
function wrapRealFetch () {
|
|
@@ -20,14 +20,14 @@ if (globalThis.fetch) {
|
|
|
20
20
|
channel('dd-trace:instrumentation:load').publish({ name: 'global:fetch' })
|
|
21
21
|
})
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
wrappedFetch = wrapFetch(globalFetch)
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
if (!IS_SERVERLESS) {
|
|
27
27
|
wrapRealFetch()
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
-
globalThis.fetch = function
|
|
31
|
-
return
|
|
30
|
+
globalThis.fetch = function fetch (input, init) {
|
|
31
|
+
return wrappedFetch(input, init)
|
|
32
32
|
}
|
|
33
33
|
}
|
|
@@ -165,13 +165,13 @@ function initDirAsyncIteratorProperties (iterator) {
|
|
|
165
165
|
|
|
166
166
|
function createWrapDirAsyncIterator () {
|
|
167
167
|
return function wrapDirAsyncIterator (asyncIterator) {
|
|
168
|
-
return function wrappedAsyncIterator () {
|
|
168
|
+
return function wrappedAsyncIterator (...args) {
|
|
169
169
|
if (!kDirReadPromisified || !kDirClosePromisified) {
|
|
170
170
|
initDirAsyncIteratorProperties(this)
|
|
171
171
|
}
|
|
172
172
|
wrap(this, kDirReadPromisified, createWrapFunction('dir.', 'read'))
|
|
173
173
|
wrap(this, kDirClosePromisified, createWrapFunction('dir.', 'close'))
|
|
174
|
-
return asyncIterator.apply(this,
|
|
174
|
+
return asyncIterator.apply(this, args)
|
|
175
175
|
}
|
|
176
176
|
}
|
|
177
177
|
}
|
|
@@ -231,12 +231,12 @@ function createWatchWrapFunction (override = '') {
|
|
|
231
231
|
const name = override || original.name
|
|
232
232
|
const method = name
|
|
233
233
|
const operation = name
|
|
234
|
-
return function () {
|
|
235
|
-
if (!startChannel.hasSubscribers) return original.apply(this,
|
|
236
|
-
const ctx = getMessage(method, watchMethods[operation],
|
|
234
|
+
return function (...args) {
|
|
235
|
+
if (!startChannel.hasSubscribers) return original.apply(this, args)
|
|
236
|
+
const ctx = getMessage(method, watchMethods[operation], args, this)
|
|
237
237
|
return startChannel.runStores(ctx, () => {
|
|
238
238
|
try {
|
|
239
|
-
const result = original.apply(this,
|
|
239
|
+
const result = original.apply(this, args)
|
|
240
240
|
finishChannel.runStores(ctx, () => {})
|
|
241
241
|
return result
|
|
242
242
|
} catch (error) {
|
|
@@ -256,14 +256,14 @@ function createWrapFunction (prefix = '', override = '') {
|
|
|
256
256
|
const method = `${prefix}${name}`
|
|
257
257
|
const operation = name.match(/^(.+?)(Sync)?(\.native)?$/)[1]
|
|
258
258
|
|
|
259
|
-
return function () {
|
|
260
|
-
if (!startChannel.hasSubscribers) return original.apply(this,
|
|
259
|
+
return function (...args) {
|
|
260
|
+
if (!startChannel.hasSubscribers) return original.apply(this, args)
|
|
261
261
|
|
|
262
|
-
const lastIndex =
|
|
263
|
-
const cb = typeof
|
|
262
|
+
const lastIndex = args.length - 1
|
|
263
|
+
const cb = typeof args[lastIndex] === 'function' && args[lastIndex]
|
|
264
264
|
const params = getMethodParamsRelationByPrefix(prefix)[operation]
|
|
265
265
|
const abortController = new AbortController()
|
|
266
|
-
const ctx = { ...getMessage(method, params,
|
|
266
|
+
const ctx = { ...getMessage(method, params, args, this), abortController }
|
|
267
267
|
|
|
268
268
|
const finish = function (error, cb = () => {}) {
|
|
269
269
|
if (error !== null && typeof error === 'object') { // fs.exists receives a boolean
|
|
@@ -274,7 +274,7 @@ function createWrapFunction (prefix = '', override = '') {
|
|
|
274
274
|
}
|
|
275
275
|
|
|
276
276
|
if (cb) {
|
|
277
|
-
|
|
277
|
+
args[lastIndex] = shimmer.wrapFunction(cb, cb => function (e) {
|
|
278
278
|
return finish(e, () => cb.apply(this, arguments))
|
|
279
279
|
})
|
|
280
280
|
}
|
|
@@ -290,13 +290,13 @@ function createWrapFunction (prefix = '', override = '') {
|
|
|
290
290
|
finish(error)
|
|
291
291
|
throw error
|
|
292
292
|
} else if (cb) {
|
|
293
|
-
|
|
293
|
+
args[lastIndex](error)
|
|
294
294
|
return
|
|
295
295
|
}
|
|
296
296
|
}
|
|
297
297
|
|
|
298
298
|
try {
|
|
299
|
-
const result = original.apply(this,
|
|
299
|
+
const result = original.apply(this, args)
|
|
300
300
|
if (cb) return result
|
|
301
301
|
if (result && typeof result.then === 'function') {
|
|
302
302
|
// TODO method open returning promise and filehandle prototype not initialized, initialize it
|
|
@@ -167,17 +167,17 @@ addHook({ name: '@google-cloud/pubsub', versions: ['>=1.2'], file: 'build/src/su
|
|
|
167
167
|
* Flow: message.ack() -> store context -> acknowledge() API -> retrieve context
|
|
168
168
|
*/
|
|
169
169
|
if (Message?.prototype?.ack) {
|
|
170
|
-
shimmer.wrap(Message.prototype, 'ack', originalAck => function () {
|
|
170
|
+
shimmer.wrap(Message.prototype, 'ack', originalAck => function (...args) {
|
|
171
171
|
if (this.ackId) {
|
|
172
172
|
const ctx = {
|
|
173
173
|
message: this,
|
|
174
174
|
ackId: this.ackId,
|
|
175
175
|
}
|
|
176
176
|
|
|
177
|
-
return messageAckStoreCh.runStores(ctx, originalAck, this, ...
|
|
177
|
+
return messageAckStoreCh.runStores(ctx, originalAck, this, ...args)
|
|
178
178
|
}
|
|
179
179
|
|
|
180
|
-
return originalAck.apply(this,
|
|
180
|
+
return originalAck.apply(this, args)
|
|
181
181
|
})
|
|
182
182
|
}
|
|
183
183
|
|
|
@@ -212,7 +212,7 @@ addHook({ name: '@google-cloud/pubsub', versions: ['>=1.2'], file: 'build/src/le
|
|
|
212
212
|
return receiveFinishCh.runStores(ctx || { message }, remove, this, ...arguments)
|
|
213
213
|
})
|
|
214
214
|
|
|
215
|
-
shimmer.wrap(LeaseManager.prototype, 'clear', clear => function () {
|
|
215
|
+
shimmer.wrap(LeaseManager.prototype, 'clear', clear => function (...args) {
|
|
216
216
|
if (this._messages) {
|
|
217
217
|
for (const message of this._messages.values()) {
|
|
218
218
|
const ctx = messageContexts.get(message)
|
|
@@ -222,10 +222,8 @@ addHook({ name: '@google-cloud/pubsub', versions: ['>=1.2'], file: 'build/src/le
|
|
|
222
222
|
}
|
|
223
223
|
}
|
|
224
224
|
}
|
|
225
|
-
return clear.apply(this,
|
|
225
|
+
return clear.apply(this, args)
|
|
226
226
|
})
|
|
227
|
-
|
|
228
|
-
return obj
|
|
229
227
|
})
|
|
230
228
|
|
|
231
229
|
/**
|
|
@@ -46,10 +46,10 @@ function wrapGenerateContent (method) {
|
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
function wrapStreamIterator (iterator, ctx) {
|
|
49
|
-
return function () {
|
|
50
|
-
const itr = iterator.apply(this,
|
|
51
|
-
shimmer.wrap(itr, 'next', next => function () {
|
|
52
|
-
return next.apply(this,
|
|
49
|
+
return function (...args) {
|
|
50
|
+
const itr = iterator.apply(this, args)
|
|
51
|
+
shimmer.wrap(itr, 'next', next => function (...args) {
|
|
52
|
+
return next.apply(this, args)
|
|
53
53
|
.then(res => {
|
|
54
54
|
const { done, value: chunk } = res
|
|
55
55
|
onStreamedChunkCh.publish({ ctx, chunk, done })
|
|
@@ -169,7 +169,7 @@ function wrapExecute (execute) {
|
|
|
169
169
|
const ctx = {
|
|
170
170
|
operation,
|
|
171
171
|
args,
|
|
172
|
-
docSource:
|
|
172
|
+
docSource: source,
|
|
173
173
|
source,
|
|
174
174
|
fields: Object.create(null),
|
|
175
175
|
abortController: new AbortController(),
|
|
@@ -257,13 +257,17 @@ function callInAsyncScope (fn, thisArg, args, abortController, cb) {
|
|
|
257
257
|
}
|
|
258
258
|
|
|
259
259
|
function pathToArray (path) {
|
|
260
|
-
|
|
261
|
-
let curr = path
|
|
262
|
-
|
|
263
|
-
flattened.push(curr.key)
|
|
264
|
-
curr = curr.prev
|
|
260
|
+
let length = 0
|
|
261
|
+
for (let curr = path; curr; curr = curr.prev) {
|
|
262
|
+
length += 1
|
|
265
263
|
}
|
|
266
|
-
|
|
264
|
+
|
|
265
|
+
const flattened = new Array(length)
|
|
266
|
+
let index = length
|
|
267
|
+
for (let curr = path; curr; curr = curr.prev) {
|
|
268
|
+
flattened[--index] = curr.key
|
|
269
|
+
}
|
|
270
|
+
return flattened
|
|
267
271
|
}
|
|
268
272
|
|
|
269
273
|
function assertField (rootCtx, info, args) {
|
|
@@ -295,9 +299,7 @@ function wrapFields (type) {
|
|
|
295
299
|
|
|
296
300
|
patchedTypes.add(type)
|
|
297
301
|
|
|
298
|
-
for (const
|
|
299
|
-
const field = type._fields[key]
|
|
300
|
-
|
|
302
|
+
for (const field of Object.values(type._fields)) {
|
|
301
303
|
wrapFieldResolve(field)
|
|
302
304
|
wrapFieldType(field)
|
|
303
305
|
}
|
|
@@ -321,8 +323,7 @@ function wrapFieldType (field) {
|
|
|
321
323
|
}
|
|
322
324
|
|
|
323
325
|
function finishResolvers ({ fields }) {
|
|
324
|
-
for (const
|
|
325
|
-
const field = fields[key]
|
|
326
|
+
for (const field of Object.values(fields)) {
|
|
326
327
|
field.ctx.finishTime = field.finishTime
|
|
327
328
|
field.ctx.field = field
|
|
328
329
|
if (field.error) {
|
|
@@ -49,9 +49,9 @@ function wrapHandler (func, name) {
|
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
shimmer.wrap(call, 'emit', emit => {
|
|
52
|
-
return function () {
|
|
52
|
+
return function (...args) {
|
|
53
53
|
return emitChannel.runStores(ctx, () => {
|
|
54
|
-
return emit.apply(this,
|
|
54
|
+
return emit.apply(this, args)
|
|
55
55
|
})
|
|
56
56
|
}
|
|
57
57
|
})
|
|
@@ -28,12 +28,12 @@ function wrapServer (server) {
|
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
function wrapStart (start) {
|
|
31
|
-
return shimmer.wrapFunction(start, start => function () {
|
|
31
|
+
return shimmer.wrapFunction(start, start => function (...args) {
|
|
32
32
|
if (this && typeof this.ext === 'function') {
|
|
33
33
|
this.ext('onPreResponse', onPreResponse)
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
-
return start.apply(this,
|
|
36
|
+
return start.apply(this, args)
|
|
37
37
|
})
|
|
38
38
|
}
|
|
39
39
|
|
|
@@ -19,7 +19,7 @@ const { channel } = require('./instrument')
|
|
|
19
19
|
*
|
|
20
20
|
* @param {string} prefix
|
|
21
21
|
* @param {object} [options]
|
|
22
|
-
* @param {boolean} [options.captureResult
|
|
22
|
+
* @param {boolean} [options.captureResult] set `ctx.result` to the callback's first
|
|
23
23
|
* non-error argument before publishing `:finish`. Plugins that tag spans from the call's
|
|
24
24
|
* return value (e.g. the DNS lookup plugin) rely on this.
|
|
25
25
|
* @returns {(buildContext: (thisArg: unknown, args: IArguments) => object | undefined) =>
|
|
@@ -32,20 +32,20 @@ function createCallbackInstrumentor (prefix, { captureResult = false } = {}) {
|
|
|
32
32
|
|
|
33
33
|
return function instrument (buildContext) {
|
|
34
34
|
return function wrap (fn) {
|
|
35
|
-
return function () {
|
|
36
|
-
const lastIndex =
|
|
37
|
-
const cb =
|
|
35
|
+
return function (...args) {
|
|
36
|
+
const lastIndex = args.length - 1
|
|
37
|
+
const cb = args[lastIndex]
|
|
38
38
|
if (!startCh.hasSubscribers || typeof cb !== 'function') {
|
|
39
|
-
return fn.apply(this,
|
|
39
|
+
return fn.apply(this, args)
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
const ctx = buildContext(this,
|
|
42
|
+
const ctx = buildContext(this, args)
|
|
43
43
|
if (ctx === undefined) {
|
|
44
|
-
return fn.apply(this,
|
|
44
|
+
return fn.apply(this, args)
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
return startCh.runStores(ctx, () => {
|
|
48
|
-
|
|
48
|
+
args[lastIndex] = shimmer.wrapFunction(cb, cb => function (error, ...rest) {
|
|
49
49
|
if (error) {
|
|
50
50
|
ctx.error = error
|
|
51
51
|
errorCh.publish(ctx)
|
|
@@ -57,7 +57,7 @@ function createCallbackInstrumentor (prefix, { captureResult = false } = {}) {
|
|
|
57
57
|
})
|
|
58
58
|
|
|
59
59
|
try {
|
|
60
|
-
return fn.apply(this,
|
|
60
|
+
return fn.apply(this, args)
|
|
61
61
|
} catch (error) {
|
|
62
62
|
void error.stack // trigger getting the stack at the original throwing point
|
|
63
63
|
ctx.error = error
|
|
@@ -16,7 +16,10 @@ function getVersion (moduleBaseDir) {
|
|
|
16
16
|
return requirePackageJson(moduleBaseDir, /** @type {import('module').Module} */ (module)).version
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
// In a packaged Electron binary, built-in modules (like 'electron', 'electron/main') have no
|
|
20
|
+
// moduleBaseDir. Use the Electron version for version checks when available, otherwise fall back
|
|
21
|
+
// to the Node.js version.
|
|
22
|
+
return process.versions?.electron ?? process.version
|
|
20
23
|
}
|
|
21
24
|
|
|
22
25
|
/**
|
|
@@ -68,6 +68,7 @@ module.exports = {
|
|
|
68
68
|
cypress: () => require('../cypress'),
|
|
69
69
|
'dd-trace-api': () => require('../dd-trace-api'),
|
|
70
70
|
elasticsearch: () => require('../elasticsearch'),
|
|
71
|
+
electron: () => require('../electron'),
|
|
71
72
|
express: () => require('../express'),
|
|
72
73
|
'express-mongo-sanitize': () => require('../express-mongo-sanitize'),
|
|
73
74
|
'express-session': () => require('../express-session'),
|
|
@@ -55,9 +55,9 @@ exports.getHooks = function getHooks (names) {
|
|
|
55
55
|
* @param {object} args
|
|
56
56
|
* @param {string} args.name module name
|
|
57
57
|
* @param {string[]} [args.versions] array of semver range strings
|
|
58
|
-
* @param {string} [args.file
|
|
58
|
+
* @param {string} [args.file] path to file within package to instrument. Defaults to 'index.js'.
|
|
59
59
|
* @param {string} [args.filePattern] pattern to match files within package to instrument
|
|
60
|
-
* @param {boolean} [args.patchDefault
|
|
60
|
+
* @param {boolean} [args.patchDefault] whether to patch the default export. Defaults to true.
|
|
61
61
|
* @param {(moduleExports: unknown, version: string, isIitm?: boolean) => unknown} [hook] Patches module exports
|
|
62
62
|
*/
|
|
63
63
|
exports.addHook = function addHook ({ name, versions, file, filePattern, patchDefault }, hook) {
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
// Side-table mapping a kafkajs producer/consumer to the cluster captured at
|
|
4
|
+
// creation time. The boundary uses it to read `cluster.brokerPool` lazily on
|
|
5
|
+
// first send/consume instead of opening a parallel admin connection. A
|
|
6
|
+
// WeakMap keeps the kafkajs object itself untouched: no Symbol-keyed
|
|
7
|
+
// property to leak through `Reflect.ownKeys`, no string-keyed underscore for
|
|
8
|
+
// user serializers to pick up, and the entry drops as soon as the producer
|
|
9
|
+
// is GC'd.
|
|
10
|
+
const clientToCluster = new WeakMap()
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Shallow-clone each message and its headers so the boundary, kafkajs, and
|
|
14
|
+
* the user never share the same nested objects. With `ensureHeaders` true
|
|
15
|
+
* (header injection enabled) messages without `headers` get an empty object
|
|
16
|
+
* the producer plugin can inject into; with it false (broker rejected
|
|
17
|
+
* headers) the absence of `headers` is preserved so brokers that fail on any
|
|
18
|
+
* header field can recover.
|
|
19
|
+
*
|
|
20
|
+
* @param {Array<unknown>} messages
|
|
21
|
+
* @param {boolean} ensureHeaders
|
|
22
|
+
*/
|
|
23
|
+
function cloneMessages (messages, ensureHeaders) {
|
|
24
|
+
const result = new Array(messages.length)
|
|
25
|
+
for (let i = 0; i < messages.length; i++) {
|
|
26
|
+
const message = messages[i]
|
|
27
|
+
if (message === null || typeof message !== 'object') {
|
|
28
|
+
result[i] = message
|
|
29
|
+
} else if (message.headers) {
|
|
30
|
+
result[i] = { ...message, headers: { ...message.headers } }
|
|
31
|
+
} else {
|
|
32
|
+
result[i] = ensureHeaders ? { ...message, headers: {} } : { ...message }
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return result
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
module.exports = {
|
|
39
|
+
clientToCluster,
|
|
40
|
+
cloneMessages,
|
|
41
|
+
}
|
|
@@ -21,9 +21,9 @@ exports.wrapThen = function wrapThen (origThen) {
|
|
|
21
21
|
function wrapCallback (ar, callback) {
|
|
22
22
|
if (typeof callback !== 'function') return callback
|
|
23
23
|
|
|
24
|
-
return function () {
|
|
24
|
+
return function (...args) {
|
|
25
25
|
return ar.runInAsyncScope(() => {
|
|
26
|
-
return callback.apply(this,
|
|
26
|
+
return callback.apply(this, args)
|
|
27
27
|
})
|
|
28
28
|
}
|
|
29
29
|
}
|
|
@@ -56,10 +56,10 @@ function wrapNext (req, route, next) {
|
|
|
56
56
|
return shimmer.wrapFunction(
|
|
57
57
|
next,
|
|
58
58
|
(next) =>
|
|
59
|
-
function () {
|
|
59
|
+
function (...args) {
|
|
60
60
|
nextChannel.publish({ req, route })
|
|
61
61
|
|
|
62
|
-
return next.apply(this,
|
|
62
|
+
return next.apply(this, args)
|
|
63
63
|
}
|
|
64
64
|
)
|
|
65
65
|
}
|
|
@@ -107,8 +107,8 @@ function setupResponseInstrumentation (ctx, res) {
|
|
|
107
107
|
// For 'readable' events, wrap the read() method
|
|
108
108
|
if (eventName === 'readable' && !originalRead && !dataListenerAdded && typeof res.read === 'function') {
|
|
109
109
|
originalRead = res.read
|
|
110
|
-
res.read = function () {
|
|
111
|
-
const chunk = originalRead.apply(this,
|
|
110
|
+
res.read = function (...args) {
|
|
111
|
+
const chunk = originalRead.apply(this, args)
|
|
112
112
|
if (!dataListenerAdded) {
|
|
113
113
|
dataReadStarted = true
|
|
114
114
|
collectChunk(chunk)
|
|
@@ -189,9 +189,9 @@ function patch (http, methodName) {
|
|
|
189
189
|
let callback = args.callback
|
|
190
190
|
|
|
191
191
|
if (callback) {
|
|
192
|
-
callback = shimmer.wrapFunction(args.callback, cb => function () {
|
|
192
|
+
callback = shimmer.wrapFunction(args.callback, cb => function (...args) {
|
|
193
193
|
return asyncStartChannel.runStores(ctx, () => {
|
|
194
|
-
return cb.apply(this,
|
|
194
|
+
return cb.apply(this, args)
|
|
195
195
|
})
|
|
196
196
|
})
|
|
197
197
|
}
|
|
@@ -214,9 +214,9 @@ function patch (http, methodName) {
|
|
|
214
214
|
|
|
215
215
|
// tracked to accurately discern custom request socket timeout
|
|
216
216
|
let customRequestTimeout = false
|
|
217
|
-
req.setTimeout = function () {
|
|
217
|
+
req.setTimeout = function (...args) {
|
|
218
218
|
customRequestTimeout = true
|
|
219
|
-
return setTimeout.apply(this,
|
|
219
|
+
return setTimeout.apply(this, args)
|
|
220
220
|
}
|
|
221
221
|
|
|
222
222
|
req.emit = function (eventName, arg) {
|
|
@@ -126,9 +126,9 @@ function wrapWriteHead (writeHead) {
|
|
|
126
126
|
}
|
|
127
127
|
|
|
128
128
|
function wrapWrite (write) {
|
|
129
|
-
return function wrappedWrite () {
|
|
129
|
+
return function wrappedWrite (...args) {
|
|
130
130
|
if (!startWriteHeadCh.hasSubscribers) {
|
|
131
|
-
return write.apply(this,
|
|
131
|
+
return write.apply(this, args)
|
|
132
132
|
}
|
|
133
133
|
|
|
134
134
|
const abortController = new AbortController()
|
|
@@ -147,7 +147,7 @@ function wrapWrite (write) {
|
|
|
147
147
|
return true
|
|
148
148
|
}
|
|
149
149
|
|
|
150
|
-
return write.apply(this,
|
|
150
|
+
return write.apply(this, args)
|
|
151
151
|
}
|
|
152
152
|
}
|
|
153
153
|
|
|
@@ -177,9 +177,9 @@ function wrapSetHeader (setHeader) {
|
|
|
177
177
|
}
|
|
178
178
|
|
|
179
179
|
function wrapAppendOrRemoveHeader (originalMethod) {
|
|
180
|
-
return function wrappedAppendOrRemoveHeader () {
|
|
180
|
+
return function wrappedAppendOrRemoveHeader (...args) {
|
|
181
181
|
if (!startSetHeaderCh.hasSubscribers) {
|
|
182
|
-
return originalMethod.apply(this,
|
|
182
|
+
return originalMethod.apply(this, args)
|
|
183
183
|
}
|
|
184
184
|
|
|
185
185
|
const abortController = new AbortController()
|
|
@@ -189,14 +189,14 @@ function wrapAppendOrRemoveHeader (originalMethod) {
|
|
|
189
189
|
return this
|
|
190
190
|
}
|
|
191
191
|
|
|
192
|
-
return originalMethod.apply(this,
|
|
192
|
+
return originalMethod.apply(this, args)
|
|
193
193
|
}
|
|
194
194
|
}
|
|
195
195
|
|
|
196
196
|
function wrapEnd (end) {
|
|
197
|
-
return function wrappedEnd () {
|
|
197
|
+
return function wrappedEnd (...args) {
|
|
198
198
|
if (!startWriteHeadCh.hasSubscribers) {
|
|
199
|
-
return end.apply(this,
|
|
199
|
+
return end.apply(this, args)
|
|
200
200
|
}
|
|
201
201
|
|
|
202
202
|
const abortController = new AbortController()
|
|
@@ -215,6 +215,6 @@ function wrapEnd (end) {
|
|
|
215
215
|
return this
|
|
216
216
|
}
|
|
217
217
|
|
|
218
|
-
return end.apply(this,
|
|
218
|
+
return end.apply(this, args)
|
|
219
219
|
}
|
|
220
220
|
}
|
|
@@ -10,6 +10,8 @@ const startCh = channel('apm:ioredis:command:start')
|
|
|
10
10
|
const finishCh = channel('apm:ioredis:command:finish')
|
|
11
11
|
const errorCh = channel('apm:ioredis:command:error')
|
|
12
12
|
|
|
13
|
+
const connectionOptionsCache = new WeakMap()
|
|
14
|
+
|
|
13
15
|
function wrapRedis (Redis) {
|
|
14
16
|
shimmer.wrap(Redis.prototype, 'sendCommand', sendCommand => function (command, stream) {
|
|
15
17
|
if (!startCh.hasSubscribers) return sendCommand.apply(this, arguments)
|
|
@@ -17,21 +19,23 @@ function wrapRedis (Redis) {
|
|
|
17
19
|
if (!command || !command.promise) return sendCommand.apply(this, arguments)
|
|
18
20
|
|
|
19
21
|
const options = this.options || {}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
let connectionOptions = connectionOptionsCache.get(this)
|
|
23
|
+
if (connectionOptions === undefined) {
|
|
24
|
+
connectionOptions = { host: options.host, port: options.port }
|
|
25
|
+
connectionOptionsCache.set(this, connectionOptions)
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const ctx = {
|
|
29
|
+
db: options.db,
|
|
30
|
+
command: command.name,
|
|
31
|
+
args: command.args,
|
|
32
|
+
connectionOptions,
|
|
33
|
+
connectionName: options.connectionName,
|
|
34
|
+
}
|
|
25
35
|
return startCh.runStores(ctx, () => {
|
|
26
36
|
command.promise.then(() => finish(finishCh, errorCh, ctx), err => finish(finishCh, errorCh, ctx, err))
|
|
27
37
|
|
|
28
|
-
|
|
29
|
-
return sendCommand.apply(this, arguments)
|
|
30
|
-
} catch (err) {
|
|
31
|
-
errorCh.publish(err)
|
|
32
|
-
|
|
33
|
-
throw err
|
|
34
|
-
}
|
|
38
|
+
return sendCommand.apply(this, arguments)
|
|
35
39
|
})
|
|
36
40
|
})
|
|
37
41
|
return Redis
|