dd-trace 5.54.0 → 5.56.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/ci/cypress/plugin.js +8 -0
- package/ci/cypress/polyfills.js +23 -0
- package/ci/init.js +8 -7
- package/initialize.mjs +2 -2
- package/package.json +10 -9
- package/packages/datadog-code-origin/index.js +22 -4
- package/packages/datadog-core/src/utils/src/kebabcase.js +3 -3
- package/packages/datadog-core/src/utils/src/set.js +8 -10
- package/packages/datadog-instrumentations/src/cassandra-driver.js +5 -6
- package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +2 -3
- package/packages/datadog-instrumentations/src/cookie-parser.js +1 -1
- package/packages/datadog-instrumentations/src/couchbase.js +3 -6
- package/packages/datadog-instrumentations/src/cucumber.js +21 -28
- package/packages/datadog-instrumentations/src/dns.js +4 -4
- package/packages/datadog-instrumentations/src/elasticsearch.js +9 -10
- package/packages/datadog-instrumentations/src/fastify.js +7 -9
- package/packages/datadog-instrumentations/src/google-cloud-pubsub.js +14 -16
- package/packages/datadog-instrumentations/src/hapi.js +10 -11
- package/packages/datadog-instrumentations/src/helpers/fetch.js +4 -5
- package/packages/datadog-instrumentations/src/helpers/hook.js +1 -2
- package/packages/datadog-instrumentations/src/helpers/register.js +6 -5
- package/packages/datadog-instrumentations/src/jest.js +421 -376
- package/packages/datadog-instrumentations/src/koa.js +2 -3
- package/packages/datadog-instrumentations/src/mariadb.js +11 -4
- package/packages/datadog-instrumentations/src/mocha/main.js +79 -75
- package/packages/datadog-instrumentations/src/mocha.js +3 -1
- package/packages/datadog-instrumentations/src/mysql.js +11 -2
- package/packages/datadog-instrumentations/src/nyc.js +2 -1
- package/packages/datadog-instrumentations/src/openai.js +2 -2
- package/packages/datadog-instrumentations/src/otel-sdk-trace.js +4 -3
- package/packages/datadog-instrumentations/src/pg.js +2 -3
- package/packages/datadog-instrumentations/src/playwright.js +19 -22
- package/packages/datadog-instrumentations/src/protobufjs.js +3 -4
- package/packages/datadog-instrumentations/src/redis.js +1 -1
- package/packages/datadog-instrumentations/src/restify.js +9 -13
- package/packages/datadog-instrumentations/src/router.js +12 -11
- package/packages/datadog-instrumentations/src/tedious.js +1 -2
- package/packages/datadog-instrumentations/src/vitest.js +15 -29
- package/packages/datadog-plugin-avsc/src/schema_iterator.js +12 -12
- package/packages/datadog-plugin-aws-sdk/src/base.js +12 -8
- package/packages/datadog-plugin-aws-sdk/src/services/cloudwatchlogs.js +3 -5
- package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +12 -20
- package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +4 -5
- package/packages/datadog-plugin-aws-sdk/src/services/lambda.js +3 -5
- package/packages/datadog-plugin-aws-sdk/src/services/redshift.js +3 -5
- package/packages/datadog-plugin-aws-sdk/src/services/s3.js +3 -5
- package/packages/datadog-plugin-aws-sdk/src/services/sns.js +1 -2
- package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +7 -10
- package/packages/datadog-plugin-azure-functions/src/index.js +5 -4
- package/packages/datadog-plugin-cucumber/src/index.js +3 -2
- package/packages/datadog-plugin-cypress/src/cypress-plugin.js +2 -1
- package/packages/datadog-plugin-dd-trace-api/src/index.js +2 -1
- package/packages/datadog-plugin-elasticsearch/src/index.js +1 -1
- package/packages/datadog-plugin-google-cloud-vertexai/src/tracing.js +1 -1
- package/packages/datadog-plugin-graphql/src/index.js +3 -2
- package/packages/datadog-plugin-graphql/src/resolve.js +17 -10
- package/packages/datadog-plugin-http/src/client.js +5 -6
- package/packages/datadog-plugin-http2/src/client.js +7 -8
- package/packages/datadog-plugin-jest/src/index.js +3 -2
- package/packages/datadog-plugin-mocha/src/index.js +6 -1
- package/packages/datadog-plugin-mongodb-core/src/index.js +2 -1
- package/packages/datadog-plugin-mysql/src/index.js +11 -0
- package/packages/datadog-plugin-next/src/index.js +1 -1
- package/packages/datadog-plugin-openai/src/tracing.js +2 -4
- package/packages/datadog-plugin-oracledb/src/index.js +2 -1
- package/packages/datadog-plugin-playwright/src/index.js +3 -2
- package/packages/datadog-plugin-protobufjs/src/schema_iterator.js +8 -9
- package/packages/datadog-plugin-redis/src/index.js +1 -3
- package/packages/datadog-plugin-vitest/src/index.js +5 -4
- package/packages/dd-trace/src/appsec/iast/analyzers/analyzers.js +0 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-password-rules.js +0 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secret-rules.js +0 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secrets-rules.js +0 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/missing-header-analyzer.js +1 -2
- package/packages/dd-trace/src/appsec/iast/analyzers/sql-injection-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/security-controls/index.js +12 -13
- 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 +8 -3
- package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +2 -1
- package/packages/dd-trace/src/appsec/iast/telemetry/span-tags.js +1 -1
- package/packages/dd-trace/src/appsec/iast/telemetry/verbosity.js +1 -2
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/range-utils.js +10 -11
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-handler.js +0 -4
- package/packages/dd-trace/src/appsec/iast/vulnerabilities.js +0 -1
- package/packages/dd-trace/src/appsec/index.js +16 -5
- package/packages/dd-trace/src/appsec/reporter.js +11 -11
- package/packages/dd-trace/src/appsec/sdk/set_user.js +2 -2
- package/packages/dd-trace/src/appsec/sdk/track_event.js +3 -3
- package/packages/dd-trace/src/appsec/telemetry/index.js +31 -1
- package/packages/dd-trace/src/appsec/waf/waf_context_wrapper.js +6 -2
- package/packages/dd-trace/src/azure_metadata.js +8 -3
- package/packages/dd-trace/src/baggage.js +2 -2
- package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/index.js +8 -7
- package/packages/dd-trace/src/ci-visibility/early-flake-detection/get-known-tests.js +2 -1
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/coverage-writer.js +2 -1
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +2 -1
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +2 -1
- package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +4 -3
- package/packages/dd-trace/src/ci-visibility/exporters/test-worker/index.js +7 -6
- package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +2 -1
- package/packages/dd-trace/src/ci-visibility/log-submission/log-submission-plugin.js +4 -3
- package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +4 -3
- package/packages/dd-trace/src/ci-visibility/test-management/get-test-management-tests.js +2 -1
- package/packages/dd-trace/src/config-helper.js +89 -0
- package/packages/dd-trace/src/config.js +120 -115
- package/packages/dd-trace/src/config_stable.js +7 -4
- package/packages/dd-trace/src/datastreams/fnv.js +1 -1
- package/packages/dd-trace/src/datastreams/schemas/schema_builder.js +6 -6
- package/packages/dd-trace/src/debugger/devtools_client/breakpoints.js +1 -2
- package/packages/dd-trace/src/debugger/devtools_client/condition.js +1 -2
- package/packages/dd-trace/src/debugger/devtools_client/index.js +2 -1
- package/packages/dd-trace/src/debugger/devtools_client/send.js +8 -3
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/collector.js +1 -2
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/processor.js +3 -4
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/redaction.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/status.js +5 -1
- package/packages/dd-trace/src/debugger/index.js +1 -0
- package/packages/dd-trace/src/dogstatsd.js +2 -2
- package/packages/dd-trace/src/encode/0.4.js +5 -2
- package/packages/dd-trace/src/encode/0.5.js +3 -5
- package/packages/dd-trace/src/encode/agentless-ci-visibility.js +5 -5
- package/packages/dd-trace/src/exporter.js +2 -1
- package/packages/dd-trace/src/exporters/agent/writer.js +3 -1
- package/packages/dd-trace/src/exporters/common/docker.js +3 -2
- package/packages/dd-trace/src/exporters/common/request.js +4 -1
- package/packages/dd-trace/src/exporters/common/util.js +3 -1
- package/packages/dd-trace/src/id.js +3 -3
- package/packages/dd-trace/src/index.js +4 -3
- package/packages/dd-trace/src/lambda/handler.js +2 -1
- package/packages/dd-trace/src/lambda/index.js +2 -1
- package/packages/dd-trace/src/lambda/runtime/patch.js +3 -2
- package/packages/dd-trace/src/lambda/runtime/ritm.js +3 -2
- package/packages/dd-trace/src/llmobs/constants/tags.js +1 -0
- package/packages/dd-trace/src/llmobs/index.js +21 -5
- package/packages/dd-trace/src/llmobs/noop.js +18 -20
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/index.js +11 -13
- package/packages/dd-trace/src/llmobs/plugins/openai.js +1 -2
- package/packages/dd-trace/src/llmobs/sdk.js +2 -1
- package/packages/dd-trace/src/llmobs/span_processor.js +1 -1
- package/packages/dd-trace/src/llmobs/tagger.js +19 -6
- package/packages/dd-trace/src/llmobs/writers/base.js +1 -1
- package/packages/dd-trace/src/log/index.js +5 -4
- package/packages/dd-trace/src/log/writer.js +1 -2
- package/packages/dd-trace/src/msgpack/encoder.js +3 -3
- package/packages/dd-trace/src/noop/span.js +1 -1
- package/packages/dd-trace/src/opentelemetry/tracer.js +1 -1
- package/packages/dd-trace/src/opentracing/propagation/log.js +4 -5
- package/packages/dd-trace/src/opentracing/propagation/text_map.js +35 -42
- package/packages/dd-trace/src/opentracing/span.js +7 -6
- package/packages/dd-trace/src/payload-tagging/config/index.js +17 -21
- package/packages/dd-trace/src/plugin_manager.js +4 -3
- package/packages/dd-trace/src/plugins/ci_plugin.js +25 -1
- package/packages/dd-trace/src/plugins/plugin.js +1 -1
- package/packages/dd-trace/src/plugins/util/ci.js +7 -7
- package/packages/dd-trace/src/plugins/util/git.js +1 -1
- package/packages/dd-trace/src/plugins/util/llm.js +2 -2
- package/packages/dd-trace/src/plugins/util/stacktrace.js +8 -1
- package/packages/dd-trace/src/plugins/util/test.js +4 -3
- package/packages/dd-trace/src/plugins/util/user-provided-git.js +2 -1
- package/packages/dd-trace/src/plugins/util/web.js +3 -4
- package/packages/dd-trace/src/priority_sampler.js +46 -35
- package/packages/dd-trace/src/profiling/config.js +12 -32
- package/packages/dd-trace/src/profiling/exporter_cli.js +20 -20
- package/packages/dd-trace/src/profiling/exporters/agent.js +1 -1
- package/packages/dd-trace/src/profiling/exporters/event_serializer.js +2 -1
- package/packages/dd-trace/src/profiling/index.js +2 -1
- package/packages/dd-trace/src/profiling/profiler.js +7 -4
- package/packages/dd-trace/src/profiling/profilers/events.js +10 -2
- package/packages/dd-trace/src/profiling/ssi-telemetry-mock-profiler.js +3 -1
- package/packages/dd-trace/src/profiling/tagger.js +22 -12
- package/packages/dd-trace/src/proxy.js +2 -1
- package/packages/dd-trace/src/ritm.js +4 -4
- package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +3 -2
- package/packages/dd-trace/src/sampler.js +10 -2
- package/packages/dd-trace/src/serverless.js +11 -4
- package/packages/dd-trace/src/span_processor.js +2 -1
- package/packages/dd-trace/src/standalone/tracesource.js +1 -2
- package/packages/dd-trace/src/standalone/tracesource_priority_sampler.js +1 -2
- package/packages/dd-trace/src/startup-log.js +5 -17
- package/packages/dd-trace/src/supported-configurations.json +440 -0
- package/packages/dd-trace/src/telemetry/dependencies.js +62 -57
- package/packages/dd-trace/src/telemetry/send-data.js +7 -6
- package/packages/dd-trace/src/telemetry/telemetry.js +16 -26
- package/packages/dd-trace/src/tracer.js +3 -7
- package/packages/dd-trace/src/util.js +0 -5
- 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/appsec/iast/analyzers/header-injection-analyzer.js +0 -120
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/header-sensitive-analyzer.js +0 -20
|
@@ -8,8 +8,6 @@ const log = require('./log')
|
|
|
8
8
|
const pkg = require('./pkg')
|
|
9
9
|
const coalesce = require('koalas')
|
|
10
10
|
const tagger = require('./tagger')
|
|
11
|
-
const get = require('../../datadog-core/src/utils/src/get')
|
|
12
|
-
const has = require('../../datadog-core/src/utils/src/has')
|
|
13
11
|
const set = require('../../datadog-core/src/utils/src/set')
|
|
14
12
|
const { isTrue, isFalse, normalizeProfilingEnabledValue } = require('./util')
|
|
15
13
|
const { GIT_REPOSITORY_URL, GIT_COMMIT_SHA } = require('./plugins/util/tags')
|
|
@@ -19,9 +17,12 @@ const telemetryMetrics = require('./telemetry/metrics')
|
|
|
19
17
|
const { isInServerlessEnvironment, getIsGCPFunction, getIsAzureFunction } = require('./serverless')
|
|
20
18
|
const { ORIGIN_KEY, GRPC_CLIENT_ERROR_STATUSES, GRPC_SERVER_ERROR_STATUSES } = require('./constants')
|
|
21
19
|
const { appendRules } = require('./payload-tagging/config')
|
|
20
|
+
const { getEnvironmentVariable, getEnvironmentVariables } = require('./config-helper')
|
|
22
21
|
|
|
23
22
|
const tracerMetrics = telemetryMetrics.manager.namespace('tracers')
|
|
24
23
|
|
|
24
|
+
const changeTracker = {}
|
|
25
|
+
|
|
25
26
|
const telemetryCounters = {
|
|
26
27
|
'otel.env.hiding': {},
|
|
27
28
|
'otel.env.invalid': {}
|
|
@@ -80,10 +81,10 @@ function getFromOtelSamplerMap (otelTracesSampler, otelTracesSamplerArg) {
|
|
|
80
81
|
}
|
|
81
82
|
|
|
82
83
|
function validateOtelPropagators (propagators) {
|
|
83
|
-
if (!
|
|
84
|
-
!
|
|
85
|
-
!
|
|
86
|
-
|
|
84
|
+
if (!getEnvironmentVariable('PROPAGATION_STYLE_EXTRACT') &&
|
|
85
|
+
!getEnvironmentVariable('PROPAGATION_STYLE_INJECT') &&
|
|
86
|
+
!getEnvironmentVariable('DD_TRACE_PROPAGATION_STYLE') &&
|
|
87
|
+
getEnvironmentVariable('OTEL_PROPAGATORS')) {
|
|
87
88
|
for (const style in propagators) {
|
|
88
89
|
if (!VALID_PROPAGATION_STYLES.has(style)) {
|
|
89
90
|
log.warn('unexpected value for OTEL_PROPAGATORS environment variable')
|
|
@@ -94,7 +95,7 @@ function validateOtelPropagators (propagators) {
|
|
|
94
95
|
}
|
|
95
96
|
|
|
96
97
|
function validateEnvVarType (envVar) {
|
|
97
|
-
const value =
|
|
98
|
+
const value = getEnvironmentVariable(envVar)
|
|
98
99
|
switch (envVar) {
|
|
99
100
|
case 'OTEL_LOG_LEVEL':
|
|
100
101
|
return VALID_LOG_LEVELS.has(value)
|
|
@@ -103,7 +104,7 @@ function validateEnvVarType (envVar) {
|
|
|
103
104
|
case 'OTEL_SERVICE_NAME':
|
|
104
105
|
return typeof value === 'string'
|
|
105
106
|
case 'OTEL_TRACES_SAMPLER':
|
|
106
|
-
return getFromOtelSamplerMap(value,
|
|
107
|
+
return getFromOtelSamplerMap(value, getEnvironmentVariable('OTEL_TRACES_SAMPLER_ARG')) !== undefined
|
|
107
108
|
case 'OTEL_TRACES_SAMPLER_ARG':
|
|
108
109
|
return !Number.isNaN(Number.parseFloat(value))
|
|
109
110
|
case 'OTEL_SDK_DISABLED':
|
|
@@ -119,12 +120,12 @@ function validateEnvVarType (envVar) {
|
|
|
119
120
|
|
|
120
121
|
function checkIfBothOtelAndDdEnvVarSet () {
|
|
121
122
|
for (const [otelEnvVar, ddEnvVar] of Object.entries(otelDdEnvMapping)) {
|
|
122
|
-
if (ddEnvVar &&
|
|
123
|
+
if (ddEnvVar && getEnvironmentVariable(ddEnvVar) && getEnvironmentVariable(otelEnvVar)) {
|
|
123
124
|
log.warn(`both ${ddEnvVar} and ${otelEnvVar} environment variables are set`)
|
|
124
125
|
getCounter('otel.env.hiding', ddEnvVar, otelEnvVar).inc()
|
|
125
126
|
}
|
|
126
127
|
|
|
127
|
-
if (
|
|
128
|
+
if (getEnvironmentVariable(otelEnvVar) && !validateEnvVarType(otelEnvVar)) {
|
|
128
129
|
log.warn(`unexpected value for ${otelEnvVar} environment variable`)
|
|
129
130
|
getCounter('otel.env.invalid', ddEnvVar, otelEnvVar).inc()
|
|
130
131
|
}
|
|
@@ -178,7 +179,7 @@ function validateNamingVersion (versionString) {
|
|
|
178
179
|
* @param {string | string[]} input
|
|
179
180
|
*/
|
|
180
181
|
function splitJSONPathRules (input) {
|
|
181
|
-
if (!input) return
|
|
182
|
+
if (!input) return
|
|
182
183
|
if (Array.isArray(input)) return input
|
|
183
184
|
if (input === 'all') return []
|
|
184
185
|
return input.split(',')
|
|
@@ -211,7 +212,8 @@ function propagationStyle (key, option) {
|
|
|
211
212
|
// Otherwise, fallback to env var parsing
|
|
212
213
|
const envKey = `DD_TRACE_PROPAGATION_STYLE_${key.toUpperCase()}`
|
|
213
214
|
|
|
214
|
-
const envVar = coalesce(
|
|
215
|
+
const envVar = coalesce(getEnvironmentVariable(envKey),
|
|
216
|
+
getEnvironmentVariable('DD_TRACE_PROPAGATION_STYLE'), getEnvironmentVariable('OTEL_PROPAGATORS'))
|
|
215
217
|
if (envVar !== undefined) {
|
|
216
218
|
return envVar.split(',')
|
|
217
219
|
.filter(v => v !== '')
|
|
@@ -229,6 +231,16 @@ function reformatSpanSamplingRules (rules) {
|
|
|
229
231
|
})
|
|
230
232
|
}
|
|
231
233
|
|
|
234
|
+
const sourcesOrder = [
|
|
235
|
+
{ containerProperty: '_remote', origin: 'remote_config', unprocessedProperty: '_remoteUnprocessed' },
|
|
236
|
+
{ containerProperty: '_options', origin: 'code', unprocessedProperty: '_optsUnprocessed' },
|
|
237
|
+
{ containerProperty: '_fleetStableConfig', origin: 'fleet_stable_config' },
|
|
238
|
+
{ containerProperty: '_env', origin: 'env_var', unprocessedProperty: '_envUnprocessed' },
|
|
239
|
+
{ containerProperty: '_localStableConfig', origin: 'local_stable_config' },
|
|
240
|
+
{ containerProperty: '_calculated', origin: 'calculated' },
|
|
241
|
+
{ containerProperty: '_defaults', origin: 'default' }
|
|
242
|
+
]
|
|
243
|
+
|
|
232
244
|
class Config {
|
|
233
245
|
constructor (options = {}) {
|
|
234
246
|
if (!isInServerlessEnvironment()) {
|
|
@@ -265,14 +277,11 @@ class Config {
|
|
|
265
277
|
|
|
266
278
|
checkIfBothOtelAndDdEnvVarSet()
|
|
267
279
|
|
|
268
|
-
const DD_API_KEY =
|
|
269
|
-
process.env.DATADOG_API_KEY,
|
|
270
|
-
process.env.DD_API_KEY
|
|
271
|
-
)
|
|
280
|
+
const DD_API_KEY = getEnvironmentVariable('DD_API_KEY')
|
|
272
281
|
|
|
273
|
-
if (
|
|
274
|
-
|
|
275
|
-
|
|
282
|
+
if (getEnvironmentVariable('DD_TRACE_PROPAGATION_STYLE') && (
|
|
283
|
+
getEnvironmentVariable('DD_TRACE_PROPAGATION_STYLE_INJECT') ||
|
|
284
|
+
getEnvironmentVariable('DD_TRACE_PROPAGATION_STYLE_EXTRACT')
|
|
276
285
|
)) {
|
|
277
286
|
log.warn(
|
|
278
287
|
'Use either the DD_TRACE_PROPAGATION_STYLE environment variable or separate ' +
|
|
@@ -294,34 +303,34 @@ class Config {
|
|
|
294
303
|
}
|
|
295
304
|
|
|
296
305
|
const DD_INSTRUMENTATION_INSTALL_ID = coalesce(
|
|
297
|
-
|
|
306
|
+
getEnvironmentVariable('DD_INSTRUMENTATION_INSTALL_ID'),
|
|
298
307
|
null
|
|
299
308
|
)
|
|
300
309
|
const DD_INSTRUMENTATION_INSTALL_TIME = coalesce(
|
|
301
|
-
|
|
310
|
+
getEnvironmentVariable('DD_INSTRUMENTATION_INSTALL_TIME'),
|
|
302
311
|
null
|
|
303
312
|
)
|
|
304
313
|
const DD_INSTRUMENTATION_INSTALL_TYPE = coalesce(
|
|
305
|
-
|
|
314
|
+
getEnvironmentVariable('DD_INSTRUMENTATION_INSTALL_TYPE'),
|
|
306
315
|
null
|
|
307
316
|
)
|
|
308
317
|
|
|
309
318
|
const DD_TRACE_CLOUD_REQUEST_PAYLOAD_TAGGING = splitJSONPathRules(
|
|
310
319
|
coalesce(
|
|
311
|
-
|
|
320
|
+
getEnvironmentVariable('DD_TRACE_CLOUD_REQUEST_PAYLOAD_TAGGING'),
|
|
312
321
|
options.cloudPayloadTagging?.request,
|
|
313
322
|
''
|
|
314
323
|
))
|
|
315
324
|
|
|
316
325
|
const DD_TRACE_CLOUD_RESPONSE_PAYLOAD_TAGGING = splitJSONPathRules(
|
|
317
326
|
coalesce(
|
|
318
|
-
|
|
327
|
+
getEnvironmentVariable('DD_TRACE_CLOUD_RESPONSE_PAYLOAD_TAGGING'),
|
|
319
328
|
options.cloudPayloadTagging?.response,
|
|
320
329
|
''
|
|
321
330
|
))
|
|
322
331
|
|
|
323
332
|
const DD_TRACE_CLOUD_PAYLOAD_TAGGING_MAX_DEPTH = coalesce(
|
|
324
|
-
|
|
333
|
+
getEnvironmentVariable('DD_TRACE_CLOUD_PAYLOAD_TAGGING_MAX_DEPTH'),
|
|
325
334
|
options.cloudPayloadTagging?.maxDepth,
|
|
326
335
|
10
|
|
327
336
|
)
|
|
@@ -370,17 +379,17 @@ class Config {
|
|
|
370
379
|
if (this.gitMetadataEnabled) {
|
|
371
380
|
this.repositoryUrl = removeUserSensitiveInfo(
|
|
372
381
|
coalesce(
|
|
373
|
-
|
|
382
|
+
getEnvironmentVariable('DD_GIT_REPOSITORY_URL'),
|
|
374
383
|
this.tags[GIT_REPOSITORY_URL]
|
|
375
384
|
)
|
|
376
385
|
)
|
|
377
386
|
this.commitSHA = coalesce(
|
|
378
|
-
|
|
387
|
+
getEnvironmentVariable('DD_GIT_COMMIT_SHA'),
|
|
379
388
|
this.tags[GIT_COMMIT_SHA]
|
|
380
389
|
)
|
|
381
390
|
if (!this.repositoryUrl || !this.commitSHA) {
|
|
382
391
|
const DD_GIT_PROPERTIES_FILE = coalesce(
|
|
383
|
-
|
|
392
|
+
getEnvironmentVariable('DD_GIT_PROPERTIES_FILE'),
|
|
384
393
|
`${process.cwd()}/git.properties`
|
|
385
394
|
)
|
|
386
395
|
let gitPropertiesString
|
|
@@ -388,7 +397,7 @@ class Config {
|
|
|
388
397
|
gitPropertiesString = fs.readFileSync(DD_GIT_PROPERTIES_FILE, 'utf8')
|
|
389
398
|
} catch (e) {
|
|
390
399
|
// Only log error if the user has set a git.properties path
|
|
391
|
-
if (
|
|
400
|
+
if (getEnvironmentVariable('DD_GIT_PROPERTIES_FILE')) {
|
|
392
401
|
log.error('Error reading DD_GIT_PROPERTIES_FILE: %s', DD_GIT_PROPERTIES_FILE, e)
|
|
393
402
|
}
|
|
394
403
|
}
|
|
@@ -418,7 +427,7 @@ class Config {
|
|
|
418
427
|
// TODO: Remove the experimental env vars as a major?
|
|
419
428
|
const DD_TRACE_B3_ENABLED = coalesce(
|
|
420
429
|
options.experimental && options.experimental.b3,
|
|
421
|
-
|
|
430
|
+
getEnvironmentVariable('DD_TRACE_EXPERIMENTAL_B3_ENABLED'),
|
|
422
431
|
false
|
|
423
432
|
)
|
|
424
433
|
const defaultPropagationStyle = ['datadog', 'tracecontext']
|
|
@@ -439,7 +448,7 @@ class Config {
|
|
|
439
448
|
FUNCTION_NAME,
|
|
440
449
|
K_SERVICE,
|
|
441
450
|
WEBSITE_SITE_NAME
|
|
442
|
-
} =
|
|
451
|
+
} = getEnvironmentVariables()
|
|
443
452
|
|
|
444
453
|
const service = AWS_LAMBDA_FUNCTION_NAME ||
|
|
445
454
|
FUNCTION_NAME || // Google Cloud Function Name set by deprecated runtimes
|
|
@@ -488,6 +497,7 @@ class Config {
|
|
|
488
497
|
this._setValue(defaults, 'dynamicInstrumentation.enabled', false)
|
|
489
498
|
this._setValue(defaults, 'dynamicInstrumentation.redactedIdentifiers', [])
|
|
490
499
|
this._setValue(defaults, 'dynamicInstrumentation.redactionExcludedIdentifiers', [])
|
|
500
|
+
this._setValue(defaults, 'dynamicInstrumentation.uploadIntervalSeconds', 1)
|
|
491
501
|
this._setValue(defaults, 'env')
|
|
492
502
|
this._setValue(defaults, 'experimental.enableGetRumData', false)
|
|
493
503
|
this._setValue(defaults, 'experimental.exporter')
|
|
@@ -643,7 +653,6 @@ class Config {
|
|
|
643
653
|
DD_API_SECURITY_SAMPLE_DELAY,
|
|
644
654
|
DD_APM_TRACING_ENABLED,
|
|
645
655
|
DD_APPSEC_AUTO_USER_INSTRUMENTATION_MODE,
|
|
646
|
-
DD_APPSEC_AUTOMATED_USER_EVENTS_TRACKING,
|
|
647
656
|
DD_APPSEC_COLLECT_ALL_HEADERS,
|
|
648
657
|
DD_APPSEC_ENABLED,
|
|
649
658
|
DD_APPSEC_GRAPHQL_BLOCKED_TEMPLATE_JSON,
|
|
@@ -667,16 +676,15 @@ class Config {
|
|
|
667
676
|
DD_CODE_ORIGIN_FOR_SPANS_EXPERIMENTAL_EXIT_SPANS_ENABLED,
|
|
668
677
|
DD_DATA_STREAMS_ENABLED,
|
|
669
678
|
DD_DBM_PROPAGATION_MODE,
|
|
670
|
-
DD_DOGSTATSD_HOSTNAME,
|
|
671
679
|
DD_DOGSTATSD_HOST,
|
|
672
680
|
DD_DOGSTATSD_PORT,
|
|
673
681
|
DD_DYNAMIC_INSTRUMENTATION_ENABLED,
|
|
674
682
|
DD_DYNAMIC_INSTRUMENTATION_REDACTED_IDENTIFIERS,
|
|
675
683
|
DD_DYNAMIC_INSTRUMENTATION_REDACTION_EXCLUDED_IDENTIFIERS,
|
|
684
|
+
DD_DYNAMIC_INSTRUMENTATION_UPLOAD_INTERVAL_SECONDS,
|
|
676
685
|
DD_ENV,
|
|
677
|
-
DD_EXPERIMENTAL_API_SECURITY_ENABLED,
|
|
678
686
|
DD_EXPERIMENTAL_APPSEC_STANDALONE_ENABLED,
|
|
679
|
-
|
|
687
|
+
DD_PROFILING_ENABLED,
|
|
680
688
|
DD_GRPC_CLIENT_ERROR_STATUSES,
|
|
681
689
|
DD_GRPC_SERVER_ERROR_STATUSES,
|
|
682
690
|
JEST_WORKER_ID,
|
|
@@ -703,7 +711,6 @@ class Config {
|
|
|
703
711
|
DD_LLMOBS_ML_APP,
|
|
704
712
|
DD_OPENAI_LOGS_ENABLED,
|
|
705
713
|
DD_OPENAI_SPAN_CHAR_LIMIT,
|
|
706
|
-
DD_PROFILING_ENABLED,
|
|
707
714
|
DD_PROFILING_EXPORTERS,
|
|
708
715
|
DD_PROFILING_SOURCE_MAP,
|
|
709
716
|
DD_INTERNAL_PROFILING_LONG_LIVED_THRESHOLD,
|
|
@@ -712,7 +719,6 @@ class Config {
|
|
|
712
719
|
DD_RUNTIME_METRICS_ENABLED,
|
|
713
720
|
DD_SERVICE,
|
|
714
721
|
DD_SERVICE_MAPPING,
|
|
715
|
-
DD_SERVICE_NAME,
|
|
716
722
|
DD_SITE,
|
|
717
723
|
DD_SPAN_SAMPLING_RULES,
|
|
718
724
|
DD_SPAN_SAMPLING_RULES_FILE,
|
|
@@ -724,7 +730,6 @@ class Config {
|
|
|
724
730
|
DD_TELEMETRY_METRICS_ENABLED,
|
|
725
731
|
DD_TRACE_128_BIT_TRACEID_GENERATION_ENABLED,
|
|
726
732
|
DD_TRACE_128_BIT_TRACEID_LOGGING_ENABLED,
|
|
727
|
-
DD_TRACE_AGENT_HOSTNAME,
|
|
728
733
|
DD_TRACE_AGENT_PORT,
|
|
729
734
|
DD_TRACE_AGENT_PROTOCOL_VERSION,
|
|
730
735
|
DD_TRACE_AWS_ADD_SPAN_POINTERS,
|
|
@@ -763,7 +768,6 @@ class Config {
|
|
|
763
768
|
DD_TRACE_SPAN_LEAK_DEBUG,
|
|
764
769
|
DD_TRACE_STARTUP_LOGS,
|
|
765
770
|
DD_TRACE_TAGS,
|
|
766
|
-
DD_TRACE_TELEMETRY_ENABLED,
|
|
767
771
|
DD_TRACE_X_DATADOG_TAGS_MAX_LENGTH,
|
|
768
772
|
DD_TRACING_ENABLED,
|
|
769
773
|
DD_VERSION,
|
|
@@ -777,7 +781,7 @@ class Config {
|
|
|
777
781
|
OTEL_SERVICE_NAME,
|
|
778
782
|
OTEL_TRACES_SAMPLER,
|
|
779
783
|
OTEL_TRACES_SAMPLER_ARG
|
|
780
|
-
} =
|
|
784
|
+
} = getEnvironmentVariables()
|
|
781
785
|
|
|
782
786
|
const tags = {}
|
|
783
787
|
const env = setHiddenProperty(this, '_env', {})
|
|
@@ -792,10 +796,7 @@ class Config {
|
|
|
792
796
|
DD_APM_TRACING_ENABLED,
|
|
793
797
|
DD_EXPERIMENTAL_APPSEC_STANDALONE_ENABLED && isFalse(DD_EXPERIMENTAL_APPSEC_STANDALONE_ENABLED)
|
|
794
798
|
))
|
|
795
|
-
this._setBoolean(env, 'appsec.apiSecurity.enabled',
|
|
796
|
-
DD_API_SECURITY_ENABLED && isTrue(DD_API_SECURITY_ENABLED),
|
|
797
|
-
DD_EXPERIMENTAL_API_SECURITY_ENABLED && isTrue(DD_EXPERIMENTAL_API_SECURITY_ENABLED)
|
|
798
|
-
))
|
|
799
|
+
this._setBoolean(env, 'appsec.apiSecurity.enabled', DD_API_SECURITY_ENABLED && isTrue(DD_API_SECURITY_ENABLED))
|
|
799
800
|
this._setValue(env, 'appsec.apiSecurity.sampleDelay', maybeFloat(DD_API_SECURITY_SAMPLE_DELAY))
|
|
800
801
|
this._setValue(env, 'appsec.blockedTemplateGraphql', maybeFile(DD_APPSEC_GRAPHQL_BLOCKED_TEMPLATE_JSON))
|
|
801
802
|
this._setValue(env, 'appsec.blockedTemplateHtml', maybeFile(DD_APPSEC_HTTP_BLOCKED_TEMPLATE_HTML))
|
|
@@ -803,10 +804,7 @@ class Config {
|
|
|
803
804
|
this._setValue(env, 'appsec.blockedTemplateJson', maybeFile(DD_APPSEC_HTTP_BLOCKED_TEMPLATE_JSON))
|
|
804
805
|
this._envUnprocessed['appsec.blockedTemplateJson'] = DD_APPSEC_HTTP_BLOCKED_TEMPLATE_JSON
|
|
805
806
|
this._setBoolean(env, 'appsec.enabled', DD_APPSEC_ENABLED)
|
|
806
|
-
this._setString(env, 'appsec.eventTracking.mode',
|
|
807
|
-
DD_APPSEC_AUTO_USER_INSTRUMENTATION_MODE,
|
|
808
|
-
DD_APPSEC_AUTOMATED_USER_EVENTS_TRACKING // TODO: remove in next major
|
|
809
|
-
))
|
|
807
|
+
this._setString(env, 'appsec.eventTracking.mode', DD_APPSEC_AUTO_USER_INSTRUMENTATION_MODE)
|
|
810
808
|
this._setBoolean(env, 'appsec.extendedHeadersCollection.enabled', DD_APPSEC_COLLECT_ALL_HEADERS)
|
|
811
809
|
this._setBoolean(
|
|
812
810
|
env,
|
|
@@ -847,7 +845,7 @@ class Config {
|
|
|
847
845
|
DD_CODE_ORIGIN_FOR_SPANS_EXPERIMENTAL_EXIT_SPANS_ENABLED
|
|
848
846
|
)
|
|
849
847
|
this._setString(env, 'dbmPropagationMode', DD_DBM_PROPAGATION_MODE)
|
|
850
|
-
this._setString(env, 'dogstatsd.hostname', DD_DOGSTATSD_HOST
|
|
848
|
+
this._setString(env, 'dogstatsd.hostname', DD_DOGSTATSD_HOST)
|
|
851
849
|
this._setString(env, 'dogstatsd.port', DD_DOGSTATSD_PORT)
|
|
852
850
|
this._setBoolean(env, 'dsmEnabled', DD_DATA_STREAMS_ENABLED)
|
|
853
851
|
this._setBoolean(env, 'dynamicInstrumentation.enabled', DD_DYNAMIC_INSTRUMENTATION_ENABLED)
|
|
@@ -857,6 +855,12 @@ class Config {
|
|
|
857
855
|
'dynamicInstrumentation.redactionExcludedIdentifiers',
|
|
858
856
|
DD_DYNAMIC_INSTRUMENTATION_REDACTION_EXCLUDED_IDENTIFIERS
|
|
859
857
|
)
|
|
858
|
+
this._setValue(
|
|
859
|
+
env,
|
|
860
|
+
'dynamicInstrumentation.uploadIntervalSeconds',
|
|
861
|
+
maybeFloat(DD_DYNAMIC_INSTRUMENTATION_UPLOAD_INTERVAL_SECONDS)
|
|
862
|
+
)
|
|
863
|
+
this._envUnprocessed['dynamicInstrumentation.uploadInterval'] = DD_DYNAMIC_INSTRUMENTATION_UPLOAD_INTERVAL_SECONDS
|
|
860
864
|
this._setString(env, 'env', DD_ENV || tags.env)
|
|
861
865
|
this._setBoolean(env, 'traceEnabled', DD_TRACE_ENABLED)
|
|
862
866
|
this._setBoolean(env, 'experimental.enableGetRumData', DD_TRACE_EXPERIMENTAL_GET_RUM_DATA_ENABLED)
|
|
@@ -869,7 +873,7 @@ class Config {
|
|
|
869
873
|
this._setIntegerRangeSet(env, 'grpc.client.error.statuses', DD_GRPC_CLIENT_ERROR_STATUSES)
|
|
870
874
|
this._setIntegerRangeSet(env, 'grpc.server.error.statuses', DD_GRPC_SERVER_ERROR_STATUSES)
|
|
871
875
|
this._setArray(env, 'headerTags', DD_TRACE_HEADER_TAGS)
|
|
872
|
-
this._setString(env, 'hostname',
|
|
876
|
+
this._setString(env, 'hostname', DD_AGENT_HOST)
|
|
873
877
|
this._setValue(env, 'iast.dbRowsToTaint', maybeInt(DD_IAST_DB_ROWS_TO_TAINT))
|
|
874
878
|
this._setBoolean(env, 'iast.deduplicationEnabled', DD_IAST_DEDUPLICATION_ENABLED)
|
|
875
879
|
this._setBoolean(env, 'iast.enabled', DD_IAST_ENABLED)
|
|
@@ -915,7 +919,6 @@ class Config {
|
|
|
915
919
|
this._setString(env, 'port', DD_TRACE_AGENT_PORT)
|
|
916
920
|
const profilingEnabled = normalizeProfilingEnabledValue(
|
|
917
921
|
coalesce(
|
|
918
|
-
DD_EXPERIMENTAL_PROFILING_ENABLED,
|
|
919
922
|
DD_PROFILING_ENABLED,
|
|
920
923
|
this._isInServerlessEnvironment() ? 'false' : undefined
|
|
921
924
|
)
|
|
@@ -953,10 +956,10 @@ class Config {
|
|
|
953
956
|
this._setSamplingRule(env, 'sampler.rules', safeJsonParse(DD_TRACE_SAMPLING_RULES))
|
|
954
957
|
this._envUnprocessed['sampler.rules'] = DD_TRACE_SAMPLING_RULES
|
|
955
958
|
this._setString(env, 'scope', DD_TRACE_SCOPE)
|
|
956
|
-
this._setString(env, 'service', DD_SERVICE ||
|
|
959
|
+
this._setString(env, 'service', DD_SERVICE || tags.service || OTEL_SERVICE_NAME)
|
|
957
960
|
if (DD_SERVICE_MAPPING) {
|
|
958
961
|
this._setValue(env, 'serviceMapping', Object.fromEntries(
|
|
959
|
-
|
|
962
|
+
DD_SERVICE_MAPPING.split(',').map(x => x.trim().split(':'))
|
|
960
963
|
))
|
|
961
964
|
}
|
|
962
965
|
this._setString(env, 'site', DD_SITE)
|
|
@@ -971,8 +974,7 @@ class Config {
|
|
|
971
974
|
this._setTags(env, 'tags', tags)
|
|
972
975
|
this._setValue(env, 'tagsHeaderMaxLength', DD_TRACE_X_DATADOG_TAGS_MAX_LENGTH)
|
|
973
976
|
this._setBoolean(env, 'telemetry.enabled', coalesce(
|
|
974
|
-
|
|
975
|
-
DD_INSTRUMENTATION_TELEMETRY_ENABLED, // to comply with instrumentation telemetry specs
|
|
977
|
+
DD_INSTRUMENTATION_TELEMETRY_ENABLED,
|
|
976
978
|
!(this._isInServerlessEnvironment() || JEST_WORKER_ID)
|
|
977
979
|
))
|
|
978
980
|
this._setString(env, 'instrumentation_config_id', DD_INSTRUMENTATION_CONFIG_ID)
|
|
@@ -1016,7 +1018,7 @@ class Config {
|
|
|
1016
1018
|
const tags = {}
|
|
1017
1019
|
setHiddenProperty(this, '_optsUnprocessed', {})
|
|
1018
1020
|
|
|
1019
|
-
options = setHiddenProperty(this, '_optionsArg',
|
|
1021
|
+
options = setHiddenProperty(this, '_optionsArg', { ingestion: {}, ...options, ...opts })
|
|
1020
1022
|
|
|
1021
1023
|
tagger.add(tags, options.tags)
|
|
1022
1024
|
|
|
@@ -1088,6 +1090,13 @@ class Config {
|
|
|
1088
1090
|
'dynamicInstrumentation.redactionExcludedIdentifiers',
|
|
1089
1091
|
options.dynamicInstrumentation?.redactionExcludedIdentifiers
|
|
1090
1092
|
)
|
|
1093
|
+
this._setValue(
|
|
1094
|
+
opts,
|
|
1095
|
+
'dynamicInstrumentation.uploadIntervalSeconds',
|
|
1096
|
+
maybeFloat(options.dynamicInstrumentation?.uploadIntervalSeconds)
|
|
1097
|
+
)
|
|
1098
|
+
this._optsUnprocessed['dynamicInstrumentation.uploadIntervalSeconds'] =
|
|
1099
|
+
options.dynamicInstrumentation?.uploadIntervalSeconds
|
|
1091
1100
|
this._setString(opts, 'env', options.env || tags.env)
|
|
1092
1101
|
this._setBoolean(opts, 'experimental.enableGetRumData', options.experimental?.enableGetRumData)
|
|
1093
1102
|
this._setString(opts, 'experimental.exporter', options.experimental?.exporter)
|
|
@@ -1181,20 +1190,19 @@ class Config {
|
|
|
1181
1190
|
|
|
1182
1191
|
_isCiVisibilityItrEnabled () {
|
|
1183
1192
|
return coalesce(
|
|
1184
|
-
|
|
1193
|
+
getEnvironmentVariable('DD_CIVISIBILITY_ITR_ENABLED'),
|
|
1185
1194
|
true
|
|
1186
1195
|
)
|
|
1187
1196
|
}
|
|
1188
1197
|
|
|
1189
1198
|
_getHostname () {
|
|
1190
|
-
const DD_CIVISIBILITY_AGENTLESS_URL =
|
|
1199
|
+
const DD_CIVISIBILITY_AGENTLESS_URL = getEnvironmentVariable('DD_CIVISIBILITY_AGENTLESS_URL')
|
|
1191
1200
|
const url = DD_CIVISIBILITY_AGENTLESS_URL
|
|
1192
1201
|
? new URL(DD_CIVISIBILITY_AGENTLESS_URL)
|
|
1193
1202
|
: getAgentUrl(this._getTraceAgentUrl(), this._optionsArg)
|
|
1194
1203
|
const DD_AGENT_HOST = coalesce(
|
|
1195
1204
|
this._optionsArg.hostname,
|
|
1196
|
-
|
|
1197
|
-
process.env.DD_TRACE_AGENT_HOSTNAME,
|
|
1205
|
+
getEnvironmentVariable('DD_AGENT_HOST'),
|
|
1198
1206
|
'127.0.0.1'
|
|
1199
1207
|
)
|
|
1200
1208
|
return DD_AGENT_HOST || (url && url.hostname)
|
|
@@ -1204,17 +1212,17 @@ class Config {
|
|
|
1204
1212
|
const DD_TRACE_SPAN_ATTRIBUTE_SCHEMA = validateNamingVersion(
|
|
1205
1213
|
coalesce(
|
|
1206
1214
|
this._optionsArg.spanAttributeSchema,
|
|
1207
|
-
|
|
1215
|
+
getEnvironmentVariable('DD_TRACE_SPAN_ATTRIBUTE_SCHEMA')
|
|
1208
1216
|
)
|
|
1209
1217
|
)
|
|
1210
1218
|
|
|
1211
1219
|
const peerServiceSet = (
|
|
1212
1220
|
this._optionsArg.hasOwnProperty('spanComputePeerService') ||
|
|
1213
|
-
|
|
1221
|
+
getEnvironmentVariables().hasOwnProperty('DD_TRACE_PEER_SERVICE_DEFAULTS_ENABLED')
|
|
1214
1222
|
)
|
|
1215
1223
|
const peerServiceValue = coalesce(
|
|
1216
1224
|
this._optionsArg.spanComputePeerService,
|
|
1217
|
-
|
|
1225
|
+
getEnvironmentVariable('DD_TRACE_PEER_SERVICE_DEFAULTS_ENABLED')
|
|
1218
1226
|
)
|
|
1219
1227
|
|
|
1220
1228
|
const spanComputePeerService = (
|
|
@@ -1230,14 +1238,14 @@ class Config {
|
|
|
1230
1238
|
|
|
1231
1239
|
_isCiVisibilityGitUploadEnabled () {
|
|
1232
1240
|
return coalesce(
|
|
1233
|
-
|
|
1241
|
+
getEnvironmentVariable('DD_CIVISIBILITY_GIT_UPLOAD_ENABLED'),
|
|
1234
1242
|
true
|
|
1235
1243
|
)
|
|
1236
1244
|
}
|
|
1237
1245
|
|
|
1238
1246
|
_isCiVisibilityManualApiEnabled () {
|
|
1239
1247
|
return coalesce(
|
|
1240
|
-
|
|
1248
|
+
getEnvironmentVariable('DD_CIVISIBILITY_MANUAL_API_ENABLED'),
|
|
1241
1249
|
true
|
|
1242
1250
|
)
|
|
1243
1251
|
}
|
|
@@ -1248,7 +1256,7 @@ class Config {
|
|
|
1248
1256
|
|
|
1249
1257
|
return apmTracingEnabled && coalesce(
|
|
1250
1258
|
this._optionsArg.stats,
|
|
1251
|
-
|
|
1259
|
+
getEnvironmentVariable('DD_TRACE_STATS_COMPUTATION_ENABLED'),
|
|
1252
1260
|
getIsGCPFunction() || getIsAzureFunction()
|
|
1253
1261
|
)
|
|
1254
1262
|
}
|
|
@@ -1256,8 +1264,7 @@ class Config {
|
|
|
1256
1264
|
_getTraceAgentUrl () {
|
|
1257
1265
|
return coalesce(
|
|
1258
1266
|
this._optionsArg.url,
|
|
1259
|
-
|
|
1260
|
-
process.env.DD_TRACE_URL,
|
|
1267
|
+
getEnvironmentVariable('DD_TRACE_AGENT_URL'),
|
|
1261
1268
|
null
|
|
1262
1269
|
)
|
|
1263
1270
|
}
|
|
@@ -1277,7 +1284,7 @@ class Config {
|
|
|
1277
1284
|
DD_TEST_MANAGEMENT_ENABLED,
|
|
1278
1285
|
DD_TEST_MANAGEMENT_ATTEMPT_TO_FIX_RETRIES,
|
|
1279
1286
|
DD_CIVISIBILITY_IMPACTED_TESTS_DETECTION_ENABLED
|
|
1280
|
-
} =
|
|
1287
|
+
} = getEnvironmentVariables()
|
|
1281
1288
|
|
|
1282
1289
|
if (DD_CIVISIBILITY_AGENTLESS_URL) {
|
|
1283
1290
|
this._setValue(calc, 'url', new URL(DD_CIVISIBILITY_AGENTLESS_URL))
|
|
@@ -1454,66 +1461,65 @@ class Config {
|
|
|
1454
1461
|
obj[name] = value
|
|
1455
1462
|
}
|
|
1456
1463
|
|
|
1464
|
+
_setAndTrackChange ({ name, value, origin, unprocessedValue, changes }) {
|
|
1465
|
+
set(this, name, value)
|
|
1466
|
+
|
|
1467
|
+
if (!changeTracker[name]) {
|
|
1468
|
+
changeTracker[name] = {}
|
|
1469
|
+
}
|
|
1470
|
+
|
|
1471
|
+
const originExists = origin in changeTracker[name]
|
|
1472
|
+
const oldValue = changeTracker[name][origin]
|
|
1473
|
+
|
|
1474
|
+
if (!originExists || oldValue !== value) {
|
|
1475
|
+
changeTracker[name][origin] = value
|
|
1476
|
+
changes.push({
|
|
1477
|
+
name,
|
|
1478
|
+
value: unprocessedValue || value,
|
|
1479
|
+
origin
|
|
1480
|
+
})
|
|
1481
|
+
}
|
|
1482
|
+
}
|
|
1483
|
+
|
|
1457
1484
|
// TODO: Report origin changes and errors to telemetry.
|
|
1458
1485
|
// TODO: Deeply merge configurations.
|
|
1459
1486
|
// TODO: Move change tracking to telemetry.
|
|
1460
1487
|
// for telemetry reporting, `name`s in `containers` need to be keys from:
|
|
1461
1488
|
// https://github.com/DataDog/dd-go/blob/prod/trace/apps/tracer-telemetry-intake/telemetry-payload/static/config_norm_rules.json
|
|
1462
1489
|
_merge () {
|
|
1463
|
-
const containers = [
|
|
1464
|
-
this._remote,
|
|
1465
|
-
this._options,
|
|
1466
|
-
this._fleetStableConfig,
|
|
1467
|
-
this._env,
|
|
1468
|
-
this._localStableConfig,
|
|
1469
|
-
this._calculated,
|
|
1470
|
-
this._defaults
|
|
1471
|
-
]
|
|
1472
|
-
const origins = [
|
|
1473
|
-
'remote_config',
|
|
1474
|
-
'code',
|
|
1475
|
-
'fleet_stable_config',
|
|
1476
|
-
'env_var',
|
|
1477
|
-
'local_stable_config',
|
|
1478
|
-
'calculated',
|
|
1479
|
-
'default'
|
|
1480
|
-
]
|
|
1481
|
-
const unprocessedValues = [
|
|
1482
|
-
this._remoteUnprocessed,
|
|
1483
|
-
this._optsUnprocessed,
|
|
1484
|
-
{},
|
|
1485
|
-
this._envUnprocessed,
|
|
1486
|
-
{},
|
|
1487
|
-
{},
|
|
1488
|
-
{}
|
|
1489
|
-
]
|
|
1490
1490
|
const changes = []
|
|
1491
1491
|
|
|
1492
1492
|
for (const name in this._defaults) {
|
|
1493
|
-
|
|
1494
|
-
|
|
1493
|
+
// Use reverse order for merge (lowest priority first)
|
|
1494
|
+
for (let i = sourcesOrder.length - 1; i >= 0; i--) {
|
|
1495
|
+
const { containerProperty, origin, unprocessedProperty } = sourcesOrder[i]
|
|
1496
|
+
const container = this[containerProperty]
|
|
1495
1497
|
const value = container[name]
|
|
1496
|
-
|
|
1497
|
-
|
|
1498
|
-
if (get(this, name) === value && has(this, name)) break
|
|
1499
|
-
|
|
1500
|
-
set(this, name, value)
|
|
1501
|
-
|
|
1502
|
-
changes.push({
|
|
1498
|
+
if (value != null || container === this._defaults) {
|
|
1499
|
+
this._setAndTrackChange({
|
|
1503
1500
|
name,
|
|
1504
|
-
value
|
|
1505
|
-
origin
|
|
1501
|
+
value,
|
|
1502
|
+
origin,
|
|
1503
|
+
unprocessedValue: unprocessedProperty === undefined ? undefined : this[unprocessedProperty][name],
|
|
1504
|
+
changes
|
|
1506
1505
|
})
|
|
1507
|
-
|
|
1508
|
-
break
|
|
1509
1506
|
}
|
|
1510
1507
|
}
|
|
1511
1508
|
}
|
|
1512
|
-
|
|
1513
1509
|
this.sampler.sampleRate = this.sampleRate
|
|
1514
1510
|
updateConfig(changes, this)
|
|
1515
1511
|
}
|
|
1516
1512
|
|
|
1513
|
+
getOrigin (name) {
|
|
1514
|
+
for (const { containerProperty, origin } of sourcesOrder) {
|
|
1515
|
+
const container = this[containerProperty]
|
|
1516
|
+
const value = container[name]
|
|
1517
|
+
if (value != null || container === this._defaults) {
|
|
1518
|
+
return origin
|
|
1519
|
+
}
|
|
1520
|
+
}
|
|
1521
|
+
}
|
|
1522
|
+
|
|
1517
1523
|
// TODO: Refactor the Config class so it never produces any config objects that are incompatible with MessageChannel
|
|
1518
1524
|
/**
|
|
1519
1525
|
* Serializes the config object so it can be passed over a Worker Thread MessageChannel.
|
|
@@ -1536,12 +1542,12 @@ function handleOtel (tagString) {
|
|
|
1536
1542
|
?.replace(/(^|,)deployment\.environment=/, '$1env:')
|
|
1537
1543
|
.replace(/(^|,)service\.name=/, '$1service:')
|
|
1538
1544
|
.replace(/(^|,)service\.version=/, '$1version:')
|
|
1539
|
-
.
|
|
1545
|
+
.replaceAll('=', ':')
|
|
1540
1546
|
}
|
|
1541
1547
|
|
|
1542
1548
|
function parseSpaceSeparatedTags (tagString) {
|
|
1543
1549
|
if (tagString && !tagString.includes(',')) {
|
|
1544
|
-
tagString = tagString.
|
|
1550
|
+
tagString = tagString.replaceAll(/\s+/g, ',')
|
|
1545
1551
|
}
|
|
1546
1552
|
return tagString
|
|
1547
1553
|
}
|
|
@@ -1564,9 +1570,8 @@ function getAgentUrl (url, options) {
|
|
|
1564
1570
|
if (
|
|
1565
1571
|
!options.hostname &&
|
|
1566
1572
|
!options.port &&
|
|
1567
|
-
!
|
|
1568
|
-
!
|
|
1569
|
-
!process.env.DD_TRACE_AGENT_PORT &&
|
|
1573
|
+
!getEnvironmentVariable('DD_AGENT_HOST') &&
|
|
1574
|
+
!getEnvironmentVariable('DD_TRACE_AGENT_PORT') &&
|
|
1570
1575
|
fs.existsSync('/var/run/datadog/apm.socket')
|
|
1571
1576
|
) {
|
|
1572
1577
|
return new URL('unix:///var/run/datadog/apm.socket')
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
const os = require('os')
|
|
2
2
|
const fs = require('fs')
|
|
3
|
+
const { getEnvironmentVariable } = require('../../dd-trace/src/config-helper')
|
|
3
4
|
|
|
4
5
|
class StableConfig {
|
|
5
6
|
constructor () {
|
|
@@ -40,6 +41,8 @@ class StableConfig {
|
|
|
40
41
|
|
|
41
42
|
try {
|
|
42
43
|
const configurator = new libconfig.JsConfigurator()
|
|
44
|
+
// Intentionally pass through the raw environment variables for reporting.
|
|
45
|
+
// eslint-disable-next-line eslint-rules/eslint-process-env
|
|
43
46
|
configurator.set_envp(Object.entries(process.env).map(([key, value]) => `${key}=${value}`))
|
|
44
47
|
configurator.set_args(process.argv)
|
|
45
48
|
configurator.get_configuration(localConfig.toString(), fleetConfig.toString()).forEach((entry) => {
|
|
@@ -86,11 +89,11 @@ class StableConfig {
|
|
|
86
89
|
}
|
|
87
90
|
|
|
88
91
|
// Allow overriding the paths for testing
|
|
89
|
-
if (
|
|
90
|
-
localConfigPath =
|
|
92
|
+
if (getEnvironmentVariable('DD_TEST_LOCAL_CONFIG_PATH') !== undefined) {
|
|
93
|
+
localConfigPath = getEnvironmentVariable('DD_TEST_LOCAL_CONFIG_PATH')
|
|
91
94
|
}
|
|
92
|
-
if (
|
|
93
|
-
fleetConfigPath =
|
|
95
|
+
if (getEnvironmentVariable('DD_TEST_FLEET_CONFIG_PATH') !== undefined) {
|
|
96
|
+
fleetConfigPath = getEnvironmentVariable('DD_TEST_FLEET_CONFIG_PATH')
|
|
94
97
|
}
|
|
95
98
|
|
|
96
99
|
return { localConfigPath, fleetConfigPath }
|
|
@@ -117,12 +117,12 @@ function convertKey (key) {
|
|
|
117
117
|
function jsonStringify (obj, indent = 2) {
|
|
118
118
|
// made to stringify json exactly similar to python / java in order for hashing to be the same
|
|
119
119
|
const jsonString = JSON.stringify(obj, (_, value) => value, indent)
|
|
120
|
-
return jsonString.
|
|
121
|
-
.
|
|
122
|
-
.
|
|
123
|
-
.
|
|
124
|
-
.
|
|
125
|
-
.
|
|
120
|
+
return jsonString.replaceAll(/^ +/gm, ' ') // Replace leading spaces with single space
|
|
121
|
+
.replaceAll('\n', '') // Remove newlines
|
|
122
|
+
.replaceAll('{ ', '{') // Remove space after '{'
|
|
123
|
+
.replaceAll(' }', '}') // Remove space before '}'
|
|
124
|
+
.replaceAll('[ ', '[') // Remove space after '['
|
|
125
|
+
.replaceAll(' ]', ']') // Remove space before ']'
|
|
126
126
|
}
|
|
127
127
|
|
|
128
128
|
module.exports = {
|