dd-trace 5.55.0 → 5.57.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE-3rdparty.csv +1 -0
- package/index.d.ts +44 -2
- package/init.js +4 -1
- package/package.json +24 -23
- package/packages/datadog-core/src/utils/src/set.js +8 -10
- package/packages/datadog-esbuild/index.js +22 -0
- package/packages/datadog-instrumentations/src/cassandra-driver.js +43 -60
- package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +12 -12
- package/packages/datadog-instrumentations/src/cucumber.js +4 -6
- package/packages/datadog-instrumentations/src/elasticsearch.js +16 -19
- package/packages/datadog-instrumentations/src/fastify.js +91 -9
- package/packages/datadog-instrumentations/src/helpers/bundler-register.js +20 -5
- package/packages/datadog-instrumentations/src/helpers/check-require-cache.js +2 -2
- package/packages/datadog-instrumentations/src/helpers/hooks.js +1 -0
- package/packages/datadog-instrumentations/src/helpers/register.js +17 -5
- package/packages/datadog-instrumentations/src/ioredis.js +8 -13
- package/packages/datadog-instrumentations/src/iovalkey.js +10 -14
- package/packages/datadog-instrumentations/src/jest.js +423 -325
- package/packages/datadog-instrumentations/src/memcached.js +17 -24
- package/packages/datadog-instrumentations/src/mocha/main.js +7 -6
- package/packages/datadog-instrumentations/src/moleculer/client.js +9 -10
- package/packages/datadog-instrumentations/src/moleculer/server.js +12 -13
- package/packages/datadog-instrumentations/src/openai.js +30 -2
- package/packages/datadog-instrumentations/src/playwright.js +4 -1
- package/packages/datadog-instrumentations/src/prisma.js +116 -0
- package/packages/datadog-instrumentations/src/redis.js +32 -43
- package/packages/datadog-instrumentations/src/router.js +1 -1
- package/packages/datadog-instrumentations/src/sharedb.js +10 -16
- package/packages/datadog-instrumentations/src/vitest.js +4 -4
- package/packages/datadog-plugin-aws-sdk/src/base.js +6 -1
- package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +9 -4
- package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +3 -2
- package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +2 -1
- package/packages/datadog-plugin-aws-sdk/src/util.js +2 -2
- package/packages/datadog-plugin-azure-functions/src/index.js +5 -4
- package/packages/datadog-plugin-bunyan/src/index.js +2 -2
- package/packages/datadog-plugin-cassandra-driver/src/index.js +6 -2
- package/packages/datadog-plugin-confluentinc-kafka-javascript/src/batch-consumer.js +1 -1
- package/packages/datadog-plugin-confluentinc-kafka-javascript/src/consumer.js +1 -1
- package/packages/datadog-plugin-confluentinc-kafka-javascript/src/index.js +1 -1
- package/packages/datadog-plugin-confluentinc-kafka-javascript/src/producer.js +1 -1
- package/packages/datadog-plugin-cucumber/src/index.js +4 -2
- package/packages/datadog-plugin-cypress/src/cypress-plugin.js +9 -5
- package/packages/datadog-plugin-elasticsearch/src/index.js +12 -4
- package/packages/datadog-plugin-http/src/client.js +1 -0
- package/packages/datadog-plugin-http/src/server.js +2 -1
- package/packages/datadog-plugin-http2/src/client.js +1 -0
- package/packages/datadog-plugin-http2/src/server.js +1 -0
- package/packages/datadog-plugin-jest/src/index.js +4 -3
- package/packages/datadog-plugin-memcached/src/index.js +6 -2
- package/packages/datadog-plugin-mocha/src/index.js +3 -2
- package/packages/datadog-plugin-moleculer/src/client.js +15 -9
- package/packages/datadog-plugin-moleculer/src/server.js +9 -5
- package/packages/datadog-plugin-next/src/index.js +2 -1
- package/packages/datadog-plugin-openai/src/tracing.js +127 -80
- package/packages/datadog-plugin-oracledb/src/index.js +2 -1
- package/packages/datadog-plugin-pino/src/index.js +2 -2
- package/packages/datadog-plugin-prisma/src/client.js +62 -0
- package/packages/datadog-plugin-prisma/src/engine.js +81 -0
- package/packages/datadog-plugin-prisma/src/index.js +22 -0
- package/packages/datadog-plugin-protobufjs/src/schema_iterator.js +1 -1
- package/packages/datadog-plugin-redis/src/index.js +9 -3
- package/packages/datadog-plugin-router/src/index.js +1 -0
- package/packages/datadog-plugin-sharedb/src/index.js +13 -5
- package/packages/datadog-plugin-winston/src/index.js +2 -2
- package/packages/dd-trace/src/appsec/channels.js +26 -21
- package/packages/dd-trace/src/appsec/iast/analyzers/sql-injection-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/unvalidated-redirect-analyzer.js +13 -20
- package/packages/dd-trace/src/appsec/iast/security-controls/index.js +1 -1
- package/packages/dd-trace/src/appsec/iast/taint-tracking/operations-taint-object.js +44 -1
- package/packages/dd-trace/src/appsec/iast/taint-tracking/operations.js +2 -1
- package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +7 -2
- package/packages/dd-trace/src/appsec/iast/taint-tracking/source-types.js +0 -1
- package/packages/dd-trace/src/appsec/index.js +28 -2
- package/packages/dd-trace/src/appsec/rasp/utils.js +0 -5
- package/packages/dd-trace/src/appsec/reporter.js +6 -4
- package/packages/dd-trace/src/baggage.js +2 -2
- package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/worker/index.js +3 -3
- package/packages/dd-trace/src/ci-visibility/early-flake-detection/get-known-tests.js +1 -1
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/coverage-writer.js +1 -1
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +1 -1
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +2 -2
- package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +6 -6
- package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +2 -3
- package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +3 -3
- package/packages/dd-trace/src/config.js +334 -312
- package/packages/dd-trace/src/constants.js +2 -1
- package/packages/dd-trace/src/crashtracking/crashtracker.js +12 -14
- package/packages/dd-trace/src/datastreams/context.js +1 -1
- package/packages/dd-trace/src/datastreams/processor.js +1 -1
- package/packages/dd-trace/src/datastreams/writer.js +3 -3
- package/packages/dd-trace/src/debugger/devtools_client/breakpoints.js +6 -3
- package/packages/dd-trace/src/debugger/devtools_client/condition.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/index.js +2 -3
- package/packages/dd-trace/src/debugger/devtools_client/send.js +5 -1
- package/packages/dd-trace/src/debugger/devtools_client/state.js +7 -4
- package/packages/dd-trace/src/debugger/devtools_client/status.js +5 -1
- package/packages/dd-trace/src/dogstatsd.js +3 -3
- package/packages/dd-trace/src/exporters/agent/index.js +10 -5
- package/packages/dd-trace/src/exporters/agent/writer.js +4 -2
- package/packages/dd-trace/src/exporters/common/agent-info-exporter.js +2 -2
- package/packages/dd-trace/src/exporters/log/index.js +1 -1
- package/packages/dd-trace/src/exporters/span-stats/writer.js +2 -2
- package/packages/dd-trace/src/guardrails/index.js +3 -1
- package/packages/dd-trace/src/guardrails/telemetry.js +1 -1
- package/packages/dd-trace/src/llmobs/index.js +11 -5
- package/packages/dd-trace/src/llmobs/plugins/base.js +2 -2
- package/packages/dd-trace/src/llmobs/plugins/langchain/index.js +1 -1
- package/packages/dd-trace/src/llmobs/tagger.js +13 -13
- package/packages/dd-trace/src/llmobs/writers/base.js +2 -2
- package/packages/dd-trace/src/llmobs/writers/spans.js +2 -2
- package/packages/dd-trace/src/opentelemetry/tracer.js +1 -1
- package/packages/dd-trace/src/opentracing/propagation/text_map.js +22 -28
- package/packages/dd-trace/src/opentracing/span.js +1 -0
- package/packages/dd-trace/src/plugin_manager.js +3 -3
- package/packages/dd-trace/src/plugins/cache.js +2 -2
- package/packages/dd-trace/src/plugins/ci_plugin.js +11 -7
- package/packages/dd-trace/src/plugins/database.js +3 -1
- package/packages/dd-trace/src/plugins/index.js +1 -0
- package/packages/dd-trace/src/plugins/log_plugin.js +5 -1
- package/packages/dd-trace/src/plugins/outbound.js +8 -6
- package/packages/dd-trace/src/plugins/structured_log_plugin.js +9 -0
- package/packages/dd-trace/src/plugins/tracing.js +1 -1
- package/packages/dd-trace/src/plugins/util/ci.js +83 -30
- package/packages/dd-trace/src/plugins/util/git.js +1 -0
- package/packages/dd-trace/src/plugins/util/inferred_proxy.js +3 -2
- package/packages/dd-trace/src/plugins/util/ip_extractor.js +1 -0
- package/packages/dd-trace/src/plugins/util/tags.js +4 -1
- package/packages/dd-trace/src/plugins/util/test.js +80 -10
- package/packages/dd-trace/src/plugins/util/web.js +1 -0
- package/packages/dd-trace/src/profiler.js +0 -2
- package/packages/dd-trace/src/profiling/exporter_cli.js +1 -3
- package/packages/dd-trace/src/profiling/profilers/events.js +10 -2
- package/packages/dd-trace/src/profiling/ssi-heuristics.js +18 -126
- package/packages/dd-trace/src/proxy.js +12 -27
- package/packages/dd-trace/src/runtime_metrics/index.js +1 -1
- package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +14 -45
- package/packages/dd-trace/src/service-naming/schemas/v0/messaging.js +2 -2
- package/packages/dd-trace/src/service-naming/schemas/v0/storage.js +4 -0
- package/packages/dd-trace/src/service-naming/schemas/v1/messaging.js +2 -2
- package/packages/dd-trace/src/service-naming/schemas/v1/storage.js +4 -0
- package/packages/dd-trace/src/supported-configurations.json +13 -3
- package/packages/dd-trace/src/telemetry/telemetry.js +11 -4
- package/packages/dd-trace/src/tracer.js +11 -0
- package/packages/dd-trace/src/tracer_metadata.js +25 -0
- package/packages/dd-trace/src/util.js +11 -4
- package/version.js +3 -1
- package/packages/datadog-core/src/utils/src/get.js +0 -11
- package/packages/datadog-core/src/utils/src/has.js +0 -14
- package/packages/dd-trace/src/profiling/ssi-telemetry-mock-profiler.js +0 -30
|
@@ -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')
|
|
@@ -17,12 +15,16 @@ const { getGitMetadataFromGitProperties, removeUserSensitiveInfo } = require('./
|
|
|
17
15
|
const { updateConfig } = require('./telemetry')
|
|
18
16
|
const telemetryMetrics = require('./telemetry/metrics')
|
|
19
17
|
const { isInServerlessEnvironment, getIsGCPFunction, getIsAzureFunction } = require('./serverless')
|
|
20
|
-
const {
|
|
18
|
+
const {
|
|
19
|
+
ORIGIN_KEY, GRPC_CLIENT_ERROR_STATUSES, GRPC_SERVER_ERROR_STATUSES, INSTRUMENTED_BY_SSI
|
|
20
|
+
} = require('./constants')
|
|
21
21
|
const { appendRules } = require('./payload-tagging/config')
|
|
22
22
|
const { getEnvironmentVariable, getEnvironmentVariables } = require('./config-helper')
|
|
23
23
|
|
|
24
24
|
const tracerMetrics = telemetryMetrics.manager.namespace('tracers')
|
|
25
25
|
|
|
26
|
+
const changeTracker = {}
|
|
27
|
+
|
|
26
28
|
const telemetryCounters = {
|
|
27
29
|
'otel.env.hiding': {},
|
|
28
30
|
'otel.env.invalid': {}
|
|
@@ -121,12 +123,12 @@ function validateEnvVarType (envVar) {
|
|
|
121
123
|
function checkIfBothOtelAndDdEnvVarSet () {
|
|
122
124
|
for (const [otelEnvVar, ddEnvVar] of Object.entries(otelDdEnvMapping)) {
|
|
123
125
|
if (ddEnvVar && getEnvironmentVariable(ddEnvVar) && getEnvironmentVariable(otelEnvVar)) {
|
|
124
|
-
log.warn(
|
|
126
|
+
log.warn('both %s and %s environment variables are set', ddEnvVar, otelEnvVar)
|
|
125
127
|
getCounter('otel.env.hiding', ddEnvVar, otelEnvVar).inc()
|
|
126
128
|
}
|
|
127
129
|
|
|
128
130
|
if (getEnvironmentVariable(otelEnvVar) && !validateEnvVarType(otelEnvVar)) {
|
|
129
|
-
log.warn(
|
|
131
|
+
log.warn('unexpected value for %s environment variable', otelEnvVar)
|
|
130
132
|
getCounter('otel.env.invalid', ddEnvVar, otelEnvVar).inc()
|
|
131
133
|
}
|
|
132
134
|
}
|
|
@@ -149,6 +151,16 @@ function maybeFile (filepath) {
|
|
|
149
151
|
}
|
|
150
152
|
}
|
|
151
153
|
|
|
154
|
+
function maybeJsonFile (filepath) {
|
|
155
|
+
const file = maybeFile(filepath)
|
|
156
|
+
if (!file) return
|
|
157
|
+
try {
|
|
158
|
+
return JSON.parse(file)
|
|
159
|
+
} catch (e) {
|
|
160
|
+
log.error('Error parsing JSON file %s', filepath, e)
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
152
164
|
function safeJsonParse (input) {
|
|
153
165
|
try {
|
|
154
166
|
return JSON.parse(input)
|
|
@@ -163,9 +175,7 @@ function validateNamingVersion (versionString) {
|
|
|
163
175
|
return defaultNamingVersion
|
|
164
176
|
}
|
|
165
177
|
if (!namingVersions.has(versionString)) {
|
|
166
|
-
log.warn(
|
|
167
|
-
`Unexpected input for config.spanAttributeSchema, picked default ${defaultNamingVersion}`
|
|
168
|
-
)
|
|
178
|
+
log.warn('Unexpected input for config.spanAttributeSchema, picked default', defaultNamingVersion)
|
|
169
179
|
return defaultNamingVersion
|
|
170
180
|
}
|
|
171
181
|
return versionString
|
|
@@ -231,6 +241,16 @@ function reformatSpanSamplingRules (rules) {
|
|
|
231
241
|
})
|
|
232
242
|
}
|
|
233
243
|
|
|
244
|
+
const sourcesOrder = [
|
|
245
|
+
{ containerProperty: '_remote', origin: 'remote_config', unprocessedProperty: '_remoteUnprocessed' },
|
|
246
|
+
{ containerProperty: '_options', origin: 'code', unprocessedProperty: '_optsUnprocessed' },
|
|
247
|
+
{ containerProperty: '_fleetStableConfig', origin: 'fleet_stable_config' },
|
|
248
|
+
{ containerProperty: '_env', origin: 'env_var', unprocessedProperty: '_envUnprocessed' },
|
|
249
|
+
{ containerProperty: '_localStableConfig', origin: 'local_stable_config' },
|
|
250
|
+
{ containerProperty: '_calculated', origin: 'calculated' },
|
|
251
|
+
{ containerProperty: '_defaults', origin: 'default' }
|
|
252
|
+
]
|
|
253
|
+
|
|
234
254
|
class Config {
|
|
235
255
|
constructor (options = {}) {
|
|
236
256
|
if (!isInServerlessEnvironment()) {
|
|
@@ -274,9 +294,8 @@ class Config {
|
|
|
274
294
|
getEnvironmentVariable('DD_TRACE_PROPAGATION_STYLE_EXTRACT')
|
|
275
295
|
)) {
|
|
276
296
|
log.warn(
|
|
277
|
-
|
|
278
|
-
'DD_TRACE_PROPAGATION_STYLE_INJECT and DD_TRACE_PROPAGATION_STYLE_EXTRACT '
|
|
279
|
-
'environment variables'
|
|
297
|
+
// eslint-disable-next-line @stylistic/max-len
|
|
298
|
+
'Use either the DD_TRACE_PROPAGATION_STYLE environment variable or separate DD_TRACE_PROPAGATION_STYLE_INJECT and DD_TRACE_PROPAGATION_STYLE_EXTRACT environment variables'
|
|
280
299
|
)
|
|
281
300
|
}
|
|
282
301
|
const PROPAGATION_STYLE_INJECT = propagationStyle(
|
|
@@ -292,6 +311,18 @@ class Config {
|
|
|
292
311
|
}
|
|
293
312
|
}
|
|
294
313
|
|
|
314
|
+
if (typeof options.runtimeMetrics === 'boolean') {
|
|
315
|
+
options.runtimeMetrics = {
|
|
316
|
+
enabled: options.runtimeMetrics
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
if (typeof options.runtimeMetrics?.gc === 'boolean') {
|
|
321
|
+
options.runtimeMetrics.gc = {
|
|
322
|
+
enabled: options.runtimeMetrics.gc
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
|
|
295
326
|
const DD_INSTRUMENTATION_INSTALL_ID = coalesce(
|
|
296
327
|
getEnvironmentVariable('DD_INSTRUMENTATION_INSTALL_ID'),
|
|
297
328
|
null
|
|
@@ -449,150 +480,155 @@ class Config {
|
|
|
449
480
|
|
|
450
481
|
const defaults = setHiddenProperty(this, '_defaults', {})
|
|
451
482
|
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
483
|
+
defaults.apmTracingEnabled = true
|
|
484
|
+
defaults['appsec.apiSecurity.enabled'] = true
|
|
485
|
+
defaults['appsec.apiSecurity.sampleDelay'] = 30
|
|
486
|
+
defaults['appsec.blockedTemplateGraphql'] = undefined
|
|
487
|
+
defaults['appsec.blockedTemplateHtml'] = undefined
|
|
488
|
+
defaults['appsec.blockedTemplateJson'] = undefined
|
|
489
|
+
defaults['appsec.enabled'] = undefined
|
|
490
|
+
defaults['appsec.eventTracking.mode'] = 'identification'
|
|
491
|
+
defaults['appsec.extendedHeadersCollection.enabled'] = false
|
|
492
|
+
defaults['appsec.extendedHeadersCollection.redaction'] = true
|
|
493
|
+
defaults['appsec.extendedHeadersCollection.maxHeaders'] = 50
|
|
494
|
+
defaults['appsec.obfuscatorKeyRegex'] = defaultWafObfuscatorKeyRegex
|
|
495
|
+
defaults['appsec.obfuscatorValueRegex'] = defaultWafObfuscatorValueRegex
|
|
496
|
+
defaults['appsec.rasp.enabled'] = true
|
|
497
|
+
defaults['appsec.rasp.bodyCollection'] = false
|
|
498
|
+
defaults['appsec.rateLimit'] = 100
|
|
499
|
+
defaults['appsec.rules'] = undefined
|
|
500
|
+
defaults['appsec.sca.enabled'] = null
|
|
501
|
+
defaults['appsec.stackTrace.enabled'] = true
|
|
502
|
+
defaults['appsec.stackTrace.maxDepth'] = 32
|
|
503
|
+
defaults['appsec.stackTrace.maxStackTraces'] = 2
|
|
504
|
+
defaults['appsec.wafTimeout'] = 5e3 // µs
|
|
505
|
+
defaults.baggageMaxBytes = 8192
|
|
506
|
+
defaults.baggageMaxItems = 64
|
|
507
|
+
defaults.baggageTagKeys = 'user.id,session.id,account.id'
|
|
508
|
+
defaults.ciVisibilityTestSessionName = ''
|
|
509
|
+
defaults.clientIpEnabled = false
|
|
510
|
+
defaults.clientIpHeader = null
|
|
511
|
+
defaults['crashtracking.enabled'] = true
|
|
512
|
+
defaults['codeOriginForSpans.enabled'] = true
|
|
513
|
+
defaults['codeOriginForSpans.experimental.exit_spans.enabled'] = false
|
|
514
|
+
defaults.dbmPropagationMode = 'disabled'
|
|
515
|
+
defaults['dogstatsd.hostname'] = '127.0.0.1'
|
|
516
|
+
defaults['dogstatsd.port'] = '8125'
|
|
517
|
+
defaults.dsmEnabled = false
|
|
518
|
+
defaults['dynamicInstrumentation.enabled'] = false
|
|
519
|
+
defaults['dynamicInstrumentation.redactedIdentifiers'] = []
|
|
520
|
+
defaults['dynamicInstrumentation.redactionExcludedIdentifiers'] = []
|
|
521
|
+
defaults['dynamicInstrumentation.uploadIntervalSeconds'] = 1
|
|
522
|
+
defaults.env = undefined
|
|
523
|
+
defaults['experimental.enableGetRumData'] = false
|
|
524
|
+
defaults['experimental.exporter'] = undefined
|
|
525
|
+
defaults.flushInterval = 2000
|
|
526
|
+
defaults.flushMinSpans = 1000
|
|
527
|
+
defaults.gitMetadataEnabled = true
|
|
528
|
+
defaults.graphqlErrorExtensions = []
|
|
529
|
+
defaults['grpc.client.error.statuses'] = GRPC_CLIENT_ERROR_STATUSES
|
|
530
|
+
defaults['grpc.server.error.statuses'] = GRPC_SERVER_ERROR_STATUSES
|
|
531
|
+
defaults.headerTags = []
|
|
532
|
+
defaults.hostname = '127.0.0.1'
|
|
533
|
+
defaults['iast.dbRowsToTaint'] = 1
|
|
534
|
+
defaults['iast.deduplicationEnabled'] = true
|
|
535
|
+
defaults['iast.enabled'] = false
|
|
536
|
+
defaults['iast.maxConcurrentRequests'] = 2
|
|
537
|
+
defaults['iast.maxContextOperations'] = 2
|
|
538
|
+
defaults['iast.redactionEnabled'] = true
|
|
539
|
+
defaults['iast.redactionNamePattern'] = null
|
|
540
|
+
defaults['iast.redactionValuePattern'] = null
|
|
541
|
+
defaults['iast.requestSampling'] = 30
|
|
542
|
+
defaults['iast.securityControlsConfiguration'] = null
|
|
543
|
+
defaults['iast.telemetryVerbosity'] = 'INFORMATION'
|
|
544
|
+
defaults['iast.stackTrace.enabled'] = true
|
|
545
|
+
defaults.injectionEnabled = []
|
|
546
|
+
defaults.instrumentationSource = 'manual'
|
|
547
|
+
defaults.injectForce = null
|
|
548
|
+
defaults.isAzureFunction = false
|
|
549
|
+
defaults.isCiVisibility = false
|
|
550
|
+
defaults.isEarlyFlakeDetectionEnabled = false
|
|
551
|
+
defaults.isFlakyTestRetriesEnabled = false
|
|
552
|
+
defaults.flakyTestRetriesCount = 5
|
|
553
|
+
defaults.isGCPFunction = false
|
|
554
|
+
defaults.isGitUploadEnabled = false
|
|
555
|
+
defaults.isIntelligentTestRunnerEnabled = false
|
|
556
|
+
defaults.isManualApiEnabled = false
|
|
557
|
+
defaults['langchain.spanCharLimit'] = 128
|
|
558
|
+
defaults['langchain.spanPromptCompletionSampleRate'] = 1
|
|
559
|
+
defaults['llmobs.agentlessEnabled'] = undefined
|
|
560
|
+
defaults['llmobs.enabled'] = false
|
|
561
|
+
defaults['llmobs.mlApp'] = undefined
|
|
562
|
+
defaults.ciVisibilityTestSessionName = ''
|
|
563
|
+
defaults.ciVisAgentlessLogSubmissionEnabled = false
|
|
564
|
+
defaults.legacyBaggageEnabled = true
|
|
565
|
+
defaults.isTestDynamicInstrumentationEnabled = false
|
|
566
|
+
defaults.isServiceUserProvided = false
|
|
567
|
+
defaults.testManagementAttemptToFixRetries = 20
|
|
568
|
+
defaults.isTestManagementEnabled = false
|
|
569
|
+
defaults.isImpactedTestsEnabled = false
|
|
570
|
+
defaults.logInjection = 'structured'
|
|
571
|
+
defaults.lookup = undefined
|
|
572
|
+
defaults.inferredProxyServicesEnabled = false
|
|
573
|
+
defaults.memcachedCommandEnabled = false
|
|
574
|
+
defaults.middlewareTracingEnabled = true
|
|
575
|
+
defaults.openAiLogsEnabled = false
|
|
576
|
+
defaults['openai.spanCharLimit'] = 128
|
|
577
|
+
defaults.peerServiceMapping = {}
|
|
578
|
+
defaults.plugins = true
|
|
579
|
+
defaults.port = '8126'
|
|
580
|
+
defaults['profiling.enabled'] = undefined
|
|
581
|
+
defaults['profiling.exporters'] = 'agent'
|
|
582
|
+
defaults['profiling.sourceMap'] = true
|
|
583
|
+
defaults['profiling.longLivedThreshold'] = undefined
|
|
584
|
+
defaults.protocolVersion = '0.4'
|
|
585
|
+
defaults.queryStringObfuscation = qsRegex
|
|
586
|
+
defaults['remoteConfig.enabled'] = true
|
|
587
|
+
defaults['remoteConfig.pollInterval'] = 5 // seconds
|
|
588
|
+
defaults.reportHostname = false
|
|
589
|
+
defaults['runtimeMetrics.enabled'] = false
|
|
590
|
+
defaults['runtimeMetrics.eventLoop'] = true
|
|
591
|
+
defaults['runtimeMetrics.gc'] = true
|
|
592
|
+
defaults.runtimeMetricsRuntimeId = false
|
|
593
|
+
defaults.sampleRate = undefined
|
|
594
|
+
defaults['sampler.rateLimit'] = 100
|
|
595
|
+
defaults['sampler.rules'] = []
|
|
596
|
+
defaults['sampler.spanSamplingRules'] = []
|
|
597
|
+
defaults.scope = undefined
|
|
598
|
+
defaults.service = service
|
|
599
|
+
defaults.serviceMapping = {}
|
|
600
|
+
defaults.site = 'datadoghq.com'
|
|
601
|
+
defaults.spanAttributeSchema = 'v0'
|
|
602
|
+
defaults.spanComputePeerService = false
|
|
603
|
+
defaults.spanLeakDebug = 0
|
|
604
|
+
defaults.spanRemoveIntegrationFromService = false
|
|
605
|
+
defaults.startupLogs = false
|
|
606
|
+
defaults['stats.enabled'] = false
|
|
607
|
+
defaults.tags = {}
|
|
608
|
+
defaults.tagsHeaderMaxLength = 512
|
|
609
|
+
defaults['telemetry.debug'] = false
|
|
610
|
+
defaults['telemetry.dependencyCollection'] = true
|
|
611
|
+
defaults['telemetry.enabled'] = true
|
|
612
|
+
defaults['telemetry.heartbeatInterval'] = 60_000
|
|
613
|
+
defaults['telemetry.logCollection'] = true
|
|
614
|
+
defaults['telemetry.metrics'] = true
|
|
615
|
+
defaults.traceEnabled = true
|
|
616
|
+
defaults.traceId128BitGenerationEnabled = true
|
|
617
|
+
defaults.traceId128BitLoggingEnabled = true
|
|
618
|
+
defaults.tracePropagationExtractFirst = false
|
|
619
|
+
defaults.tracePropagationBehaviorExtract = 'continue'
|
|
620
|
+
defaults['tracePropagationStyle.inject'] = ['datadog', 'tracecontext', 'baggage']
|
|
621
|
+
defaults['tracePropagationStyle.extract'] = ['datadog', 'tracecontext', 'baggage']
|
|
622
|
+
defaults['tracePropagationStyle.otelPropagators'] = false
|
|
623
|
+
defaults.tracing = true
|
|
624
|
+
defaults.url = undefined
|
|
625
|
+
defaults.version = pkg.version
|
|
626
|
+
defaults.instrumentation_config_id = undefined
|
|
627
|
+
defaults['vertexai.spanCharLimit'] = 128
|
|
628
|
+
defaults['vertexai.spanPromptCompletionSampleRate'] = 1
|
|
629
|
+
defaults['trace.aws.addSpanPointers'] = true
|
|
630
|
+
defaults['trace.dynamoDb.tablePrimaryKeys'] = undefined
|
|
631
|
+
defaults['trace.nativeSpanEvents'] = false
|
|
596
632
|
}
|
|
597
633
|
|
|
598
634
|
_applyLocalStableConfig () {
|
|
@@ -629,7 +665,7 @@ class Config {
|
|
|
629
665
|
this._setBoolean(obj, 'logInjection', DD_LOGS_INJECTION)
|
|
630
666
|
const profilingEnabled = normalizeProfilingEnabledValue(DD_PROFILING_ENABLED)
|
|
631
667
|
this._setString(obj, 'profiling.enabled', profilingEnabled)
|
|
632
|
-
this._setBoolean(obj, 'runtimeMetrics', DD_RUNTIME_METRICS_ENABLED)
|
|
668
|
+
this._setBoolean(obj, 'runtimeMetrics.enabled', DD_RUNTIME_METRICS_ENABLED)
|
|
633
669
|
this._setString(obj, 'service', DD_SERVICE)
|
|
634
670
|
this._setString(obj, 'version', DD_VERSION)
|
|
635
671
|
}
|
|
@@ -670,6 +706,7 @@ class Config {
|
|
|
670
706
|
DD_DYNAMIC_INSTRUMENTATION_ENABLED,
|
|
671
707
|
DD_DYNAMIC_INSTRUMENTATION_REDACTED_IDENTIFIERS,
|
|
672
708
|
DD_DYNAMIC_INSTRUMENTATION_REDACTION_EXCLUDED_IDENTIFIERS,
|
|
709
|
+
DD_DYNAMIC_INSTRUMENTATION_UPLOAD_INTERVAL_SECONDS,
|
|
673
710
|
DD_ENV,
|
|
674
711
|
DD_EXPERIMENTAL_APPSEC_STANDALONE_ENABLED,
|
|
675
712
|
DD_PROFILING_ENABLED,
|
|
@@ -689,6 +726,7 @@ class Config {
|
|
|
689
726
|
DD_IAST_TELEMETRY_VERBOSITY,
|
|
690
727
|
DD_IAST_STACK_TRACE_ENABLED,
|
|
691
728
|
DD_INJECTION_ENABLED,
|
|
729
|
+
DD_INJECT_FORCE,
|
|
692
730
|
DD_INSTRUMENTATION_TELEMETRY_ENABLED,
|
|
693
731
|
DD_INSTRUMENTATION_CONFIG_ID,
|
|
694
732
|
DD_LOGS_INJECTION,
|
|
@@ -705,6 +743,8 @@ class Config {
|
|
|
705
743
|
DD_REMOTE_CONFIGURATION_ENABLED,
|
|
706
744
|
DD_REMOTE_CONFIG_POLL_INTERVAL_SECONDS,
|
|
707
745
|
DD_RUNTIME_METRICS_ENABLED,
|
|
746
|
+
DD_RUNTIME_METRICS_EVENT_LOOP_ENABLED,
|
|
747
|
+
DD_RUNTIME_METRICS_GC_ENABLED,
|
|
708
748
|
DD_SERVICE,
|
|
709
749
|
DD_SERVICE_MAPPING,
|
|
710
750
|
DD_SITE,
|
|
@@ -730,7 +770,7 @@ class Config {
|
|
|
730
770
|
DD_TRACE_ENABLED,
|
|
731
771
|
DD_TRACE_EXPERIMENTAL_EXPORTER,
|
|
732
772
|
DD_TRACE_EXPERIMENTAL_GET_RUM_DATA_ENABLED,
|
|
733
|
-
|
|
773
|
+
DD_RUNTIME_METRICS_RUNTIME_ID_ENABLED,
|
|
734
774
|
DD_TRACE_GIT_METADATA_ENABLED,
|
|
735
775
|
DD_TRACE_GLOBAL_TAGS,
|
|
736
776
|
DD_TRACE_GRAPHQL_ERROR_EXTENSIONS,
|
|
@@ -785,11 +825,11 @@ class Config {
|
|
|
785
825
|
DD_EXPERIMENTAL_APPSEC_STANDALONE_ENABLED && isFalse(DD_EXPERIMENTAL_APPSEC_STANDALONE_ENABLED)
|
|
786
826
|
))
|
|
787
827
|
this._setBoolean(env, 'appsec.apiSecurity.enabled', DD_API_SECURITY_ENABLED && isTrue(DD_API_SECURITY_ENABLED))
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
828
|
+
env['appsec.apiSecurity.sampleDelay'] = maybeFloat(DD_API_SECURITY_SAMPLE_DELAY)
|
|
829
|
+
env['appsec.blockedTemplateGraphql'] = maybeFile(DD_APPSEC_GRAPHQL_BLOCKED_TEMPLATE_JSON)
|
|
830
|
+
env['appsec.blockedTemplateHtml'] = maybeFile(DD_APPSEC_HTTP_BLOCKED_TEMPLATE_HTML)
|
|
791
831
|
this._envUnprocessed['appsec.blockedTemplateHtml'] = DD_APPSEC_HTTP_BLOCKED_TEMPLATE_HTML
|
|
792
|
-
|
|
832
|
+
env['appsec.blockedTemplateJson'] = maybeFile(DD_APPSEC_HTTP_BLOCKED_TEMPLATE_JSON)
|
|
793
833
|
this._envUnprocessed['appsec.blockedTemplateJson'] = DD_APPSEC_HTTP_BLOCKED_TEMPLATE_JSON
|
|
794
834
|
this._setBoolean(env, 'appsec.enabled', DD_APPSEC_ENABLED)
|
|
795
835
|
this._setString(env, 'appsec.eventTracking.mode', DD_APPSEC_AUTO_USER_INSTRUMENTATION_MODE)
|
|
@@ -799,27 +839,27 @@ class Config {
|
|
|
799
839
|
'appsec.extendedHeadersCollection.redaction',
|
|
800
840
|
DD_APPSEC_HEADER_COLLECTION_REDACTION_ENABLED
|
|
801
841
|
)
|
|
802
|
-
|
|
842
|
+
env['appsec.extendedHeadersCollection.maxHeaders'] = maybeInt(DD_APPSEC_MAX_COLLECTED_HEADERS)
|
|
803
843
|
this._envUnprocessed['appsec.extendedHeadersCollection.maxHeaders'] = DD_APPSEC_MAX_COLLECTED_HEADERS
|
|
804
844
|
this._setString(env, 'appsec.obfuscatorKeyRegex', DD_APPSEC_OBFUSCATION_PARAMETER_KEY_REGEXP)
|
|
805
845
|
this._setString(env, 'appsec.obfuscatorValueRegex', DD_APPSEC_OBFUSCATION_PARAMETER_VALUE_REGEXP)
|
|
806
846
|
this._setBoolean(env, 'appsec.rasp.enabled', DD_APPSEC_RASP_ENABLED)
|
|
807
847
|
this._setBoolean(env, 'appsec.rasp.bodyCollection', DD_APPSEC_RASP_COLLECT_REQUEST_BODY)
|
|
808
|
-
|
|
848
|
+
env['appsec.rateLimit'] = maybeInt(DD_APPSEC_TRACE_RATE_LIMIT)
|
|
809
849
|
this._envUnprocessed['appsec.rateLimit'] = DD_APPSEC_TRACE_RATE_LIMIT
|
|
810
850
|
this._setString(env, 'appsec.rules', DD_APPSEC_RULES)
|
|
811
851
|
// DD_APPSEC_SCA_ENABLED is never used locally, but only sent to the backend
|
|
812
852
|
this._setBoolean(env, 'appsec.sca.enabled', DD_APPSEC_SCA_ENABLED)
|
|
813
853
|
this._setBoolean(env, 'appsec.stackTrace.enabled', DD_APPSEC_STACK_TRACE_ENABLED)
|
|
814
|
-
|
|
854
|
+
env['appsec.stackTrace.maxDepth'] = maybeInt(DD_APPSEC_MAX_STACK_TRACE_DEPTH)
|
|
815
855
|
this._envUnprocessed['appsec.stackTrace.maxDepth'] = DD_APPSEC_MAX_STACK_TRACE_DEPTH
|
|
816
|
-
|
|
856
|
+
env['appsec.stackTrace.maxStackTraces'] = maybeInt(DD_APPSEC_MAX_STACK_TRACES)
|
|
817
857
|
this._envUnprocessed['appsec.stackTrace.maxStackTraces'] = DD_APPSEC_MAX_STACK_TRACES
|
|
818
|
-
|
|
858
|
+
env['appsec.wafTimeout'] = maybeInt(DD_APPSEC_WAF_TIMEOUT)
|
|
819
859
|
this._envUnprocessed['appsec.wafTimeout'] = DD_APPSEC_WAF_TIMEOUT
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
860
|
+
env.baggageMaxBytes = DD_TRACE_BAGGAGE_MAX_BYTES
|
|
861
|
+
env.baggageMaxItems = DD_TRACE_BAGGAGE_MAX_ITEMS
|
|
862
|
+
env.baggageTagKeys = DD_TRACE_BAGGAGE_TAG_KEYS
|
|
823
863
|
this._setBoolean(env, 'clientIpEnabled', DD_TRACE_CLIENT_IP_ENABLED)
|
|
824
864
|
this._setString(env, 'clientIpHeader', DD_TRACE_CLIENT_IP_HEADER?.toLowerCase())
|
|
825
865
|
this._setBoolean(env, 'crashtracking.enabled', coalesce(
|
|
@@ -843,44 +883,44 @@ class Config {
|
|
|
843
883
|
'dynamicInstrumentation.redactionExcludedIdentifiers',
|
|
844
884
|
DD_DYNAMIC_INSTRUMENTATION_REDACTION_EXCLUDED_IDENTIFIERS
|
|
845
885
|
)
|
|
886
|
+
env['dynamicInstrumentation.uploadIntervalSeconds'] = maybeFloat(DD_DYNAMIC_INSTRUMENTATION_UPLOAD_INTERVAL_SECONDS)
|
|
887
|
+
this._envUnprocessed['dynamicInstrumentation.uploadInterval'] = DD_DYNAMIC_INSTRUMENTATION_UPLOAD_INTERVAL_SECONDS
|
|
846
888
|
this._setString(env, 'env', DD_ENV || tags.env)
|
|
847
889
|
this._setBoolean(env, 'traceEnabled', DD_TRACE_ENABLED)
|
|
848
890
|
this._setBoolean(env, 'experimental.enableGetRumData', DD_TRACE_EXPERIMENTAL_GET_RUM_DATA_ENABLED)
|
|
849
891
|
this._setString(env, 'experimental.exporter', DD_TRACE_EXPERIMENTAL_EXPORTER)
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
this._setValue(env, 'flushMinSpans', maybeInt(DD_TRACE_PARTIAL_FLUSH_MIN_SPANS))
|
|
892
|
+
if (AWS_LAMBDA_FUNCTION_NAME) env.flushInterval = 0
|
|
893
|
+
env.flushMinSpans = maybeInt(DD_TRACE_PARTIAL_FLUSH_MIN_SPANS)
|
|
853
894
|
this._envUnprocessed.flushMinSpans = DD_TRACE_PARTIAL_FLUSH_MIN_SPANS
|
|
854
895
|
this._setBoolean(env, 'gitMetadataEnabled', DD_TRACE_GIT_METADATA_ENABLED)
|
|
855
896
|
this._setIntegerRangeSet(env, 'grpc.client.error.statuses', DD_GRPC_CLIENT_ERROR_STATUSES)
|
|
856
897
|
this._setIntegerRangeSet(env, 'grpc.server.error.statuses', DD_GRPC_SERVER_ERROR_STATUSES)
|
|
857
898
|
this._setArray(env, 'headerTags', DD_TRACE_HEADER_TAGS)
|
|
858
899
|
this._setString(env, 'hostname', DD_AGENT_HOST)
|
|
859
|
-
|
|
900
|
+
env['iast.dbRowsToTaint'] = maybeInt(DD_IAST_DB_ROWS_TO_TAINT)
|
|
860
901
|
this._setBoolean(env, 'iast.deduplicationEnabled', DD_IAST_DEDUPLICATION_ENABLED)
|
|
861
902
|
this._setBoolean(env, 'iast.enabled', DD_IAST_ENABLED)
|
|
862
|
-
|
|
903
|
+
env['iast.maxConcurrentRequests'] = maybeInt(DD_IAST_MAX_CONCURRENT_REQUESTS)
|
|
863
904
|
this._envUnprocessed['iast.maxConcurrentRequests'] = DD_IAST_MAX_CONCURRENT_REQUESTS
|
|
864
|
-
|
|
905
|
+
env['iast.maxContextOperations'] = maybeInt(DD_IAST_MAX_CONTEXT_OPERATIONS)
|
|
865
906
|
this._envUnprocessed['iast.maxContextOperations'] = DD_IAST_MAX_CONTEXT_OPERATIONS
|
|
866
907
|
this._setBoolean(env, 'iast.redactionEnabled', DD_IAST_REDACTION_ENABLED && !isFalse(DD_IAST_REDACTION_ENABLED))
|
|
867
908
|
this._setString(env, 'iast.redactionNamePattern', DD_IAST_REDACTION_NAME_PATTERN)
|
|
868
909
|
this._setString(env, 'iast.redactionValuePattern', DD_IAST_REDACTION_VALUE_PATTERN)
|
|
869
910
|
const iastRequestSampling = maybeInt(DD_IAST_REQUEST_SAMPLING)
|
|
870
911
|
if (iastRequestSampling > -1 && iastRequestSampling < 101) {
|
|
871
|
-
|
|
912
|
+
env['iast.requestSampling'] = iastRequestSampling
|
|
872
913
|
}
|
|
873
914
|
this._envUnprocessed['iast.requestSampling'] = DD_IAST_REQUEST_SAMPLING
|
|
874
915
|
this._setString(env, 'iast.securityControlsConfiguration', DD_IAST_SECURITY_CONTROLS_CONFIGURATION)
|
|
875
916
|
this._setString(env, 'iast.telemetryVerbosity', DD_IAST_TELEMETRY_VERBOSITY)
|
|
876
917
|
this._setBoolean(env, 'iast.stackTrace.enabled', DD_IAST_STACK_TRACE_ENABLED)
|
|
877
918
|
this._setArray(env, 'injectionEnabled', DD_INJECTION_ENABLED)
|
|
919
|
+
this._setBoolean(env, 'injectForce', DD_INJECT_FORCE)
|
|
878
920
|
this._setBoolean(env, 'isAzureFunction', getIsAzureFunction())
|
|
879
921
|
this._setBoolean(env, 'isGCPFunction', getIsGCPFunction())
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
env, 'langchain.spanPromptCompletionSampleRate', maybeFloat(DD_LANGCHAIN_SPAN_PROMPT_COMPLETION_SAMPLE_RATE)
|
|
883
|
-
)
|
|
922
|
+
env['langchain.spanCharLimit'] = maybeInt(DD_LANGCHAIN_SPAN_CHAR_LIMIT)
|
|
923
|
+
env['langchain.spanPromptCompletionSampleRate'] = maybeFloat(DD_LANGCHAIN_SPAN_PROMPT_COMPLETION_SAMPLE_RATE)
|
|
884
924
|
this._setBoolean(env, 'legacyBaggageEnabled', DD_TRACE_LEGACY_BAGGAGE_ENABLED)
|
|
885
925
|
this._setBoolean(env, 'llmobs.agentlessEnabled', DD_LLMOBS_AGENTLESS_ENABLED)
|
|
886
926
|
this._setBoolean(env, 'llmobs.enabled', DD_LLMOBS_ENABLED)
|
|
@@ -890,12 +930,12 @@ class Config {
|
|
|
890
930
|
this._setBoolean(env, 'memcachedCommandEnabled', DD_TRACE_MEMCACHED_COMMAND_ENABLED)
|
|
891
931
|
this._setBoolean(env, 'middlewareTracingEnabled', DD_TRACE_MIDDLEWARE_TRACING_ENABLED)
|
|
892
932
|
this._setBoolean(env, 'openAiLogsEnabled', DD_OPENAI_LOGS_ENABLED)
|
|
893
|
-
|
|
933
|
+
env['openai.spanCharLimit'] = maybeInt(DD_OPENAI_SPAN_CHAR_LIMIT)
|
|
894
934
|
this._envUnprocessed.openaiSpanCharLimit = DD_OPENAI_SPAN_CHAR_LIMIT
|
|
895
935
|
if (DD_TRACE_PEER_SERVICE_MAPPING) {
|
|
896
|
-
|
|
936
|
+
env.peerServiceMapping = Object.fromEntries(
|
|
897
937
|
DD_TRACE_PEER_SERVICE_MAPPING.split(',').map(x => x.trim().split(':'))
|
|
898
|
-
)
|
|
938
|
+
)
|
|
899
939
|
this._envUnprocessed.peerServiceMapping = DD_TRACE_PEER_SERVICE_MAPPING
|
|
900
940
|
}
|
|
901
941
|
this._setString(env, 'port', DD_TRACE_AGENT_PORT)
|
|
@@ -910,7 +950,7 @@ class Config {
|
|
|
910
950
|
this._setBoolean(env, 'profiling.sourceMap', DD_PROFILING_SOURCE_MAP && !isFalse(DD_PROFILING_SOURCE_MAP))
|
|
911
951
|
if (DD_INTERNAL_PROFILING_LONG_LIVED_THRESHOLD) {
|
|
912
952
|
// This is only used in testing to not have to wait 30s
|
|
913
|
-
|
|
953
|
+
env['profiling.longLivedThreshold'] = Number(DD_INTERNAL_PROFILING_LONG_LIVED_THRESHOLD)
|
|
914
954
|
}
|
|
915
955
|
|
|
916
956
|
this._setString(env, 'protocolVersion', DD_TRACE_AGENT_PROTOCOL_VERSION)
|
|
@@ -919,30 +959,33 @@ class Config {
|
|
|
919
959
|
DD_REMOTE_CONFIGURATION_ENABLED,
|
|
920
960
|
!this._isInServerlessEnvironment()
|
|
921
961
|
))
|
|
922
|
-
|
|
962
|
+
env['remoteConfig.pollInterval'] = maybeFloat(DD_REMOTE_CONFIG_POLL_INTERVAL_SECONDS)
|
|
923
963
|
this._envUnprocessed['remoteConfig.pollInterval'] = DD_REMOTE_CONFIG_POLL_INTERVAL_SECONDS
|
|
924
964
|
this._setBoolean(env, 'reportHostname', DD_TRACE_REPORT_HOSTNAME)
|
|
925
965
|
// only used to explicitly set runtimeMetrics to false
|
|
926
966
|
const otelSetRuntimeMetrics = String(OTEL_METRICS_EXPORTER).toLowerCase() === 'none'
|
|
927
967
|
? false
|
|
928
968
|
: undefined
|
|
929
|
-
this._setBoolean(env, 'runtimeMetrics', DD_RUNTIME_METRICS_ENABLED ||
|
|
969
|
+
this._setBoolean(env, 'runtimeMetrics.enabled', DD_RUNTIME_METRICS_ENABLED ||
|
|
930
970
|
otelSetRuntimeMetrics)
|
|
971
|
+
this._setBoolean(env, 'runtimeMetrics.eventLoop', DD_RUNTIME_METRICS_EVENT_LOOP_ENABLED)
|
|
972
|
+
this._setBoolean(env, 'runtimeMetrics.gc', DD_RUNTIME_METRICS_GC_ENABLED)
|
|
973
|
+
this._setBoolean(env, 'runtimeMetricsRuntimeId', DD_RUNTIME_METRICS_RUNTIME_ID_ENABLED)
|
|
931
974
|
this._setArray(env, 'sampler.spanSamplingRules', reformatSpanSamplingRules(coalesce(
|
|
932
|
-
|
|
975
|
+
maybeJsonFile(DD_SPAN_SAMPLING_RULES_FILE),
|
|
933
976
|
safeJsonParse(DD_SPAN_SAMPLING_RULES)
|
|
934
977
|
)))
|
|
935
978
|
this._setUnit(env, 'sampleRate', DD_TRACE_SAMPLE_RATE ||
|
|
936
979
|
getFromOtelSamplerMap(OTEL_TRACES_SAMPLER, OTEL_TRACES_SAMPLER_ARG))
|
|
937
|
-
|
|
980
|
+
env['sampler.rateLimit'] = DD_TRACE_RATE_LIMIT
|
|
938
981
|
this._setSamplingRule(env, 'sampler.rules', safeJsonParse(DD_TRACE_SAMPLING_RULES))
|
|
939
982
|
this._envUnprocessed['sampler.rules'] = DD_TRACE_SAMPLING_RULES
|
|
940
983
|
this._setString(env, 'scope', DD_TRACE_SCOPE)
|
|
941
984
|
this._setString(env, 'service', DD_SERVICE || tags.service || OTEL_SERVICE_NAME)
|
|
942
985
|
if (DD_SERVICE_MAPPING) {
|
|
943
|
-
|
|
986
|
+
env.serviceMapping = Object.fromEntries(
|
|
944
987
|
DD_SERVICE_MAPPING.split(',').map(x => x.trim().split(':'))
|
|
945
|
-
)
|
|
988
|
+
)
|
|
946
989
|
}
|
|
947
990
|
this._setString(env, 'site', DD_SITE)
|
|
948
991
|
if (DD_TRACE_SPAN_ATTRIBUTE_SCHEMA) {
|
|
@@ -950,11 +993,11 @@ class Config {
|
|
|
950
993
|
this._envUnprocessed.spanAttributeSchema = DD_TRACE_SPAN_ATTRIBUTE_SCHEMA
|
|
951
994
|
}
|
|
952
995
|
// 0: disabled, 1: logging, 2: garbage collection + logging
|
|
953
|
-
|
|
996
|
+
env.spanLeakDebug = maybeInt(DD_TRACE_SPAN_LEAK_DEBUG)
|
|
954
997
|
this._setBoolean(env, 'spanRemoveIntegrationFromService', DD_TRACE_REMOVE_INTEGRATION_SERVICE_NAMES_ENABLED)
|
|
955
998
|
this._setBoolean(env, 'startupLogs', DD_TRACE_STARTUP_LOGS)
|
|
956
999
|
this._setTags(env, 'tags', tags)
|
|
957
|
-
|
|
1000
|
+
env.tagsHeaderMaxLength = DD_TRACE_X_DATADOG_TAGS_MAX_LENGTH
|
|
958
1001
|
this._setBoolean(env, 'telemetry.enabled', coalesce(
|
|
959
1002
|
DD_INSTRUMENTATION_TELEMETRY_ENABLED,
|
|
960
1003
|
!(this._isInServerlessEnvironment() || JEST_WORKER_ID)
|
|
@@ -962,7 +1005,7 @@ class Config {
|
|
|
962
1005
|
this._setString(env, 'instrumentation_config_id', DD_INSTRUMENTATION_CONFIG_ID)
|
|
963
1006
|
this._setBoolean(env, 'telemetry.debug', DD_TELEMETRY_DEBUG)
|
|
964
1007
|
this._setBoolean(env, 'telemetry.dependencyCollection', DD_TELEMETRY_DEPENDENCY_COLLECTION_ENABLED)
|
|
965
|
-
|
|
1008
|
+
env['telemetry.heartbeatInterval'] = maybeInt(Math.floor(DD_TELEMETRY_HEARTBEAT_INTERVAL * 1000))
|
|
966
1009
|
this._envUnprocessed['telemetry.heartbeatInterval'] = DD_TELEMETRY_HEARTBEAT_INTERVAL * 1000
|
|
967
1010
|
this._setBoolean(env, 'telemetry.logCollection', DD_TELEMETRY_LOG_COLLECTION_ENABLED)
|
|
968
1011
|
this._setBoolean(env, 'telemetry.metrics', DD_TELEMETRY_METRICS_ENABLED)
|
|
@@ -970,10 +1013,10 @@ class Config {
|
|
|
970
1013
|
this._setBoolean(env, 'traceId128BitLoggingEnabled', DD_TRACE_128_BIT_TRACEID_LOGGING_ENABLED)
|
|
971
1014
|
this._setBoolean(env, 'tracePropagationExtractFirst', DD_TRACE_PROPAGATION_EXTRACT_FIRST)
|
|
972
1015
|
const stringPropagationBehaviorExtract = String(DD_TRACE_PROPAGATION_BEHAVIOR_EXTRACT)
|
|
973
|
-
|
|
1016
|
+
env.tracePropagationBehaviorExtract =
|
|
974
1017
|
VALID_PROPAGATION_BEHAVIOR_EXTRACT.has(stringPropagationBehaviorExtract)
|
|
975
1018
|
? stringPropagationBehaviorExtract
|
|
976
|
-
: 'continue'
|
|
1019
|
+
: 'continue'
|
|
977
1020
|
this._setBoolean(env, 'tracePropagationStyle.otelPropagators',
|
|
978
1021
|
DD_TRACE_PROPAGATION_STYLE ||
|
|
979
1022
|
DD_TRACE_PROPAGATION_STYLE_INJECT ||
|
|
@@ -987,12 +1030,8 @@ class Config {
|
|
|
987
1030
|
this._setString(env, 'trace.dynamoDb.tablePrimaryKeys', DD_TRACE_DYNAMODB_TABLE_PRIMARY_KEYS)
|
|
988
1031
|
this._setArray(env, 'graphqlErrorExtensions', DD_TRACE_GRAPHQL_ERROR_EXTENSIONS)
|
|
989
1032
|
this._setBoolean(env, 'trace.nativeSpanEvents', DD_TRACE_NATIVE_SPAN_EVENTS)
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
'vertexai.spanPromptCompletionSampleRate',
|
|
993
|
-
maybeFloat(DD_VERTEXAI_SPAN_PROMPT_COMPLETION_SAMPLE_RATE)
|
|
994
|
-
)
|
|
995
|
-
this._setValue(env, 'vertexai.spanCharLimit', maybeInt(DD_VERTEXAI_SPAN_CHAR_LIMIT))
|
|
1033
|
+
env['vertexai.spanPromptCompletionSampleRate'] = maybeFloat(DD_VERTEXAI_SPAN_PROMPT_COMPLETION_SAMPLE_RATE)
|
|
1034
|
+
env['vertexai.spanCharLimit'] = maybeInt(DD_VERTEXAI_SPAN_CHAR_LIMIT)
|
|
996
1035
|
}
|
|
997
1036
|
|
|
998
1037
|
_applyOptions (options) {
|
|
@@ -1009,10 +1048,10 @@ class Config {
|
|
|
1009
1048
|
options.experimental?.appsec?.standalone && !options.experimental.appsec.standalone.enabled
|
|
1010
1049
|
))
|
|
1011
1050
|
this._setBoolean(opts, 'appsec.apiSecurity.enabled', options.appsec?.apiSecurity?.enabled)
|
|
1012
|
-
|
|
1013
|
-
|
|
1051
|
+
opts['appsec.blockedTemplateGraphql'] = maybeFile(options.appsec?.blockedTemplateGraphql)
|
|
1052
|
+
opts['appsec.blockedTemplateHtml'] = maybeFile(options.appsec?.blockedTemplateHtml)
|
|
1014
1053
|
this._optsUnprocessed['appsec.blockedTemplateHtml'] = options.appsec?.blockedTemplateHtml
|
|
1015
|
-
|
|
1054
|
+
opts['appsec.blockedTemplateJson'] = maybeFile(options.appsec?.blockedTemplateJson)
|
|
1016
1055
|
this._optsUnprocessed['appsec.blockedTemplateJson'] = options.appsec?.blockedTemplateJson
|
|
1017
1056
|
this._setBoolean(opts, 'appsec.enabled', options.appsec?.enabled)
|
|
1018
1057
|
this._setString(opts, 'appsec.eventTracking.mode', options.appsec?.eventTracking?.mode)
|
|
@@ -1026,29 +1065,26 @@ class Config {
|
|
|
1026
1065
|
'appsec.extendedHeadersCollection.redaction',
|
|
1027
1066
|
options.appsec?.extendedHeadersCollection?.redaction
|
|
1028
1067
|
)
|
|
1029
|
-
|
|
1030
|
-
'appsec.extendedHeadersCollection.maxHeaders',
|
|
1031
|
-
options.appsec?.extendedHeadersCollection?.maxHeaders
|
|
1032
|
-
)
|
|
1068
|
+
opts['appsec.extendedHeadersCollection.maxHeaders'] = options.appsec?.extendedHeadersCollection?.maxHeaders
|
|
1033
1069
|
this._setString(opts, 'appsec.obfuscatorKeyRegex', options.appsec?.obfuscatorKeyRegex)
|
|
1034
1070
|
this._setString(opts, 'appsec.obfuscatorValueRegex', options.appsec?.obfuscatorValueRegex)
|
|
1035
1071
|
this._setBoolean(opts, 'appsec.rasp.enabled', options.appsec?.rasp?.enabled)
|
|
1036
1072
|
this._setBoolean(opts, 'appsec.rasp.bodyCollection', options.appsec?.rasp?.bodyCollection)
|
|
1037
|
-
|
|
1073
|
+
opts['appsec.rateLimit'] = maybeInt(options.appsec?.rateLimit)
|
|
1038
1074
|
this._optsUnprocessed['appsec.rateLimit'] = options.appsec?.rateLimit
|
|
1039
1075
|
this._setString(opts, 'appsec.rules', options.appsec?.rules)
|
|
1040
1076
|
this._setBoolean(opts, 'appsec.stackTrace.enabled', options.appsec?.stackTrace?.enabled)
|
|
1041
|
-
|
|
1077
|
+
opts['appsec.stackTrace.maxDepth'] = maybeInt(options.appsec?.stackTrace?.maxDepth)
|
|
1042
1078
|
this._optsUnprocessed['appsec.stackTrace.maxDepth'] = options.appsec?.stackTrace?.maxDepth
|
|
1043
|
-
|
|
1079
|
+
opts['appsec.stackTrace.maxStackTraces'] = maybeInt(options.appsec?.stackTrace?.maxStackTraces)
|
|
1044
1080
|
this._optsUnprocessed['appsec.stackTrace.maxStackTraces'] = options.appsec?.stackTrace?.maxStackTraces
|
|
1045
|
-
|
|
1081
|
+
opts['appsec.wafTimeout'] = maybeInt(options.appsec?.wafTimeout)
|
|
1046
1082
|
this._optsUnprocessed['appsec.wafTimeout'] = options.appsec?.wafTimeout
|
|
1047
1083
|
this._setBoolean(opts, 'clientIpEnabled', options.clientIpEnabled)
|
|
1048
1084
|
this._setString(opts, 'clientIpHeader', options.clientIpHeader?.toLowerCase())
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1085
|
+
opts.baggageMaxBytes = options.baggageMaxBytes
|
|
1086
|
+
opts.baggageMaxItems = options.baggageMaxItems
|
|
1087
|
+
opts.baggageTagKeys = options.baggageTagKeys
|
|
1052
1088
|
this._setBoolean(opts, 'codeOriginForSpans.enabled', options.codeOriginForSpans?.enabled)
|
|
1053
1089
|
this._setBoolean(
|
|
1054
1090
|
opts,
|
|
@@ -1072,45 +1108,51 @@ class Config {
|
|
|
1072
1108
|
'dynamicInstrumentation.redactionExcludedIdentifiers',
|
|
1073
1109
|
options.dynamicInstrumentation?.redactionExcludedIdentifiers
|
|
1074
1110
|
)
|
|
1111
|
+
opts['dynamicInstrumentation.uploadIntervalSeconds'] =
|
|
1112
|
+
maybeFloat(options.dynamicInstrumentation?.uploadIntervalSeconds)
|
|
1113
|
+
this._optsUnprocessed['dynamicInstrumentation.uploadIntervalSeconds'] =
|
|
1114
|
+
options.dynamicInstrumentation?.uploadIntervalSeconds
|
|
1075
1115
|
this._setString(opts, 'env', options.env || tags.env)
|
|
1076
1116
|
this._setBoolean(opts, 'experimental.enableGetRumData', options.experimental?.enableGetRumData)
|
|
1077
1117
|
this._setString(opts, 'experimental.exporter', options.experimental?.exporter)
|
|
1078
|
-
this._setBoolean(opts, '
|
|
1079
|
-
|
|
1118
|
+
this._setBoolean(opts, 'runtimeMetricsRuntimeId', options.runtimeMetricsRuntimeId)
|
|
1119
|
+
opts.flushInterval = maybeInt(options.flushInterval)
|
|
1080
1120
|
this._optsUnprocessed.flushInterval = options.flushInterval
|
|
1081
|
-
|
|
1121
|
+
opts.flushMinSpans = maybeInt(options.flushMinSpans)
|
|
1082
1122
|
this._optsUnprocessed.flushMinSpans = options.flushMinSpans
|
|
1083
1123
|
this._setArray(opts, 'headerTags', options.headerTags)
|
|
1084
1124
|
this._setString(opts, 'hostname', options.hostname)
|
|
1085
|
-
|
|
1125
|
+
opts['iast.dbRowsToTaint'] = maybeInt(options.iast?.dbRowsToTaint)
|
|
1086
1126
|
this._setBoolean(opts, 'iast.deduplicationEnabled', options.iast && options.iast.deduplicationEnabled)
|
|
1087
1127
|
this._setBoolean(opts, 'iast.enabled',
|
|
1088
1128
|
options.iast && (options.iast === true || options.iast.enabled === true))
|
|
1089
|
-
|
|
1090
|
-
maybeInt(options.iast?.maxConcurrentRequests))
|
|
1129
|
+
opts['iast.maxConcurrentRequests'] = maybeInt(options.iast?.maxConcurrentRequests)
|
|
1091
1130
|
this._optsUnprocessed['iast.maxConcurrentRequests'] = options.iast?.maxConcurrentRequests
|
|
1092
|
-
|
|
1131
|
+
opts['iast.maxContextOperations'] = maybeInt(options.iast?.maxContextOperations)
|
|
1093
1132
|
this._optsUnprocessed['iast.maxContextOperations'] = options.iast?.maxContextOperations
|
|
1094
1133
|
this._setBoolean(opts, 'iast.redactionEnabled', options.iast?.redactionEnabled)
|
|
1095
1134
|
this._setString(opts, 'iast.redactionNamePattern', options.iast?.redactionNamePattern)
|
|
1096
1135
|
this._setString(opts, 'iast.redactionValuePattern', options.iast?.redactionValuePattern)
|
|
1097
1136
|
const iastRequestSampling = maybeInt(options.iast?.requestSampling)
|
|
1098
1137
|
if (iastRequestSampling > -1 && iastRequestSampling < 101) {
|
|
1099
|
-
|
|
1138
|
+
opts['iast.requestSampling'] = iastRequestSampling
|
|
1100
1139
|
this._optsUnprocessed['iast.requestSampling'] = options.iast?.requestSampling
|
|
1101
1140
|
}
|
|
1102
|
-
|
|
1141
|
+
opts['iast.securityControlsConfiguration'] = options.iast?.securityControlsConfiguration
|
|
1103
1142
|
this._setBoolean(opts, 'iast.stackTrace.enabled', options.iast?.stackTrace?.enabled)
|
|
1104
1143
|
this._setString(opts, 'iast.telemetryVerbosity', options.iast && options.iast.telemetryVerbosity)
|
|
1144
|
+
if (options[INSTRUMENTED_BY_SSI]) {
|
|
1145
|
+
this._setString(opts, 'instrumentationSource', options[INSTRUMENTED_BY_SSI])
|
|
1146
|
+
}
|
|
1105
1147
|
this._setBoolean(opts, 'isCiVisibility', options.isCiVisibility)
|
|
1106
1148
|
this._setBoolean(opts, 'legacyBaggageEnabled', options.legacyBaggageEnabled)
|
|
1107
1149
|
this._setBoolean(opts, 'llmobs.agentlessEnabled', options.llmobs?.agentlessEnabled)
|
|
1108
1150
|
this._setString(opts, 'llmobs.mlApp', options.llmobs?.mlApp)
|
|
1109
1151
|
this._setBoolean(opts, 'logInjection', options.logInjection)
|
|
1110
|
-
|
|
1152
|
+
opts.lookup = options.lookup
|
|
1111
1153
|
this._setBoolean(opts, 'middlewareTracingEnabled', options.middlewareTracingEnabled)
|
|
1112
1154
|
this._setBoolean(opts, 'openAiLogsEnabled', options.openAiLogsEnabled)
|
|
1113
|
-
|
|
1155
|
+
opts.peerServiceMapping = options.peerServiceMapping
|
|
1114
1156
|
this._setBoolean(opts, 'plugins', options.plugins)
|
|
1115
1157
|
this._setString(opts, 'port', options.port)
|
|
1116
1158
|
const strProfiling = String(options.profiling)
|
|
@@ -1119,18 +1161,21 @@ class Config {
|
|
|
1119
1161
|
}
|
|
1120
1162
|
this._setString(opts, 'protocolVersion', options.protocolVersion)
|
|
1121
1163
|
if (options.remoteConfig) {
|
|
1122
|
-
|
|
1164
|
+
opts['remoteConfig.pollInterval'] = maybeFloat(options.remoteConfig.pollInterval)
|
|
1123
1165
|
this._optsUnprocessed['remoteConfig.pollInterval'] = options.remoteConfig.pollInterval
|
|
1124
1166
|
}
|
|
1125
1167
|
this._setBoolean(opts, 'reportHostname', options.reportHostname)
|
|
1126
|
-
this._setBoolean(opts, 'runtimeMetrics', options.runtimeMetrics)
|
|
1168
|
+
this._setBoolean(opts, 'runtimeMetrics.enabled', options.runtimeMetrics?.enabled)
|
|
1169
|
+
this._setBoolean(opts, 'runtimeMetrics.eventLoop', options.runtimeMetrics?.eventLoop)
|
|
1170
|
+
this._setBoolean(opts, 'runtimeMetrics.gc', options.runtimeMetrics?.gc?.enabled)
|
|
1171
|
+
this._setBoolean(opts, 'runtimeMetricsRuntimeId', options.runtimeMetricsRuntimeId)
|
|
1127
1172
|
this._setArray(opts, 'sampler.spanSamplingRules', reformatSpanSamplingRules(options.spanSamplingRules))
|
|
1128
1173
|
this._setUnit(opts, 'sampleRate', coalesce(options.sampleRate, options.ingestion.sampleRate))
|
|
1129
1174
|
const ingestion = options.ingestion || {}
|
|
1130
|
-
|
|
1175
|
+
opts['sampler.rateLimit'] = coalesce(options.rateLimit, ingestion.rateLimit)
|
|
1131
1176
|
this._setSamplingRule(opts, 'sampler.rules', options.samplingRules)
|
|
1132
1177
|
this._setString(opts, 'service', options.service || tags.service)
|
|
1133
|
-
|
|
1178
|
+
opts.serviceMapping = options.serviceMapping
|
|
1134
1179
|
this._setString(opts, 'site', options.site)
|
|
1135
1180
|
if (options.spanAttributeSchema) {
|
|
1136
1181
|
this._setString(opts, 'spanAttributeSchema', validateNamingVersion(options.spanAttributeSchema))
|
|
@@ -1261,17 +1306,15 @@ class Config {
|
|
|
1261
1306
|
DD_CIVISIBILITY_IMPACTED_TESTS_DETECTION_ENABLED
|
|
1262
1307
|
} = getEnvironmentVariables()
|
|
1263
1308
|
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
|
|
1267
|
-
this._setValue(calc, 'url', getAgentUrl(this._getTraceAgentUrl(), this._optionsArg))
|
|
1268
|
-
}
|
|
1309
|
+
calc.url = DD_CIVISIBILITY_AGENTLESS_URL
|
|
1310
|
+
? new URL(DD_CIVISIBILITY_AGENTLESS_URL)
|
|
1311
|
+
: getAgentUrl(this._getTraceAgentUrl(), this._optionsArg)
|
|
1269
1312
|
if (this._isCiVisibility()) {
|
|
1270
1313
|
this._setBoolean(calc, 'isEarlyFlakeDetectionEnabled',
|
|
1271
1314
|
coalesce(DD_CIVISIBILITY_EARLY_FLAKE_DETECTION_ENABLED, true))
|
|
1272
1315
|
this._setBoolean(calc, 'isFlakyTestRetriesEnabled',
|
|
1273
1316
|
coalesce(DD_CIVISIBILITY_FLAKY_RETRY_ENABLED, true))
|
|
1274
|
-
|
|
1317
|
+
calc.flakyTestRetriesCount = coalesce(maybeInt(DD_CIVISIBILITY_FLAKY_RETRY_COUNT), 5)
|
|
1275
1318
|
this._setBoolean(calc, 'isIntelligentTestRunnerEnabled', isTrue(this._isCiVisibilityItrEnabled()))
|
|
1276
1319
|
this._setBoolean(calc, 'isManualApiEnabled', !isFalse(this._isCiVisibilityManualApiEnabled()))
|
|
1277
1320
|
this._setString(calc, 'ciVisibilityTestSessionName', DD_TEST_SESSION_NAME)
|
|
@@ -1279,26 +1322,23 @@ class Config {
|
|
|
1279
1322
|
this._setBoolean(calc, 'isTestDynamicInstrumentationEnabled', !isFalse(DD_TEST_FAILED_TEST_REPLAY_ENABLED))
|
|
1280
1323
|
this._setBoolean(calc, 'isServiceUserProvided', !!this._env.service)
|
|
1281
1324
|
this._setBoolean(calc, 'isTestManagementEnabled', !isFalse(DD_TEST_MANAGEMENT_ENABLED))
|
|
1282
|
-
|
|
1283
|
-
'testManagementAttemptToFixRetries',
|
|
1284
|
-
coalesce(maybeInt(DD_TEST_MANAGEMENT_ATTEMPT_TO_FIX_RETRIES), 20)
|
|
1285
|
-
)
|
|
1325
|
+
calc.testManagementAttemptToFixRetries = coalesce(maybeInt(DD_TEST_MANAGEMENT_ATTEMPT_TO_FIX_RETRIES), 20)
|
|
1286
1326
|
this._setBoolean(calc, 'isImpactedTestsEnabled', !isFalse(DD_CIVISIBILITY_IMPACTED_TESTS_DETECTION_ENABLED))
|
|
1287
1327
|
}
|
|
1288
|
-
|
|
1328
|
+
calc['dogstatsd.hostname'] = this._getHostname()
|
|
1289
1329
|
this._setBoolean(calc, 'isGitUploadEnabled',
|
|
1290
1330
|
calc.isIntelligentTestRunnerEnabled && !isFalse(this._isCiVisibilityGitUploadEnabled()))
|
|
1291
1331
|
this._setBoolean(calc, 'spanComputePeerService', this._getSpanComputePeerService())
|
|
1292
1332
|
this._setBoolean(calc, 'stats.enabled', this._isTraceStatsComputationEnabled())
|
|
1293
1333
|
const defaultPropagationStyle = this._getDefaultPropagationStyle(this._optionsArg)
|
|
1294
|
-
|
|
1334
|
+
calc['tracePropagationStyle.inject'] = propagationStyle(
|
|
1295
1335
|
'inject',
|
|
1296
1336
|
this._optionsArg.tracePropagationStyle
|
|
1297
|
-
)
|
|
1298
|
-
|
|
1337
|
+
)
|
|
1338
|
+
calc['tracePropagationStyle.extract'] = propagationStyle(
|
|
1299
1339
|
'extract',
|
|
1300
1340
|
this._optionsArg.tracePropagationStyle
|
|
1301
|
-
)
|
|
1341
|
+
)
|
|
1302
1342
|
if (defaultPropagationStyle.length > 2) {
|
|
1303
1343
|
calc['tracePropagationStyle.inject'] = calc['tracePropagationStyle.inject'] || defaultPropagationStyle
|
|
1304
1344
|
calc['tracePropagationStyle.extract'] = calc['tracePropagationStyle.extract'] || defaultPropagationStyle
|
|
@@ -1320,7 +1360,7 @@ class Config {
|
|
|
1320
1360
|
|
|
1321
1361
|
this._setUnit(opts, 'sampleRate', options.tracing_sampling_rate)
|
|
1322
1362
|
this._setBoolean(opts, 'logInjection', options.log_injection_enabled)
|
|
1323
|
-
|
|
1363
|
+
opts.headerTags = headerTags
|
|
1324
1364
|
this._setTags(opts, 'tags', tags)
|
|
1325
1365
|
this._setBoolean(opts, 'tracing', options.tracing_enabled)
|
|
1326
1366
|
this._remoteUnprocessed['sampler.rules'] = options.tracing_sampling_rules
|
|
@@ -1342,30 +1382,32 @@ class Config {
|
|
|
1342
1382
|
|
|
1343
1383
|
_setBoolean (obj, name, value) {
|
|
1344
1384
|
if (value === undefined || value === null) {
|
|
1345
|
-
|
|
1385
|
+
obj[name] = value
|
|
1346
1386
|
} else if (isTrue(value)) {
|
|
1347
|
-
|
|
1387
|
+
obj[name] = true
|
|
1348
1388
|
} else if (isFalse(value)) {
|
|
1349
|
-
|
|
1389
|
+
obj[name] = false
|
|
1350
1390
|
}
|
|
1351
1391
|
}
|
|
1352
1392
|
|
|
1353
1393
|
_setUnit (obj, name, value) {
|
|
1354
1394
|
if (value === null || value === undefined) {
|
|
1355
|
-
|
|
1395
|
+
obj[name] = value
|
|
1396
|
+
return
|
|
1356
1397
|
}
|
|
1357
1398
|
|
|
1358
1399
|
value = Number.parseFloat(value)
|
|
1359
1400
|
|
|
1360
1401
|
if (!Number.isNaN(value)) {
|
|
1361
1402
|
// TODO: Ignore out of range values instead of normalizing them.
|
|
1362
|
-
|
|
1403
|
+
obj[name] = Math.min(Math.max(value, 0), 1)
|
|
1363
1404
|
}
|
|
1364
1405
|
}
|
|
1365
1406
|
|
|
1366
1407
|
_setArray (obj, name, value) {
|
|
1367
1408
|
if (value == null) {
|
|
1368
|
-
|
|
1409
|
+
obj[name] = null
|
|
1410
|
+
return
|
|
1369
1411
|
}
|
|
1370
1412
|
|
|
1371
1413
|
if (typeof value === 'string') {
|
|
@@ -1377,13 +1419,14 @@ class Config {
|
|
|
1377
1419
|
}
|
|
1378
1420
|
|
|
1379
1421
|
if (Array.isArray(value)) {
|
|
1380
|
-
|
|
1422
|
+
obj[name] = value
|
|
1381
1423
|
}
|
|
1382
1424
|
}
|
|
1383
1425
|
|
|
1384
1426
|
_setIntegerRangeSet (obj, name, value) {
|
|
1385
1427
|
if (value == null) {
|
|
1386
|
-
|
|
1428
|
+
obj[name] = null
|
|
1429
|
+
return
|
|
1387
1430
|
}
|
|
1388
1431
|
value = value.split(',')
|
|
1389
1432
|
const result = []
|
|
@@ -1398,12 +1441,13 @@ class Config {
|
|
|
1398
1441
|
result.push(Number(val))
|
|
1399
1442
|
}
|
|
1400
1443
|
})
|
|
1401
|
-
|
|
1444
|
+
obj[name] = result
|
|
1402
1445
|
}
|
|
1403
1446
|
|
|
1404
1447
|
_setSamplingRule (obj, name, value) {
|
|
1405
1448
|
if (value == null) {
|
|
1406
|
-
|
|
1449
|
+
obj[name] = null
|
|
1450
|
+
return
|
|
1407
1451
|
}
|
|
1408
1452
|
|
|
1409
1453
|
if (typeof value === 'string') {
|
|
@@ -1416,7 +1460,7 @@ class Config {
|
|
|
1416
1460
|
sample_rate: 'sampleRate'
|
|
1417
1461
|
})
|
|
1418
1462
|
})
|
|
1419
|
-
|
|
1463
|
+
obj[name] = value
|
|
1420
1464
|
}
|
|
1421
1465
|
}
|
|
1422
1466
|
|
|
@@ -1426,37 +1470,31 @@ class Config {
|
|
|
1426
1470
|
|
|
1427
1471
|
_setTags (obj, name, value) {
|
|
1428
1472
|
if (!value || Object.keys(value).length === 0) {
|
|
1429
|
-
|
|
1473
|
+
obj[name] = null
|
|
1474
|
+
return
|
|
1430
1475
|
}
|
|
1431
1476
|
|
|
1432
|
-
this._setValue(obj, name, value)
|
|
1433
|
-
}
|
|
1434
|
-
|
|
1435
|
-
_setValue (obj, name, value) {
|
|
1436
1477
|
obj[name] = value
|
|
1437
1478
|
}
|
|
1438
1479
|
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
|
|
1442
|
-
|
|
1443
|
-
|
|
1444
|
-
|
|
1445
|
-
|
|
1446
|
-
|
|
1447
|
-
|
|
1448
|
-
|
|
1449
|
-
|
|
1450
|
-
|
|
1451
|
-
|
|
1452
|
-
|
|
1453
|
-
|
|
1454
|
-
|
|
1455
|
-
|
|
1456
|
-
|
|
1457
|
-
]
|
|
1458
|
-
|
|
1459
|
-
return { containers, origins }
|
|
1480
|
+
_setAndTrackChange ({ name, value, origin, unprocessedValue, changes }) {
|
|
1481
|
+
set(this, name, value)
|
|
1482
|
+
|
|
1483
|
+
if (!changeTracker[name]) {
|
|
1484
|
+
changeTracker[name] = {}
|
|
1485
|
+
}
|
|
1486
|
+
|
|
1487
|
+
const originExists = origin in changeTracker[name]
|
|
1488
|
+
const oldValue = changeTracker[name][origin]
|
|
1489
|
+
|
|
1490
|
+
if (!originExists || oldValue !== value) {
|
|
1491
|
+
changeTracker[name][origin] = value
|
|
1492
|
+
changes.push({
|
|
1493
|
+
name,
|
|
1494
|
+
value: unprocessedValue || value,
|
|
1495
|
+
origin
|
|
1496
|
+
})
|
|
1497
|
+
}
|
|
1460
1498
|
}
|
|
1461
1499
|
|
|
1462
1500
|
// TODO: Report origin changes and errors to telemetry.
|
|
@@ -1465,51 +1503,35 @@ class Config {
|
|
|
1465
1503
|
// for telemetry reporting, `name`s in `containers` need to be keys from:
|
|
1466
1504
|
// https://github.com/DataDog/dd-go/blob/prod/trace/apps/tracer-telemetry-intake/telemetry-payload/static/config_norm_rules.json
|
|
1467
1505
|
_merge () {
|
|
1468
|
-
const { containers, origins } = this._getContainersAndOriginsOrdered()
|
|
1469
|
-
const unprocessedValues = [
|
|
1470
|
-
this._remoteUnprocessed,
|
|
1471
|
-
this._optsUnprocessed,
|
|
1472
|
-
{},
|
|
1473
|
-
this._envUnprocessed,
|
|
1474
|
-
{},
|
|
1475
|
-
{},
|
|
1476
|
-
{}
|
|
1477
|
-
]
|
|
1478
1506
|
const changes = []
|
|
1479
1507
|
|
|
1480
1508
|
for (const name in this._defaults) {
|
|
1481
|
-
|
|
1482
|
-
|
|
1509
|
+
// Use reverse order for merge (lowest priority first)
|
|
1510
|
+
for (let i = sourcesOrder.length - 1; i >= 0; i--) {
|
|
1511
|
+
const { containerProperty, origin, unprocessedProperty } = sourcesOrder[i]
|
|
1512
|
+
const container = this[containerProperty]
|
|
1483
1513
|
const value = container[name]
|
|
1484
|
-
|
|
1485
|
-
|
|
1486
|
-
if (get(this, name) === value && has(this, name)) break
|
|
1487
|
-
|
|
1488
|
-
set(this, name, value)
|
|
1489
|
-
|
|
1490
|
-
changes.push({
|
|
1514
|
+
if (value != null || container === this._defaults) {
|
|
1515
|
+
this._setAndTrackChange({
|
|
1491
1516
|
name,
|
|
1492
|
-
value
|
|
1493
|
-
origin
|
|
1517
|
+
value,
|
|
1518
|
+
origin,
|
|
1519
|
+
unprocessedValue: unprocessedProperty === undefined ? undefined : this[unprocessedProperty][name],
|
|
1520
|
+
changes
|
|
1494
1521
|
})
|
|
1495
|
-
|
|
1496
|
-
break
|
|
1497
1522
|
}
|
|
1498
1523
|
}
|
|
1499
1524
|
}
|
|
1500
|
-
|
|
1501
1525
|
this.sampler.sampleRate = this.sampleRate
|
|
1502
1526
|
updateConfig(changes, this)
|
|
1503
1527
|
}
|
|
1504
1528
|
|
|
1505
1529
|
getOrigin (name) {
|
|
1506
|
-
const {
|
|
1507
|
-
|
|
1508
|
-
for (let i = 0; i < containers.length; i++) {
|
|
1509
|
-
const container = containers[i]
|
|
1530
|
+
for (const { containerProperty, origin } of sourcesOrder) {
|
|
1531
|
+
const container = this[containerProperty]
|
|
1510
1532
|
const value = container[name]
|
|
1511
1533
|
if (value != null || container === this._defaults) {
|
|
1512
|
-
return
|
|
1534
|
+
return origin
|
|
1513
1535
|
}
|
|
1514
1536
|
}
|
|
1515
1537
|
}
|