dd-trace 5.56.0 → 5.57.1

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.
Files changed (134) hide show
  1. package/index.d.ts +44 -2
  2. package/init.js +4 -1
  3. package/package.json +20 -20
  4. package/packages/datadog-esbuild/index.js +22 -0
  5. package/packages/datadog-instrumentations/src/cassandra-driver.js +43 -60
  6. package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +12 -12
  7. package/packages/datadog-instrumentations/src/cucumber.js +4 -6
  8. package/packages/datadog-instrumentations/src/elasticsearch.js +16 -19
  9. package/packages/datadog-instrumentations/src/fastify.js +91 -9
  10. package/packages/datadog-instrumentations/src/helpers/bundler-register.js +20 -5
  11. package/packages/datadog-instrumentations/src/helpers/check-require-cache.js +2 -2
  12. package/packages/datadog-instrumentations/src/helpers/hooks.js +1 -0
  13. package/packages/datadog-instrumentations/src/helpers/register.js +17 -5
  14. package/packages/datadog-instrumentations/src/ioredis.js +8 -13
  15. package/packages/datadog-instrumentations/src/iovalkey.js +10 -14
  16. package/packages/datadog-instrumentations/src/jest.js +28 -6
  17. package/packages/datadog-instrumentations/src/memcached.js +17 -24
  18. package/packages/datadog-instrumentations/src/mocha/main.js +7 -6
  19. package/packages/datadog-instrumentations/src/moleculer/client.js +9 -10
  20. package/packages/datadog-instrumentations/src/moleculer/server.js +12 -13
  21. package/packages/datadog-instrumentations/src/openai.js +30 -2
  22. package/packages/datadog-instrumentations/src/playwright.js +4 -1
  23. package/packages/datadog-instrumentations/src/prisma.js +116 -0
  24. package/packages/datadog-instrumentations/src/redis.js +32 -43
  25. package/packages/datadog-instrumentations/src/router.js +1 -1
  26. package/packages/datadog-instrumentations/src/sharedb.js +10 -16
  27. package/packages/datadog-instrumentations/src/vitest.js +4 -4
  28. package/packages/datadog-plugin-aws-sdk/src/base.js +6 -1
  29. package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +9 -4
  30. package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +3 -2
  31. package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +2 -1
  32. package/packages/datadog-plugin-aws-sdk/src/util.js +2 -2
  33. package/packages/datadog-plugin-bunyan/src/index.js +2 -2
  34. package/packages/datadog-plugin-cassandra-driver/src/index.js +6 -2
  35. package/packages/datadog-plugin-confluentinc-kafka-javascript/src/batch-consumer.js +1 -1
  36. package/packages/datadog-plugin-confluentinc-kafka-javascript/src/consumer.js +1 -1
  37. package/packages/datadog-plugin-confluentinc-kafka-javascript/src/index.js +1 -1
  38. package/packages/datadog-plugin-confluentinc-kafka-javascript/src/producer.js +1 -1
  39. package/packages/datadog-plugin-cucumber/src/index.js +4 -2
  40. package/packages/datadog-plugin-cypress/src/cypress-plugin.js +9 -5
  41. package/packages/datadog-plugin-elasticsearch/src/index.js +12 -4
  42. package/packages/datadog-plugin-http/src/client.js +1 -0
  43. package/packages/datadog-plugin-http/src/server.js +2 -1
  44. package/packages/datadog-plugin-http2/src/client.js +1 -0
  45. package/packages/datadog-plugin-http2/src/server.js +1 -0
  46. package/packages/datadog-plugin-jest/src/index.js +4 -3
  47. package/packages/datadog-plugin-memcached/src/index.js +6 -2
  48. package/packages/datadog-plugin-mocha/src/index.js +3 -2
  49. package/packages/datadog-plugin-moleculer/src/client.js +15 -9
  50. package/packages/datadog-plugin-moleculer/src/server.js +9 -5
  51. package/packages/datadog-plugin-next/src/index.js +2 -1
  52. package/packages/datadog-plugin-openai/src/tracing.js +127 -80
  53. package/packages/datadog-plugin-pino/src/index.js +2 -2
  54. package/packages/datadog-plugin-prisma/src/client.js +62 -0
  55. package/packages/datadog-plugin-prisma/src/engine.js +81 -0
  56. package/packages/datadog-plugin-prisma/src/index.js +22 -0
  57. package/packages/datadog-plugin-protobufjs/src/schema_iterator.js +1 -1
  58. package/packages/datadog-plugin-redis/src/index.js +9 -3
  59. package/packages/datadog-plugin-router/src/index.js +1 -0
  60. package/packages/datadog-plugin-sharedb/src/index.js +13 -5
  61. package/packages/datadog-plugin-winston/src/index.js +2 -2
  62. package/packages/dd-trace/src/appsec/channels.js +26 -21
  63. package/packages/dd-trace/src/appsec/iast/analyzers/unvalidated-redirect-analyzer.js +13 -20
  64. package/packages/dd-trace/src/appsec/iast/taint-tracking/source-types.js +0 -1
  65. package/packages/dd-trace/src/appsec/index.js +16 -1
  66. package/packages/dd-trace/src/appsec/rasp/utils.js +0 -5
  67. package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/worker/index.js +3 -3
  68. package/packages/dd-trace/src/ci-visibility/early-flake-detection/get-known-tests.js +1 -1
  69. package/packages/dd-trace/src/ci-visibility/exporters/agentless/coverage-writer.js +1 -1
  70. package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +1 -1
  71. package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +2 -2
  72. package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +6 -6
  73. package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +2 -3
  74. package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +3 -3
  75. package/packages/dd-trace/src/config.js +286 -270
  76. package/packages/dd-trace/src/constants.js +2 -1
  77. package/packages/dd-trace/src/crashtracking/crashtracker.js +12 -14
  78. package/packages/dd-trace/src/datastreams/context.js +1 -1
  79. package/packages/dd-trace/src/datastreams/processor.js +1 -1
  80. package/packages/dd-trace/src/datastreams/writer.js +3 -3
  81. package/packages/dd-trace/src/debugger/devtools_client/breakpoints.js +6 -3
  82. package/packages/dd-trace/src/debugger/devtools_client/condition.js +1 -1
  83. package/packages/dd-trace/src/debugger/devtools_client/index.js +2 -3
  84. package/packages/dd-trace/src/debugger/devtools_client/state.js +7 -4
  85. package/packages/dd-trace/src/dogstatsd.js +3 -3
  86. package/packages/dd-trace/src/exporters/agent/index.js +10 -5
  87. package/packages/dd-trace/src/exporters/agent/writer.js +1 -1
  88. package/packages/dd-trace/src/exporters/common/agent-info-exporter.js +2 -2
  89. package/packages/dd-trace/src/exporters/log/index.js +1 -1
  90. package/packages/dd-trace/src/exporters/span-stats/writer.js +2 -2
  91. package/packages/dd-trace/src/guardrails/index.js +3 -1
  92. package/packages/dd-trace/src/guardrails/telemetry.js +1 -1
  93. package/packages/dd-trace/src/llmobs/index.js +11 -5
  94. package/packages/dd-trace/src/llmobs/plugins/base.js +2 -2
  95. package/packages/dd-trace/src/llmobs/plugins/langchain/index.js +1 -1
  96. package/packages/dd-trace/src/llmobs/tagger.js +13 -13
  97. package/packages/dd-trace/src/llmobs/writers/base.js +2 -2
  98. package/packages/dd-trace/src/llmobs/writers/spans.js +2 -2
  99. package/packages/dd-trace/src/opentelemetry/tracer.js +1 -1
  100. package/packages/dd-trace/src/opentracing/propagation/text_map.js +4 -4
  101. package/packages/dd-trace/src/opentracing/span.js +1 -0
  102. package/packages/dd-trace/src/plugin_manager.js +3 -3
  103. package/packages/dd-trace/src/plugins/cache.js +2 -2
  104. package/packages/dd-trace/src/plugins/ci_plugin.js +11 -7
  105. package/packages/dd-trace/src/plugins/database.js +3 -1
  106. package/packages/dd-trace/src/plugins/index.js +1 -0
  107. package/packages/dd-trace/src/plugins/log_plugin.js +5 -1
  108. package/packages/dd-trace/src/plugins/outbound.js +8 -6
  109. package/packages/dd-trace/src/plugins/structured_log_plugin.js +9 -0
  110. package/packages/dd-trace/src/plugins/tracing.js +1 -1
  111. package/packages/dd-trace/src/plugins/util/ci.js +83 -30
  112. package/packages/dd-trace/src/plugins/util/git.js +1 -0
  113. package/packages/dd-trace/src/plugins/util/inferred_proxy.js +3 -2
  114. package/packages/dd-trace/src/plugins/util/ip_extractor.js +1 -0
  115. package/packages/dd-trace/src/plugins/util/tags.js +4 -1
  116. package/packages/dd-trace/src/plugins/util/test.js +80 -10
  117. package/packages/dd-trace/src/plugins/util/web.js +1 -0
  118. package/packages/dd-trace/src/profiler.js +0 -2
  119. package/packages/dd-trace/src/profiling/exporter_cli.js +1 -3
  120. package/packages/dd-trace/src/profiling/ssi-heuristics.js +18 -126
  121. package/packages/dd-trace/src/proxy.js +12 -27
  122. package/packages/dd-trace/src/runtime_metrics/index.js +1 -1
  123. package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +14 -45
  124. package/packages/dd-trace/src/service-naming/schemas/v0/messaging.js +2 -2
  125. package/packages/dd-trace/src/service-naming/schemas/v0/storage.js +4 -0
  126. package/packages/dd-trace/src/service-naming/schemas/v1/messaging.js +2 -2
  127. package/packages/dd-trace/src/service-naming/schemas/v1/storage.js +4 -0
  128. package/packages/dd-trace/src/supported-configurations.json +12 -3
  129. package/packages/dd-trace/src/telemetry/telemetry.js +5 -1
  130. package/packages/dd-trace/src/tracer.js +11 -0
  131. package/packages/dd-trace/src/tracer_metadata.js +25 -0
  132. package/packages/dd-trace/src/util.js +11 -4
  133. package/version.js +3 -1
  134. package/packages/dd-trace/src/profiling/ssi-telemetry-mock-profiler.js +0 -30
@@ -15,7 +15,9 @@ const { getGitMetadataFromGitProperties, removeUserSensitiveInfo } = require('./
15
15
  const { updateConfig } = require('./telemetry')
16
16
  const telemetryMetrics = require('./telemetry/metrics')
17
17
  const { isInServerlessEnvironment, getIsGCPFunction, getIsAzureFunction } = require('./serverless')
18
- const { ORIGIN_KEY, GRPC_CLIENT_ERROR_STATUSES, GRPC_SERVER_ERROR_STATUSES } = require('./constants')
18
+ const {
19
+ ORIGIN_KEY, GRPC_CLIENT_ERROR_STATUSES, GRPC_SERVER_ERROR_STATUSES, INSTRUMENTED_BY_SSI
20
+ } = require('./constants')
19
21
  const { appendRules } = require('./payload-tagging/config')
20
22
  const { getEnvironmentVariable, getEnvironmentVariables } = require('./config-helper')
21
23
 
@@ -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(`both ${ddEnvVar} and ${otelEnvVar} environment variables are set`)
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(`unexpected value for ${otelEnvVar} environment variable`)
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
@@ -284,9 +294,8 @@ class Config {
284
294
  getEnvironmentVariable('DD_TRACE_PROPAGATION_STYLE_EXTRACT')
285
295
  )) {
286
296
  log.warn(
287
- 'Use either the DD_TRACE_PROPAGATION_STYLE environment variable or separate ' +
288
- 'DD_TRACE_PROPAGATION_STYLE_INJECT and DD_TRACE_PROPAGATION_STYLE_EXTRACT ' +
289
- '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'
290
299
  )
291
300
  }
292
301
  const PROPAGATION_STYLE_INJECT = propagationStyle(
@@ -302,6 +311,18 @@ class Config {
302
311
  }
303
312
  }
304
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
+
305
326
  const DD_INSTRUMENTATION_INSTALL_ID = coalesce(
306
327
  getEnvironmentVariable('DD_INSTRUMENTATION_INSTALL_ID'),
307
328
  null
@@ -459,151 +480,155 @@ class Config {
459
480
 
460
481
  const defaults = setHiddenProperty(this, '_defaults', {})
461
482
 
462
- this._setBoolean(defaults, 'apmTracingEnabled', true)
463
- this._setValue(defaults, 'appsec.apiSecurity.enabled', true)
464
- this._setValue(defaults, 'appsec.apiSecurity.sampleDelay', 30)
465
- this._setValue(defaults, 'appsec.blockedTemplateGraphql')
466
- this._setValue(defaults, 'appsec.blockedTemplateHtml')
467
- this._setValue(defaults, 'appsec.blockedTemplateJson')
468
- this._setValue(defaults, 'appsec.enabled')
469
- this._setValue(defaults, 'appsec.eventTracking.mode', 'identification')
470
- this._setValue(defaults, 'appsec.extendedHeadersCollection.enabled', false)
471
- this._setValue(defaults, 'appsec.extendedHeadersCollection.redaction', true)
472
- this._setValue(defaults, 'appsec.extendedHeadersCollection.maxHeaders', 50)
473
- this._setValue(defaults, 'appsec.obfuscatorKeyRegex', defaultWafObfuscatorKeyRegex)
474
- this._setValue(defaults, 'appsec.obfuscatorValueRegex', defaultWafObfuscatorValueRegex)
475
- this._setValue(defaults, 'appsec.rasp.enabled', true)
476
- this._setValue(defaults, 'appsec.rasp.bodyCollection', false)
477
- this._setValue(defaults, 'appsec.rateLimit', 100)
478
- this._setValue(defaults, 'appsec.rules')
479
- this._setValue(defaults, 'appsec.sca.enabled', null)
480
- this._setValue(defaults, 'appsec.stackTrace.enabled', true)
481
- this._setValue(defaults, 'appsec.stackTrace.maxDepth', 32)
482
- this._setValue(defaults, 'appsec.stackTrace.maxStackTraces', 2)
483
- this._setValue(defaults, 'appsec.wafTimeout', 5e3) // µs
484
- this._setValue(defaults, 'baggageMaxBytes', 8192)
485
- this._setValue(defaults, 'baggageMaxItems', 64)
486
- this._setValue(defaults, 'baggageTagKeys', 'user.id,session.id,account.id')
487
- this._setValue(defaults, 'ciVisibilityTestSessionName', '')
488
- this._setValue(defaults, 'clientIpEnabled', false)
489
- this._setValue(defaults, 'clientIpHeader', null)
490
- this._setValue(defaults, 'crashtracking.enabled', true)
491
- this._setValue(defaults, 'codeOriginForSpans.enabled', true)
492
- this._setValue(defaults, 'codeOriginForSpans.experimental.exit_spans.enabled', false)
493
- this._setValue(defaults, 'dbmPropagationMode', 'disabled')
494
- this._setValue(defaults, 'dogstatsd.hostname', '127.0.0.1')
495
- this._setValue(defaults, 'dogstatsd.port', '8125')
496
- this._setValue(defaults, 'dsmEnabled', false)
497
- this._setValue(defaults, 'dynamicInstrumentation.enabled', false)
498
- this._setValue(defaults, 'dynamicInstrumentation.redactedIdentifiers', [])
499
- this._setValue(defaults, 'dynamicInstrumentation.redactionExcludedIdentifiers', [])
500
- this._setValue(defaults, 'dynamicInstrumentation.uploadIntervalSeconds', 1)
501
- this._setValue(defaults, 'env')
502
- this._setValue(defaults, 'experimental.enableGetRumData', false)
503
- this._setValue(defaults, 'experimental.exporter')
504
- this._setValue(defaults, 'experimental.runtimeId', false)
505
- this._setValue(defaults, 'flushInterval', 2000)
506
- this._setValue(defaults, 'flushMinSpans', 1000)
507
- this._setValue(defaults, 'gitMetadataEnabled', true)
508
- this._setValue(defaults, 'graphqlErrorExtensions', [])
509
- this._setValue(defaults, 'grpc.client.error.statuses', GRPC_CLIENT_ERROR_STATUSES)
510
- this._setValue(defaults, 'grpc.server.error.statuses', GRPC_SERVER_ERROR_STATUSES)
511
- this._setValue(defaults, 'headerTags', [])
512
- this._setValue(defaults, 'hostname', '127.0.0.1')
513
- this._setValue(defaults, 'iast.dbRowsToTaint', 1)
514
- this._setValue(defaults, 'iast.deduplicationEnabled', true)
515
- this._setValue(defaults, 'iast.enabled', false)
516
- this._setValue(defaults, 'iast.maxConcurrentRequests', 2)
517
- this._setValue(defaults, 'iast.maxContextOperations', 2)
518
- this._setValue(defaults, 'iast.redactionEnabled', true)
519
- this._setValue(defaults, 'iast.redactionNamePattern', null)
520
- this._setValue(defaults, 'iast.redactionValuePattern', null)
521
- this._setValue(defaults, 'iast.requestSampling', 30)
522
- this._setValue(defaults, 'iast.securityControlsConfiguration', null)
523
- this._setValue(defaults, 'iast.telemetryVerbosity', 'INFORMATION')
524
- this._setValue(defaults, 'iast.stackTrace.enabled', true)
525
- this._setValue(defaults, 'injectionEnabled', [])
526
- this._setValue(defaults, 'isAzureFunction', false)
527
- this._setValue(defaults, 'isCiVisibility', false)
528
- this._setValue(defaults, 'isEarlyFlakeDetectionEnabled', false)
529
- this._setValue(defaults, 'isFlakyTestRetriesEnabled', false)
530
- this._setValue(defaults, 'flakyTestRetriesCount', 5)
531
- this._setValue(defaults, 'isGCPFunction', false)
532
- this._setValue(defaults, 'isGitUploadEnabled', false)
533
- this._setValue(defaults, 'isIntelligentTestRunnerEnabled', false)
534
- this._setValue(defaults, 'isManualApiEnabled', false)
535
- this._setValue(defaults, 'langchain.spanCharLimit', 128)
536
- this._setValue(defaults, 'langchain.spanPromptCompletionSampleRate', 1)
537
- this._setValue(defaults, 'llmobs.agentlessEnabled')
538
- this._setValue(defaults, 'llmobs.enabled', false)
539
- this._setValue(defaults, 'llmobs.mlApp')
540
- this._setValue(defaults, 'ciVisibilityTestSessionName', '')
541
- this._setValue(defaults, 'ciVisAgentlessLogSubmissionEnabled', false)
542
- this._setValue(defaults, 'legacyBaggageEnabled', true)
543
- this._setValue(defaults, 'isTestDynamicInstrumentationEnabled', false)
544
- this._setValue(defaults, 'isServiceUserProvided', false)
545
- this._setValue(defaults, 'testManagementAttemptToFixRetries', 20)
546
- this._setValue(defaults, 'isTestManagementEnabled', false)
547
- this._setValue(defaults, 'isImpactedTestsEnabled', false)
548
- this._setValue(defaults, 'logInjection', false)
549
- this._setValue(defaults, 'lookup')
550
- this._setValue(defaults, 'inferredProxyServicesEnabled', false)
551
- this._setValue(defaults, 'memcachedCommandEnabled', false)
552
- this._setValue(defaults, 'middlewareTracingEnabled', true)
553
- this._setValue(defaults, 'openAiLogsEnabled', false)
554
- this._setValue(defaults, 'openai.spanCharLimit', 128)
555
- this._setValue(defaults, 'peerServiceMapping', {})
556
- this._setValue(defaults, 'plugins', true)
557
- this._setValue(defaults, 'port', '8126')
558
- this._setValue(defaults, 'profiling.enabled')
559
- this._setValue(defaults, 'profiling.exporters', 'agent')
560
- this._setValue(defaults, 'profiling.sourceMap', true)
561
- this._setValue(defaults, 'profiling.longLivedThreshold')
562
- this._setValue(defaults, 'protocolVersion', '0.4')
563
- this._setValue(defaults, 'queryStringObfuscation', qsRegex)
564
- this._setValue(defaults, 'remoteConfig.enabled', true)
565
- this._setValue(defaults, 'remoteConfig.pollInterval', 5) // seconds
566
- this._setValue(defaults, 'reportHostname', false)
567
- this._setValue(defaults, 'runtimeMetrics', false)
568
- this._setValue(defaults, 'sampleRate')
569
- this._setValue(defaults, 'sampler.rateLimit', 100)
570
- this._setValue(defaults, 'sampler.rules', [])
571
- this._setValue(defaults, 'sampler.spanSamplingRules', [])
572
- this._setValue(defaults, 'scope')
573
- this._setValue(defaults, 'service', service)
574
- this._setValue(defaults, 'serviceMapping', {})
575
- this._setValue(defaults, 'site', 'datadoghq.com')
576
- this._setValue(defaults, 'spanAttributeSchema', 'v0')
577
- this._setValue(defaults, 'spanComputePeerService', false)
578
- this._setValue(defaults, 'spanLeakDebug', 0)
579
- this._setValue(defaults, 'spanRemoveIntegrationFromService', false)
580
- this._setValue(defaults, 'startupLogs', false)
581
- this._setValue(defaults, 'stats.enabled', false)
582
- this._setValue(defaults, 'tags', {})
583
- this._setValue(defaults, 'tagsHeaderMaxLength', 512)
584
- this._setValue(defaults, 'telemetry.debug', false)
585
- this._setValue(defaults, 'telemetry.dependencyCollection', true)
586
- this._setValue(defaults, 'telemetry.enabled', true)
587
- this._setValue(defaults, 'telemetry.heartbeatInterval', 60_000)
588
- this._setValue(defaults, 'telemetry.logCollection', true)
589
- this._setValue(defaults, 'telemetry.metrics', true)
590
- this._setValue(defaults, 'traceEnabled', true)
591
- this._setValue(defaults, 'traceId128BitGenerationEnabled', true)
592
- this._setValue(defaults, 'traceId128BitLoggingEnabled', true)
593
- this._setValue(defaults, 'tracePropagationExtractFirst', false)
594
- this._setValue(defaults, 'tracePropagationBehaviorExtract', 'continue')
595
- this._setValue(defaults, 'tracePropagationStyle.inject', ['datadog', 'tracecontext', 'baggage'])
596
- this._setValue(defaults, 'tracePropagationStyle.extract', ['datadog', 'tracecontext', 'baggage'])
597
- this._setValue(defaults, 'tracePropagationStyle.otelPropagators', false)
598
- this._setValue(defaults, 'tracing', true)
599
- this._setValue(defaults, 'url')
600
- this._setValue(defaults, 'version', pkg.version)
601
- this._setValue(defaults, 'instrumentation_config_id')
602
- this._setValue(defaults, 'vertexai.spanCharLimit', 128)
603
- this._setValue(defaults, 'vertexai.spanPromptCompletionSampleRate', 1)
604
- this._setValue(defaults, 'trace.aws.addSpanPointers', true)
605
- this._setValue(defaults, 'trace.dynamoDb.tablePrimaryKeys')
606
- this._setValue(defaults, 'trace.nativeSpanEvents', false)
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
607
632
  }
608
633
 
609
634
  _applyLocalStableConfig () {
@@ -640,7 +665,7 @@ class Config {
640
665
  this._setBoolean(obj, 'logInjection', DD_LOGS_INJECTION)
641
666
  const profilingEnabled = normalizeProfilingEnabledValue(DD_PROFILING_ENABLED)
642
667
  this._setString(obj, 'profiling.enabled', profilingEnabled)
643
- this._setBoolean(obj, 'runtimeMetrics', DD_RUNTIME_METRICS_ENABLED)
668
+ this._setBoolean(obj, 'runtimeMetrics.enabled', DD_RUNTIME_METRICS_ENABLED)
644
669
  this._setString(obj, 'service', DD_SERVICE)
645
670
  this._setString(obj, 'version', DD_VERSION)
646
671
  }
@@ -701,6 +726,7 @@ class Config {
701
726
  DD_IAST_TELEMETRY_VERBOSITY,
702
727
  DD_IAST_STACK_TRACE_ENABLED,
703
728
  DD_INJECTION_ENABLED,
729
+ DD_INJECT_FORCE,
704
730
  DD_INSTRUMENTATION_TELEMETRY_ENABLED,
705
731
  DD_INSTRUMENTATION_CONFIG_ID,
706
732
  DD_LOGS_INJECTION,
@@ -717,6 +743,8 @@ class Config {
717
743
  DD_REMOTE_CONFIGURATION_ENABLED,
718
744
  DD_REMOTE_CONFIG_POLL_INTERVAL_SECONDS,
719
745
  DD_RUNTIME_METRICS_ENABLED,
746
+ DD_RUNTIME_METRICS_EVENT_LOOP_ENABLED,
747
+ DD_RUNTIME_METRICS_GC_ENABLED,
720
748
  DD_SERVICE,
721
749
  DD_SERVICE_MAPPING,
722
750
  DD_SITE,
@@ -742,7 +770,7 @@ class Config {
742
770
  DD_TRACE_ENABLED,
743
771
  DD_TRACE_EXPERIMENTAL_EXPORTER,
744
772
  DD_TRACE_EXPERIMENTAL_GET_RUM_DATA_ENABLED,
745
- DD_TRACE_EXPERIMENTAL_RUNTIME_ID_ENABLED,
773
+ DD_RUNTIME_METRICS_RUNTIME_ID_ENABLED,
746
774
  DD_TRACE_GIT_METADATA_ENABLED,
747
775
  DD_TRACE_GLOBAL_TAGS,
748
776
  DD_TRACE_GRAPHQL_ERROR_EXTENSIONS,
@@ -797,11 +825,11 @@ class Config {
797
825
  DD_EXPERIMENTAL_APPSEC_STANDALONE_ENABLED && isFalse(DD_EXPERIMENTAL_APPSEC_STANDALONE_ENABLED)
798
826
  ))
799
827
  this._setBoolean(env, 'appsec.apiSecurity.enabled', DD_API_SECURITY_ENABLED && isTrue(DD_API_SECURITY_ENABLED))
800
- this._setValue(env, 'appsec.apiSecurity.sampleDelay', maybeFloat(DD_API_SECURITY_SAMPLE_DELAY))
801
- this._setValue(env, 'appsec.blockedTemplateGraphql', maybeFile(DD_APPSEC_GRAPHQL_BLOCKED_TEMPLATE_JSON))
802
- this._setValue(env, 'appsec.blockedTemplateHtml', maybeFile(DD_APPSEC_HTTP_BLOCKED_TEMPLATE_HTML))
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)
803
831
  this._envUnprocessed['appsec.blockedTemplateHtml'] = DD_APPSEC_HTTP_BLOCKED_TEMPLATE_HTML
804
- this._setValue(env, 'appsec.blockedTemplateJson', maybeFile(DD_APPSEC_HTTP_BLOCKED_TEMPLATE_JSON))
832
+ env['appsec.blockedTemplateJson'] = maybeFile(DD_APPSEC_HTTP_BLOCKED_TEMPLATE_JSON)
805
833
  this._envUnprocessed['appsec.blockedTemplateJson'] = DD_APPSEC_HTTP_BLOCKED_TEMPLATE_JSON
806
834
  this._setBoolean(env, 'appsec.enabled', DD_APPSEC_ENABLED)
807
835
  this._setString(env, 'appsec.eventTracking.mode', DD_APPSEC_AUTO_USER_INSTRUMENTATION_MODE)
@@ -811,27 +839,27 @@ class Config {
811
839
  'appsec.extendedHeadersCollection.redaction',
812
840
  DD_APPSEC_HEADER_COLLECTION_REDACTION_ENABLED
813
841
  )
814
- this._setValue(env, 'appsec.extendedHeadersCollection.maxHeaders', maybeInt(DD_APPSEC_MAX_COLLECTED_HEADERS))
842
+ env['appsec.extendedHeadersCollection.maxHeaders'] = maybeInt(DD_APPSEC_MAX_COLLECTED_HEADERS)
815
843
  this._envUnprocessed['appsec.extendedHeadersCollection.maxHeaders'] = DD_APPSEC_MAX_COLLECTED_HEADERS
816
844
  this._setString(env, 'appsec.obfuscatorKeyRegex', DD_APPSEC_OBFUSCATION_PARAMETER_KEY_REGEXP)
817
845
  this._setString(env, 'appsec.obfuscatorValueRegex', DD_APPSEC_OBFUSCATION_PARAMETER_VALUE_REGEXP)
818
846
  this._setBoolean(env, 'appsec.rasp.enabled', DD_APPSEC_RASP_ENABLED)
819
847
  this._setBoolean(env, 'appsec.rasp.bodyCollection', DD_APPSEC_RASP_COLLECT_REQUEST_BODY)
820
- this._setValue(env, 'appsec.rateLimit', maybeInt(DD_APPSEC_TRACE_RATE_LIMIT))
848
+ env['appsec.rateLimit'] = maybeInt(DD_APPSEC_TRACE_RATE_LIMIT)
821
849
  this._envUnprocessed['appsec.rateLimit'] = DD_APPSEC_TRACE_RATE_LIMIT
822
850
  this._setString(env, 'appsec.rules', DD_APPSEC_RULES)
823
851
  // DD_APPSEC_SCA_ENABLED is never used locally, but only sent to the backend
824
852
  this._setBoolean(env, 'appsec.sca.enabled', DD_APPSEC_SCA_ENABLED)
825
853
  this._setBoolean(env, 'appsec.stackTrace.enabled', DD_APPSEC_STACK_TRACE_ENABLED)
826
- this._setValue(env, 'appsec.stackTrace.maxDepth', maybeInt(DD_APPSEC_MAX_STACK_TRACE_DEPTH))
854
+ env['appsec.stackTrace.maxDepth'] = maybeInt(DD_APPSEC_MAX_STACK_TRACE_DEPTH)
827
855
  this._envUnprocessed['appsec.stackTrace.maxDepth'] = DD_APPSEC_MAX_STACK_TRACE_DEPTH
828
- this._setValue(env, 'appsec.stackTrace.maxStackTraces', maybeInt(DD_APPSEC_MAX_STACK_TRACES))
856
+ env['appsec.stackTrace.maxStackTraces'] = maybeInt(DD_APPSEC_MAX_STACK_TRACES)
829
857
  this._envUnprocessed['appsec.stackTrace.maxStackTraces'] = DD_APPSEC_MAX_STACK_TRACES
830
- this._setValue(env, 'appsec.wafTimeout', maybeInt(DD_APPSEC_WAF_TIMEOUT))
858
+ env['appsec.wafTimeout'] = maybeInt(DD_APPSEC_WAF_TIMEOUT)
831
859
  this._envUnprocessed['appsec.wafTimeout'] = DD_APPSEC_WAF_TIMEOUT
832
- this._setValue(env, 'baggageMaxBytes', DD_TRACE_BAGGAGE_MAX_BYTES)
833
- this._setValue(env, 'baggageMaxItems', DD_TRACE_BAGGAGE_MAX_ITEMS)
834
- this._setValue(env, 'baggageTagKeys', DD_TRACE_BAGGAGE_TAG_KEYS)
860
+ env.baggageMaxBytes = DD_TRACE_BAGGAGE_MAX_BYTES
861
+ env.baggageMaxItems = DD_TRACE_BAGGAGE_MAX_ITEMS
862
+ env.baggageTagKeys = DD_TRACE_BAGGAGE_TAG_KEYS
835
863
  this._setBoolean(env, 'clientIpEnabled', DD_TRACE_CLIENT_IP_ENABLED)
836
864
  this._setString(env, 'clientIpHeader', DD_TRACE_CLIENT_IP_HEADER?.toLowerCase())
837
865
  this._setBoolean(env, 'crashtracking.enabled', coalesce(
@@ -855,50 +883,44 @@ class Config {
855
883
  'dynamicInstrumentation.redactionExcludedIdentifiers',
856
884
  DD_DYNAMIC_INSTRUMENTATION_REDACTION_EXCLUDED_IDENTIFIERS
857
885
  )
858
- this._setValue(
859
- env,
860
- 'dynamicInstrumentation.uploadIntervalSeconds',
861
- maybeFloat(DD_DYNAMIC_INSTRUMENTATION_UPLOAD_INTERVAL_SECONDS)
862
- )
886
+ env['dynamicInstrumentation.uploadIntervalSeconds'] = maybeFloat(DD_DYNAMIC_INSTRUMENTATION_UPLOAD_INTERVAL_SECONDS)
863
887
  this._envUnprocessed['dynamicInstrumentation.uploadInterval'] = DD_DYNAMIC_INSTRUMENTATION_UPLOAD_INTERVAL_SECONDS
864
888
  this._setString(env, 'env', DD_ENV || tags.env)
865
889
  this._setBoolean(env, 'traceEnabled', DD_TRACE_ENABLED)
866
890
  this._setBoolean(env, 'experimental.enableGetRumData', DD_TRACE_EXPERIMENTAL_GET_RUM_DATA_ENABLED)
867
891
  this._setString(env, 'experimental.exporter', DD_TRACE_EXPERIMENTAL_EXPORTER)
868
- this._setBoolean(env, 'experimental.runtimeId', DD_TRACE_EXPERIMENTAL_RUNTIME_ID_ENABLED)
869
- if (AWS_LAMBDA_FUNCTION_NAME) this._setValue(env, 'flushInterval', 0)
870
- 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)
871
894
  this._envUnprocessed.flushMinSpans = DD_TRACE_PARTIAL_FLUSH_MIN_SPANS
872
895
  this._setBoolean(env, 'gitMetadataEnabled', DD_TRACE_GIT_METADATA_ENABLED)
873
896
  this._setIntegerRangeSet(env, 'grpc.client.error.statuses', DD_GRPC_CLIENT_ERROR_STATUSES)
874
897
  this._setIntegerRangeSet(env, 'grpc.server.error.statuses', DD_GRPC_SERVER_ERROR_STATUSES)
875
898
  this._setArray(env, 'headerTags', DD_TRACE_HEADER_TAGS)
876
899
  this._setString(env, 'hostname', DD_AGENT_HOST)
877
- this._setValue(env, 'iast.dbRowsToTaint', maybeInt(DD_IAST_DB_ROWS_TO_TAINT))
900
+ env['iast.dbRowsToTaint'] = maybeInt(DD_IAST_DB_ROWS_TO_TAINT)
878
901
  this._setBoolean(env, 'iast.deduplicationEnabled', DD_IAST_DEDUPLICATION_ENABLED)
879
902
  this._setBoolean(env, 'iast.enabled', DD_IAST_ENABLED)
880
- this._setValue(env, 'iast.maxConcurrentRequests', maybeInt(DD_IAST_MAX_CONCURRENT_REQUESTS))
903
+ env['iast.maxConcurrentRequests'] = maybeInt(DD_IAST_MAX_CONCURRENT_REQUESTS)
881
904
  this._envUnprocessed['iast.maxConcurrentRequests'] = DD_IAST_MAX_CONCURRENT_REQUESTS
882
- this._setValue(env, 'iast.maxContextOperations', maybeInt(DD_IAST_MAX_CONTEXT_OPERATIONS))
905
+ env['iast.maxContextOperations'] = maybeInt(DD_IAST_MAX_CONTEXT_OPERATIONS)
883
906
  this._envUnprocessed['iast.maxContextOperations'] = DD_IAST_MAX_CONTEXT_OPERATIONS
884
907
  this._setBoolean(env, 'iast.redactionEnabled', DD_IAST_REDACTION_ENABLED && !isFalse(DD_IAST_REDACTION_ENABLED))
885
908
  this._setString(env, 'iast.redactionNamePattern', DD_IAST_REDACTION_NAME_PATTERN)
886
909
  this._setString(env, 'iast.redactionValuePattern', DD_IAST_REDACTION_VALUE_PATTERN)
887
910
  const iastRequestSampling = maybeInt(DD_IAST_REQUEST_SAMPLING)
888
911
  if (iastRequestSampling > -1 && iastRequestSampling < 101) {
889
- this._setValue(env, 'iast.requestSampling', iastRequestSampling)
912
+ env['iast.requestSampling'] = iastRequestSampling
890
913
  }
891
914
  this._envUnprocessed['iast.requestSampling'] = DD_IAST_REQUEST_SAMPLING
892
915
  this._setString(env, 'iast.securityControlsConfiguration', DD_IAST_SECURITY_CONTROLS_CONFIGURATION)
893
916
  this._setString(env, 'iast.telemetryVerbosity', DD_IAST_TELEMETRY_VERBOSITY)
894
917
  this._setBoolean(env, 'iast.stackTrace.enabled', DD_IAST_STACK_TRACE_ENABLED)
895
918
  this._setArray(env, 'injectionEnabled', DD_INJECTION_ENABLED)
919
+ this._setBoolean(env, 'injectForce', DD_INJECT_FORCE)
896
920
  this._setBoolean(env, 'isAzureFunction', getIsAzureFunction())
897
921
  this._setBoolean(env, 'isGCPFunction', getIsGCPFunction())
898
- this._setValue(env, 'langchain.spanCharLimit', maybeInt(DD_LANGCHAIN_SPAN_CHAR_LIMIT))
899
- this._setValue(
900
- env, 'langchain.spanPromptCompletionSampleRate', maybeFloat(DD_LANGCHAIN_SPAN_PROMPT_COMPLETION_SAMPLE_RATE)
901
- )
922
+ env['langchain.spanCharLimit'] = maybeInt(DD_LANGCHAIN_SPAN_CHAR_LIMIT)
923
+ env['langchain.spanPromptCompletionSampleRate'] = maybeFloat(DD_LANGCHAIN_SPAN_PROMPT_COMPLETION_SAMPLE_RATE)
902
924
  this._setBoolean(env, 'legacyBaggageEnabled', DD_TRACE_LEGACY_BAGGAGE_ENABLED)
903
925
  this._setBoolean(env, 'llmobs.agentlessEnabled', DD_LLMOBS_AGENTLESS_ENABLED)
904
926
  this._setBoolean(env, 'llmobs.enabled', DD_LLMOBS_ENABLED)
@@ -908,12 +930,12 @@ class Config {
908
930
  this._setBoolean(env, 'memcachedCommandEnabled', DD_TRACE_MEMCACHED_COMMAND_ENABLED)
909
931
  this._setBoolean(env, 'middlewareTracingEnabled', DD_TRACE_MIDDLEWARE_TRACING_ENABLED)
910
932
  this._setBoolean(env, 'openAiLogsEnabled', DD_OPENAI_LOGS_ENABLED)
911
- this._setValue(env, 'openai.spanCharLimit', maybeInt(DD_OPENAI_SPAN_CHAR_LIMIT))
933
+ env['openai.spanCharLimit'] = maybeInt(DD_OPENAI_SPAN_CHAR_LIMIT)
912
934
  this._envUnprocessed.openaiSpanCharLimit = DD_OPENAI_SPAN_CHAR_LIMIT
913
935
  if (DD_TRACE_PEER_SERVICE_MAPPING) {
914
- this._setValue(env, 'peerServiceMapping', Object.fromEntries(
936
+ env.peerServiceMapping = Object.fromEntries(
915
937
  DD_TRACE_PEER_SERVICE_MAPPING.split(',').map(x => x.trim().split(':'))
916
- ))
938
+ )
917
939
  this._envUnprocessed.peerServiceMapping = DD_TRACE_PEER_SERVICE_MAPPING
918
940
  }
919
941
  this._setString(env, 'port', DD_TRACE_AGENT_PORT)
@@ -928,7 +950,7 @@ class Config {
928
950
  this._setBoolean(env, 'profiling.sourceMap', DD_PROFILING_SOURCE_MAP && !isFalse(DD_PROFILING_SOURCE_MAP))
929
951
  if (DD_INTERNAL_PROFILING_LONG_LIVED_THRESHOLD) {
930
952
  // This is only used in testing to not have to wait 30s
931
- this._setValue(env, 'profiling.longLivedThreshold', Number(DD_INTERNAL_PROFILING_LONG_LIVED_THRESHOLD))
953
+ env['profiling.longLivedThreshold'] = Number(DD_INTERNAL_PROFILING_LONG_LIVED_THRESHOLD)
932
954
  }
933
955
 
934
956
  this._setString(env, 'protocolVersion', DD_TRACE_AGENT_PROTOCOL_VERSION)
@@ -937,30 +959,33 @@ class Config {
937
959
  DD_REMOTE_CONFIGURATION_ENABLED,
938
960
  !this._isInServerlessEnvironment()
939
961
  ))
940
- this._setValue(env, 'remoteConfig.pollInterval', maybeFloat(DD_REMOTE_CONFIG_POLL_INTERVAL_SECONDS))
962
+ env['remoteConfig.pollInterval'] = maybeFloat(DD_REMOTE_CONFIG_POLL_INTERVAL_SECONDS)
941
963
  this._envUnprocessed['remoteConfig.pollInterval'] = DD_REMOTE_CONFIG_POLL_INTERVAL_SECONDS
942
964
  this._setBoolean(env, 'reportHostname', DD_TRACE_REPORT_HOSTNAME)
943
965
  // only used to explicitly set runtimeMetrics to false
944
966
  const otelSetRuntimeMetrics = String(OTEL_METRICS_EXPORTER).toLowerCase() === 'none'
945
967
  ? false
946
968
  : undefined
947
- this._setBoolean(env, 'runtimeMetrics', DD_RUNTIME_METRICS_ENABLED ||
969
+ this._setBoolean(env, 'runtimeMetrics.enabled', DD_RUNTIME_METRICS_ENABLED ||
948
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)
949
974
  this._setArray(env, 'sampler.spanSamplingRules', reformatSpanSamplingRules(coalesce(
950
- safeJsonParse(maybeFile(DD_SPAN_SAMPLING_RULES_FILE)),
975
+ maybeJsonFile(DD_SPAN_SAMPLING_RULES_FILE),
951
976
  safeJsonParse(DD_SPAN_SAMPLING_RULES)
952
977
  )))
953
978
  this._setUnit(env, 'sampleRate', DD_TRACE_SAMPLE_RATE ||
954
979
  getFromOtelSamplerMap(OTEL_TRACES_SAMPLER, OTEL_TRACES_SAMPLER_ARG))
955
- this._setValue(env, 'sampler.rateLimit', DD_TRACE_RATE_LIMIT)
980
+ env['sampler.rateLimit'] = DD_TRACE_RATE_LIMIT
956
981
  this._setSamplingRule(env, 'sampler.rules', safeJsonParse(DD_TRACE_SAMPLING_RULES))
957
982
  this._envUnprocessed['sampler.rules'] = DD_TRACE_SAMPLING_RULES
958
983
  this._setString(env, 'scope', DD_TRACE_SCOPE)
959
984
  this._setString(env, 'service', DD_SERVICE || tags.service || OTEL_SERVICE_NAME)
960
985
  if (DD_SERVICE_MAPPING) {
961
- this._setValue(env, 'serviceMapping', Object.fromEntries(
986
+ env.serviceMapping = Object.fromEntries(
962
987
  DD_SERVICE_MAPPING.split(',').map(x => x.trim().split(':'))
963
- ))
988
+ )
964
989
  }
965
990
  this._setString(env, 'site', DD_SITE)
966
991
  if (DD_TRACE_SPAN_ATTRIBUTE_SCHEMA) {
@@ -968,11 +993,11 @@ class Config {
968
993
  this._envUnprocessed.spanAttributeSchema = DD_TRACE_SPAN_ATTRIBUTE_SCHEMA
969
994
  }
970
995
  // 0: disabled, 1: logging, 2: garbage collection + logging
971
- this._setValue(env, 'spanLeakDebug', maybeInt(DD_TRACE_SPAN_LEAK_DEBUG))
996
+ env.spanLeakDebug = maybeInt(DD_TRACE_SPAN_LEAK_DEBUG)
972
997
  this._setBoolean(env, 'spanRemoveIntegrationFromService', DD_TRACE_REMOVE_INTEGRATION_SERVICE_NAMES_ENABLED)
973
998
  this._setBoolean(env, 'startupLogs', DD_TRACE_STARTUP_LOGS)
974
999
  this._setTags(env, 'tags', tags)
975
- this._setValue(env, 'tagsHeaderMaxLength', DD_TRACE_X_DATADOG_TAGS_MAX_LENGTH)
1000
+ env.tagsHeaderMaxLength = DD_TRACE_X_DATADOG_TAGS_MAX_LENGTH
976
1001
  this._setBoolean(env, 'telemetry.enabled', coalesce(
977
1002
  DD_INSTRUMENTATION_TELEMETRY_ENABLED,
978
1003
  !(this._isInServerlessEnvironment() || JEST_WORKER_ID)
@@ -980,7 +1005,7 @@ class Config {
980
1005
  this._setString(env, 'instrumentation_config_id', DD_INSTRUMENTATION_CONFIG_ID)
981
1006
  this._setBoolean(env, 'telemetry.debug', DD_TELEMETRY_DEBUG)
982
1007
  this._setBoolean(env, 'telemetry.dependencyCollection', DD_TELEMETRY_DEPENDENCY_COLLECTION_ENABLED)
983
- this._setValue(env, 'telemetry.heartbeatInterval', maybeInt(Math.floor(DD_TELEMETRY_HEARTBEAT_INTERVAL * 1000)))
1008
+ env['telemetry.heartbeatInterval'] = maybeInt(Math.floor(DD_TELEMETRY_HEARTBEAT_INTERVAL * 1000))
984
1009
  this._envUnprocessed['telemetry.heartbeatInterval'] = DD_TELEMETRY_HEARTBEAT_INTERVAL * 1000
985
1010
  this._setBoolean(env, 'telemetry.logCollection', DD_TELEMETRY_LOG_COLLECTION_ENABLED)
986
1011
  this._setBoolean(env, 'telemetry.metrics', DD_TELEMETRY_METRICS_ENABLED)
@@ -988,10 +1013,10 @@ class Config {
988
1013
  this._setBoolean(env, 'traceId128BitLoggingEnabled', DD_TRACE_128_BIT_TRACEID_LOGGING_ENABLED)
989
1014
  this._setBoolean(env, 'tracePropagationExtractFirst', DD_TRACE_PROPAGATION_EXTRACT_FIRST)
990
1015
  const stringPropagationBehaviorExtract = String(DD_TRACE_PROPAGATION_BEHAVIOR_EXTRACT)
991
- this._setValue(env, 'tracePropagationBehaviorExtract',
1016
+ env.tracePropagationBehaviorExtract =
992
1017
  VALID_PROPAGATION_BEHAVIOR_EXTRACT.has(stringPropagationBehaviorExtract)
993
1018
  ? stringPropagationBehaviorExtract
994
- : 'continue')
1019
+ : 'continue'
995
1020
  this._setBoolean(env, 'tracePropagationStyle.otelPropagators',
996
1021
  DD_TRACE_PROPAGATION_STYLE ||
997
1022
  DD_TRACE_PROPAGATION_STYLE_INJECT ||
@@ -1005,12 +1030,8 @@ class Config {
1005
1030
  this._setString(env, 'trace.dynamoDb.tablePrimaryKeys', DD_TRACE_DYNAMODB_TABLE_PRIMARY_KEYS)
1006
1031
  this._setArray(env, 'graphqlErrorExtensions', DD_TRACE_GRAPHQL_ERROR_EXTENSIONS)
1007
1032
  this._setBoolean(env, 'trace.nativeSpanEvents', DD_TRACE_NATIVE_SPAN_EVENTS)
1008
- this._setValue(
1009
- env,
1010
- 'vertexai.spanPromptCompletionSampleRate',
1011
- maybeFloat(DD_VERTEXAI_SPAN_PROMPT_COMPLETION_SAMPLE_RATE)
1012
- )
1013
- 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)
1014
1035
  }
1015
1036
 
1016
1037
  _applyOptions (options) {
@@ -1027,10 +1048,10 @@ class Config {
1027
1048
  options.experimental?.appsec?.standalone && !options.experimental.appsec.standalone.enabled
1028
1049
  ))
1029
1050
  this._setBoolean(opts, 'appsec.apiSecurity.enabled', options.appsec?.apiSecurity?.enabled)
1030
- this._setValue(opts, 'appsec.blockedTemplateGraphql', maybeFile(options.appsec?.blockedTemplateGraphql))
1031
- this._setValue(opts, 'appsec.blockedTemplateHtml', maybeFile(options.appsec?.blockedTemplateHtml))
1051
+ opts['appsec.blockedTemplateGraphql'] = maybeFile(options.appsec?.blockedTemplateGraphql)
1052
+ opts['appsec.blockedTemplateHtml'] = maybeFile(options.appsec?.blockedTemplateHtml)
1032
1053
  this._optsUnprocessed['appsec.blockedTemplateHtml'] = options.appsec?.blockedTemplateHtml
1033
- this._setValue(opts, 'appsec.blockedTemplateJson', maybeFile(options.appsec?.blockedTemplateJson))
1054
+ opts['appsec.blockedTemplateJson'] = maybeFile(options.appsec?.blockedTemplateJson)
1034
1055
  this._optsUnprocessed['appsec.blockedTemplateJson'] = options.appsec?.blockedTemplateJson
1035
1056
  this._setBoolean(opts, 'appsec.enabled', options.appsec?.enabled)
1036
1057
  this._setString(opts, 'appsec.eventTracking.mode', options.appsec?.eventTracking?.mode)
@@ -1044,29 +1065,26 @@ class Config {
1044
1065
  'appsec.extendedHeadersCollection.redaction',
1045
1066
  options.appsec?.extendedHeadersCollection?.redaction
1046
1067
  )
1047
- this._setValue(opts,
1048
- 'appsec.extendedHeadersCollection.maxHeaders',
1049
- options.appsec?.extendedHeadersCollection?.maxHeaders
1050
- )
1068
+ opts['appsec.extendedHeadersCollection.maxHeaders'] = options.appsec?.extendedHeadersCollection?.maxHeaders
1051
1069
  this._setString(opts, 'appsec.obfuscatorKeyRegex', options.appsec?.obfuscatorKeyRegex)
1052
1070
  this._setString(opts, 'appsec.obfuscatorValueRegex', options.appsec?.obfuscatorValueRegex)
1053
1071
  this._setBoolean(opts, 'appsec.rasp.enabled', options.appsec?.rasp?.enabled)
1054
1072
  this._setBoolean(opts, 'appsec.rasp.bodyCollection', options.appsec?.rasp?.bodyCollection)
1055
- this._setValue(opts, 'appsec.rateLimit', maybeInt(options.appsec?.rateLimit))
1073
+ opts['appsec.rateLimit'] = maybeInt(options.appsec?.rateLimit)
1056
1074
  this._optsUnprocessed['appsec.rateLimit'] = options.appsec?.rateLimit
1057
1075
  this._setString(opts, 'appsec.rules', options.appsec?.rules)
1058
1076
  this._setBoolean(opts, 'appsec.stackTrace.enabled', options.appsec?.stackTrace?.enabled)
1059
- this._setValue(opts, 'appsec.stackTrace.maxDepth', maybeInt(options.appsec?.stackTrace?.maxDepth))
1077
+ opts['appsec.stackTrace.maxDepth'] = maybeInt(options.appsec?.stackTrace?.maxDepth)
1060
1078
  this._optsUnprocessed['appsec.stackTrace.maxDepth'] = options.appsec?.stackTrace?.maxDepth
1061
- this._setValue(opts, 'appsec.stackTrace.maxStackTraces', maybeInt(options.appsec?.stackTrace?.maxStackTraces))
1079
+ opts['appsec.stackTrace.maxStackTraces'] = maybeInt(options.appsec?.stackTrace?.maxStackTraces)
1062
1080
  this._optsUnprocessed['appsec.stackTrace.maxStackTraces'] = options.appsec?.stackTrace?.maxStackTraces
1063
- this._setValue(opts, 'appsec.wafTimeout', maybeInt(options.appsec?.wafTimeout))
1081
+ opts['appsec.wafTimeout'] = maybeInt(options.appsec?.wafTimeout)
1064
1082
  this._optsUnprocessed['appsec.wafTimeout'] = options.appsec?.wafTimeout
1065
1083
  this._setBoolean(opts, 'clientIpEnabled', options.clientIpEnabled)
1066
1084
  this._setString(opts, 'clientIpHeader', options.clientIpHeader?.toLowerCase())
1067
- this._setValue(opts, 'baggageMaxBytes', options.baggageMaxBytes)
1068
- this._setValue(opts, 'baggageMaxItems', options.baggageMaxItems)
1069
- this._setValue(opts, 'baggageTagKeys', options.baggageTagKeys)
1085
+ opts.baggageMaxBytes = options.baggageMaxBytes
1086
+ opts.baggageMaxItems = options.baggageMaxItems
1087
+ opts.baggageTagKeys = options.baggageTagKeys
1070
1088
  this._setBoolean(opts, 'codeOriginForSpans.enabled', options.codeOriginForSpans?.enabled)
1071
1089
  this._setBoolean(
1072
1090
  opts,
@@ -1090,52 +1108,51 @@ class Config {
1090
1108
  'dynamicInstrumentation.redactionExcludedIdentifiers',
1091
1109
  options.dynamicInstrumentation?.redactionExcludedIdentifiers
1092
1110
  )
1093
- this._setValue(
1094
- opts,
1095
- 'dynamicInstrumentation.uploadIntervalSeconds',
1111
+ opts['dynamicInstrumentation.uploadIntervalSeconds'] =
1096
1112
  maybeFloat(options.dynamicInstrumentation?.uploadIntervalSeconds)
1097
- )
1098
1113
  this._optsUnprocessed['dynamicInstrumentation.uploadIntervalSeconds'] =
1099
1114
  options.dynamicInstrumentation?.uploadIntervalSeconds
1100
1115
  this._setString(opts, 'env', options.env || tags.env)
1101
1116
  this._setBoolean(opts, 'experimental.enableGetRumData', options.experimental?.enableGetRumData)
1102
1117
  this._setString(opts, 'experimental.exporter', options.experimental?.exporter)
1103
- this._setBoolean(opts, 'experimental.runtimeId', options.experimental?.runtimeId)
1104
- this._setValue(opts, 'flushInterval', maybeInt(options.flushInterval))
1118
+ this._setBoolean(opts, 'runtimeMetricsRuntimeId', options.runtimeMetricsRuntimeId)
1119
+ opts.flushInterval = maybeInt(options.flushInterval)
1105
1120
  this._optsUnprocessed.flushInterval = options.flushInterval
1106
- this._setValue(opts, 'flushMinSpans', maybeInt(options.flushMinSpans))
1121
+ opts.flushMinSpans = maybeInt(options.flushMinSpans)
1107
1122
  this._optsUnprocessed.flushMinSpans = options.flushMinSpans
1108
1123
  this._setArray(opts, 'headerTags', options.headerTags)
1109
1124
  this._setString(opts, 'hostname', options.hostname)
1110
- this._setValue(opts, 'iast.dbRowsToTaint', maybeInt(options.iast?.dbRowsToTaint))
1125
+ opts['iast.dbRowsToTaint'] = maybeInt(options.iast?.dbRowsToTaint)
1111
1126
  this._setBoolean(opts, 'iast.deduplicationEnabled', options.iast && options.iast.deduplicationEnabled)
1112
1127
  this._setBoolean(opts, 'iast.enabled',
1113
1128
  options.iast && (options.iast === true || options.iast.enabled === true))
1114
- this._setValue(opts, 'iast.maxConcurrentRequests',
1115
- maybeInt(options.iast?.maxConcurrentRequests))
1129
+ opts['iast.maxConcurrentRequests'] = maybeInt(options.iast?.maxConcurrentRequests)
1116
1130
  this._optsUnprocessed['iast.maxConcurrentRequests'] = options.iast?.maxConcurrentRequests
1117
- this._setValue(opts, 'iast.maxContextOperations', maybeInt(options.iast?.maxContextOperations))
1131
+ opts['iast.maxContextOperations'] = maybeInt(options.iast?.maxContextOperations)
1118
1132
  this._optsUnprocessed['iast.maxContextOperations'] = options.iast?.maxContextOperations
1119
1133
  this._setBoolean(opts, 'iast.redactionEnabled', options.iast?.redactionEnabled)
1120
1134
  this._setString(opts, 'iast.redactionNamePattern', options.iast?.redactionNamePattern)
1121
1135
  this._setString(opts, 'iast.redactionValuePattern', options.iast?.redactionValuePattern)
1122
1136
  const iastRequestSampling = maybeInt(options.iast?.requestSampling)
1123
1137
  if (iastRequestSampling > -1 && iastRequestSampling < 101) {
1124
- this._setValue(opts, 'iast.requestSampling', iastRequestSampling)
1138
+ opts['iast.requestSampling'] = iastRequestSampling
1125
1139
  this._optsUnprocessed['iast.requestSampling'] = options.iast?.requestSampling
1126
1140
  }
1127
- this._setValue(opts, 'iast.securityControlsConfiguration', options.iast?.securityControlsConfiguration)
1141
+ opts['iast.securityControlsConfiguration'] = options.iast?.securityControlsConfiguration
1128
1142
  this._setBoolean(opts, 'iast.stackTrace.enabled', options.iast?.stackTrace?.enabled)
1129
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
+ }
1130
1147
  this._setBoolean(opts, 'isCiVisibility', options.isCiVisibility)
1131
1148
  this._setBoolean(opts, 'legacyBaggageEnabled', options.legacyBaggageEnabled)
1132
1149
  this._setBoolean(opts, 'llmobs.agentlessEnabled', options.llmobs?.agentlessEnabled)
1133
1150
  this._setString(opts, 'llmobs.mlApp', options.llmobs?.mlApp)
1134
1151
  this._setBoolean(opts, 'logInjection', options.logInjection)
1135
- this._setValue(opts, 'lookup', options.lookup)
1152
+ opts.lookup = options.lookup
1136
1153
  this._setBoolean(opts, 'middlewareTracingEnabled', options.middlewareTracingEnabled)
1137
1154
  this._setBoolean(opts, 'openAiLogsEnabled', options.openAiLogsEnabled)
1138
- this._setValue(opts, 'peerServiceMapping', options.peerServiceMapping)
1155
+ opts.peerServiceMapping = options.peerServiceMapping
1139
1156
  this._setBoolean(opts, 'plugins', options.plugins)
1140
1157
  this._setString(opts, 'port', options.port)
1141
1158
  const strProfiling = String(options.profiling)
@@ -1144,18 +1161,21 @@ class Config {
1144
1161
  }
1145
1162
  this._setString(opts, 'protocolVersion', options.protocolVersion)
1146
1163
  if (options.remoteConfig) {
1147
- this._setValue(opts, 'remoteConfig.pollInterval', maybeFloat(options.remoteConfig.pollInterval))
1164
+ opts['remoteConfig.pollInterval'] = maybeFloat(options.remoteConfig.pollInterval)
1148
1165
  this._optsUnprocessed['remoteConfig.pollInterval'] = options.remoteConfig.pollInterval
1149
1166
  }
1150
1167
  this._setBoolean(opts, 'reportHostname', options.reportHostname)
1151
- 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)
1152
1172
  this._setArray(opts, 'sampler.spanSamplingRules', reformatSpanSamplingRules(options.spanSamplingRules))
1153
1173
  this._setUnit(opts, 'sampleRate', coalesce(options.sampleRate, options.ingestion.sampleRate))
1154
1174
  const ingestion = options.ingestion || {}
1155
- this._setValue(opts, 'sampler.rateLimit', coalesce(options.rateLimit, ingestion.rateLimit))
1175
+ opts['sampler.rateLimit'] = coalesce(options.rateLimit, ingestion.rateLimit)
1156
1176
  this._setSamplingRule(opts, 'sampler.rules', options.samplingRules)
1157
1177
  this._setString(opts, 'service', options.service || tags.service)
1158
- this._setValue(opts, 'serviceMapping', options.serviceMapping)
1178
+ opts.serviceMapping = options.serviceMapping
1159
1179
  this._setString(opts, 'site', options.site)
1160
1180
  if (options.spanAttributeSchema) {
1161
1181
  this._setString(opts, 'spanAttributeSchema', validateNamingVersion(options.spanAttributeSchema))
@@ -1286,17 +1306,15 @@ class Config {
1286
1306
  DD_CIVISIBILITY_IMPACTED_TESTS_DETECTION_ENABLED
1287
1307
  } = getEnvironmentVariables()
1288
1308
 
1289
- if (DD_CIVISIBILITY_AGENTLESS_URL) {
1290
- this._setValue(calc, 'url', new URL(DD_CIVISIBILITY_AGENTLESS_URL))
1291
- } else {
1292
- this._setValue(calc, 'url', getAgentUrl(this._getTraceAgentUrl(), this._optionsArg))
1293
- }
1309
+ calc.url = DD_CIVISIBILITY_AGENTLESS_URL
1310
+ ? new URL(DD_CIVISIBILITY_AGENTLESS_URL)
1311
+ : getAgentUrl(this._getTraceAgentUrl(), this._optionsArg)
1294
1312
  if (this._isCiVisibility()) {
1295
1313
  this._setBoolean(calc, 'isEarlyFlakeDetectionEnabled',
1296
1314
  coalesce(DD_CIVISIBILITY_EARLY_FLAKE_DETECTION_ENABLED, true))
1297
1315
  this._setBoolean(calc, 'isFlakyTestRetriesEnabled',
1298
1316
  coalesce(DD_CIVISIBILITY_FLAKY_RETRY_ENABLED, true))
1299
- this._setValue(calc, 'flakyTestRetriesCount', coalesce(maybeInt(DD_CIVISIBILITY_FLAKY_RETRY_COUNT), 5))
1317
+ calc.flakyTestRetriesCount = coalesce(maybeInt(DD_CIVISIBILITY_FLAKY_RETRY_COUNT), 5)
1300
1318
  this._setBoolean(calc, 'isIntelligentTestRunnerEnabled', isTrue(this._isCiVisibilityItrEnabled()))
1301
1319
  this._setBoolean(calc, 'isManualApiEnabled', !isFalse(this._isCiVisibilityManualApiEnabled()))
1302
1320
  this._setString(calc, 'ciVisibilityTestSessionName', DD_TEST_SESSION_NAME)
@@ -1304,26 +1322,23 @@ class Config {
1304
1322
  this._setBoolean(calc, 'isTestDynamicInstrumentationEnabled', !isFalse(DD_TEST_FAILED_TEST_REPLAY_ENABLED))
1305
1323
  this._setBoolean(calc, 'isServiceUserProvided', !!this._env.service)
1306
1324
  this._setBoolean(calc, 'isTestManagementEnabled', !isFalse(DD_TEST_MANAGEMENT_ENABLED))
1307
- this._setValue(calc,
1308
- 'testManagementAttemptToFixRetries',
1309
- coalesce(maybeInt(DD_TEST_MANAGEMENT_ATTEMPT_TO_FIX_RETRIES), 20)
1310
- )
1325
+ calc.testManagementAttemptToFixRetries = coalesce(maybeInt(DD_TEST_MANAGEMENT_ATTEMPT_TO_FIX_RETRIES), 20)
1311
1326
  this._setBoolean(calc, 'isImpactedTestsEnabled', !isFalse(DD_CIVISIBILITY_IMPACTED_TESTS_DETECTION_ENABLED))
1312
1327
  }
1313
- this._setString(calc, 'dogstatsd.hostname', this._getHostname())
1328
+ calc['dogstatsd.hostname'] = this._getHostname()
1314
1329
  this._setBoolean(calc, 'isGitUploadEnabled',
1315
1330
  calc.isIntelligentTestRunnerEnabled && !isFalse(this._isCiVisibilityGitUploadEnabled()))
1316
1331
  this._setBoolean(calc, 'spanComputePeerService', this._getSpanComputePeerService())
1317
1332
  this._setBoolean(calc, 'stats.enabled', this._isTraceStatsComputationEnabled())
1318
1333
  const defaultPropagationStyle = this._getDefaultPropagationStyle(this._optionsArg)
1319
- this._setValue(calc, 'tracePropagationStyle.inject', propagationStyle(
1334
+ calc['tracePropagationStyle.inject'] = propagationStyle(
1320
1335
  'inject',
1321
1336
  this._optionsArg.tracePropagationStyle
1322
- ))
1323
- this._setValue(calc, 'tracePropagationStyle.extract', propagationStyle(
1337
+ )
1338
+ calc['tracePropagationStyle.extract'] = propagationStyle(
1324
1339
  'extract',
1325
1340
  this._optionsArg.tracePropagationStyle
1326
- ))
1341
+ )
1327
1342
  if (defaultPropagationStyle.length > 2) {
1328
1343
  calc['tracePropagationStyle.inject'] = calc['tracePropagationStyle.inject'] || defaultPropagationStyle
1329
1344
  calc['tracePropagationStyle.extract'] = calc['tracePropagationStyle.extract'] || defaultPropagationStyle
@@ -1345,7 +1360,7 @@ class Config {
1345
1360
 
1346
1361
  this._setUnit(opts, 'sampleRate', options.tracing_sampling_rate)
1347
1362
  this._setBoolean(opts, 'logInjection', options.log_injection_enabled)
1348
- this._setArray(opts, 'headerTags', headerTags)
1363
+ opts.headerTags = headerTags
1349
1364
  this._setTags(opts, 'tags', tags)
1350
1365
  this._setBoolean(opts, 'tracing', options.tracing_enabled)
1351
1366
  this._remoteUnprocessed['sampler.rules'] = options.tracing_sampling_rules
@@ -1367,30 +1382,32 @@ class Config {
1367
1382
 
1368
1383
  _setBoolean (obj, name, value) {
1369
1384
  if (value === undefined || value === null) {
1370
- this._setValue(obj, name, value)
1385
+ obj[name] = value
1371
1386
  } else if (isTrue(value)) {
1372
- this._setValue(obj, name, true)
1387
+ obj[name] = true
1373
1388
  } else if (isFalse(value)) {
1374
- this._setValue(obj, name, false)
1389
+ obj[name] = false
1375
1390
  }
1376
1391
  }
1377
1392
 
1378
1393
  _setUnit (obj, name, value) {
1379
1394
  if (value === null || value === undefined) {
1380
- return this._setValue(obj, name, value)
1395
+ obj[name] = value
1396
+ return
1381
1397
  }
1382
1398
 
1383
1399
  value = Number.parseFloat(value)
1384
1400
 
1385
1401
  if (!Number.isNaN(value)) {
1386
1402
  // TODO: Ignore out of range values instead of normalizing them.
1387
- this._setValue(obj, name, Math.min(Math.max(value, 0), 1))
1403
+ obj[name] = Math.min(Math.max(value, 0), 1)
1388
1404
  }
1389
1405
  }
1390
1406
 
1391
1407
  _setArray (obj, name, value) {
1392
1408
  if (value == null) {
1393
- return this._setValue(obj, name, null)
1409
+ obj[name] = null
1410
+ return
1394
1411
  }
1395
1412
 
1396
1413
  if (typeof value === 'string') {
@@ -1402,13 +1419,14 @@ class Config {
1402
1419
  }
1403
1420
 
1404
1421
  if (Array.isArray(value)) {
1405
- this._setValue(obj, name, value)
1422
+ obj[name] = value
1406
1423
  }
1407
1424
  }
1408
1425
 
1409
1426
  _setIntegerRangeSet (obj, name, value) {
1410
1427
  if (value == null) {
1411
- return this._setValue(obj, name, null)
1428
+ obj[name] = null
1429
+ return
1412
1430
  }
1413
1431
  value = value.split(',')
1414
1432
  const result = []
@@ -1423,12 +1441,13 @@ class Config {
1423
1441
  result.push(Number(val))
1424
1442
  }
1425
1443
  })
1426
- this._setValue(obj, name, result)
1444
+ obj[name] = result
1427
1445
  }
1428
1446
 
1429
1447
  _setSamplingRule (obj, name, value) {
1430
1448
  if (value == null) {
1431
- return this._setValue(obj, name, null)
1449
+ obj[name] = null
1450
+ return
1432
1451
  }
1433
1452
 
1434
1453
  if (typeof value === 'string') {
@@ -1441,7 +1460,7 @@ class Config {
1441
1460
  sample_rate: 'sampleRate'
1442
1461
  })
1443
1462
  })
1444
- this._setValue(obj, name, value)
1463
+ obj[name] = value
1445
1464
  }
1446
1465
  }
1447
1466
 
@@ -1451,13 +1470,10 @@ class Config {
1451
1470
 
1452
1471
  _setTags (obj, name, value) {
1453
1472
  if (!value || Object.keys(value).length === 0) {
1454
- return this._setValue(obj, name, null)
1473
+ obj[name] = null
1474
+ return
1455
1475
  }
1456
1476
 
1457
- this._setValue(obj, name, value)
1458
- }
1459
-
1460
- _setValue (obj, name, value) {
1461
1477
  obj[name] = value
1462
1478
  }
1463
1479