dd-trace 6.12.0 → 6.14.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 +3 -1
- package/ci/init.js +8 -3
- package/ci/test-optimization-validation/ci-package-scripts.js +2 -2
- package/ci/test-optimization-validation/ci-remediation.js +6 -6
- package/ci/test-optimization-validation/command-blocker.js +7 -5
- package/ci/test-optimization-validation/framework-adapters/cucumber.js +1 -1
- package/ci/test-optimization-validation/framework-adapters/cypress.js +9 -11
- package/ci/test-optimization-validation/framework-adapters/vitest.js +3 -3
- package/ci/test-optimization-validation/package-check.js +1 -1
- package/ci/test-optimization-validation/report-writer.js +7 -5
- package/ci/test-optimization-validation/scenarios/ci-wiring.js +5 -4
- package/ci/vitest-no-worker-init-runner-setup.mjs +8 -0
- package/ci/vitest-no-worker-init-setup.mjs +13 -13
- package/ci/vitest-no-worker-init-v5-setup.mjs +4 -0
- package/index.d.ts +127 -26
- package/package.json +22 -19
- package/packages/datadog-esbuild/index.js +3 -1
- package/packages/datadog-instrumentations/src/bunyan.js +4 -2
- package/packages/datadog-instrumentations/src/cypress-config.js +19 -17
- package/packages/datadog-instrumentations/src/fs.js +24 -20
- package/packages/datadog-instrumentations/src/google-cloud-vertexai.js +2 -2
- package/packages/datadog-instrumentations/src/graphql.js +16 -16
- package/packages/datadog-instrumentations/src/helpers/bunyan.js +12 -3
- package/packages/datadog-instrumentations/src/helpers/graphql-jit-runtime.js +504 -0
- package/packages/datadog-instrumentations/src/helpers/hooks.js +2 -0
- package/packages/datadog-instrumentations/src/helpers/pool-acquire.js +266 -0
- package/packages/datadog-instrumentations/src/helpers/rewriter/compiler.js +1 -2
- package/packages/datadog-instrumentations/src/helpers/rewriter/index.js +95 -30
- package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/ai.js +0 -25
- package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/graphql-jit.js +83 -0
- package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/graphql.js +85 -1
- package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/index.js +1 -0
- package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/mercurius.js +30 -12
- package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/playwright.js +13 -0
- package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/webdriverio.js +279 -0
- package/packages/datadog-instrumentations/src/helpers/rewriter/targets.json +12 -1
- package/packages/datadog-instrumentations/src/helpers/rewriter/transforms.js +562 -27
- package/packages/datadog-instrumentations/src/jest.js +165 -38
- package/packages/datadog-instrumentations/src/knex.js +76 -0
- package/packages/datadog-instrumentations/src/mariadb-bundle.js +1597 -0
- package/packages/datadog-instrumentations/src/mariadb.js +13 -0
- package/packages/datadog-instrumentations/src/mocha/common.js +59 -2
- package/packages/datadog-instrumentations/src/mocha/main.js +25 -15
- package/packages/datadog-instrumentations/src/mocha/utils.js +2 -1
- package/packages/datadog-instrumentations/src/mocha/webdriverio-protocol.js +98 -0
- package/packages/datadog-instrumentations/src/mocha/worker.js +12 -8
- package/packages/datadog-instrumentations/src/net.js +14 -17
- package/packages/datadog-instrumentations/src/next.js +212 -62
- package/packages/datadog-instrumentations/src/openai.js +42 -40
- package/packages/datadog-instrumentations/src/pg.js +15 -0
- package/packages/datadog-instrumentations/src/pino.js +15 -4
- package/packages/datadog-instrumentations/src/playwright.js +137 -27
- package/packages/datadog-instrumentations/src/rum-browser-scripts.js +40 -0
- package/packages/datadog-instrumentations/src/sequelize.js +94 -2
- package/packages/datadog-instrumentations/src/undici.js +53 -4
- package/packages/datadog-instrumentations/src/vitest-main-no-worker-init.js +44 -7
- package/packages/datadog-instrumentations/src/vitest-main.js +92 -9
- package/packages/datadog-instrumentations/src/vitest-worker.js +82 -14
- package/packages/datadog-instrumentations/src/webdriverio.js +986 -1
- package/packages/datadog-instrumentations/src/winston.js +6 -3
- package/packages/datadog-plugin-amqp10/src/consumer.js +3 -1
- package/packages/datadog-plugin-amqp10/src/producer.js +3 -1
- package/packages/datadog-plugin-amqp10/src/util.js +2 -1
- package/packages/datadog-plugin-avsc/src/schema_iterator.js +6 -1
- package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/utils.js +16 -5
- package/packages/datadog-plugin-cassandra-driver/src/index.js +8 -3
- package/packages/datadog-plugin-cucumber/src/index.js +0 -2
- package/packages/datadog-plugin-cypress/src/cypress-plugin.js +262 -48
- package/packages/datadog-plugin-cypress/src/support.js +1 -0
- package/packages/datadog-plugin-google-cloud-pubsub/src/client.js +4 -1
- package/packages/datadog-plugin-graphql/src/execute.js +998 -196
- package/packages/datadog-plugin-graphql/src/index.js +27 -7
- package/packages/datadog-plugin-graphql/src/jit.js +136 -0
- package/packages/datadog-plugin-graphql/src/request.js +18 -27
- package/packages/datadog-plugin-graphql/src/resolve-error.js +108 -0
- package/packages/datadog-plugin-graphql/src/tools/signature.js +1 -2
- package/packages/datadog-plugin-graphql/src/tools/transforms.js +45 -3
- package/packages/datadog-plugin-graphql/src/utils.js +208 -120
- package/packages/datadog-plugin-graphql/src/validate.js +10 -23
- package/packages/datadog-plugin-http/src/client.js +2 -15
- package/packages/datadog-plugin-http2/src/client.js +2 -15
- package/packages/datadog-plugin-jest/src/index.js +0 -6
- package/packages/datadog-plugin-langchain/src/tracing.js +7 -0
- package/packages/datadog-plugin-mocha/src/index.js +403 -75
- package/packages/datadog-plugin-mongodb-core/src/query.js +6 -0
- package/packages/datadog-plugin-mysql/src/index.js +41 -15
- package/packages/datadog-plugin-net/src/tcp.js +3 -1
- package/packages/datadog-plugin-next/src/index.js +63 -29
- package/packages/datadog-plugin-openai-agents/src/integration.js +15 -11
- package/packages/datadog-plugin-playwright/src/index.js +176 -28
- package/packages/datadog-plugin-undici/src/index.js +29 -56
- package/packages/datadog-plugin-vitest/src/index.js +6 -12
- package/packages/dd-trace/src/aiguard/evaluation.js +96 -21
- package/packages/dd-trace/src/aiguard/integrations/vercel-ai.js +2 -3
- package/packages/dd-trace/src/aiguard/messages/anthropic.js +29 -10
- package/packages/dd-trace/src/aiguard/messages/openai.js +8 -1
- package/packages/dd-trace/src/aiguard/messages/vercel-ai.js +20 -6
- package/packages/dd-trace/src/aiguard/noop.js +9 -1
- package/packages/dd-trace/src/aiguard/redaction.js +183 -0
- package/packages/dd-trace/src/aiguard/sdk.js +7 -2
- package/packages/dd-trace/src/aiguard/tags.js +2 -0
- package/packages/dd-trace/src/appsec/api_security/index.js +23 -6
- package/packages/dd-trace/src/appsec/api_security/sampler.js +99 -40
- package/packages/dd-trace/src/appsec/graphql.js +6 -2
- package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +3 -3
- package/packages/dd-trace/src/appsec/iast/taint-tracking/taint-tracking-impl.js +2 -1
- package/packages/dd-trace/src/appsec/iast/telemetry/span-tags.js +8 -2
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/sql-sensitive-analyzer.js +11 -36
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/url-sensitive-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/utils.js +10 -9
- package/packages/dd-trace/src/appsec/lambda.js +44 -26
- package/packages/dd-trace/src/appsec/rule_manager.js +2 -0
- package/packages/dd-trace/src/ci-visibility/encode/json-encoder.js +32 -2
- package/packages/dd-trace/src/ci-visibility/exporters/agent-proxy/index.js +8 -8
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/coverage-writer.js +6 -4
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +20 -4
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/request-tracker.js +7 -150
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +7 -6
- package/packages/dd-trace/src/ci-visibility/exporters/agents.js +54 -0
- package/packages/dd-trace/src/ci-visibility/exporters/ci-validation/writer.js +1 -2
- package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +397 -234
- package/packages/dd-trace/src/ci-visibility/exporters/limits.js +9 -0
- package/packages/dd-trace/src/ci-visibility/exporters/request.js +323 -31
- package/packages/dd-trace/src/ci-visibility/exporters/settings-cache-key.js +42 -0
- package/packages/dd-trace/src/ci-visibility/final-flush.js +21 -0
- package/packages/dd-trace/src/ci-visibility/requests/fs-cache.js +57 -18
- package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +0 -3
- package/packages/dd-trace/src/ci-visibility/requests/upload-test-screenshot.js +164 -71
- package/packages/dd-trace/src/ci-visibility/requests/video-request.js +176 -0
- package/packages/dd-trace/src/ci-visibility/telemetry.js +10 -7
- package/packages/dd-trace/src/ci-visibility/test-video.js +61 -0
- package/packages/dd-trace/src/config/generated-config-types.d.ts +10 -0
- package/packages/dd-trace/src/config/index.js +75 -14
- package/packages/dd-trace/src/config/parsers.js +11 -1
- package/packages/dd-trace/src/config/stable.js +3 -3
- package/packages/dd-trace/src/config/supported-configurations.json +47 -2
- package/packages/dd-trace/src/crashtracking/crashtracker.js +82 -18
- package/packages/dd-trace/src/debugger/config.js +12 -1
- package/packages/dd-trace/src/debugger/constants.js +1 -0
- package/packages/dd-trace/src/debugger/devtools_client/breakpoints.js +2 -1
- package/packages/dd-trace/src/debugger/devtools_client/request-options.js +33 -0
- package/packages/dd-trace/src/debugger/devtools_client/send.js +7 -39
- package/packages/dd-trace/src/debugger/devtools_client/status.js +11 -6
- package/packages/dd-trace/src/debugger/devtools_client/tags.js +41 -0
- package/packages/dd-trace/src/debugger/index.js +23 -3
- package/packages/dd-trace/src/dogstatsd.js +532 -71
- package/packages/dd-trace/src/encode/0.4-cross-payload.js +170 -0
- package/packages/dd-trace/src/encode/0.4.js +5 -5
- package/packages/dd-trace/src/encode/agentless-ci-visibility.js +9 -8
- package/packages/dd-trace/src/evp_proxy/direct.js +27 -23
- package/packages/dd-trace/src/exporters/agent/index.js +24 -3
- package/packages/dd-trace/src/exporters/agent/writer.js +28 -11
- package/packages/dd-trace/src/exporters/agentless/index.js +7 -9
- package/packages/dd-trace/src/exporters/agentless/writer.js +100 -118
- package/packages/dd-trace/src/exporters/common/agents.js +28 -6
- package/packages/dd-trace/src/exporters/common/buffering-exporter.js +2 -2
- package/packages/dd-trace/src/exporters/common/final-flush-request-tracker.js +191 -0
- package/packages/dd-trace/src/exporters/common/request.js +31 -11
- package/packages/dd-trace/src/exporters/common/url.js +40 -1
- package/packages/dd-trace/src/exporters/common/writer.js +31 -7
- package/packages/dd-trace/src/exporters/span-stats/index.js +23 -4
- package/packages/dd-trace/src/external-logger/src/index.js +4 -3
- package/packages/dd-trace/src/flush.js +105 -0
- package/packages/dd-trace/src/id.js +14 -0
- package/packages/dd-trace/src/index.js +5 -2
- package/packages/dd-trace/src/llmobs/experiments/client.js +4 -0
- package/packages/dd-trace/src/llmobs/experiments/dataset.js +52 -2
- package/packages/dd-trace/src/llmobs/experiments/experiment.js +420 -105
- package/packages/dd-trace/src/llmobs/experiments/index.js +54 -42
- package/packages/dd-trace/src/llmobs/experiments/noop.js +39 -8
- package/packages/dd-trace/src/llmobs/experiments/result.js +1 -0
- package/packages/dd-trace/src/llmobs/experiments/util.js +21 -0
- package/packages/dd-trace/src/llmobs/index.js +111 -48
- package/packages/dd-trace/src/llmobs/noop.js +2 -1
- package/packages/dd-trace/src/llmobs/plugins/ai/ddTelemetry.js +22 -71
- package/packages/dd-trace/src/llmobs/plugins/ai/vercelTelemetry.js +23 -13
- package/packages/dd-trace/src/llmobs/plugins/anthropic/util.js +8 -4
- package/packages/dd-trace/src/llmobs/plugins/claude-agent-sdk/index.js +6 -3
- package/packages/dd-trace/src/llmobs/plugins/langchain/index.js +7 -0
- package/packages/dd-trace/src/llmobs/plugins/openai/utils.js +13 -6
- package/packages/dd-trace/src/llmobs/plugins/openai-agents/utils.js +5 -7
- package/packages/dd-trace/src/llmobs/util.js +0 -33
- package/packages/dd-trace/src/llmobs/writers/base.js +106 -53
- package/packages/dd-trace/src/log/index.js +7 -1
- package/packages/dd-trace/src/log-submission/log-submission-plugin.js +249 -0
- package/packages/dd-trace/src/noop/span.js +5 -0
- package/packages/dd-trace/src/openfeature/writers/base.js +14 -12
- package/packages/dd-trace/src/openfeature/writers/exposures.js +8 -1
- package/packages/dd-trace/src/openfeature/writers/util.js +1 -1
- package/packages/dd-trace/src/opentelemetry/logs/batch_log_processor.js +45 -3
- package/packages/dd-trace/src/opentelemetry/logs/index.js +9 -25
- package/packages/dd-trace/src/opentelemetry/logs/logger_provider.js +7 -4
- package/packages/dd-trace/src/opentelemetry/logs/otlp_http_log_exporter.js +14 -4
- package/packages/dd-trace/src/opentelemetry/metrics/index.js +18 -23
- package/packages/dd-trace/src/opentelemetry/metrics/meter_provider.js +8 -0
- package/packages/dd-trace/src/opentelemetry/metrics/otlp_http_metric_exporter.js +18 -6
- package/packages/dd-trace/src/opentelemetry/metrics/otlp_span_stats_exporter.js +14 -2
- package/packages/dd-trace/src/opentelemetry/metrics/periodic_metric_reader.js +25 -5
- package/packages/dd-trace/src/opentelemetry/otlp/otlp_http_exporter_base.js +61 -25
- package/packages/dd-trace/src/opentelemetry/otlp/otlp_transformer_base.js +19 -4
- package/packages/dd-trace/src/opentelemetry/resource-attributes.js +55 -0
- package/packages/dd-trace/src/opentelemetry/trace/index.js +6 -1
- package/packages/dd-trace/src/opentelemetry/trace/otlp_http_trace_exporter.js +10 -0
- package/packages/dd-trace/src/opentelemetry/tracer.js +26 -2
- package/packages/dd-trace/src/opentracing/propagation/text_map.js +494 -351
- package/packages/dd-trace/src/opentracing/span.js +28 -0
- package/packages/dd-trace/src/otel-thread-ctx.js +23 -5
- package/packages/dd-trace/src/payload-tagging/index.js +2 -1
- package/packages/dd-trace/src/plugin_manager.js +2 -0
- package/packages/dd-trace/src/plugins/ci_plugin.js +1 -6
- package/packages/dd-trace/src/plugins/tracing.js +12 -10
- package/packages/dd-trace/src/plugins/util/ci.js +3 -1
- package/packages/dd-trace/src/plugins/util/inferred_proxy.js +16 -15
- package/packages/dd-trace/src/plugins/util/status-validator.js +98 -0
- package/packages/dd-trace/src/plugins/util/test.js +157 -41
- package/packages/dd-trace/src/plugins/util/url.js +2 -2
- package/packages/dd-trace/src/plugins/util/web.js +6 -74
- package/packages/dd-trace/src/profiling/config.js +1 -0
- package/packages/dd-trace/src/profiling/oom.js +11 -5
- package/packages/dd-trace/src/profiling/profiler.js +30 -13
- package/packages/dd-trace/src/profiling/profilers/events.js +3 -3
- package/packages/dd-trace/src/profiling/profilers/space.js +38 -11
- package/packages/dd-trace/src/profiling/profilers/wall.js +14 -14
- package/packages/dd-trace/src/profiling/webspan-utils.js +7 -4
- package/packages/dd-trace/src/proxy.js +108 -10
- package/packages/dd-trace/src/remote_config/index.js +319 -101
- package/packages/dd-trace/src/remote_config/scheduler.js +37 -12
- package/packages/dd-trace/src/runtime_metrics/client.js +37 -8
- package/packages/dd-trace/src/runtime_metrics/index.js +5 -0
- package/packages/dd-trace/src/runtime_metrics/otlp_runtime_metrics.js +10 -1
- package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +22 -7
- package/packages/dd-trace/src/sampling_rule.js +36 -9
- package/packages/dd-trace/src/serverless/telemetry-delivery-tracker.js +51 -0
- package/packages/dd-trace/src/serverless/vercel.js +155 -0
- package/packages/dd-trace/src/serverless.js +45 -21
- package/packages/dd-trace/src/service-naming/schemas/util.js +1 -1
- package/packages/dd-trace/src/span_stats.js +64 -31
- package/packages/dd-trace/src/startup-log.js +3 -2
- package/packages/dd-trace/src/telemetry/agentless-url.js +28 -0
- package/packages/dd-trace/src/telemetry/send-data.js +18 -16
- package/packages/dd-trace/src/telemetry/session-propagation.js +3 -2
- package/packages/dd-trace/src/tracer.js +26 -5
- package/packages/dd-trace/src/tracer_metadata.js +11 -3
- package/packages/dd-trace/src/web-tags-cache.js +67 -13
- package/vendor/dist/@datadog/openfeature-node-server/index.js +1 -1
- package/vendor/dist/@datadog/sketches-js/index.js +1 -1
- package/vendor/dist/protobufjs/index.js +1 -1
- package/vendor/dist/protobufjs/minimal/index.js +1 -1
- package/packages/datadog-instrumentations/src/playwright-browser-scripts.js +0 -27
- package/packages/dd-trace/src/ci-visibility/log-submission/log-submission-plugin.js +0 -53
- package/packages/dd-trace/src/encode/agentless-json.js +0 -209
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
+
const { channel } = require('dc-polyfill')
|
|
4
|
+
const uuid = require('../../../vendor/dist/crypto-randomuuid')
|
|
3
5
|
const NoopProxy = require('./noop/proxy')
|
|
4
6
|
const DatadogTracer = require('./tracer')
|
|
5
7
|
const getConfig = require('./config')
|
|
@@ -7,12 +9,18 @@ const { getEnvironmentVariable } = require('./config/helper')
|
|
|
7
9
|
const runtimeMetrics = require('./runtime_metrics')
|
|
8
10
|
const log = require('./log')
|
|
9
11
|
const { setStartupLogPluginManager, startupLog } = require('./startup-log')
|
|
10
|
-
const DynamicInstrumentation = require('./debugger')
|
|
11
12
|
const telemetry = require('./telemetry')
|
|
12
13
|
const nomenclature = require('./service-naming')
|
|
13
14
|
const PluginManager = require('./plugin_manager')
|
|
14
15
|
const NoopDogStatsDClient = require('./noop/dogstatsd')
|
|
15
|
-
const {
|
|
16
|
+
const {
|
|
17
|
+
IS_AWS_LAMBDA_MICROVM,
|
|
18
|
+
IS_SERVERLESS,
|
|
19
|
+
NODE_BUNDLES_OPENSSL,
|
|
20
|
+
initializeServerlessTelemetry,
|
|
21
|
+
supportsServerlessTelemetryRetention,
|
|
22
|
+
} = require('./serverless')
|
|
23
|
+
const { flushServerlessTelemetry, registerTelemetryFlusher } = require('./flush')
|
|
16
24
|
const processTags = require('./process-tags')
|
|
17
25
|
const { isTrue } = require('./util')
|
|
18
26
|
const {
|
|
@@ -41,6 +49,20 @@ const OPENFEATURE_STATE_NOOP = 0
|
|
|
41
49
|
const OPENFEATURE_STATE_LAZY = 1
|
|
42
50
|
const OPENFEATURE_STATE_ACTIVE = 2
|
|
43
51
|
|
|
52
|
+
let dynamicInstrumentation
|
|
53
|
+
|
|
54
|
+
function getDynamicInstrumentation () {
|
|
55
|
+
dynamicInstrumentation ??= require('./debugger')
|
|
56
|
+
return dynamicInstrumentation
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const UUID_POOL_SIZE = 128
|
|
60
|
+
|
|
61
|
+
const BUNDLED_OPENSSL_WARNING = 'This Node.js build bundles its own OpenSSL, so its random number ' +
|
|
62
|
+
'generator is not reseeded when a MicroVM clone resumes and trace IDs may repeat across clones. ' +
|
|
63
|
+
'Install Node.js from the Amazon Linux 2023 repositories (for example `dnf install nodejs22`) so it ' +
|
|
64
|
+
'links the base image\'s snapsafe OpenSSL.'
|
|
65
|
+
|
|
44
66
|
class LazyModule {
|
|
45
67
|
constructor (provider) {
|
|
46
68
|
this.provider = provider
|
|
@@ -100,6 +122,15 @@ class Tracer extends NoopProxy {
|
|
|
100
122
|
this._pluginManager = new PluginManager(this)
|
|
101
123
|
this.dogstatsd = new NoopDogStatsDClient()
|
|
102
124
|
this._tracingInitialized = false
|
|
125
|
+
// Logs and metrics can need retention even when tracing is disabled.
|
|
126
|
+
if (supportsServerlessTelemetryRetention()) {
|
|
127
|
+
this._serverlessTelemetry = {
|
|
128
|
+
flushAll: (done, options) => {
|
|
129
|
+
if (typeof this._tracer?.flushAll === 'function') this._tracer.flushAll(done, options)
|
|
130
|
+
else flushServerlessTelemetry(done, options)
|
|
131
|
+
},
|
|
132
|
+
}
|
|
133
|
+
}
|
|
103
134
|
this._flare = new LazyModule(() => require('./flare'))
|
|
104
135
|
this.setBaggageItem = setBaggageItem
|
|
105
136
|
this.getBaggageItem = getBaggageItem
|
|
@@ -134,6 +165,10 @@ class Tracer extends NoopProxy {
|
|
|
134
165
|
try {
|
|
135
166
|
const config = getConfig(options) // TODO: support dynamic code config
|
|
136
167
|
|
|
168
|
+
if (IS_AWS_LAMBDA_MICROVM) {
|
|
169
|
+
this.#registerMicroVmRunHook(config)
|
|
170
|
+
}
|
|
171
|
+
|
|
137
172
|
// Add config dependent process tags
|
|
138
173
|
processTags.initialize(config)
|
|
139
174
|
|
|
@@ -155,7 +190,7 @@ class Tracer extends NoopProxy {
|
|
|
155
190
|
|
|
156
191
|
telemetry.start(config, this._pluginManager)
|
|
157
192
|
|
|
158
|
-
if (config.dogstatsd && !isOfflineTestOptimizationValidation()) {
|
|
193
|
+
if (config.dogstatsd && !config.DD_AGENTLESS_ENABLED && !isOfflineTestOptimizationValidation()) {
|
|
159
194
|
// Custom Metrics
|
|
160
195
|
lazyProxy(this, 'dogstatsd', () => require('./dogstatsd').CustomMetrics, config)
|
|
161
196
|
}
|
|
@@ -205,7 +240,7 @@ class Tracer extends NoopProxy {
|
|
|
205
240
|
}
|
|
206
241
|
|
|
207
242
|
if (config.dynamicInstrumentation.enabled) {
|
|
208
|
-
|
|
243
|
+
getDynamicInstrumentation().start(config, rc)
|
|
209
244
|
}
|
|
210
245
|
|
|
211
246
|
const openfeatureRemoteConfig = require('./openfeature/remote_config')
|
|
@@ -255,13 +290,20 @@ class Tracer extends NoopProxy {
|
|
|
255
290
|
|
|
256
291
|
if (config.runtimeMetrics.enabled) {
|
|
257
292
|
runtimeMetrics.start(config)
|
|
293
|
+
// Agent trace response metrics are recorded asynchronously, so drain
|
|
294
|
+
// runtime metrics after the trace export has completed.
|
|
295
|
+
registerTelemetryFlusher(done => runtimeMetrics.flush(done), { afterTrace: true })
|
|
258
296
|
}
|
|
259
297
|
|
|
260
298
|
this.#updateTracing(config)
|
|
261
299
|
|
|
262
|
-
|
|
300
|
+
if (config.iast.enabled) {
|
|
301
|
+
this._modules.rewriter.enable(config)
|
|
302
|
+
}
|
|
263
303
|
|
|
264
|
-
if (config.
|
|
304
|
+
if (config.isCiVisibility &&
|
|
305
|
+
config.DD_TRACE_ENABLED &&
|
|
306
|
+
config.testOptimization.DD_CIVISIBILITY_MANUAL_API_ENABLED) {
|
|
265
307
|
const TestApiManualPlugin = require('./ci-visibility/test-api-manual/test-api-manual-plugin')
|
|
266
308
|
this._testApiManualPlugin = new TestApiManualPlugin(this)
|
|
267
309
|
// `shouldGetEnvironmentData` is passed as false so that we only lazily calculate it
|
|
@@ -271,8 +313,8 @@ class Tracer extends NoopProxy {
|
|
|
271
313
|
}
|
|
272
314
|
if (config.DD_AGENTLESS_LOG_SUBMISSION_ENABLED) {
|
|
273
315
|
if (config.DD_API_KEY) {
|
|
274
|
-
const LogSubmissionPlugin = require('./
|
|
275
|
-
const automaticLogPlugin = new LogSubmissionPlugin(this)
|
|
316
|
+
const LogSubmissionPlugin = require('./log-submission/log-submission-plugin')
|
|
317
|
+
const automaticLogPlugin = new LogSubmissionPlugin(this, config)
|
|
276
318
|
automaticLogPlugin.configure({ ...config, enabled: true })
|
|
277
319
|
} else {
|
|
278
320
|
log.warn(
|
|
@@ -282,7 +324,7 @@ class Tracer extends NoopProxy {
|
|
|
282
324
|
}
|
|
283
325
|
}
|
|
284
326
|
|
|
285
|
-
if (config.testOptimization.DD_TEST_FAILED_TEST_REPLAY_ENABLED) {
|
|
327
|
+
if (config.isCiVisibility && config.testOptimization.DD_TEST_FAILED_TEST_REPLAY_ENABLED) {
|
|
286
328
|
const getDynamicInstrumentationClient = require('./ci-visibility/dynamic-instrumentation')
|
|
287
329
|
// We instantiate the client but do not start the Worker here. The worker is started lazily
|
|
288
330
|
getDynamicInstrumentationClient(config)
|
|
@@ -295,6 +337,42 @@ class Tracer extends NoopProxy {
|
|
|
295
337
|
return this
|
|
296
338
|
}
|
|
297
339
|
|
|
340
|
+
/**
|
|
341
|
+
* Listens for the MicroVM /run lifecycle event and triggers a one-time
|
|
342
|
+
* identity reset on first fire.
|
|
343
|
+
*
|
|
344
|
+
* @param {import('./config/config-base')} config
|
|
345
|
+
*/
|
|
346
|
+
#registerMicroVmRunHook (config) {
|
|
347
|
+
// Node reseeds its CSPRNG from the kernel on clone resume only when it links the base image's
|
|
348
|
+
// snapsafe libcrypto; a bundled OpenSSL keeps the snapshot's DRBG state, so the refresh below
|
|
349
|
+
// cannot produce distinct IDs. Logged at registration, during the image build, where the
|
|
350
|
+
// Dockerfile can still be fixed — not once per clone.
|
|
351
|
+
if (NODE_BUNDLES_OPENSSL) {
|
|
352
|
+
log.error(BUNDLED_OPENSSL_WARNING)
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
const ch = channel('http.server.request.start')
|
|
356
|
+
|
|
357
|
+
const onHttpRequest = ({ request }) => {
|
|
358
|
+
if (request.method === 'POST' && request.url === '/aws/lambda-microvms/runtime/v1/run') {
|
|
359
|
+
ch.unsubscribe(onHttpRequest)
|
|
360
|
+
drainUuidPool()
|
|
361
|
+
channel('datadog:identity:update').publish(config)
|
|
362
|
+
if (this._tracingInitialized) {
|
|
363
|
+
const storeTracerMetadata = require('./tracer_metadata')
|
|
364
|
+
const metadata = storeTracerMetadata(config)
|
|
365
|
+
if (metadata === undefined) {
|
|
366
|
+
log.warn('Could not store tracer configuration for service discovery')
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
channel('datadog:identity:refresh').publish(config)
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
ch.subscribe(onHttpRequest)
|
|
374
|
+
}
|
|
375
|
+
|
|
298
376
|
/**
|
|
299
377
|
* @param {import('./config/config-base')} config - Tracer configuration
|
|
300
378
|
*/
|
|
@@ -389,10 +467,12 @@ class Tracer extends NoopProxy {
|
|
|
389
467
|
if (this._tracingInitialized) {
|
|
390
468
|
this._tracer.configure(config)
|
|
391
469
|
this._pluginManager.configure(config)
|
|
392
|
-
|
|
470
|
+
dynamicInstrumentation?.configure(config)
|
|
393
471
|
setStartupLogPluginManager(this._pluginManager)
|
|
394
472
|
startupLog()
|
|
395
473
|
}
|
|
474
|
+
|
|
475
|
+
initializeServerlessTelemetry(this._serverlessTelemetry)
|
|
396
476
|
}
|
|
397
477
|
|
|
398
478
|
/**
|
|
@@ -404,6 +484,9 @@ class Tracer extends NoopProxy {
|
|
|
404
484
|
*/
|
|
405
485
|
#updateDebugger (config, rc) {
|
|
406
486
|
const shouldBeEnabled = config.dynamicInstrumentation.enabled
|
|
487
|
+
if (!shouldBeEnabled && dynamicInstrumentation === undefined) return
|
|
488
|
+
|
|
489
|
+
const DynamicInstrumentation = getDynamicInstrumentation()
|
|
407
490
|
const isCurrentlyStarted = DynamicInstrumentation.isStarted()
|
|
408
491
|
|
|
409
492
|
if (shouldBeEnabled) {
|
|
@@ -487,4 +570,19 @@ function isOfflineValidationExporter (options) {
|
|
|
487
570
|
return OFFLINE_VALIDATION_EXPORTERS.has(options?.experimental?.exporter)
|
|
488
571
|
}
|
|
489
572
|
|
|
573
|
+
/**
|
|
574
|
+
* Discards Node's buffered UUID entropy, so the identity subscribers draw from bytes generated
|
|
575
|
+
* after the clone resumed.
|
|
576
|
+
*
|
|
577
|
+
* `crypto.randomUUID()` serves `kBatchSize` (128, see `lib/internal/crypto/random.js`) UUIDs from one
|
|
578
|
+
* process-wide pool and refills it only when its cursor wraps back to 0. A full cycle crosses the
|
|
579
|
+
* cursor exactly once from any starting position, and the position is not observable, so the count
|
|
580
|
+
* has to be the batch size rather than the number of UUIDs we need.
|
|
581
|
+
*/
|
|
582
|
+
function drainUuidPool () {
|
|
583
|
+
for (let index = 0; index < UUID_POOL_SIZE; index++) {
|
|
584
|
+
uuid()
|
|
585
|
+
}
|
|
586
|
+
}
|
|
587
|
+
|
|
490
588
|
module.exports = Tracer
|