dd-trace 5.55.0 → 5.57.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/LICENSE-3rdparty.csv +1 -0
- package/index.d.ts +44 -2
- package/init.js +4 -1
- package/package.json +24 -23
- package/packages/datadog-core/src/utils/src/set.js +8 -10
- package/packages/datadog-esbuild/index.js +22 -0
- package/packages/datadog-instrumentations/src/cassandra-driver.js +43 -60
- package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +12 -12
- package/packages/datadog-instrumentations/src/cucumber.js +4 -6
- package/packages/datadog-instrumentations/src/elasticsearch.js +16 -19
- package/packages/datadog-instrumentations/src/fastify.js +91 -9
- package/packages/datadog-instrumentations/src/helpers/bundler-register.js +20 -5
- package/packages/datadog-instrumentations/src/helpers/check-require-cache.js +2 -2
- package/packages/datadog-instrumentations/src/helpers/hooks.js +1 -0
- package/packages/datadog-instrumentations/src/helpers/register.js +17 -5
- package/packages/datadog-instrumentations/src/ioredis.js +8 -13
- package/packages/datadog-instrumentations/src/iovalkey.js +10 -14
- package/packages/datadog-instrumentations/src/jest.js +423 -325
- package/packages/datadog-instrumentations/src/memcached.js +17 -24
- package/packages/datadog-instrumentations/src/mocha/main.js +7 -6
- package/packages/datadog-instrumentations/src/moleculer/client.js +9 -10
- package/packages/datadog-instrumentations/src/moleculer/server.js +12 -13
- package/packages/datadog-instrumentations/src/openai.js +30 -2
- package/packages/datadog-instrumentations/src/playwright.js +4 -1
- package/packages/datadog-instrumentations/src/prisma.js +116 -0
- package/packages/datadog-instrumentations/src/redis.js +32 -43
- package/packages/datadog-instrumentations/src/router.js +1 -1
- package/packages/datadog-instrumentations/src/sharedb.js +10 -16
- package/packages/datadog-instrumentations/src/vitest.js +4 -4
- package/packages/datadog-plugin-aws-sdk/src/base.js +6 -1
- package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +9 -4
- package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +3 -2
- package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +2 -1
- package/packages/datadog-plugin-aws-sdk/src/util.js +2 -2
- package/packages/datadog-plugin-azure-functions/src/index.js +5 -4
- package/packages/datadog-plugin-bunyan/src/index.js +2 -2
- package/packages/datadog-plugin-cassandra-driver/src/index.js +6 -2
- package/packages/datadog-plugin-confluentinc-kafka-javascript/src/batch-consumer.js +1 -1
- package/packages/datadog-plugin-confluentinc-kafka-javascript/src/consumer.js +1 -1
- package/packages/datadog-plugin-confluentinc-kafka-javascript/src/index.js +1 -1
- package/packages/datadog-plugin-confluentinc-kafka-javascript/src/producer.js +1 -1
- package/packages/datadog-plugin-cucumber/src/index.js +4 -2
- package/packages/datadog-plugin-cypress/src/cypress-plugin.js +9 -5
- package/packages/datadog-plugin-elasticsearch/src/index.js +12 -4
- package/packages/datadog-plugin-http/src/client.js +1 -0
- package/packages/datadog-plugin-http/src/server.js +2 -1
- package/packages/datadog-plugin-http2/src/client.js +1 -0
- package/packages/datadog-plugin-http2/src/server.js +1 -0
- package/packages/datadog-plugin-jest/src/index.js +4 -3
- package/packages/datadog-plugin-memcached/src/index.js +6 -2
- package/packages/datadog-plugin-mocha/src/index.js +3 -2
- package/packages/datadog-plugin-moleculer/src/client.js +15 -9
- package/packages/datadog-plugin-moleculer/src/server.js +9 -5
- package/packages/datadog-plugin-next/src/index.js +2 -1
- package/packages/datadog-plugin-openai/src/tracing.js +127 -80
- package/packages/datadog-plugin-oracledb/src/index.js +2 -1
- package/packages/datadog-plugin-pino/src/index.js +2 -2
- package/packages/datadog-plugin-prisma/src/client.js +62 -0
- package/packages/datadog-plugin-prisma/src/engine.js +81 -0
- package/packages/datadog-plugin-prisma/src/index.js +22 -0
- package/packages/datadog-plugin-protobufjs/src/schema_iterator.js +1 -1
- package/packages/datadog-plugin-redis/src/index.js +9 -3
- package/packages/datadog-plugin-router/src/index.js +1 -0
- package/packages/datadog-plugin-sharedb/src/index.js +13 -5
- package/packages/datadog-plugin-winston/src/index.js +2 -2
- package/packages/dd-trace/src/appsec/channels.js +26 -21
- package/packages/dd-trace/src/appsec/iast/analyzers/sql-injection-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/unvalidated-redirect-analyzer.js +13 -20
- package/packages/dd-trace/src/appsec/iast/security-controls/index.js +1 -1
- package/packages/dd-trace/src/appsec/iast/taint-tracking/operations-taint-object.js +44 -1
- package/packages/dd-trace/src/appsec/iast/taint-tracking/operations.js +2 -1
- package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +7 -2
- package/packages/dd-trace/src/appsec/iast/taint-tracking/source-types.js +0 -1
- package/packages/dd-trace/src/appsec/index.js +28 -2
- package/packages/dd-trace/src/appsec/rasp/utils.js +0 -5
- package/packages/dd-trace/src/appsec/reporter.js +6 -4
- package/packages/dd-trace/src/baggage.js +2 -2
- package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/worker/index.js +3 -3
- package/packages/dd-trace/src/ci-visibility/early-flake-detection/get-known-tests.js +1 -1
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/coverage-writer.js +1 -1
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +1 -1
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +2 -2
- package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +6 -6
- package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +2 -3
- package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +3 -3
- package/packages/dd-trace/src/config.js +334 -312
- package/packages/dd-trace/src/constants.js +2 -1
- package/packages/dd-trace/src/crashtracking/crashtracker.js +12 -14
- package/packages/dd-trace/src/datastreams/context.js +1 -1
- package/packages/dd-trace/src/datastreams/processor.js +1 -1
- package/packages/dd-trace/src/datastreams/writer.js +3 -3
- package/packages/dd-trace/src/debugger/devtools_client/breakpoints.js +6 -3
- package/packages/dd-trace/src/debugger/devtools_client/condition.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/index.js +2 -3
- package/packages/dd-trace/src/debugger/devtools_client/send.js +5 -1
- package/packages/dd-trace/src/debugger/devtools_client/state.js +7 -4
- package/packages/dd-trace/src/debugger/devtools_client/status.js +5 -1
- package/packages/dd-trace/src/dogstatsd.js +3 -3
- package/packages/dd-trace/src/exporters/agent/index.js +10 -5
- package/packages/dd-trace/src/exporters/agent/writer.js +4 -2
- package/packages/dd-trace/src/exporters/common/agent-info-exporter.js +2 -2
- package/packages/dd-trace/src/exporters/log/index.js +1 -1
- package/packages/dd-trace/src/exporters/span-stats/writer.js +2 -2
- package/packages/dd-trace/src/guardrails/index.js +3 -1
- package/packages/dd-trace/src/guardrails/telemetry.js +1 -1
- package/packages/dd-trace/src/llmobs/index.js +11 -5
- package/packages/dd-trace/src/llmobs/plugins/base.js +2 -2
- package/packages/dd-trace/src/llmobs/plugins/langchain/index.js +1 -1
- package/packages/dd-trace/src/llmobs/tagger.js +13 -13
- package/packages/dd-trace/src/llmobs/writers/base.js +2 -2
- package/packages/dd-trace/src/llmobs/writers/spans.js +2 -2
- package/packages/dd-trace/src/opentelemetry/tracer.js +1 -1
- package/packages/dd-trace/src/opentracing/propagation/text_map.js +22 -28
- package/packages/dd-trace/src/opentracing/span.js +1 -0
- package/packages/dd-trace/src/plugin_manager.js +3 -3
- package/packages/dd-trace/src/plugins/cache.js +2 -2
- package/packages/dd-trace/src/plugins/ci_plugin.js +11 -7
- package/packages/dd-trace/src/plugins/database.js +3 -1
- package/packages/dd-trace/src/plugins/index.js +1 -0
- package/packages/dd-trace/src/plugins/log_plugin.js +5 -1
- package/packages/dd-trace/src/plugins/outbound.js +8 -6
- package/packages/dd-trace/src/plugins/structured_log_plugin.js +9 -0
- package/packages/dd-trace/src/plugins/tracing.js +1 -1
- package/packages/dd-trace/src/plugins/util/ci.js +83 -30
- package/packages/dd-trace/src/plugins/util/git.js +1 -0
- package/packages/dd-trace/src/plugins/util/inferred_proxy.js +3 -2
- package/packages/dd-trace/src/plugins/util/ip_extractor.js +1 -0
- package/packages/dd-trace/src/plugins/util/tags.js +4 -1
- package/packages/dd-trace/src/plugins/util/test.js +80 -10
- package/packages/dd-trace/src/plugins/util/web.js +1 -0
- package/packages/dd-trace/src/profiler.js +0 -2
- package/packages/dd-trace/src/profiling/exporter_cli.js +1 -3
- package/packages/dd-trace/src/profiling/profilers/events.js +10 -2
- package/packages/dd-trace/src/profiling/ssi-heuristics.js +18 -126
- package/packages/dd-trace/src/proxy.js +12 -27
- package/packages/dd-trace/src/runtime_metrics/index.js +1 -1
- package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +14 -45
- package/packages/dd-trace/src/service-naming/schemas/v0/messaging.js +2 -2
- package/packages/dd-trace/src/service-naming/schemas/v0/storage.js +4 -0
- package/packages/dd-trace/src/service-naming/schemas/v1/messaging.js +2 -2
- package/packages/dd-trace/src/service-naming/schemas/v1/storage.js +4 -0
- package/packages/dd-trace/src/supported-configurations.json +13 -3
- package/packages/dd-trace/src/telemetry/telemetry.js +11 -4
- package/packages/dd-trace/src/tracer.js +11 -0
- package/packages/dd-trace/src/tracer_metadata.js +25 -0
- package/packages/dd-trace/src/util.js +11 -4
- package/version.js +3 -1
- package/packages/datadog-core/src/utils/src/get.js +0 -11
- package/packages/datadog-core/src/utils/src/has.js +0 -14
- package/packages/dd-trace/src/profiling/ssi-telemetry-mock-profiler.js +0 -30
|
@@ -6,8 +6,14 @@ const { addHook, channel, AsyncResource } = require('./helpers/instrument')
|
|
|
6
6
|
const errorChannel = channel('apm:fastify:middleware:error')
|
|
7
7
|
const handleChannel = channel('apm:fastify:request:handle')
|
|
8
8
|
const routeAddedChannel = channel('apm:fastify:route:added')
|
|
9
|
+
const bodyParserReadCh = channel('datadog:fastify:body-parser:finish')
|
|
10
|
+
const queryParamsReadCh = channel('datadog:fastify:query-params:finish')
|
|
11
|
+
const cookieParserReadCh = channel('datadog:fastify-cookie:read:finish')
|
|
12
|
+
const responsePayloadReadCh = channel('datadog:fastify:response:finish')
|
|
13
|
+
const pathParamsReadCh = channel('datadog:fastify:path-params:finish')
|
|
9
14
|
|
|
10
15
|
const parsingResources = new WeakMap()
|
|
16
|
+
const cookiesPublished = new WeakSet()
|
|
11
17
|
|
|
12
18
|
function wrapFastify (fastify, hasParsingEvents) {
|
|
13
19
|
if (typeof fastify !== 'function') return fastify
|
|
@@ -45,26 +51,46 @@ function wrapAddHook (addHook) {
|
|
|
45
51
|
const req = getReq(request)
|
|
46
52
|
|
|
47
53
|
try {
|
|
48
|
-
|
|
49
|
-
|
|
54
|
+
// done callback is always the last argument
|
|
55
|
+
const doneCallback = arguments[arguments.length - 1]
|
|
50
56
|
|
|
57
|
+
if (typeof doneCallback === 'function') {
|
|
51
58
|
arguments[arguments.length - 1] = function (err) {
|
|
52
59
|
publishError(err, req)
|
|
53
60
|
|
|
61
|
+
const hasCookies = request.cookies && Object.keys(request.cookies).length > 0
|
|
62
|
+
|
|
63
|
+
if (cookieParserReadCh.hasSubscribers && hasCookies && !cookiesPublished.has(req)) {
|
|
64
|
+
const res = getRes(reply)
|
|
65
|
+
const abortController = new AbortController()
|
|
66
|
+
|
|
67
|
+
cookieParserReadCh.publish({
|
|
68
|
+
req,
|
|
69
|
+
res,
|
|
70
|
+
abortController,
|
|
71
|
+
cookies: request.cookies
|
|
72
|
+
})
|
|
73
|
+
|
|
74
|
+
cookiesPublished.add(req)
|
|
75
|
+
|
|
76
|
+
if (abortController.signal.aborted) return
|
|
77
|
+
}
|
|
78
|
+
|
|
54
79
|
if (name === 'onRequest' || name === 'preParsing') {
|
|
55
80
|
const parsingResource = new AsyncResource('bound-anonymous-fn')
|
|
56
81
|
|
|
57
82
|
parsingResources.set(req, parsingResource)
|
|
58
83
|
|
|
59
84
|
return parsingResource.runInAsyncScope(() => {
|
|
60
|
-
return
|
|
85
|
+
return doneCallback.apply(this, arguments)
|
|
61
86
|
})
|
|
62
87
|
}
|
|
63
|
-
return
|
|
88
|
+
return doneCallback.apply(this, arguments)
|
|
64
89
|
}
|
|
65
90
|
|
|
66
91
|
return fn.apply(this, arguments)
|
|
67
92
|
}
|
|
93
|
+
|
|
68
94
|
const promise = fn.apply(this, arguments)
|
|
69
95
|
|
|
70
96
|
if (promise && typeof promise.catch === 'function') {
|
|
@@ -106,11 +132,52 @@ function preHandler (request, reply, done) {
|
|
|
106
132
|
|
|
107
133
|
function preValidation (request, reply, done) {
|
|
108
134
|
const req = getReq(request)
|
|
135
|
+
const res = getRes(reply)
|
|
109
136
|
const parsingResource = parsingResources.get(req)
|
|
110
137
|
|
|
111
|
-
|
|
138
|
+
const processInContext = () => {
|
|
139
|
+
let abortController
|
|
112
140
|
|
|
113
|
-
|
|
141
|
+
if (queryParamsReadCh.hasSubscribers && request.query) {
|
|
142
|
+
abortController ??= new AbortController()
|
|
143
|
+
|
|
144
|
+
queryParamsReadCh.publish({
|
|
145
|
+
req,
|
|
146
|
+
res,
|
|
147
|
+
abortController,
|
|
148
|
+
query: request.query
|
|
149
|
+
})
|
|
150
|
+
|
|
151
|
+
if (abortController.signal.aborted) return
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
if (bodyParserReadCh.hasSubscribers && request.body) {
|
|
155
|
+
abortController ??= new AbortController()
|
|
156
|
+
|
|
157
|
+
bodyParserReadCh.publish({ req, res, body: request.body, abortController })
|
|
158
|
+
|
|
159
|
+
if (abortController.signal.aborted) return
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
if (pathParamsReadCh.hasSubscribers && request.params) {
|
|
163
|
+
abortController ??= new AbortController()
|
|
164
|
+
|
|
165
|
+
pathParamsReadCh.publish({
|
|
166
|
+
req,
|
|
167
|
+
res,
|
|
168
|
+
abortController,
|
|
169
|
+
params: request.params
|
|
170
|
+
})
|
|
171
|
+
|
|
172
|
+
if (abortController.signal.aborted) return
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
done()
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
if (!parsingResource) return processInContext()
|
|
179
|
+
|
|
180
|
+
parsingResource.runInAsyncScope(processInContext)
|
|
114
181
|
}
|
|
115
182
|
|
|
116
183
|
function preParsing (request, reply, payload, done) {
|
|
@@ -126,9 +193,12 @@ function preParsing (request, reply, payload, done) {
|
|
|
126
193
|
}
|
|
127
194
|
|
|
128
195
|
function wrapSend (send, req) {
|
|
129
|
-
return function sendWithTrace (
|
|
130
|
-
if (
|
|
131
|
-
errorChannel.publish({ req, error })
|
|
196
|
+
return function sendWithTrace (payload) {
|
|
197
|
+
if (payload instanceof Error) {
|
|
198
|
+
errorChannel.publish({ req, error: payload })
|
|
199
|
+
} else if (canPublishResponsePayload(payload)) {
|
|
200
|
+
const res = getRes(this)
|
|
201
|
+
responsePayloadReadCh.publish({ req, res, body: payload })
|
|
132
202
|
}
|
|
133
203
|
|
|
134
204
|
return send.apply(this, arguments)
|
|
@@ -159,6 +229,18 @@ function onRoute (routeOptions) {
|
|
|
159
229
|
routeAddedChannel.publish({ routeOptions, onRoute })
|
|
160
230
|
}
|
|
161
231
|
|
|
232
|
+
// send() payload types: https://fastify.dev/docs/latest/Reference/Reply/#senddata
|
|
233
|
+
function canPublishResponsePayload (payload) {
|
|
234
|
+
return responsePayloadReadCh.hasSubscribers &&
|
|
235
|
+
payload &&
|
|
236
|
+
typeof payload === 'object' &&
|
|
237
|
+
typeof payload.pipe !== 'function' && // Node streams
|
|
238
|
+
typeof payload.body?.pipe !== 'function' && // Response with body stream
|
|
239
|
+
!Buffer.isBuffer(payload) && // Buffer
|
|
240
|
+
!(payload instanceof ArrayBuffer) && // ArrayBuffer
|
|
241
|
+
!ArrayBuffer.isView(payload) // TypedArray
|
|
242
|
+
}
|
|
243
|
+
|
|
162
244
|
addHook({ name: 'fastify', versions: ['>=3'] }, fastify => {
|
|
163
245
|
const wrapped = shimmer.wrapFunction(fastify, fastify => wrapFastify(fastify, true))
|
|
164
246
|
|
|
@@ -26,14 +26,29 @@ if (!dc.unsubscribe) {
|
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
} catch (err) {
|
|
29
|
+
function doHook (payload) {
|
|
30
|
+
const hook = hooks[payload.package]
|
|
31
|
+
if (!hook) {
|
|
33
32
|
log.error('esbuild-wrapped %s missing in list of hooks', payload.package)
|
|
34
|
-
|
|
33
|
+
return
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const hookFn = hook.fn ?? hook
|
|
37
|
+
if (typeof hookFn !== 'function') {
|
|
38
|
+
log.error('esbuild-wrapped hook %s is not a function', payload.package)
|
|
39
|
+
return
|
|
35
40
|
}
|
|
36
41
|
|
|
42
|
+
try {
|
|
43
|
+
hookFn()
|
|
44
|
+
} catch {
|
|
45
|
+
log.error('esbuild-wrapped %s hook failed', payload.package)
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
dc.subscribe(CHANNEL, (payload) => {
|
|
50
|
+
doHook(payload)
|
|
51
|
+
|
|
37
52
|
if (!instrumentations[payload.package]) {
|
|
38
53
|
log.error('esbuild-wrapped %s missing in list of instrumentations', payload.package)
|
|
39
54
|
return
|
|
@@ -55,7 +55,7 @@ module.exports.checkForRequiredModules = function () {
|
|
|
55
55
|
if (naughties.has(pkg)) continue
|
|
56
56
|
if (!(pkg in packages)) continue
|
|
57
57
|
|
|
58
|
-
warnings.push(`Warning: Package '${pkg}' was loaded before dd-trace! This may break instrumentation.`)
|
|
58
|
+
warnings.push(() => `Warning: Package '${pkg}' was loaded before dd-trace! This may break instrumentation.`)
|
|
59
59
|
|
|
60
60
|
naughties.add(pkg)
|
|
61
61
|
didWarn = true
|
|
@@ -87,7 +87,7 @@ module.exports.checkForPotentialConflicts = function () {
|
|
|
87
87
|
if (naughties.has(pkg)) continue
|
|
88
88
|
if (!potentialConflicts.has(pkg)) continue
|
|
89
89
|
|
|
90
|
-
warnings.push(`Warning: Package '${pkg}' may cause conflicts with dd-trace.`)
|
|
90
|
+
warnings.push(() => `Warning: Package '${pkg}' may cause conflicts with dd-trace.`)
|
|
91
91
|
|
|
92
92
|
naughties.add(pkg)
|
|
93
93
|
didWarn = true
|
|
@@ -24,6 +24,7 @@ module.exports = {
|
|
|
24
24
|
'@node-redis/client': () => require('../redis'),
|
|
25
25
|
'@opensearch-project/opensearch': () => require('../opensearch'),
|
|
26
26
|
'@opentelemetry/sdk-trace-node': () => require('../otel-sdk-trace'),
|
|
27
|
+
'@prisma/client': () => require('../prisma'),
|
|
27
28
|
'@redis/client': () => require('../redis'),
|
|
28
29
|
'@smithy/smithy-client': () => require('../aws-sdk'),
|
|
29
30
|
'@vitest/runner': { esmFirst: true, fn: () => require('../vitest') },
|
|
@@ -9,6 +9,7 @@ const log = require('../../../dd-trace/src/log')
|
|
|
9
9
|
const checkRequireCache = require('./check-require-cache')
|
|
10
10
|
const telemetry = require('../../../dd-trace/src/guardrails/telemetry')
|
|
11
11
|
const { isInServerlessEnvironment } = require('../../../dd-trace/src/serverless')
|
|
12
|
+
const { isFalse, isTrue, normalizePluginEnvName } = require('../../../dd-trace/src/util')
|
|
12
13
|
const { getEnvironmentVariables } = require('../../../dd-trace/src/config-helper')
|
|
13
14
|
|
|
14
15
|
const envs = getEnvironmentVariables()
|
|
@@ -22,16 +23,22 @@ const hooks = require('./hooks')
|
|
|
22
23
|
const instrumentations = require('./instrumentations')
|
|
23
24
|
const names = Object.keys(hooks)
|
|
24
25
|
const pathSepExpr = new RegExp(`\\${path.sep}`, 'g')
|
|
26
|
+
|
|
25
27
|
const disabledInstrumentations = new Set(
|
|
26
|
-
DD_TRACE_DISABLED_INSTRUMENTATIONS
|
|
28
|
+
DD_TRACE_DISABLED_INSTRUMENTATIONS?.split(',').map(name => normalizePluginEnvName(name, true)) ?? []
|
|
27
29
|
)
|
|
30
|
+
const reenabledInstrumentations = new Set()
|
|
28
31
|
|
|
29
32
|
// Check for DD_TRACE_<INTEGRATION>_ENABLED environment variables
|
|
30
33
|
for (const [key, value] of Object.entries(envs)) {
|
|
31
34
|
const match = key.match(/^DD_TRACE_(.+)_ENABLED$/)
|
|
32
|
-
if (match &&
|
|
33
|
-
const integration = match[1]
|
|
34
|
-
|
|
35
|
+
if (match && value) {
|
|
36
|
+
const integration = normalizePluginEnvName(match[1], true)
|
|
37
|
+
if (isFalse(value)) {
|
|
38
|
+
disabledInstrumentations.add(integration)
|
|
39
|
+
} else if (isTrue(value)) {
|
|
40
|
+
reenabledInstrumentations.add(integration)
|
|
41
|
+
}
|
|
35
42
|
}
|
|
36
43
|
}
|
|
37
44
|
|
|
@@ -58,7 +65,8 @@ const allInstrumentations = {}
|
|
|
58
65
|
|
|
59
66
|
// TODO: make this more efficient
|
|
60
67
|
for (const packageName of names) {
|
|
61
|
-
|
|
68
|
+
const normalizedPackageName = normalizePluginEnvName(packageName, true)
|
|
69
|
+
if (disabledInstrumentations.has(normalizedPackageName)) continue
|
|
62
70
|
|
|
63
71
|
const hookOptions = {}
|
|
64
72
|
|
|
@@ -67,6 +75,10 @@ for (const packageName of names) {
|
|
|
67
75
|
if (typeof hook === 'object') {
|
|
68
76
|
if (hook.serverless === false && isInServerlessEnvironment()) continue
|
|
69
77
|
|
|
78
|
+
// some integrations are disabled by default, but can be enabled by setting
|
|
79
|
+
// the DD_TRACE_<INTEGRATION>_ENABLED environment variable to true
|
|
80
|
+
if (hook.disabled && !reenabledInstrumentations.has(normalizedPackageName)) continue
|
|
81
|
+
|
|
70
82
|
hookOptions.internals = hook.esmFirst
|
|
71
83
|
hook = hook.fn
|
|
72
84
|
}
|
|
@@ -2,8 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
const {
|
|
4
4
|
channel,
|
|
5
|
-
addHook
|
|
6
|
-
AsyncResource
|
|
5
|
+
addHook
|
|
7
6
|
} = require('./helpers/instrument')
|
|
8
7
|
const shimmer = require('../../datadog-shimmer')
|
|
9
8
|
|
|
@@ -22,14 +21,9 @@ addHook({ name: 'ioredis', versions: ['>=2'] }, Redis => {
|
|
|
22
21
|
const db = options.db
|
|
23
22
|
const connectionOptions = { host: options.host, port: options.port }
|
|
24
23
|
|
|
25
|
-
const
|
|
26
|
-
return
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
const onResolve = asyncResource.bind(() => finish(finishCh, errorCh))
|
|
30
|
-
const onReject = asyncResource.bind(err => finish(finishCh, errorCh, err))
|
|
31
|
-
|
|
32
|
-
command.promise.then(onResolve, onReject)
|
|
24
|
+
const ctx = { db, command: command.name, args: command.args, connectionOptions, connectionName }
|
|
25
|
+
return startCh.runStores(ctx, () => {
|
|
26
|
+
command.promise.then(() => finish(finishCh, errorCh, ctx), err => finish(finishCh, errorCh, ctx, err))
|
|
33
27
|
|
|
34
28
|
try {
|
|
35
29
|
return sendCommand.apply(this, arguments)
|
|
@@ -43,9 +37,10 @@ addHook({ name: 'ioredis', versions: ['>=2'] }, Redis => {
|
|
|
43
37
|
return Redis
|
|
44
38
|
})
|
|
45
39
|
|
|
46
|
-
function finish (finishCh, errorCh, error) {
|
|
40
|
+
function finish (finishCh, errorCh, ctx, error) {
|
|
47
41
|
if (error) {
|
|
48
|
-
|
|
42
|
+
ctx.error = error
|
|
43
|
+
errorCh.publish(ctx)
|
|
49
44
|
}
|
|
50
|
-
finishCh.publish()
|
|
45
|
+
finishCh.publish(ctx)
|
|
51
46
|
}
|
|
@@ -2,8 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
const {
|
|
4
4
|
channel,
|
|
5
|
-
addHook
|
|
6
|
-
AsyncResource
|
|
5
|
+
addHook
|
|
7
6
|
} = require('./helpers/instrument')
|
|
8
7
|
const shimmer = require('../../datadog-shimmer')
|
|
9
8
|
|
|
@@ -22,19 +21,15 @@ addHook({ name: 'iovalkey', versions: ['>=0.0.1'] }, Valkey => {
|
|
|
22
21
|
const db = options.db
|
|
23
22
|
const connectionOptions = { host: options.host, port: options.port }
|
|
24
23
|
|
|
25
|
-
const
|
|
26
|
-
return
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
const onResolve = asyncResource.bind(() => finishCh.publish())
|
|
30
|
-
const onReject = asyncResource.bind(err => finish(finishCh, errorCh, err))
|
|
31
|
-
|
|
32
|
-
command.promise.then(onResolve, onReject)
|
|
24
|
+
const ctx = { db, command: command.name, args: command.args, connectionOptions, connectionName }
|
|
25
|
+
return startCh.runStores(ctx, () => {
|
|
26
|
+
command.promise.then(() => finish(finishCh, errorCh, ctx), err => finish(finishCh, errorCh, ctx, err))
|
|
33
27
|
|
|
34
28
|
try {
|
|
35
29
|
return sendCommand.apply(this, arguments)
|
|
36
30
|
} catch (err) {
|
|
37
|
-
|
|
31
|
+
ctx.error = err
|
|
32
|
+
errorCh.publish(ctx)
|
|
38
33
|
|
|
39
34
|
throw err
|
|
40
35
|
}
|
|
@@ -43,9 +38,10 @@ addHook({ name: 'iovalkey', versions: ['>=0.0.1'] }, Valkey => {
|
|
|
43
38
|
return Valkey
|
|
44
39
|
})
|
|
45
40
|
|
|
46
|
-
function finish (finishCh, errorCh, error) {
|
|
41
|
+
function finish (finishCh, errorCh, ctx, error) {
|
|
47
42
|
if (error) {
|
|
48
|
-
|
|
43
|
+
ctx.error = error
|
|
44
|
+
errorCh.publish(ctx)
|
|
49
45
|
}
|
|
50
|
-
finishCh.publish()
|
|
46
|
+
finishCh.publish(ctx)
|
|
51
47
|
}
|