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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const
|
|
3
|
+
const getConfig = require('../../config')
|
|
4
4
|
const {
|
|
5
5
|
GIT_COMMIT_SHA,
|
|
6
6
|
GIT_BRANCH,
|
|
@@ -36,7 +36,7 @@ function removeEmptyValues (tagsAndValues) {
|
|
|
36
36
|
// https://github.com/jonschlinkert/is-git-url/blob/396965ffabf2f46656c8af4c47bef1d69f09292e/index.js#L9C15-L9C87
|
|
37
37
|
// The `.git` suffix is optional in this version
|
|
38
38
|
function validateGitRepositoryUrl (repoUrl) {
|
|
39
|
-
return /(?:git|ssh|https?|git@[-\w.]+):(\/\/)?(.*?)(\/?|#[-\
|
|
39
|
+
return /(?:git|ssh|https?|git@[-\w.]+):(\/\/)?(.*?)(\/?|#[-\w.]+?)$/.test(repoUrl)
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
function validateGitCommitSha (gitCommitSha) {
|
|
@@ -46,20 +46,22 @@ function validateGitCommitSha (gitCommitSha) {
|
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
function getUserProviderGitMetadata () {
|
|
49
|
-
const
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
49
|
+
const {
|
|
50
|
+
DD_GIT_COMMIT_SHA,
|
|
51
|
+
DD_GIT_BRANCH,
|
|
52
|
+
DD_GIT_REPOSITORY_URL,
|
|
53
|
+
DD_GIT_TAG,
|
|
54
|
+
DD_GIT_COMMIT_MESSAGE,
|
|
55
|
+
DD_GIT_COMMIT_COMMITTER_NAME,
|
|
56
|
+
DD_GIT_COMMIT_COMMITTER_EMAIL,
|
|
57
|
+
DD_GIT_COMMIT_COMMITTER_DATE,
|
|
58
|
+
DD_GIT_COMMIT_AUTHOR_NAME,
|
|
59
|
+
DD_GIT_COMMIT_AUTHOR_EMAIL,
|
|
60
|
+
DD_GIT_COMMIT_AUTHOR_DATE,
|
|
61
|
+
DD_GIT_PULL_REQUEST_BASE_BRANCH,
|
|
62
|
+
DD_GIT_PULL_REQUEST_BASE_BRANCH_SHA,
|
|
63
|
+
DD_GIT_COMMIT_HEAD_SHA,
|
|
64
|
+
} = getConfig()
|
|
63
65
|
|
|
64
66
|
const branch = normalizeRef(DD_GIT_BRANCH)
|
|
65
67
|
let tag = normalizeRef(DD_GIT_TAG)
|
|
@@ -217,9 +217,7 @@ const web = {
|
|
|
217
217
|
}
|
|
218
218
|
}
|
|
219
219
|
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
return span
|
|
220
|
+
return startSpanHelper(tracer, name, { childOf }, traceCtx, config)
|
|
223
221
|
},
|
|
224
222
|
|
|
225
223
|
// Validate a request's status code and then add error tags if necessary
|
|
@@ -309,10 +307,10 @@ const web = {
|
|
|
309
307
|
return contexts.get(req)
|
|
310
308
|
},
|
|
311
309
|
wrapRes (context, req, res, end) {
|
|
312
|
-
return function () {
|
|
310
|
+
return function (...args) {
|
|
313
311
|
web.finishAll(context)
|
|
314
312
|
|
|
315
|
-
return end.apply(res,
|
|
313
|
+
return end.apply(res, args)
|
|
316
314
|
}
|
|
317
315
|
},
|
|
318
316
|
wrapEnd (context) {
|
|
@@ -330,8 +328,8 @@ const web = {
|
|
|
330
328
|
return ends.get(this)
|
|
331
329
|
},
|
|
332
330
|
set (value) {
|
|
333
|
-
ends.set(this, function () {
|
|
334
|
-
return storage('legacy').run(context.store, value, ...
|
|
331
|
+
ends.set(this, function (...args) {
|
|
332
|
+
return storage('legacy').run(context.store, value, ...args)
|
|
335
333
|
})
|
|
336
334
|
},
|
|
337
335
|
})
|
|
@@ -110,7 +110,7 @@ class PrioritySampler {
|
|
|
110
110
|
* Assigns a sampling priority to a span if not already set.
|
|
111
111
|
*
|
|
112
112
|
* @param {DatadogSpan} span
|
|
113
|
-
* @param {boolean} [auto
|
|
113
|
+
* @param {boolean} [auto] - Whether to use automatic sampling if no manual tags are present.
|
|
114
114
|
* @returns {void}
|
|
115
115
|
*/
|
|
116
116
|
sample (span, auto = true) {
|
|
@@ -260,7 +260,7 @@ class Profiler extends EventEmitter {
|
|
|
260
260
|
this.#lastStart = start
|
|
261
261
|
if (!this.#timer || timeout !== this._timeoutInterval) {
|
|
262
262
|
this.#timer = setTimeout(() => this._collect(snapshotKinds.PERIODIC), timeout)
|
|
263
|
-
this.#timer.unref()
|
|
263
|
+
this.#timer.unref?.()
|
|
264
264
|
} else {
|
|
265
265
|
this.#timer.refresh()
|
|
266
266
|
}
|
|
@@ -174,7 +174,7 @@ class NetDecorator {
|
|
|
174
174
|
}
|
|
175
175
|
}
|
|
176
176
|
|
|
177
|
-
class
|
|
177
|
+
class KeyValueDecorator {
|
|
178
178
|
constructor (stringTable) {
|
|
179
179
|
this.stringTable = stringTable
|
|
180
180
|
}
|
|
@@ -205,31 +205,11 @@ class ZlibDecorator {
|
|
|
205
205
|
}
|
|
206
206
|
}
|
|
207
207
|
|
|
208
|
-
class CryptoDecorator {
|
|
209
|
-
constructor (stringTable) {
|
|
210
|
-
this.stringTable = stringTable
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
decorateSample (sampleInput, item) {
|
|
214
|
-
const labels = sampleInput.label
|
|
215
|
-
const stringTable = this.stringTable
|
|
216
|
-
for (const [key, value] of Object.entries(item.detail)) {
|
|
217
|
-
switch (typeof value) {
|
|
218
|
-
case 'string':
|
|
219
|
-
labels.push(labelFromStrStr(stringTable, key, value))
|
|
220
|
-
break
|
|
221
|
-
case 'number':
|
|
222
|
-
labels.push(new Label({ key: stringTable.dedup(key), num: value }))
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
|
|
228
208
|
// Keys correspond to PerformanceEntry.entryType, values are constructor
|
|
229
209
|
// functions for type-specific decorators.
|
|
230
210
|
const decoratorTypes = {
|
|
231
|
-
crypto:
|
|
232
|
-
fs:
|
|
211
|
+
crypto: KeyValueDecorator,
|
|
212
|
+
fs: KeyValueDecorator,
|
|
233
213
|
dns: DNSDecorator,
|
|
234
214
|
gc: GCDecorator,
|
|
235
215
|
net: NetDecorator,
|
|
@@ -223,7 +223,7 @@ class NativeWallProfiler {
|
|
|
223
223
|
asyncContextsLiveGauge.mark(totalAsyncContextCount)
|
|
224
224
|
asyncContextsUsedGauge.mark(usedAsyncContextCount)
|
|
225
225
|
}, this.#telemetryHeartbeatIntervalMillis)
|
|
226
|
-
this._contextCountGaugeUpdater.unref()
|
|
226
|
+
this._contextCountGaugeUpdater.unref?.()
|
|
227
227
|
}
|
|
228
228
|
|
|
229
229
|
#enter () {
|
|
@@ -317,11 +317,10 @@ class NativeWallProfiler {
|
|
|
317
317
|
}
|
|
318
318
|
|
|
319
319
|
#setNewContext () {
|
|
320
|
-
this
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
)
|
|
320
|
+
this._currentContext = {
|
|
321
|
+
ref: {},
|
|
322
|
+
}
|
|
323
|
+
this.#pprof.time.setContext(this._currentContext)
|
|
325
324
|
}
|
|
326
325
|
|
|
327
326
|
#spanFinished (span) {
|
|
@@ -39,7 +39,7 @@ class SSIHeuristics {
|
|
|
39
39
|
setTimeout(() => {
|
|
40
40
|
this.shortLived = false
|
|
41
41
|
this._maybeTriggered()
|
|
42
|
-
}, this.longLivedThreshold).unref()
|
|
42
|
+
}, this.longLivedThreshold).unref?.()
|
|
43
43
|
|
|
44
44
|
this._onSpanCreated = this._onSpanCreated.bind(this)
|
|
45
45
|
dc.subscribe('dd-trace:span:start', this._onSpanCreated)
|
|
@@ -5,7 +5,7 @@ const limiter = require('../../../vendor/dist/limiter')
|
|
|
5
5
|
class RateLimiter {
|
|
6
6
|
/**
|
|
7
7
|
* @param {number} rateLimit - Allowed units per interval. Negative means unlimited, 0 disables.
|
|
8
|
-
* @param {'second'|'minute'|'hour'|'day'} [interval
|
|
8
|
+
* @param {'second'|'minute'|'hour'|'day'} [interval] - Time window for the limiter.
|
|
9
9
|
*/
|
|
10
10
|
constructor (rateLimit, interval = 'second') {
|
|
11
11
|
// TODO: Change rateLimit to integers. Right now these are sometimes strings, sometimes numbers.
|
|
@@ -31,6 +31,7 @@ const builtinModules = new Set(Module.builtinModules.map(stripNodePrefix))
|
|
|
31
31
|
|
|
32
32
|
function isBuiltinModuleName (name) {
|
|
33
33
|
if (typeof name !== 'string') return false
|
|
34
|
+
if (name === 'electron') return true
|
|
34
35
|
return builtinModules.has(stripNodePrefix(name))
|
|
35
36
|
}
|
|
36
37
|
|
|
@@ -101,7 +102,7 @@ function Hook (modules, options, onrequire) {
|
|
|
101
102
|
if (cache[moduleId]) {
|
|
102
103
|
// require.cache was potentially altered externally
|
|
103
104
|
const cacheEntry = require.cache[filename]
|
|
104
|
-
if (cacheEntry && cacheEntry.exports !== cache[
|
|
105
|
+
if (cacheEntry && cacheEntry.exports !== cache[moduleId].original) {
|
|
105
106
|
return cacheEntry.exports
|
|
106
107
|
}
|
|
107
108
|
|
|
@@ -8,14 +8,9 @@ const process = require('process')
|
|
|
8
8
|
const { performance, PerformanceObserver, monitorEventLoopDelay } = require('perf_hooks')
|
|
9
9
|
const { DogStatsDClient, MetricsAggregationClient } = require('../dogstatsd')
|
|
10
10
|
const log = require('../log')
|
|
11
|
-
const { getValueFromEnvSources } = require('../config/helper')
|
|
12
11
|
|
|
13
12
|
const { NODE_MAJOR } = require('../../../../version')
|
|
14
13
|
const processTags = require('../process-tags')
|
|
15
|
-
// TODO: This environment variable may not be changed, since the agent expects a flush every ten seconds.
|
|
16
|
-
// It is only a variable for testing. Think about alternatives.
|
|
17
|
-
const DD_RUNTIME_METRICS_FLUSH_INTERVAL = getValueFromEnvSources('DD_RUNTIME_METRICS_FLUSH_INTERVAL') ?? '10000'
|
|
18
|
-
const INTERVAL = Number.parseInt(DD_RUNTIME_METRICS_FLUSH_INTERVAL, 10)
|
|
19
14
|
|
|
20
15
|
const eventLoopDelayResolution = 4
|
|
21
16
|
|
|
@@ -40,6 +35,8 @@ module.exports = {
|
|
|
40
35
|
*/
|
|
41
36
|
start (config) {
|
|
42
37
|
this.stop()
|
|
38
|
+
// The agent expects a flush every ten seconds, so this is for tests only.
|
|
39
|
+
const flushIntervalMs = config.DD_RUNTIME_METRICS_FLUSH_INTERVAL
|
|
43
40
|
const clientConfig = DogStatsDClient.generateClientConfig(config)
|
|
44
41
|
|
|
45
42
|
if (config.DD_EXPERIMENTAL_PROPAGATE_PROCESS_TAGS_ENABLED) {
|
|
@@ -81,7 +78,7 @@ module.exports = {
|
|
|
81
78
|
captureNativeMetrics(trackEventLoop, trackGc)
|
|
82
79
|
captureCommonMetrics(trackEventLoop)
|
|
83
80
|
client.flush()
|
|
84
|
-
},
|
|
81
|
+
}, flushIntervalMs)
|
|
85
82
|
} else {
|
|
86
83
|
lastCpuUsage = process.cpuUsage()
|
|
87
84
|
|
|
@@ -103,10 +100,10 @@ module.exports = {
|
|
|
103
100
|
captureEventLoopDelay()
|
|
104
101
|
}
|
|
105
102
|
client.flush()
|
|
106
|
-
},
|
|
103
|
+
}, flushIntervalMs)
|
|
107
104
|
}
|
|
108
105
|
|
|
109
|
-
interval.unref()
|
|
106
|
+
interval.unref?.()
|
|
110
107
|
},
|
|
111
108
|
|
|
112
109
|
stop () {
|
|
@@ -3,14 +3,11 @@
|
|
|
3
3
|
const { storage } = require('../../datadog-core')
|
|
4
4
|
|
|
5
5
|
// TODO: refactor bind to use shimmer once the new internal tracer lands
|
|
6
|
-
|
|
7
|
-
const originals = new WeakMap()
|
|
8
|
-
|
|
9
6
|
class Scope {
|
|
10
7
|
active () {
|
|
11
8
|
const store = storage('legacy').getStore()
|
|
12
9
|
|
|
13
|
-
return
|
|
10
|
+
return store?.span ?? null
|
|
14
11
|
}
|
|
15
12
|
|
|
16
13
|
activate (span, callback) {
|
|
@@ -40,15 +37,11 @@ class Scope {
|
|
|
40
37
|
const scope = this
|
|
41
38
|
const spanOrActive = this._spanOrActive(span)
|
|
42
39
|
|
|
43
|
-
|
|
40
|
+
return function (...args) {
|
|
44
41
|
return scope.activate(spanOrActive, () => {
|
|
45
|
-
return fn.apply(this,
|
|
42
|
+
return fn.apply(this, args)
|
|
46
43
|
})
|
|
47
44
|
}
|
|
48
|
-
|
|
49
|
-
originals.set(bound, fn)
|
|
50
|
-
|
|
51
|
-
return bound
|
|
52
45
|
}
|
|
53
46
|
|
|
54
47
|
_spanOrActive (span) {
|
|
@@ -17,18 +17,18 @@ function getIsGCPFunction () {
|
|
|
17
17
|
/**
|
|
18
18
|
* Enable GCP Pub/Sub PUSH subscription tracing for Cloud Run (K_SERVICE present).
|
|
19
19
|
* PUSH: GCP sends HTTP POST requests to the service with message data in headers.
|
|
20
|
+
*
|
|
21
|
+
* Stays on the env helper to avoid closing the
|
|
22
|
+
* `config -> serverless -> config` import cycle.
|
|
20
23
|
*/
|
|
21
24
|
function enableGCPPubSubPushSubscription () {
|
|
22
|
-
|
|
23
|
-
|
|
25
|
+
return getEnvironmentVariable('K_SERVICE') !== undefined &&
|
|
26
|
+
!isFalse(getValueFromEnvSources('DD_TRACE_GCP_PUBSUB_PUSH_ENABLED'))
|
|
24
27
|
}
|
|
25
28
|
|
|
26
29
|
function getIsAzureFunction () {
|
|
27
|
-
|
|
28
|
-
getEnvironmentVariable('FUNCTIONS_EXTENSION_VERSION') !== undefined &&
|
|
30
|
+
return getEnvironmentVariable('FUNCTIONS_EXTENSION_VERSION') !== undefined &&
|
|
29
31
|
getEnvironmentVariable('FUNCTIONS_WORKER_RUNTIME') !== undefined
|
|
30
|
-
|
|
31
|
-
return isAzureFunction
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
function getIsFlexConsumptionAzureFunction () {
|
|
@@ -32,6 +32,14 @@ const messaging = {
|
|
|
32
32
|
serviceName: ({ tracerService }) => `${tracerService}-azure-service-bus`,
|
|
33
33
|
serviceSource: integrationSource('azure-service-bus'),
|
|
34
34
|
},
|
|
35
|
+
'electron:ipc:main:send': {
|
|
36
|
+
opName: () => 'electron.main.send',
|
|
37
|
+
serviceName: identityService,
|
|
38
|
+
},
|
|
39
|
+
'electron:ipc:renderer:send': {
|
|
40
|
+
opName: () => 'electron.renderer.send',
|
|
41
|
+
serviceName: identityService,
|
|
42
|
+
},
|
|
35
43
|
'google-cloud-pubsub': {
|
|
36
44
|
opName: () => 'pubsub.request',
|
|
37
45
|
serviceName: ({ tracerService }) => `${tracerService}-pubsub`,
|
|
@@ -79,9 +87,27 @@ const messaging = {
|
|
|
79
87
|
serviceName: amqpServiceName,
|
|
80
88
|
serviceSource: integrationSource('amqp'),
|
|
81
89
|
},
|
|
90
|
+
'electron:ipc:main:receive': {
|
|
91
|
+
opName: () => 'electron.main.receive',
|
|
92
|
+
serviceName: identityService,
|
|
93
|
+
},
|
|
94
|
+
'electron:ipc:main:handle': {
|
|
95
|
+
opName: () => 'electron.main.handle',
|
|
96
|
+
serviceName: identityService,
|
|
97
|
+
},
|
|
98
|
+
'electron:ipc:renderer:receive': {
|
|
99
|
+
opName: () => 'electron.renderer.receive',
|
|
100
|
+
serviceName: identityService,
|
|
101
|
+
},
|
|
82
102
|
'google-cloud-pubsub': {
|
|
83
103
|
opName: () => 'pubsub.receive',
|
|
84
|
-
serviceName:
|
|
104
|
+
serviceName: ({ tracerService }) => `${tracerService}-pubsub`,
|
|
105
|
+
serviceSource: integrationSource('google-cloud-pubsub'),
|
|
106
|
+
},
|
|
107
|
+
'google-cloud-pubsub-push-subscription': {
|
|
108
|
+
opName: () => 'pubsub.receive',
|
|
109
|
+
serviceName: ({ tracerService }) => `${tracerService}-pubsub`,
|
|
110
|
+
serviceSource: integrationSource('google-cloud-pubsub'),
|
|
85
111
|
},
|
|
86
112
|
kafkajs: {
|
|
87
113
|
opName: () => 'kafka.consume',
|
|
@@ -54,6 +54,10 @@ const web = {
|
|
|
54
54
|
serviceName: httpPluginClientService,
|
|
55
55
|
serviceSource: optionServiceSource,
|
|
56
56
|
},
|
|
57
|
+
'electron:net:request': {
|
|
58
|
+
opName: () => 'http.request',
|
|
59
|
+
serviceName: httpPluginClientService,
|
|
60
|
+
},
|
|
57
61
|
},
|
|
58
62
|
server: {
|
|
59
63
|
'apollo.gateway.request': {
|
|
@@ -24,6 +24,14 @@ const messaging = {
|
|
|
24
24
|
opName: () => 'azure.eventhubs.send',
|
|
25
25
|
serviceName: identityService,
|
|
26
26
|
},
|
|
27
|
+
'electron:ipc:main:send': {
|
|
28
|
+
opName: () => 'electron.main.send',
|
|
29
|
+
serviceName: identityService,
|
|
30
|
+
},
|
|
31
|
+
'electron:ipc:renderer:send': {
|
|
32
|
+
opName: () => 'electron.renderer.send',
|
|
33
|
+
serviceName: identityService,
|
|
34
|
+
},
|
|
27
35
|
'google-cloud-pubsub': {
|
|
28
36
|
opName: () => 'gcp.pubsub.send',
|
|
29
37
|
serviceName: identityService,
|
|
@@ -53,10 +61,26 @@ const messaging = {
|
|
|
53
61
|
consumer: {
|
|
54
62
|
amqplib: amqpInbound,
|
|
55
63
|
amqp10: amqpInbound,
|
|
64
|
+
'electron:ipc:main:receive': {
|
|
65
|
+
opName: () => 'electron.main.receive',
|
|
66
|
+
serviceName: identityService,
|
|
67
|
+
},
|
|
68
|
+
'electron:ipc:main:handle': {
|
|
69
|
+
opName: () => 'electron.main.handle',
|
|
70
|
+
serviceName: identityService,
|
|
71
|
+
},
|
|
72
|
+
'electron:ipc:renderer:receive': {
|
|
73
|
+
opName: () => 'electron.renderer.receive',
|
|
74
|
+
serviceName: identityService,
|
|
75
|
+
},
|
|
56
76
|
'google-cloud-pubsub': {
|
|
57
77
|
opName: () => 'gcp.pubsub.process',
|
|
58
78
|
serviceName: identityService,
|
|
59
79
|
},
|
|
80
|
+
'google-cloud-pubsub-push-subscription': {
|
|
81
|
+
opName: () => 'gcp.pubsub.process',
|
|
82
|
+
serviceName: identityService,
|
|
83
|
+
},
|
|
60
84
|
kafkajs: {
|
|
61
85
|
opName: () => 'kafka.process',
|
|
62
86
|
serviceName: identityService,
|
|
@@ -48,6 +48,10 @@ const web = {
|
|
|
48
48
|
opName: () => 'undici.request',
|
|
49
49
|
serviceName: httpPluginClientService,
|
|
50
50
|
},
|
|
51
|
+
'electron:net:request': {
|
|
52
|
+
opName: () => 'http.client.request',
|
|
53
|
+
serviceName: httpPluginClientService,
|
|
54
|
+
},
|
|
51
55
|
},
|
|
52
56
|
server: {
|
|
53
57
|
'apollo.gateway.request': {
|
|
@@ -291,7 +291,7 @@ function heartbeat (config, application) {
|
|
|
291
291
|
|
|
292
292
|
const { reqType, payload } = createPayload('app-heartbeat')
|
|
293
293
|
sendData(config, application, host, reqType, payload, updateRetryData)
|
|
294
|
-
}, config.telemetry.heartbeatInterval).unref()
|
|
294
|
+
}, config.telemetry.heartbeatInterval).unref?.()
|
|
295
295
|
}
|
|
296
296
|
|
|
297
297
|
/** @param {import('../config/config-base')} config */
|
|
@@ -307,7 +307,7 @@ function extendedHeartbeat (config) {
|
|
|
307
307
|
heartbeatFailedDependencies = []
|
|
308
308
|
}
|
|
309
309
|
sendData(config, application, host, 'app-extended-heartbeat', appPayload)
|
|
310
|
-
}, config.telemetry.extendedHeartbeatInterval).unref()
|
|
310
|
+
}, config.telemetry.extendedHeartbeatInterval).unref?.()
|
|
311
311
|
}
|
|
312
312
|
|
|
313
313
|
/**
|
|
@@ -100,27 +100,27 @@ class DatadogTracer extends Tracer {
|
|
|
100
100
|
wrap (name, options, fn) {
|
|
101
101
|
const tracer = this
|
|
102
102
|
|
|
103
|
-
return function () {
|
|
103
|
+
return function (...args) {
|
|
104
104
|
let optionsObj = options
|
|
105
105
|
if (typeof optionsObj === 'function' && typeof fn === 'function') {
|
|
106
|
-
optionsObj = optionsObj.apply(this,
|
|
106
|
+
optionsObj = optionsObj.apply(this, args)
|
|
107
107
|
}
|
|
108
108
|
|
|
109
|
-
const lastArgId =
|
|
110
|
-
const cb =
|
|
109
|
+
const lastArgId = args.length - 1
|
|
110
|
+
const cb = args[lastArgId]
|
|
111
111
|
|
|
112
112
|
if (typeof cb === 'function') {
|
|
113
113
|
const scopeBoundCb = tracer.scope().bind(cb)
|
|
114
114
|
return tracer.trace(name, optionsObj, (span, done) => {
|
|
115
|
-
|
|
115
|
+
args[lastArgId] = function (err) {
|
|
116
116
|
done(err)
|
|
117
117
|
return scopeBoundCb.apply(this, arguments)
|
|
118
118
|
}
|
|
119
119
|
|
|
120
|
-
return fn.apply(this,
|
|
120
|
+
return fn.apply(this, args)
|
|
121
121
|
})
|
|
122
122
|
}
|
|
123
|
-
return tracer.trace(name, optionsObj, () => fn.apply(this,
|
|
123
|
+
return tracer.trace(name, optionsObj, () => fn.apply(this, args))
|
|
124
124
|
}
|
|
125
125
|
}
|
|
126
126
|
|