dd-trace 5.54.0 → 5.55.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/ci/cypress/plugin.js +8 -0
- package/ci/cypress/polyfills.js +23 -0
- package/ci/init.js +8 -7
- package/initialize.mjs +2 -2
- package/package.json +6 -6
- package/packages/datadog-code-origin/index.js +22 -4
- package/packages/datadog-core/src/utils/src/kebabcase.js +3 -3
- package/packages/datadog-instrumentations/src/cassandra-driver.js +5 -6
- package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +2 -3
- package/packages/datadog-instrumentations/src/cookie-parser.js +1 -1
- package/packages/datadog-instrumentations/src/couchbase.js +3 -6
- package/packages/datadog-instrumentations/src/cucumber.js +21 -28
- package/packages/datadog-instrumentations/src/dns.js +4 -4
- package/packages/datadog-instrumentations/src/elasticsearch.js +9 -10
- package/packages/datadog-instrumentations/src/fastify.js +7 -9
- package/packages/datadog-instrumentations/src/google-cloud-pubsub.js +14 -16
- package/packages/datadog-instrumentations/src/hapi.js +10 -11
- package/packages/datadog-instrumentations/src/helpers/fetch.js +4 -5
- package/packages/datadog-instrumentations/src/helpers/hook.js +1 -2
- package/packages/datadog-instrumentations/src/helpers/register.js +6 -5
- package/packages/datadog-instrumentations/src/jest.js +67 -98
- package/packages/datadog-instrumentations/src/koa.js +2 -3
- package/packages/datadog-instrumentations/src/mariadb.js +11 -4
- package/packages/datadog-instrumentations/src/mocha/main.js +79 -75
- package/packages/datadog-instrumentations/src/mocha.js +3 -1
- package/packages/datadog-instrumentations/src/mysql.js +11 -2
- package/packages/datadog-instrumentations/src/nyc.js +2 -1
- package/packages/datadog-instrumentations/src/openai.js +2 -2
- package/packages/datadog-instrumentations/src/otel-sdk-trace.js +4 -3
- package/packages/datadog-instrumentations/src/pg.js +2 -3
- package/packages/datadog-instrumentations/src/playwright.js +19 -22
- package/packages/datadog-instrumentations/src/protobufjs.js +3 -4
- package/packages/datadog-instrumentations/src/redis.js +1 -1
- package/packages/datadog-instrumentations/src/restify.js +9 -13
- package/packages/datadog-instrumentations/src/router.js +12 -11
- package/packages/datadog-instrumentations/src/tedious.js +1 -2
- package/packages/datadog-instrumentations/src/vitest.js +15 -29
- package/packages/datadog-plugin-avsc/src/schema_iterator.js +12 -12
- package/packages/datadog-plugin-aws-sdk/src/base.js +12 -8
- package/packages/datadog-plugin-aws-sdk/src/services/cloudwatchlogs.js +3 -5
- package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +12 -20
- package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +4 -5
- package/packages/datadog-plugin-aws-sdk/src/services/lambda.js +3 -5
- package/packages/datadog-plugin-aws-sdk/src/services/redshift.js +3 -5
- package/packages/datadog-plugin-aws-sdk/src/services/s3.js +3 -5
- package/packages/datadog-plugin-aws-sdk/src/services/sns.js +1 -2
- package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +7 -10
- package/packages/datadog-plugin-cucumber/src/index.js +3 -2
- package/packages/datadog-plugin-cypress/src/cypress-plugin.js +2 -1
- package/packages/datadog-plugin-dd-trace-api/src/index.js +2 -1
- package/packages/datadog-plugin-elasticsearch/src/index.js +1 -1
- package/packages/datadog-plugin-google-cloud-vertexai/src/tracing.js +1 -1
- package/packages/datadog-plugin-graphql/src/index.js +3 -2
- package/packages/datadog-plugin-graphql/src/resolve.js +17 -10
- package/packages/datadog-plugin-http/src/client.js +5 -6
- package/packages/datadog-plugin-http2/src/client.js +7 -8
- package/packages/datadog-plugin-jest/src/index.js +3 -2
- package/packages/datadog-plugin-mocha/src/index.js +6 -1
- package/packages/datadog-plugin-mongodb-core/src/index.js +2 -1
- package/packages/datadog-plugin-mysql/src/index.js +11 -0
- package/packages/datadog-plugin-next/src/index.js +1 -1
- package/packages/datadog-plugin-openai/src/tracing.js +2 -4
- package/packages/datadog-plugin-playwright/src/index.js +3 -2
- package/packages/datadog-plugin-protobufjs/src/schema_iterator.js +8 -9
- package/packages/datadog-plugin-redis/src/index.js +1 -3
- package/packages/datadog-plugin-vitest/src/index.js +5 -4
- package/packages/dd-trace/src/appsec/iast/analyzers/analyzers.js +0 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-password-rules.js +0 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secret-rules.js +0 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secrets-rules.js +0 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/missing-header-analyzer.js +1 -2
- package/packages/dd-trace/src/appsec/iast/security-controls/index.js +11 -12
- package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +1 -1
- package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +2 -1
- package/packages/dd-trace/src/appsec/iast/telemetry/span-tags.js +1 -1
- package/packages/dd-trace/src/appsec/iast/telemetry/verbosity.js +1 -2
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/range-utils.js +10 -11
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-handler.js +0 -4
- package/packages/dd-trace/src/appsec/iast/vulnerabilities.js +0 -1
- package/packages/dd-trace/src/appsec/index.js +4 -4
- package/packages/dd-trace/src/appsec/reporter.js +5 -7
- package/packages/dd-trace/src/appsec/sdk/set_user.js +2 -2
- package/packages/dd-trace/src/appsec/sdk/track_event.js +3 -3
- package/packages/dd-trace/src/appsec/telemetry/index.js +31 -1
- package/packages/dd-trace/src/appsec/waf/waf_context_wrapper.js +6 -2
- package/packages/dd-trace/src/azure_metadata.js +8 -3
- package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/index.js +8 -7
- package/packages/dd-trace/src/ci-visibility/early-flake-detection/get-known-tests.js +2 -1
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/coverage-writer.js +2 -1
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +2 -1
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +2 -1
- package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +4 -3
- package/packages/dd-trace/src/ci-visibility/exporters/test-worker/index.js +7 -6
- package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +2 -1
- package/packages/dd-trace/src/ci-visibility/log-submission/log-submission-plugin.js +4 -3
- package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +4 -3
- package/packages/dd-trace/src/ci-visibility/test-management/get-test-management-tests.js +2 -1
- package/packages/dd-trace/src/config-helper.js +89 -0
- package/packages/dd-trace/src/config.js +77 -78
- package/packages/dd-trace/src/config_stable.js +7 -4
- package/packages/dd-trace/src/datastreams/fnv.js +1 -1
- package/packages/dd-trace/src/datastreams/schemas/schema_builder.js +6 -6
- package/packages/dd-trace/src/debugger/devtools_client/breakpoints.js +1 -2
- package/packages/dd-trace/src/debugger/devtools_client/condition.js +1 -2
- package/packages/dd-trace/src/debugger/devtools_client/index.js +2 -1
- package/packages/dd-trace/src/debugger/devtools_client/send.js +3 -2
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/collector.js +1 -2
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/processor.js +3 -4
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/redaction.js +1 -1
- package/packages/dd-trace/src/debugger/index.js +1 -0
- package/packages/dd-trace/src/dogstatsd.js +2 -2
- package/packages/dd-trace/src/encode/0.4.js +5 -2
- package/packages/dd-trace/src/encode/0.5.js +3 -5
- package/packages/dd-trace/src/encode/agentless-ci-visibility.js +5 -5
- package/packages/dd-trace/src/exporter.js +2 -1
- package/packages/dd-trace/src/exporters/common/docker.js +3 -2
- package/packages/dd-trace/src/exporters/common/request.js +4 -1
- package/packages/dd-trace/src/exporters/common/util.js +3 -1
- package/packages/dd-trace/src/id.js +3 -3
- package/packages/dd-trace/src/index.js +4 -3
- package/packages/dd-trace/src/lambda/handler.js +2 -1
- package/packages/dd-trace/src/lambda/index.js +2 -1
- package/packages/dd-trace/src/lambda/runtime/patch.js +3 -2
- package/packages/dd-trace/src/lambda/runtime/ritm.js +3 -2
- package/packages/dd-trace/src/llmobs/constants/tags.js +1 -0
- package/packages/dd-trace/src/llmobs/index.js +21 -5
- package/packages/dd-trace/src/llmobs/noop.js +18 -20
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/index.js +11 -13
- package/packages/dd-trace/src/llmobs/plugins/openai.js +1 -2
- package/packages/dd-trace/src/llmobs/sdk.js +2 -1
- package/packages/dd-trace/src/llmobs/span_processor.js +1 -1
- package/packages/dd-trace/src/llmobs/tagger.js +19 -6
- package/packages/dd-trace/src/llmobs/writers/base.js +1 -1
- package/packages/dd-trace/src/log/index.js +5 -4
- package/packages/dd-trace/src/log/writer.js +1 -2
- package/packages/dd-trace/src/msgpack/encoder.js +3 -3
- package/packages/dd-trace/src/noop/span.js +1 -1
- package/packages/dd-trace/src/opentelemetry/tracer.js +1 -1
- package/packages/dd-trace/src/opentracing/propagation/log.js +4 -5
- package/packages/dd-trace/src/opentracing/propagation/text_map.js +17 -18
- package/packages/dd-trace/src/opentracing/span.js +7 -6
- package/packages/dd-trace/src/payload-tagging/config/index.js +17 -21
- package/packages/dd-trace/src/plugin_manager.js +4 -3
- package/packages/dd-trace/src/plugins/ci_plugin.js +25 -1
- package/packages/dd-trace/src/plugins/plugin.js +1 -1
- package/packages/dd-trace/src/plugins/util/ci.js +7 -7
- package/packages/dd-trace/src/plugins/util/git.js +1 -1
- package/packages/dd-trace/src/plugins/util/llm.js +2 -2
- package/packages/dd-trace/src/plugins/util/stacktrace.js +8 -1
- package/packages/dd-trace/src/plugins/util/test.js +4 -3
- package/packages/dd-trace/src/plugins/util/user-provided-git.js +2 -1
- package/packages/dd-trace/src/plugins/util/web.js +3 -4
- package/packages/dd-trace/src/priority_sampler.js +46 -35
- package/packages/dd-trace/src/profiling/config.js +12 -32
- package/packages/dd-trace/src/profiling/exporter_cli.js +20 -20
- package/packages/dd-trace/src/profiling/exporters/agent.js +1 -1
- package/packages/dd-trace/src/profiling/exporters/event_serializer.js +2 -1
- package/packages/dd-trace/src/profiling/index.js +2 -1
- package/packages/dd-trace/src/profiling/profiler.js +7 -4
- package/packages/dd-trace/src/profiling/ssi-telemetry-mock-profiler.js +3 -1
- package/packages/dd-trace/src/profiling/tagger.js +22 -12
- package/packages/dd-trace/src/proxy.js +2 -1
- package/packages/dd-trace/src/ritm.js +4 -4
- package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +3 -2
- package/packages/dd-trace/src/sampler.js +10 -2
- package/packages/dd-trace/src/serverless.js +11 -4
- package/packages/dd-trace/src/span_processor.js +2 -1
- package/packages/dd-trace/src/standalone/tracesource.js +1 -2
- package/packages/dd-trace/src/standalone/tracesource_priority_sampler.js +1 -2
- package/packages/dd-trace/src/startup-log.js +5 -17
- package/packages/dd-trace/src/supported-configurations.json +439 -0
- package/packages/dd-trace/src/telemetry/dependencies.js +62 -57
- package/packages/dd-trace/src/telemetry/send-data.js +7 -6
- package/packages/dd-trace/src/telemetry/telemetry.js +12 -25
- package/packages/dd-trace/src/tracer.js +3 -7
- package/packages/dd-trace/src/util.js +0 -5
- package/packages/dd-trace/src/appsec/iast/analyzers/header-injection-analyzer.js +0 -120
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/header-sensitive-analyzer.js +0 -20
|
@@ -19,6 +19,7 @@ const telemetryMetrics = require('./telemetry/metrics')
|
|
|
19
19
|
const { isInServerlessEnvironment, getIsGCPFunction, getIsAzureFunction } = require('./serverless')
|
|
20
20
|
const { ORIGIN_KEY, GRPC_CLIENT_ERROR_STATUSES, GRPC_SERVER_ERROR_STATUSES } = require('./constants')
|
|
21
21
|
const { appendRules } = require('./payload-tagging/config')
|
|
22
|
+
const { getEnvironmentVariable, getEnvironmentVariables } = require('./config-helper')
|
|
22
23
|
|
|
23
24
|
const tracerMetrics = telemetryMetrics.manager.namespace('tracers')
|
|
24
25
|
|
|
@@ -80,10 +81,10 @@ function getFromOtelSamplerMap (otelTracesSampler, otelTracesSamplerArg) {
|
|
|
80
81
|
}
|
|
81
82
|
|
|
82
83
|
function validateOtelPropagators (propagators) {
|
|
83
|
-
if (!
|
|
84
|
-
!
|
|
85
|
-
!
|
|
86
|
-
|
|
84
|
+
if (!getEnvironmentVariable('PROPAGATION_STYLE_EXTRACT') &&
|
|
85
|
+
!getEnvironmentVariable('PROPAGATION_STYLE_INJECT') &&
|
|
86
|
+
!getEnvironmentVariable('DD_TRACE_PROPAGATION_STYLE') &&
|
|
87
|
+
getEnvironmentVariable('OTEL_PROPAGATORS')) {
|
|
87
88
|
for (const style in propagators) {
|
|
88
89
|
if (!VALID_PROPAGATION_STYLES.has(style)) {
|
|
89
90
|
log.warn('unexpected value for OTEL_PROPAGATORS environment variable')
|
|
@@ -94,7 +95,7 @@ function validateOtelPropagators (propagators) {
|
|
|
94
95
|
}
|
|
95
96
|
|
|
96
97
|
function validateEnvVarType (envVar) {
|
|
97
|
-
const value =
|
|
98
|
+
const value = getEnvironmentVariable(envVar)
|
|
98
99
|
switch (envVar) {
|
|
99
100
|
case 'OTEL_LOG_LEVEL':
|
|
100
101
|
return VALID_LOG_LEVELS.has(value)
|
|
@@ -103,7 +104,7 @@ function validateEnvVarType (envVar) {
|
|
|
103
104
|
case 'OTEL_SERVICE_NAME':
|
|
104
105
|
return typeof value === 'string'
|
|
105
106
|
case 'OTEL_TRACES_SAMPLER':
|
|
106
|
-
return getFromOtelSamplerMap(value,
|
|
107
|
+
return getFromOtelSamplerMap(value, getEnvironmentVariable('OTEL_TRACES_SAMPLER_ARG')) !== undefined
|
|
107
108
|
case 'OTEL_TRACES_SAMPLER_ARG':
|
|
108
109
|
return !Number.isNaN(Number.parseFloat(value))
|
|
109
110
|
case 'OTEL_SDK_DISABLED':
|
|
@@ -119,12 +120,12 @@ function validateEnvVarType (envVar) {
|
|
|
119
120
|
|
|
120
121
|
function checkIfBothOtelAndDdEnvVarSet () {
|
|
121
122
|
for (const [otelEnvVar, ddEnvVar] of Object.entries(otelDdEnvMapping)) {
|
|
122
|
-
if (ddEnvVar &&
|
|
123
|
+
if (ddEnvVar && getEnvironmentVariable(ddEnvVar) && getEnvironmentVariable(otelEnvVar)) {
|
|
123
124
|
log.warn(`both ${ddEnvVar} and ${otelEnvVar} environment variables are set`)
|
|
124
125
|
getCounter('otel.env.hiding', ddEnvVar, otelEnvVar).inc()
|
|
125
126
|
}
|
|
126
127
|
|
|
127
|
-
if (
|
|
128
|
+
if (getEnvironmentVariable(otelEnvVar) && !validateEnvVarType(otelEnvVar)) {
|
|
128
129
|
log.warn(`unexpected value for ${otelEnvVar} environment variable`)
|
|
129
130
|
getCounter('otel.env.invalid', ddEnvVar, otelEnvVar).inc()
|
|
130
131
|
}
|
|
@@ -178,7 +179,7 @@ function validateNamingVersion (versionString) {
|
|
|
178
179
|
* @param {string | string[]} input
|
|
179
180
|
*/
|
|
180
181
|
function splitJSONPathRules (input) {
|
|
181
|
-
if (!input) return
|
|
182
|
+
if (!input) return
|
|
182
183
|
if (Array.isArray(input)) return input
|
|
183
184
|
if (input === 'all') return []
|
|
184
185
|
return input.split(',')
|
|
@@ -211,7 +212,8 @@ function propagationStyle (key, option) {
|
|
|
211
212
|
// Otherwise, fallback to env var parsing
|
|
212
213
|
const envKey = `DD_TRACE_PROPAGATION_STYLE_${key.toUpperCase()}`
|
|
213
214
|
|
|
214
|
-
const envVar = coalesce(
|
|
215
|
+
const envVar = coalesce(getEnvironmentVariable(envKey),
|
|
216
|
+
getEnvironmentVariable('DD_TRACE_PROPAGATION_STYLE'), getEnvironmentVariable('OTEL_PROPAGATORS'))
|
|
215
217
|
if (envVar !== undefined) {
|
|
216
218
|
return envVar.split(',')
|
|
217
219
|
.filter(v => v !== '')
|
|
@@ -265,14 +267,11 @@ class Config {
|
|
|
265
267
|
|
|
266
268
|
checkIfBothOtelAndDdEnvVarSet()
|
|
267
269
|
|
|
268
|
-
const DD_API_KEY =
|
|
269
|
-
process.env.DATADOG_API_KEY,
|
|
270
|
-
process.env.DD_API_KEY
|
|
271
|
-
)
|
|
270
|
+
const DD_API_KEY = getEnvironmentVariable('DD_API_KEY')
|
|
272
271
|
|
|
273
|
-
if (
|
|
274
|
-
|
|
275
|
-
|
|
272
|
+
if (getEnvironmentVariable('DD_TRACE_PROPAGATION_STYLE') && (
|
|
273
|
+
getEnvironmentVariable('DD_TRACE_PROPAGATION_STYLE_INJECT') ||
|
|
274
|
+
getEnvironmentVariable('DD_TRACE_PROPAGATION_STYLE_EXTRACT')
|
|
276
275
|
)) {
|
|
277
276
|
log.warn(
|
|
278
277
|
'Use either the DD_TRACE_PROPAGATION_STYLE environment variable or separate ' +
|
|
@@ -294,34 +293,34 @@ class Config {
|
|
|
294
293
|
}
|
|
295
294
|
|
|
296
295
|
const DD_INSTRUMENTATION_INSTALL_ID = coalesce(
|
|
297
|
-
|
|
296
|
+
getEnvironmentVariable('DD_INSTRUMENTATION_INSTALL_ID'),
|
|
298
297
|
null
|
|
299
298
|
)
|
|
300
299
|
const DD_INSTRUMENTATION_INSTALL_TIME = coalesce(
|
|
301
|
-
|
|
300
|
+
getEnvironmentVariable('DD_INSTRUMENTATION_INSTALL_TIME'),
|
|
302
301
|
null
|
|
303
302
|
)
|
|
304
303
|
const DD_INSTRUMENTATION_INSTALL_TYPE = coalesce(
|
|
305
|
-
|
|
304
|
+
getEnvironmentVariable('DD_INSTRUMENTATION_INSTALL_TYPE'),
|
|
306
305
|
null
|
|
307
306
|
)
|
|
308
307
|
|
|
309
308
|
const DD_TRACE_CLOUD_REQUEST_PAYLOAD_TAGGING = splitJSONPathRules(
|
|
310
309
|
coalesce(
|
|
311
|
-
|
|
310
|
+
getEnvironmentVariable('DD_TRACE_CLOUD_REQUEST_PAYLOAD_TAGGING'),
|
|
312
311
|
options.cloudPayloadTagging?.request,
|
|
313
312
|
''
|
|
314
313
|
))
|
|
315
314
|
|
|
316
315
|
const DD_TRACE_CLOUD_RESPONSE_PAYLOAD_TAGGING = splitJSONPathRules(
|
|
317
316
|
coalesce(
|
|
318
|
-
|
|
317
|
+
getEnvironmentVariable('DD_TRACE_CLOUD_RESPONSE_PAYLOAD_TAGGING'),
|
|
319
318
|
options.cloudPayloadTagging?.response,
|
|
320
319
|
''
|
|
321
320
|
))
|
|
322
321
|
|
|
323
322
|
const DD_TRACE_CLOUD_PAYLOAD_TAGGING_MAX_DEPTH = coalesce(
|
|
324
|
-
|
|
323
|
+
getEnvironmentVariable('DD_TRACE_CLOUD_PAYLOAD_TAGGING_MAX_DEPTH'),
|
|
325
324
|
options.cloudPayloadTagging?.maxDepth,
|
|
326
325
|
10
|
|
327
326
|
)
|
|
@@ -370,17 +369,17 @@ class Config {
|
|
|
370
369
|
if (this.gitMetadataEnabled) {
|
|
371
370
|
this.repositoryUrl = removeUserSensitiveInfo(
|
|
372
371
|
coalesce(
|
|
373
|
-
|
|
372
|
+
getEnvironmentVariable('DD_GIT_REPOSITORY_URL'),
|
|
374
373
|
this.tags[GIT_REPOSITORY_URL]
|
|
375
374
|
)
|
|
376
375
|
)
|
|
377
376
|
this.commitSHA = coalesce(
|
|
378
|
-
|
|
377
|
+
getEnvironmentVariable('DD_GIT_COMMIT_SHA'),
|
|
379
378
|
this.tags[GIT_COMMIT_SHA]
|
|
380
379
|
)
|
|
381
380
|
if (!this.repositoryUrl || !this.commitSHA) {
|
|
382
381
|
const DD_GIT_PROPERTIES_FILE = coalesce(
|
|
383
|
-
|
|
382
|
+
getEnvironmentVariable('DD_GIT_PROPERTIES_FILE'),
|
|
384
383
|
`${process.cwd()}/git.properties`
|
|
385
384
|
)
|
|
386
385
|
let gitPropertiesString
|
|
@@ -388,7 +387,7 @@ class Config {
|
|
|
388
387
|
gitPropertiesString = fs.readFileSync(DD_GIT_PROPERTIES_FILE, 'utf8')
|
|
389
388
|
} catch (e) {
|
|
390
389
|
// Only log error if the user has set a git.properties path
|
|
391
|
-
if (
|
|
390
|
+
if (getEnvironmentVariable('DD_GIT_PROPERTIES_FILE')) {
|
|
392
391
|
log.error('Error reading DD_GIT_PROPERTIES_FILE: %s', DD_GIT_PROPERTIES_FILE, e)
|
|
393
392
|
}
|
|
394
393
|
}
|
|
@@ -418,7 +417,7 @@ class Config {
|
|
|
418
417
|
// TODO: Remove the experimental env vars as a major?
|
|
419
418
|
const DD_TRACE_B3_ENABLED = coalesce(
|
|
420
419
|
options.experimental && options.experimental.b3,
|
|
421
|
-
|
|
420
|
+
getEnvironmentVariable('DD_TRACE_EXPERIMENTAL_B3_ENABLED'),
|
|
422
421
|
false
|
|
423
422
|
)
|
|
424
423
|
const defaultPropagationStyle = ['datadog', 'tracecontext']
|
|
@@ -439,7 +438,7 @@ class Config {
|
|
|
439
438
|
FUNCTION_NAME,
|
|
440
439
|
K_SERVICE,
|
|
441
440
|
WEBSITE_SITE_NAME
|
|
442
|
-
} =
|
|
441
|
+
} = getEnvironmentVariables()
|
|
443
442
|
|
|
444
443
|
const service = AWS_LAMBDA_FUNCTION_NAME ||
|
|
445
444
|
FUNCTION_NAME || // Google Cloud Function Name set by deprecated runtimes
|
|
@@ -643,7 +642,6 @@ class Config {
|
|
|
643
642
|
DD_API_SECURITY_SAMPLE_DELAY,
|
|
644
643
|
DD_APM_TRACING_ENABLED,
|
|
645
644
|
DD_APPSEC_AUTO_USER_INSTRUMENTATION_MODE,
|
|
646
|
-
DD_APPSEC_AUTOMATED_USER_EVENTS_TRACKING,
|
|
647
645
|
DD_APPSEC_COLLECT_ALL_HEADERS,
|
|
648
646
|
DD_APPSEC_ENABLED,
|
|
649
647
|
DD_APPSEC_GRAPHQL_BLOCKED_TEMPLATE_JSON,
|
|
@@ -667,16 +665,14 @@ class Config {
|
|
|
667
665
|
DD_CODE_ORIGIN_FOR_SPANS_EXPERIMENTAL_EXIT_SPANS_ENABLED,
|
|
668
666
|
DD_DATA_STREAMS_ENABLED,
|
|
669
667
|
DD_DBM_PROPAGATION_MODE,
|
|
670
|
-
DD_DOGSTATSD_HOSTNAME,
|
|
671
668
|
DD_DOGSTATSD_HOST,
|
|
672
669
|
DD_DOGSTATSD_PORT,
|
|
673
670
|
DD_DYNAMIC_INSTRUMENTATION_ENABLED,
|
|
674
671
|
DD_DYNAMIC_INSTRUMENTATION_REDACTED_IDENTIFIERS,
|
|
675
672
|
DD_DYNAMIC_INSTRUMENTATION_REDACTION_EXCLUDED_IDENTIFIERS,
|
|
676
673
|
DD_ENV,
|
|
677
|
-
DD_EXPERIMENTAL_API_SECURITY_ENABLED,
|
|
678
674
|
DD_EXPERIMENTAL_APPSEC_STANDALONE_ENABLED,
|
|
679
|
-
|
|
675
|
+
DD_PROFILING_ENABLED,
|
|
680
676
|
DD_GRPC_CLIENT_ERROR_STATUSES,
|
|
681
677
|
DD_GRPC_SERVER_ERROR_STATUSES,
|
|
682
678
|
JEST_WORKER_ID,
|
|
@@ -703,7 +699,6 @@ class Config {
|
|
|
703
699
|
DD_LLMOBS_ML_APP,
|
|
704
700
|
DD_OPENAI_LOGS_ENABLED,
|
|
705
701
|
DD_OPENAI_SPAN_CHAR_LIMIT,
|
|
706
|
-
DD_PROFILING_ENABLED,
|
|
707
702
|
DD_PROFILING_EXPORTERS,
|
|
708
703
|
DD_PROFILING_SOURCE_MAP,
|
|
709
704
|
DD_INTERNAL_PROFILING_LONG_LIVED_THRESHOLD,
|
|
@@ -712,7 +707,6 @@ class Config {
|
|
|
712
707
|
DD_RUNTIME_METRICS_ENABLED,
|
|
713
708
|
DD_SERVICE,
|
|
714
709
|
DD_SERVICE_MAPPING,
|
|
715
|
-
DD_SERVICE_NAME,
|
|
716
710
|
DD_SITE,
|
|
717
711
|
DD_SPAN_SAMPLING_RULES,
|
|
718
712
|
DD_SPAN_SAMPLING_RULES_FILE,
|
|
@@ -724,7 +718,6 @@ class Config {
|
|
|
724
718
|
DD_TELEMETRY_METRICS_ENABLED,
|
|
725
719
|
DD_TRACE_128_BIT_TRACEID_GENERATION_ENABLED,
|
|
726
720
|
DD_TRACE_128_BIT_TRACEID_LOGGING_ENABLED,
|
|
727
|
-
DD_TRACE_AGENT_HOSTNAME,
|
|
728
721
|
DD_TRACE_AGENT_PORT,
|
|
729
722
|
DD_TRACE_AGENT_PROTOCOL_VERSION,
|
|
730
723
|
DD_TRACE_AWS_ADD_SPAN_POINTERS,
|
|
@@ -763,7 +756,6 @@ class Config {
|
|
|
763
756
|
DD_TRACE_SPAN_LEAK_DEBUG,
|
|
764
757
|
DD_TRACE_STARTUP_LOGS,
|
|
765
758
|
DD_TRACE_TAGS,
|
|
766
|
-
DD_TRACE_TELEMETRY_ENABLED,
|
|
767
759
|
DD_TRACE_X_DATADOG_TAGS_MAX_LENGTH,
|
|
768
760
|
DD_TRACING_ENABLED,
|
|
769
761
|
DD_VERSION,
|
|
@@ -777,7 +769,7 @@ class Config {
|
|
|
777
769
|
OTEL_SERVICE_NAME,
|
|
778
770
|
OTEL_TRACES_SAMPLER,
|
|
779
771
|
OTEL_TRACES_SAMPLER_ARG
|
|
780
|
-
} =
|
|
772
|
+
} = getEnvironmentVariables()
|
|
781
773
|
|
|
782
774
|
const tags = {}
|
|
783
775
|
const env = setHiddenProperty(this, '_env', {})
|
|
@@ -792,10 +784,7 @@ class Config {
|
|
|
792
784
|
DD_APM_TRACING_ENABLED,
|
|
793
785
|
DD_EXPERIMENTAL_APPSEC_STANDALONE_ENABLED && isFalse(DD_EXPERIMENTAL_APPSEC_STANDALONE_ENABLED)
|
|
794
786
|
))
|
|
795
|
-
this._setBoolean(env, 'appsec.apiSecurity.enabled',
|
|
796
|
-
DD_API_SECURITY_ENABLED && isTrue(DD_API_SECURITY_ENABLED),
|
|
797
|
-
DD_EXPERIMENTAL_API_SECURITY_ENABLED && isTrue(DD_EXPERIMENTAL_API_SECURITY_ENABLED)
|
|
798
|
-
))
|
|
787
|
+
this._setBoolean(env, 'appsec.apiSecurity.enabled', DD_API_SECURITY_ENABLED && isTrue(DD_API_SECURITY_ENABLED))
|
|
799
788
|
this._setValue(env, 'appsec.apiSecurity.sampleDelay', maybeFloat(DD_API_SECURITY_SAMPLE_DELAY))
|
|
800
789
|
this._setValue(env, 'appsec.blockedTemplateGraphql', maybeFile(DD_APPSEC_GRAPHQL_BLOCKED_TEMPLATE_JSON))
|
|
801
790
|
this._setValue(env, 'appsec.blockedTemplateHtml', maybeFile(DD_APPSEC_HTTP_BLOCKED_TEMPLATE_HTML))
|
|
@@ -803,10 +792,7 @@ class Config {
|
|
|
803
792
|
this._setValue(env, 'appsec.blockedTemplateJson', maybeFile(DD_APPSEC_HTTP_BLOCKED_TEMPLATE_JSON))
|
|
804
793
|
this._envUnprocessed['appsec.blockedTemplateJson'] = DD_APPSEC_HTTP_BLOCKED_TEMPLATE_JSON
|
|
805
794
|
this._setBoolean(env, 'appsec.enabled', DD_APPSEC_ENABLED)
|
|
806
|
-
this._setString(env, 'appsec.eventTracking.mode',
|
|
807
|
-
DD_APPSEC_AUTO_USER_INSTRUMENTATION_MODE,
|
|
808
|
-
DD_APPSEC_AUTOMATED_USER_EVENTS_TRACKING // TODO: remove in next major
|
|
809
|
-
))
|
|
795
|
+
this._setString(env, 'appsec.eventTracking.mode', DD_APPSEC_AUTO_USER_INSTRUMENTATION_MODE)
|
|
810
796
|
this._setBoolean(env, 'appsec.extendedHeadersCollection.enabled', DD_APPSEC_COLLECT_ALL_HEADERS)
|
|
811
797
|
this._setBoolean(
|
|
812
798
|
env,
|
|
@@ -847,7 +833,7 @@ class Config {
|
|
|
847
833
|
DD_CODE_ORIGIN_FOR_SPANS_EXPERIMENTAL_EXIT_SPANS_ENABLED
|
|
848
834
|
)
|
|
849
835
|
this._setString(env, 'dbmPropagationMode', DD_DBM_PROPAGATION_MODE)
|
|
850
|
-
this._setString(env, 'dogstatsd.hostname', DD_DOGSTATSD_HOST
|
|
836
|
+
this._setString(env, 'dogstatsd.hostname', DD_DOGSTATSD_HOST)
|
|
851
837
|
this._setString(env, 'dogstatsd.port', DD_DOGSTATSD_PORT)
|
|
852
838
|
this._setBoolean(env, 'dsmEnabled', DD_DATA_STREAMS_ENABLED)
|
|
853
839
|
this._setBoolean(env, 'dynamicInstrumentation.enabled', DD_DYNAMIC_INSTRUMENTATION_ENABLED)
|
|
@@ -869,7 +855,7 @@ class Config {
|
|
|
869
855
|
this._setIntegerRangeSet(env, 'grpc.client.error.statuses', DD_GRPC_CLIENT_ERROR_STATUSES)
|
|
870
856
|
this._setIntegerRangeSet(env, 'grpc.server.error.statuses', DD_GRPC_SERVER_ERROR_STATUSES)
|
|
871
857
|
this._setArray(env, 'headerTags', DD_TRACE_HEADER_TAGS)
|
|
872
|
-
this._setString(env, 'hostname',
|
|
858
|
+
this._setString(env, 'hostname', DD_AGENT_HOST)
|
|
873
859
|
this._setValue(env, 'iast.dbRowsToTaint', maybeInt(DD_IAST_DB_ROWS_TO_TAINT))
|
|
874
860
|
this._setBoolean(env, 'iast.deduplicationEnabled', DD_IAST_DEDUPLICATION_ENABLED)
|
|
875
861
|
this._setBoolean(env, 'iast.enabled', DD_IAST_ENABLED)
|
|
@@ -915,7 +901,6 @@ class Config {
|
|
|
915
901
|
this._setString(env, 'port', DD_TRACE_AGENT_PORT)
|
|
916
902
|
const profilingEnabled = normalizeProfilingEnabledValue(
|
|
917
903
|
coalesce(
|
|
918
|
-
DD_EXPERIMENTAL_PROFILING_ENABLED,
|
|
919
904
|
DD_PROFILING_ENABLED,
|
|
920
905
|
this._isInServerlessEnvironment() ? 'false' : undefined
|
|
921
906
|
)
|
|
@@ -953,10 +938,10 @@ class Config {
|
|
|
953
938
|
this._setSamplingRule(env, 'sampler.rules', safeJsonParse(DD_TRACE_SAMPLING_RULES))
|
|
954
939
|
this._envUnprocessed['sampler.rules'] = DD_TRACE_SAMPLING_RULES
|
|
955
940
|
this._setString(env, 'scope', DD_TRACE_SCOPE)
|
|
956
|
-
this._setString(env, 'service', DD_SERVICE ||
|
|
941
|
+
this._setString(env, 'service', DD_SERVICE || tags.service || OTEL_SERVICE_NAME)
|
|
957
942
|
if (DD_SERVICE_MAPPING) {
|
|
958
943
|
this._setValue(env, 'serviceMapping', Object.fromEntries(
|
|
959
|
-
|
|
944
|
+
DD_SERVICE_MAPPING.split(',').map(x => x.trim().split(':'))
|
|
960
945
|
))
|
|
961
946
|
}
|
|
962
947
|
this._setString(env, 'site', DD_SITE)
|
|
@@ -971,8 +956,7 @@ class Config {
|
|
|
971
956
|
this._setTags(env, 'tags', tags)
|
|
972
957
|
this._setValue(env, 'tagsHeaderMaxLength', DD_TRACE_X_DATADOG_TAGS_MAX_LENGTH)
|
|
973
958
|
this._setBoolean(env, 'telemetry.enabled', coalesce(
|
|
974
|
-
|
|
975
|
-
DD_INSTRUMENTATION_TELEMETRY_ENABLED, // to comply with instrumentation telemetry specs
|
|
959
|
+
DD_INSTRUMENTATION_TELEMETRY_ENABLED,
|
|
976
960
|
!(this._isInServerlessEnvironment() || JEST_WORKER_ID)
|
|
977
961
|
))
|
|
978
962
|
this._setString(env, 'instrumentation_config_id', DD_INSTRUMENTATION_CONFIG_ID)
|
|
@@ -1016,7 +1000,7 @@ class Config {
|
|
|
1016
1000
|
const tags = {}
|
|
1017
1001
|
setHiddenProperty(this, '_optsUnprocessed', {})
|
|
1018
1002
|
|
|
1019
|
-
options = setHiddenProperty(this, '_optionsArg',
|
|
1003
|
+
options = setHiddenProperty(this, '_optionsArg', { ingestion: {}, ...options, ...opts })
|
|
1020
1004
|
|
|
1021
1005
|
tagger.add(tags, options.tags)
|
|
1022
1006
|
|
|
@@ -1181,20 +1165,19 @@ class Config {
|
|
|
1181
1165
|
|
|
1182
1166
|
_isCiVisibilityItrEnabled () {
|
|
1183
1167
|
return coalesce(
|
|
1184
|
-
|
|
1168
|
+
getEnvironmentVariable('DD_CIVISIBILITY_ITR_ENABLED'),
|
|
1185
1169
|
true
|
|
1186
1170
|
)
|
|
1187
1171
|
}
|
|
1188
1172
|
|
|
1189
1173
|
_getHostname () {
|
|
1190
|
-
const DD_CIVISIBILITY_AGENTLESS_URL =
|
|
1174
|
+
const DD_CIVISIBILITY_AGENTLESS_URL = getEnvironmentVariable('DD_CIVISIBILITY_AGENTLESS_URL')
|
|
1191
1175
|
const url = DD_CIVISIBILITY_AGENTLESS_URL
|
|
1192
1176
|
? new URL(DD_CIVISIBILITY_AGENTLESS_URL)
|
|
1193
1177
|
: getAgentUrl(this._getTraceAgentUrl(), this._optionsArg)
|
|
1194
1178
|
const DD_AGENT_HOST = coalesce(
|
|
1195
1179
|
this._optionsArg.hostname,
|
|
1196
|
-
|
|
1197
|
-
process.env.DD_TRACE_AGENT_HOSTNAME,
|
|
1180
|
+
getEnvironmentVariable('DD_AGENT_HOST'),
|
|
1198
1181
|
'127.0.0.1'
|
|
1199
1182
|
)
|
|
1200
1183
|
return DD_AGENT_HOST || (url && url.hostname)
|
|
@@ -1204,17 +1187,17 @@ class Config {
|
|
|
1204
1187
|
const DD_TRACE_SPAN_ATTRIBUTE_SCHEMA = validateNamingVersion(
|
|
1205
1188
|
coalesce(
|
|
1206
1189
|
this._optionsArg.spanAttributeSchema,
|
|
1207
|
-
|
|
1190
|
+
getEnvironmentVariable('DD_TRACE_SPAN_ATTRIBUTE_SCHEMA')
|
|
1208
1191
|
)
|
|
1209
1192
|
)
|
|
1210
1193
|
|
|
1211
1194
|
const peerServiceSet = (
|
|
1212
1195
|
this._optionsArg.hasOwnProperty('spanComputePeerService') ||
|
|
1213
|
-
|
|
1196
|
+
getEnvironmentVariables().hasOwnProperty('DD_TRACE_PEER_SERVICE_DEFAULTS_ENABLED')
|
|
1214
1197
|
)
|
|
1215
1198
|
const peerServiceValue = coalesce(
|
|
1216
1199
|
this._optionsArg.spanComputePeerService,
|
|
1217
|
-
|
|
1200
|
+
getEnvironmentVariable('DD_TRACE_PEER_SERVICE_DEFAULTS_ENABLED')
|
|
1218
1201
|
)
|
|
1219
1202
|
|
|
1220
1203
|
const spanComputePeerService = (
|
|
@@ -1230,14 +1213,14 @@ class Config {
|
|
|
1230
1213
|
|
|
1231
1214
|
_isCiVisibilityGitUploadEnabled () {
|
|
1232
1215
|
return coalesce(
|
|
1233
|
-
|
|
1216
|
+
getEnvironmentVariable('DD_CIVISIBILITY_GIT_UPLOAD_ENABLED'),
|
|
1234
1217
|
true
|
|
1235
1218
|
)
|
|
1236
1219
|
}
|
|
1237
1220
|
|
|
1238
1221
|
_isCiVisibilityManualApiEnabled () {
|
|
1239
1222
|
return coalesce(
|
|
1240
|
-
|
|
1223
|
+
getEnvironmentVariable('DD_CIVISIBILITY_MANUAL_API_ENABLED'),
|
|
1241
1224
|
true
|
|
1242
1225
|
)
|
|
1243
1226
|
}
|
|
@@ -1248,7 +1231,7 @@ class Config {
|
|
|
1248
1231
|
|
|
1249
1232
|
return apmTracingEnabled && coalesce(
|
|
1250
1233
|
this._optionsArg.stats,
|
|
1251
|
-
|
|
1234
|
+
getEnvironmentVariable('DD_TRACE_STATS_COMPUTATION_ENABLED'),
|
|
1252
1235
|
getIsGCPFunction() || getIsAzureFunction()
|
|
1253
1236
|
)
|
|
1254
1237
|
}
|
|
@@ -1256,8 +1239,7 @@ class Config {
|
|
|
1256
1239
|
_getTraceAgentUrl () {
|
|
1257
1240
|
return coalesce(
|
|
1258
1241
|
this._optionsArg.url,
|
|
1259
|
-
|
|
1260
|
-
process.env.DD_TRACE_URL,
|
|
1242
|
+
getEnvironmentVariable('DD_TRACE_AGENT_URL'),
|
|
1261
1243
|
null
|
|
1262
1244
|
)
|
|
1263
1245
|
}
|
|
@@ -1277,7 +1259,7 @@ class Config {
|
|
|
1277
1259
|
DD_TEST_MANAGEMENT_ENABLED,
|
|
1278
1260
|
DD_TEST_MANAGEMENT_ATTEMPT_TO_FIX_RETRIES,
|
|
1279
1261
|
DD_CIVISIBILITY_IMPACTED_TESTS_DETECTION_ENABLED
|
|
1280
|
-
} =
|
|
1262
|
+
} = getEnvironmentVariables()
|
|
1281
1263
|
|
|
1282
1264
|
if (DD_CIVISIBILITY_AGENTLESS_URL) {
|
|
1283
1265
|
this._setValue(calc, 'url', new URL(DD_CIVISIBILITY_AGENTLESS_URL))
|
|
@@ -1454,12 +1436,7 @@ class Config {
|
|
|
1454
1436
|
obj[name] = value
|
|
1455
1437
|
}
|
|
1456
1438
|
|
|
1457
|
-
|
|
1458
|
-
// TODO: Deeply merge configurations.
|
|
1459
|
-
// TODO: Move change tracking to telemetry.
|
|
1460
|
-
// for telemetry reporting, `name`s in `containers` need to be keys from:
|
|
1461
|
-
// https://github.com/DataDog/dd-go/blob/prod/trace/apps/tracer-telemetry-intake/telemetry-payload/static/config_norm_rules.json
|
|
1462
|
-
_merge () {
|
|
1439
|
+
_getContainersAndOriginsOrdered () {
|
|
1463
1440
|
const containers = [
|
|
1464
1441
|
this._remote,
|
|
1465
1442
|
this._options,
|
|
@@ -1478,6 +1455,17 @@ class Config {
|
|
|
1478
1455
|
'calculated',
|
|
1479
1456
|
'default'
|
|
1480
1457
|
]
|
|
1458
|
+
|
|
1459
|
+
return { containers, origins }
|
|
1460
|
+
}
|
|
1461
|
+
|
|
1462
|
+
// TODO: Report origin changes and errors to telemetry.
|
|
1463
|
+
// TODO: Deeply merge configurations.
|
|
1464
|
+
// TODO: Move change tracking to telemetry.
|
|
1465
|
+
// for telemetry reporting, `name`s in `containers` need to be keys from:
|
|
1466
|
+
// https://github.com/DataDog/dd-go/blob/prod/trace/apps/tracer-telemetry-intake/telemetry-payload/static/config_norm_rules.json
|
|
1467
|
+
_merge () {
|
|
1468
|
+
const { containers, origins } = this._getContainersAndOriginsOrdered()
|
|
1481
1469
|
const unprocessedValues = [
|
|
1482
1470
|
this._remoteUnprocessed,
|
|
1483
1471
|
this._optsUnprocessed,
|
|
@@ -1514,6 +1502,18 @@ class Config {
|
|
|
1514
1502
|
updateConfig(changes, this)
|
|
1515
1503
|
}
|
|
1516
1504
|
|
|
1505
|
+
getOrigin (name) {
|
|
1506
|
+
const { containers, origins } = this._getContainersAndOriginsOrdered()
|
|
1507
|
+
|
|
1508
|
+
for (let i = 0; i < containers.length; i++) {
|
|
1509
|
+
const container = containers[i]
|
|
1510
|
+
const value = container[name]
|
|
1511
|
+
if (value != null || container === this._defaults) {
|
|
1512
|
+
return origins[i]
|
|
1513
|
+
}
|
|
1514
|
+
}
|
|
1515
|
+
}
|
|
1516
|
+
|
|
1517
1517
|
// TODO: Refactor the Config class so it never produces any config objects that are incompatible with MessageChannel
|
|
1518
1518
|
/**
|
|
1519
1519
|
* Serializes the config object so it can be passed over a Worker Thread MessageChannel.
|
|
@@ -1536,12 +1536,12 @@ function handleOtel (tagString) {
|
|
|
1536
1536
|
?.replace(/(^|,)deployment\.environment=/, '$1env:')
|
|
1537
1537
|
.replace(/(^|,)service\.name=/, '$1service:')
|
|
1538
1538
|
.replace(/(^|,)service\.version=/, '$1version:')
|
|
1539
|
-
.
|
|
1539
|
+
.replaceAll('=', ':')
|
|
1540
1540
|
}
|
|
1541
1541
|
|
|
1542
1542
|
function parseSpaceSeparatedTags (tagString) {
|
|
1543
1543
|
if (tagString && !tagString.includes(',')) {
|
|
1544
|
-
tagString = tagString.
|
|
1544
|
+
tagString = tagString.replaceAll(/\s+/g, ',')
|
|
1545
1545
|
}
|
|
1546
1546
|
return tagString
|
|
1547
1547
|
}
|
|
@@ -1564,9 +1564,8 @@ function getAgentUrl (url, options) {
|
|
|
1564
1564
|
if (
|
|
1565
1565
|
!options.hostname &&
|
|
1566
1566
|
!options.port &&
|
|
1567
|
-
!
|
|
1568
|
-
!
|
|
1569
|
-
!process.env.DD_TRACE_AGENT_PORT &&
|
|
1567
|
+
!getEnvironmentVariable('DD_AGENT_HOST') &&
|
|
1568
|
+
!getEnvironmentVariable('DD_TRACE_AGENT_PORT') &&
|
|
1570
1569
|
fs.existsSync('/var/run/datadog/apm.socket')
|
|
1571
1570
|
) {
|
|
1572
1571
|
return new URL('unix:///var/run/datadog/apm.socket')
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
const os = require('os')
|
|
2
2
|
const fs = require('fs')
|
|
3
|
+
const { getEnvironmentVariable } = require('../../dd-trace/src/config-helper')
|
|
3
4
|
|
|
4
5
|
class StableConfig {
|
|
5
6
|
constructor () {
|
|
@@ -40,6 +41,8 @@ class StableConfig {
|
|
|
40
41
|
|
|
41
42
|
try {
|
|
42
43
|
const configurator = new libconfig.JsConfigurator()
|
|
44
|
+
// Intentionally pass through the raw environment variables for reporting.
|
|
45
|
+
// eslint-disable-next-line eslint-rules/eslint-process-env
|
|
43
46
|
configurator.set_envp(Object.entries(process.env).map(([key, value]) => `${key}=${value}`))
|
|
44
47
|
configurator.set_args(process.argv)
|
|
45
48
|
configurator.get_configuration(localConfig.toString(), fleetConfig.toString()).forEach((entry) => {
|
|
@@ -86,11 +89,11 @@ class StableConfig {
|
|
|
86
89
|
}
|
|
87
90
|
|
|
88
91
|
// Allow overriding the paths for testing
|
|
89
|
-
if (
|
|
90
|
-
localConfigPath =
|
|
92
|
+
if (getEnvironmentVariable('DD_TEST_LOCAL_CONFIG_PATH') !== undefined) {
|
|
93
|
+
localConfigPath = getEnvironmentVariable('DD_TEST_LOCAL_CONFIG_PATH')
|
|
91
94
|
}
|
|
92
|
-
if (
|
|
93
|
-
fleetConfigPath =
|
|
95
|
+
if (getEnvironmentVariable('DD_TEST_FLEET_CONFIG_PATH') !== undefined) {
|
|
96
|
+
fleetConfigPath = getEnvironmentVariable('DD_TEST_FLEET_CONFIG_PATH')
|
|
94
97
|
}
|
|
95
98
|
|
|
96
99
|
return { localConfigPath, fleetConfigPath }
|
|
@@ -117,12 +117,12 @@ function convertKey (key) {
|
|
|
117
117
|
function jsonStringify (obj, indent = 2) {
|
|
118
118
|
// made to stringify json exactly similar to python / java in order for hashing to be the same
|
|
119
119
|
const jsonString = JSON.stringify(obj, (_, value) => value, indent)
|
|
120
|
-
return jsonString.
|
|
121
|
-
.
|
|
122
|
-
.
|
|
123
|
-
.
|
|
124
|
-
.
|
|
125
|
-
.
|
|
120
|
+
return jsonString.replaceAll(/^ +/gm, ' ') // Replace leading spaces with single space
|
|
121
|
+
.replaceAll('\n', '') // Remove newlines
|
|
122
|
+
.replaceAll('{ ', '{') // Remove space after '{'
|
|
123
|
+
.replaceAll(' }', '}') // Remove space before '}'
|
|
124
|
+
.replaceAll('[ ', '[') // Remove space after '['
|
|
125
|
+
.replaceAll(' ]', ']') // Remove space before ']'
|
|
126
126
|
}
|
|
127
127
|
|
|
128
128
|
module.exports = {
|
|
@@ -170,7 +170,7 @@ async function updateBreakpointInternal (breakpoint, probe) {
|
|
|
170
170
|
const conditionBeforeNewProbe = compileCompoundCondition([...probesAtLocation.values()])
|
|
171
171
|
|
|
172
172
|
// If a probe is provided, add it to the breakpoint. If not, it's because we're removing a probe, but potentially
|
|
173
|
-
// need to update the
|
|
173
|
+
// need to update the condition of the breakpoint.
|
|
174
174
|
if (probe) {
|
|
175
175
|
probesAtLocation.set(probe.id, probe)
|
|
176
176
|
probeToLocation.set(probe.id, breakpoint.locationKey)
|
|
@@ -194,7 +194,6 @@ async function updateBreakpointInternal (breakpoint, probe) {
|
|
|
194
194
|
} catch (err) {
|
|
195
195
|
throw new Error(`Error setting breakpoint for probe ${probe.id}`, { cause: err })
|
|
196
196
|
}
|
|
197
|
-
breakpoint.id = result.breakpointId
|
|
198
197
|
breakpointToProbes.set(result.breakpointId, probesAtLocation)
|
|
199
198
|
}
|
|
200
199
|
}
|
|
@@ -105,9 +105,8 @@ function compile (node) {
|
|
|
105
105
|
return '$dd_key'
|
|
106
106
|
} else if (value === '@value') {
|
|
107
107
|
return '$dd_value'
|
|
108
|
-
} else {
|
|
109
|
-
return assertIdentifier(value)
|
|
110
108
|
}
|
|
109
|
+
return assertIdentifier(value)
|
|
111
110
|
} else if (Array.isArray(value)) {
|
|
112
111
|
const args = value.map(compile)
|
|
113
112
|
switch (type) {
|
|
@@ -109,6 +109,7 @@ session.on('Debugger.paused', async ({ params }) => {
|
|
|
109
109
|
if (probe.condition !== undefined) {
|
|
110
110
|
// TODO: Bundle all conditions and evaluate them in a single call
|
|
111
111
|
// TODO: Handle errors
|
|
112
|
+
// eslint-disable-next-line no-await-in-loop
|
|
112
113
|
const { result } = await session.post('Debugger.evaluateOnCallFrame', {
|
|
113
114
|
callFrameId: params.callFrames[0].callFrameId,
|
|
114
115
|
expression: probe.condition,
|
|
@@ -134,7 +135,7 @@ session.on('Debugger.paused', async ({ params }) => {
|
|
|
134
135
|
|
|
135
136
|
const timestamp = Date.now()
|
|
136
137
|
|
|
137
|
-
let evalResults
|
|
138
|
+
let evalResults
|
|
138
139
|
const { result } = await session.post('Debugger.evaluateOnCallFrame', {
|
|
139
140
|
callFrameId: params.callFrames[0].callFrameId,
|
|
140
141
|
expression: templateExpressions.length === 0
|
|
@@ -9,6 +9,7 @@ const request = require('../../exporters/common/request')
|
|
|
9
9
|
const { GIT_COMMIT_SHA, GIT_REPOSITORY_URL } = require('../../plugins/util/tags')
|
|
10
10
|
const log = require('../../log')
|
|
11
11
|
const { version } = require('../../../../../package.json')
|
|
12
|
+
const { getEnvironmentVariable } = require('../../config-helper')
|
|
12
13
|
|
|
13
14
|
module.exports = send
|
|
14
15
|
|
|
@@ -21,8 +22,8 @@ const hostname = getHostname()
|
|
|
21
22
|
const service = config.service
|
|
22
23
|
|
|
23
24
|
const ddtags = [
|
|
24
|
-
['env',
|
|
25
|
-
['version',
|
|
25
|
+
['env', getEnvironmentVariable('DD_ENV')],
|
|
26
|
+
['version', getEnvironmentVariable('DD_VERSION')],
|
|
26
27
|
['debugger_version', version],
|
|
27
28
|
['host_name', hostname],
|
|
28
29
|
[GIT_COMMIT_SHA, config.commitSHA],
|
|
@@ -77,9 +77,8 @@ function getObjectProperties (subtype, objectId, opts, depth) {
|
|
|
77
77
|
return getProxy(objectId, opts, depth)
|
|
78
78
|
} else if (subtype === 'arraybuffer') {
|
|
79
79
|
return getArrayBuffer(objectId, opts, depth)
|
|
80
|
-
} else {
|
|
81
|
-
return getObject(objectId, opts, depth + 1, subtype === 'array' || subtype === 'typedarray')
|
|
82
80
|
}
|
|
81
|
+
return getObject(objectId, opts, depth + 1, subtype === 'array' || subtype === 'typedarray')
|
|
83
82
|
}
|
|
84
83
|
|
|
85
84
|
// TODO: The following extra information from `internalProperties` might be relevant to include for functions:
|
|
@@ -129,11 +129,10 @@ function toFunctionOrClass (value, maxLength) {
|
|
|
129
129
|
// This is a function
|
|
130
130
|
// TODO: Would it make sense to detect if it's an arrow function or not?
|
|
131
131
|
return toObject(value.className, value.properties, maxLength)
|
|
132
|
-
} else {
|
|
133
|
-
// This is a class
|
|
134
|
-
const className = classMatch[1].trim()
|
|
135
|
-
return { type: className ? `class ${className}` : 'class' }
|
|
136
132
|
}
|
|
133
|
+
// This is a class
|
|
134
|
+
const className = classMatch[1].trim()
|
|
135
|
+
return { type: className ? `class ${className}` : 'class' }
|
|
137
136
|
}
|
|
138
137
|
|
|
139
138
|
function toString (str, maxLength) {
|
|
@@ -103,7 +103,7 @@ const REDACTED_IDENTIFIERS = new Set(
|
|
|
103
103
|
|
|
104
104
|
function normalizeName (name, isSymbol) {
|
|
105
105
|
if (isSymbol) name = name.slice(7, -1) // Remove `Symbol(` and `)`
|
|
106
|
-
return name.toLowerCase().
|
|
106
|
+
return name.toLowerCase().replaceAll(/[-_@$.]/g, '')
|
|
107
107
|
}
|
|
108
108
|
|
|
109
109
|
module.exports = {
|