Skip to content

Conversation

@mtoffl01
Copy link
Contributor

@mtoffl01 mtoffl01 commented Nov 24, 2025

Reviewer tips

The majority of code changes are just replacing getEnvironmentVariable with getResolvedEnv. Feel free to gloss over those changes once you get the idea from a few, and instead focus on:

  • packages/dd-trace/src/config-env-sources.js
  • packages/dd-trace/src/config-helper.js
  • packages/dd-trace-/src/config.js

Background

Currently, stable config files and environment variables are only processed when the Config class is instantiated, which happens in tracer.init(). This limits us from earlier access: code that runs before tracer.init() can't access stable config values.
This PR allows us to access stable config values before tracer.init(), when we peek at DD_TRACE env vars.

What does this PR do?

Introduces ConfigEnvSources - a new class that is responsible for getting stable config input (local & managed file paths, as well as any warnings). The Config class no longer resolves stable config input itself; instead, it relies on the values cached by ConfigEnvSources.
ConfigEnvSources also introduces a getResolvedEnv API that resolves configuration from local stable config, environment variables, and fleet stable config in ascending priority order, before the Config singleton is initialized. This method can be used instead of getEnvironmentVariable when we want to see whether particular DD_TRACE configs have been set.

Key additions:

  • New ConfigEnvSources class: Stores local stable config and fleet stable config input
  • getResolvedEnv(): Queries for the value at specified config in fleet stable config, env var, and local stable config input, in that order
  • Comprehensive test suite for the new functionality
  • new getValueFromEnvSource helper on config-helpers.js

Motivation

All environment variables must be set-able via stable config files: RFC

Note

Not all calls to getEnvironmentVariable were replaced by getResolvedEnv. In some cases, we are really looking for an environment variable that is a heuristic for a particular type of environment. Stable config is not relevant in these cases.

Plugin Checklist

Additional Notes

@github-actions
Copy link

github-actions bot commented Nov 24, 2025

Overall package size

Self size: 13.62 MB
Deduped: 113.82 MB
No deduping: 128.83 MB

Dependency sizes | name | version | self size | total size | |------|---------|-----------|------------| | @datadog/libdatadog | 0.7.0 | 35.02 MB | 35.02 MB | | @datadog/native-appsec | 10.3.0 | 20.73 MB | 20.74 MB | | @datadog/pprof | 5.12.0 | 11.19 MB | 11.57 MB | | @datadog/native-iast-taint-tracking | 4.1.0 | 9.01 MB | 9.02 MB | | @opentelemetry/resources | 1.30.1 | 557.67 kB | 7.71 MB | | @opentelemetry/core | 1.30.1 | 908.66 kB | 7.16 MB | | protobufjs | 7.5.4 | 2.95 MB | 5.83 MB | | @datadog/wasm-js-rewriter | 5.0.1 | 2.82 MB | 3.53 MB | | @datadog/native-metrics | 3.1.1 | 1.02 MB | 1.43 MB | | @opentelemetry/api-logs | 0.208.0 | 199.48 kB | 1.42 MB | | @opentelemetry/api | 1.9.0 | 1.22 MB | 1.22 MB | | jsonpath-plus | 10.3.0 | 617.18 kB | 1.08 MB | | import-in-the-middle | 1.15.0 | 127.66 kB | 856.24 kB | | lru-cache | 10.4.3 | 804.3 kB | 804.3 kB | | @datadog/openfeature-node-server | 0.2.0 | 118.51 kB | 437.19 kB | | opentracing | 0.14.7 | 194.81 kB | 194.81 kB | | source-map | 0.7.6 | 185.63 kB | 185.63 kB | | pprof-format | 2.2.1 | 163.06 kB | 163.06 kB | | @datadog/sketches-js | 2.1.1 | 109.9 kB | 109.9 kB | | @isaacs/ttlcache | 2.1.3 | 90.79 kB | 90.79 kB | | lodash.sortby | 4.7.0 | 75.76 kB | 75.76 kB | | ignore | 7.0.5 | 63.38 kB | 63.38 kB | | istanbul-lib-coverage | 3.2.2 | 34.37 kB | 34.37 kB | | rfdc | 1.4.1 | 27.15 kB | 27.15 kB | | dc-polyfill | 0.1.10 | 26.73 kB | 26.73 kB | | tlhunter-sorted-set | 0.1.0 | 24.94 kB | 24.94 kB | | shell-quote | 1.8.3 | 23.74 kB | 23.74 kB | | limiter | 1.1.5 | 23.17 kB | 23.17 kB | | retry | 0.13.1 | 18.85 kB | 18.85 kB | | semifies | 1.0.0 | 15.84 kB | 15.84 kB | | jest-docblock | 29.7.0 | 8.99 kB | 12.76 kB | | crypto-randomuuid | 1.0.0 | 11.18 kB | 11.18 kB | | ttl-set | 1.0.0 | 4.61 kB | 9.69 kB | | mutexify | 1.4.0 | 5.71 kB | 8.74 kB | | path-to-regexp | 0.1.12 | 6.6 kB | 6.6 kB | | module-details-from-path | 1.0.4 | 3.96 kB | 3.96 kB | | escape-string-regexp | 5.0.0 | 3.66 kB | 3.66 kB |

🤖 This report was automatically generated by heaviest-objects-in-the-universe

@datadog-official

This comment has been minimized.

@codecov
Copy link

codecov bot commented Nov 24, 2025

Codecov Report

❌ Patch coverage is 93.75000% with 6 lines in your changes missing coverage. Please review.
✅ Project coverage is 84.86%. Comparing base (4b4c83e) to head (51d2443).
⚠️ Report is 12 commits behind head on master.

Files with missing lines Patch % Lines
...ility/test-management/get-test-management-tests.js 50.00% 1 Missing ⚠️
packages/dd-trace/src/config-env-sources.js 97.05% 1 Missing ⚠️
packages/dd-trace/src/config-helper.js 87.50% 1 Missing ⚠️
packages/dd-trace/src/llmobs/sdk.js 50.00% 1 Missing ⚠️
packages/dd-trace/src/proxy.js 50.00% 1 Missing ⚠️
packages/dd-trace/src/telemetry/send-data.js 66.66% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##           master    #6982      +/-   ##
==========================================
- Coverage   84.96%   84.86%   -0.11%     
==========================================
  Files         514      518       +4     
  Lines       21789    22094     +305     
==========================================
+ Hits        18513    18749     +236     
- Misses       3276     3345      +69     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@mtoffl01 mtoffl01 added AI Generated Largely based on code generated by an AI or LLM. This label is the same across all dd-trace-* repos core labels Nov 24, 2025
@pr-commenter
Copy link

pr-commenter bot commented Nov 24, 2025

Benchmarks

Benchmark execution time: 2025-12-05 21:44:19

Comparing candidate commit 51d2443 in PR branch mtoff/dcfg-getEnv-migration with baseline commit 4b4c83e in branch master.

Found 0 performance improvements and 0 performance regressions! Performance is the same for 292 metrics, 28 unstable metrics.

@mtoffl01 mtoffl01 changed the title Look in StableConfig & Env sources for config pre-init Create class ConfigEnvSources to merge stable config and environment variables Nov 24, 2025
@mtoffl01 mtoffl01 changed the title Create class ConfigEnvSources to merge stable config and environment variables Add class ConfigEnvSources to merge stable config and environment variables Nov 24, 2025
@mtoffl01 mtoffl01 force-pushed the mtoff/dcfg-getEnv-migration branch from eacb99d to a532c6a Compare December 4, 2025 17:12
return
}

// cache the file reads
Copy link
Contributor Author

@mtoffl01 mtoffl01 Dec 4, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tried this here: https://github.com/DataDog/dd-trace-js/pull/7035/files
TLDR not sure it's worth it

Comment on lines 26 to 28
if (getEnvironmentVariable('DD_PLAYWRIGHT_WORKER')) {
return PLAYWRIGHT_WORKER_TRACE_PAYLOAD_CODE
}
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure what this env var does

@mtoffl01 mtoffl01 marked this pull request as ready for review December 4, 2025 21:14
@mtoffl01 mtoffl01 requested review from a team as code owners December 4, 2025 21:14
@mtoffl01 mtoffl01 requested review from BridgeAR and removed request for a team December 4, 2025 21:14
* @returns {string|undefined}
* @throws {Error} if the configuration is not supported
*/
getValueFromEnvSource (name, source) {
Copy link
Contributor Author

@mtoffl01 mtoffl01 Dec 5, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For reviewers: I created this helper function in here, even though it is only used by ConfigEnvSources, because:

  • this class already has access to supportedConfigurations and aliases
  • process.env can only be accessed from inside config-helpers.js (and I agree with that!)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

AI Generated Largely based on code generated by an AI or LLM. This label is the same across all dd-trace-* repos core

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants