dd-trace 5.53.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/LICENSE-3rdparty.csv +2 -1
- package/ci/cypress/plugin.js +8 -0
- package/ci/cypress/polyfills.js +23 -0
- package/ci/init.js +8 -7
- package/index.d.ts +33 -16
- package/initialize.mjs +5 -6
- package/package.json +40 -38
- package/packages/datadog-code-origin/index.js +22 -4
- package/packages/datadog-core/src/utils/src/get.js +1 -1
- package/packages/datadog-core/src/utils/src/has.js +1 -1
- package/packages/datadog-core/src/utils/src/kebabcase.js +4 -6
- package/packages/datadog-core/src/utils/src/parse-tags.js +1 -1
- package/packages/datadog-core/src/utils/src/pick.js +2 -2
- package/packages/datadog-core/src/utils/src/set.js +1 -1
- package/packages/datadog-core/src/utils/src/uniq.js +1 -1
- package/packages/datadog-instrumentations/src/amqp10.js +19 -17
- package/packages/datadog-instrumentations/src/amqplib.js +52 -35
- package/packages/datadog-instrumentations/src/apollo.js +2 -2
- package/packages/datadog-instrumentations/src/aws-sdk.js +1 -1
- package/packages/datadog-instrumentations/src/cassandra-driver.js +10 -10
- package/packages/datadog-instrumentations/src/child_process.js +1 -2
- package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +89 -75
- package/packages/datadog-instrumentations/src/cookie-parser.js +1 -1
- package/packages/datadog-instrumentations/src/couchbase.js +6 -9
- package/packages/datadog-instrumentations/src/cucumber.js +108 -68
- package/packages/datadog-instrumentations/src/cypress.js +2 -1
- package/packages/datadog-instrumentations/src/dns.js +5 -5
- package/packages/datadog-instrumentations/src/elasticsearch.js +9 -10
- package/packages/datadog-instrumentations/src/fastify.js +7 -9
- package/packages/datadog-instrumentations/src/fs.js +1 -1
- package/packages/datadog-instrumentations/src/google-cloud-pubsub.js +35 -43
- package/packages/datadog-instrumentations/src/graphql.js +7 -10
- package/packages/datadog-instrumentations/src/grpc/client.js +11 -23
- package/packages/datadog-instrumentations/src/grpc/server.js +7 -20
- package/packages/datadog-instrumentations/src/hapi.js +10 -11
- package/packages/datadog-instrumentations/src/helpers/extract-package-and-module-path.js +16 -10
- package/packages/datadog-instrumentations/src/helpers/fetch.js +4 -5
- package/packages/datadog-instrumentations/src/helpers/hook.js +2 -3
- package/packages/datadog-instrumentations/src/helpers/hooks.js +0 -1
- package/packages/datadog-instrumentations/src/helpers/instrument.js +1 -41
- package/packages/datadog-instrumentations/src/helpers/register.js +11 -12
- package/packages/datadog-instrumentations/src/http/client.js +14 -20
- package/packages/datadog-instrumentations/src/jest.js +201 -143
- package/packages/datadog-instrumentations/src/kafkajs.js +52 -44
- package/packages/datadog-instrumentations/src/knex.js +4 -4
- package/packages/datadog-instrumentations/src/koa.js +2 -3
- package/packages/datadog-instrumentations/src/ldapjs.js +3 -4
- package/packages/datadog-instrumentations/src/mariadb.js +49 -65
- package/packages/datadog-instrumentations/src/mocha/main.js +116 -73
- package/packages/datadog-instrumentations/src/mocha/utils.js +36 -12
- package/packages/datadog-instrumentations/src/mocha/worker.js +6 -0
- package/packages/datadog-instrumentations/src/mocha.js +3 -1
- package/packages/datadog-instrumentations/src/mongodb-core.js +1 -1
- package/packages/datadog-instrumentations/src/mysql.js +30 -37
- package/packages/datadog-instrumentations/src/mysql2.js +53 -47
- package/packages/datadog-instrumentations/src/net.js +1 -1
- package/packages/datadog-instrumentations/src/next.js +1 -0
- package/packages/datadog-instrumentations/src/nyc.js +3 -2
- package/packages/datadog-instrumentations/src/openai.js +22 -24
- package/packages/datadog-instrumentations/src/oracledb.js +1 -1
- package/packages/datadog-instrumentations/src/otel-sdk-trace.js +4 -3
- package/packages/datadog-instrumentations/src/pg.js +3 -5
- package/packages/datadog-instrumentations/src/playwright.js +123 -83
- package/packages/datadog-instrumentations/src/protobufjs.js +3 -4
- package/packages/datadog-instrumentations/src/redis.js +4 -4
- package/packages/datadog-instrumentations/src/restify.js +9 -13
- package/packages/datadog-instrumentations/src/rhea.js +42 -54
- package/packages/datadog-instrumentations/src/router.js +30 -32
- package/packages/datadog-instrumentations/src/tedious.js +2 -3
- package/packages/datadog-instrumentations/src/vitest.js +87 -52
- package/packages/datadog-plugin-amqp10/src/consumer.js +7 -3
- package/packages/datadog-plugin-amqp10/src/producer.js +7 -3
- package/packages/datadog-plugin-amqplib/src/client.js +6 -2
- package/packages/datadog-plugin-amqplib/src/consumer.js +7 -3
- package/packages/datadog-plugin-amqplib/src/producer.js +7 -3
- package/packages/datadog-plugin-amqplib/src/util.js +1 -1
- package/packages/datadog-plugin-apollo/src/gateway/request.js +5 -6
- package/packages/datadog-plugin-apollo/src/gateway/validate.js +2 -3
- package/packages/datadog-plugin-avsc/src/schema_iterator.js +12 -12
- package/packages/datadog-plugin-aws-sdk/src/base.js +15 -10
- package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/tracing.js +2 -2
- package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/utils.js +13 -13
- package/packages/datadog-plugin-aws-sdk/src/services/cloudwatchlogs.js +3 -5
- package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +28 -43
- package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +2 -2
- package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +10 -11
- package/packages/datadog-plugin-aws-sdk/src/services/lambda.js +4 -6
- 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 +2 -3
- package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +11 -15
- package/packages/datadog-plugin-aws-sdk/src/services/stepfunctions.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/util.js +5 -6
- package/packages/datadog-plugin-cassandra-driver/src/index.js +1 -1
- package/packages/datadog-plugin-child_process/src/index.js +4 -4
- package/packages/datadog-plugin-child_process/src/scrub-cmd-params.js +23 -23
- package/packages/datadog-plugin-cucumber/src/index.js +60 -4
- package/packages/datadog-plugin-cypress/src/cypress-plugin.js +99 -28
- package/packages/datadog-plugin-cypress/src/plugin.js +11 -1
- package/packages/datadog-plugin-cypress/src/support.js +24 -5
- 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-express/src/code_origin.js +30 -0
- package/packages/datadog-plugin-express/src/index.js +10 -12
- package/packages/datadog-plugin-express/src/tracing.js +19 -0
- package/packages/datadog-plugin-google-cloud-pubsub/src/client.js +7 -3
- package/packages/datadog-plugin-google-cloud-pubsub/src/consumer.js +12 -7
- package/packages/datadog-plugin-google-cloud-pubsub/src/producer.js +6 -2
- package/packages/datadog-plugin-google-cloud-vertexai/src/tracing.js +27 -10
- package/packages/datadog-plugin-graphql/src/execute.js +2 -2
- package/packages/datadog-plugin-graphql/src/index.js +10 -8
- package/packages/datadog-plugin-graphql/src/resolve.js +19 -12
- package/packages/datadog-plugin-graphql/src/tools/index.js +1 -0
- package/packages/datadog-plugin-graphql/src/tools/signature.js +1 -0
- package/packages/datadog-plugin-graphql/src/tools/transforms.js +1 -0
- package/packages/datadog-plugin-grpc/src/client.js +2 -2
- package/packages/datadog-plugin-grpc/src/util.js +2 -2
- package/packages/datadog-plugin-http/src/client.js +23 -13
- package/packages/datadog-plugin-http2/src/client.js +24 -25
- package/packages/datadog-plugin-jest/src/index.js +26 -23
- package/packages/datadog-plugin-jest/src/util.js +8 -8
- package/packages/datadog-plugin-kafkajs/src/batch-consumer.js +3 -1
- package/packages/datadog-plugin-kafkajs/src/consumer.js +9 -5
- package/packages/datadog-plugin-kafkajs/src/producer.js +8 -3
- package/packages/datadog-plugin-kafkajs/src/utils.js +1 -1
- package/packages/datadog-plugin-langchain/src/handlers/chain.js +7 -7
- package/packages/datadog-plugin-langchain/src/handlers/embedding.js +2 -2
- package/packages/datadog-plugin-langchain/src/handlers/language_models/chat_model.js +6 -4
- package/packages/datadog-plugin-langchain/src/handlers/language_models/llm.js +5 -4
- package/packages/datadog-plugin-langchain/src/tracing.js +11 -10
- package/packages/datadog-plugin-mariadb/src/index.js +3 -9
- package/packages/datadog-plugin-mocha/src/index.js +39 -14
- package/packages/datadog-plugin-mongodb-core/src/index.js +3 -2
- package/packages/datadog-plugin-mysql/src/index.js +22 -9
- package/packages/datadog-plugin-mysql2/src/index.js +16 -0
- package/packages/datadog-plugin-net/src/tcp.js +1 -1
- package/packages/datadog-plugin-next/src/index.js +7 -6
- package/packages/datadog-plugin-openai/src/services.js +6 -10
- package/packages/datadog-plugin-openai/src/tracing.js +12 -18
- package/packages/datadog-plugin-oracledb/src/index.js +1 -1
- package/packages/datadog-plugin-playwright/src/index.js +25 -4
- package/packages/datadog-plugin-protobufjs/src/schema_iterator.js +8 -9
- package/packages/datadog-plugin-redis/src/index.js +2 -4
- package/packages/datadog-plugin-rhea/src/consumer.js +8 -6
- package/packages/datadog-plugin-rhea/src/producer.js +5 -2
- package/packages/datadog-plugin-router/src/index.js +1 -1
- package/packages/datadog-plugin-selenium/src/index.js +1 -6
- package/packages/datadog-plugin-vitest/src/index.js +52 -35
- package/packages/datadog-shimmer/src/shimmer.js +4 -8
- package/packages/dd-trace/src/appsec/api_security_sampler.js +2 -2
- package/packages/dd-trace/src/appsec/blocked_templates.js +1 -1
- package/packages/dd-trace/src/appsec/blocking.js +6 -20
- 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/hsts-header-missing-analyzer.js +7 -12
- package/packages/dd-trace/src/appsec/iast/analyzers/missing-header-analyzer.js +5 -8
- package/packages/dd-trace/src/appsec/iast/analyzers/nosql-injection-mongodb-analyzer.js +4 -0
- package/packages/dd-trace/src/appsec/iast/analyzers/path-traversal-analyzer.js +9 -12
- package/packages/dd-trace/src/appsec/iast/analyzers/vulnerability-analyzer.js +5 -4
- package/packages/dd-trace/src/appsec/iast/context/context-plugin.js +2 -3
- package/packages/dd-trace/src/appsec/iast/iast-plugin.js +3 -3
- package/packages/dd-trace/src/appsec/iast/index.js +1 -0
- package/packages/dd-trace/src/appsec/iast/overhead-controller.js +102 -7
- package/packages/dd-trace/src/appsec/iast/path-line.js +7 -8
- package/packages/dd-trace/src/appsec/iast/security-controls/index.js +16 -24
- package/packages/dd-trace/src/appsec/iast/security-controls/parser.js +6 -6
- package/packages/dd-trace/src/appsec/iast/taint-tracking/filter.js +2 -2
- package/packages/dd-trace/src/appsec/iast/taint-tracking/operations-taint-object.js +3 -3
- package/packages/dd-trace/src/appsec/iast/taint-tracking/operations.js +4 -28
- package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +2 -8
- package/packages/dd-trace/src/appsec/iast/taint-tracking/plugins/kafka.js +3 -4
- package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter-esm.mjs +1 -1
- package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +7 -8
- package/packages/dd-trace/src/appsec/iast/taint-tracking/taint-tracking-impl.js +2 -2
- package/packages/dd-trace/src/appsec/iast/telemetry/span-tags.js +7 -7
- package/packages/dd-trace/src/appsec/iast/telemetry/verbosity.js +2 -3
- 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-analyzers/command-sensitive-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/ldap-sensitive-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/sql-sensitive-analyzer.js +7 -7
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-handler.js +23 -28
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-regex.js +3 -3
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/index.js +4 -4
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/utils.js +6 -11
- package/packages/dd-trace/src/appsec/iast/vulnerabilities.js +0 -1
- package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +9 -11
- package/packages/dd-trace/src/appsec/index.js +5 -5
- package/packages/dd-trace/src/appsec/rasp/index.js +15 -15
- package/packages/dd-trace/src/appsec/rasp/lfi.js +2 -1
- package/packages/dd-trace/src/appsec/reporter.js +232 -41
- package/packages/dd-trace/src/appsec/rule_manager.js +2 -2
- 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/stack_trace.js +2 -4
- package/packages/dd-trace/src/appsec/telemetry/index.js +31 -1
- package/packages/dd-trace/src/appsec/telemetry/rasp.js +3 -5
- package/packages/dd-trace/src/appsec/telemetry/waf.js +3 -5
- package/packages/dd-trace/src/appsec/user_tracking.js +3 -5
- package/packages/dd-trace/src/appsec/waf/waf_context_wrapper.js +8 -4
- package/packages/dd-trace/src/azure_metadata.js +9 -9
- package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/index.js +9 -8
- package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/worker/index.js +2 -2
- package/packages/dd-trace/src/ci-visibility/early-flake-detection/get-known-tests.js +3 -2
- package/packages/dd-trace/src/ci-visibility/exporters/agent-proxy/index.js +3 -3
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/coverage-writer.js +3 -2
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +3 -2
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +3 -2
- package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +6 -4
- package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +6 -5
- package/packages/dd-trace/src/ci-visibility/exporters/test-worker/index.js +7 -6
- package/packages/dd-trace/src/ci-visibility/exporters/test-worker/writer.js +0 -2
- package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +3 -2
- package/packages/dd-trace/src/ci-visibility/log-submission/log-submission-plugin.js +5 -4
- package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +12 -8
- package/packages/dd-trace/src/ci-visibility/telemetry.js +4 -0
- package/packages/dd-trace/src/ci-visibility/test-management/get-test-management-tests.js +3 -2
- package/packages/dd-trace/src/config-helper.js +89 -0
- package/packages/dd-trace/src/config.js +159 -129
- package/packages/dd-trace/src/config_stable.js +10 -7
- package/packages/dd-trace/src/datastreams/encoding.js +9 -9
- package/packages/dd-trace/src/datastreams/fnv.js +2 -2
- package/packages/dd-trace/src/datastreams/pathway.js +4 -4
- package/packages/dd-trace/src/datastreams/processor.js +5 -7
- package/packages/dd-trace/src/datastreams/schemas/schema_builder.js +7 -7
- package/packages/dd-trace/src/datastreams/schemas/schema_sampler.js +4 -6
- package/packages/dd-trace/src/datastreams/size.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/breakpoints.js +75 -69
- package/packages/dd-trace/src/debugger/devtools_client/condition.js +7 -10
- package/packages/dd-trace/src/debugger/devtools_client/defaults.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/index.js +9 -2
- package/packages/dd-trace/src/debugger/devtools_client/remote_config.js +18 -38
- 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/index.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/processor.js +11 -14
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/redaction.js +4 -4
- package/packages/dd-trace/src/debugger/devtools_client/source-maps.js +2 -10
- package/packages/dd-trace/src/debugger/devtools_client/state.js +10 -3
- package/packages/dd-trace/src/debugger/index.js +1 -0
- package/packages/dd-trace/src/dogstatsd.js +7 -6
- package/packages/dd-trace/src/encode/0.4.js +14 -11
- package/packages/dd-trace/src/encode/0.5.js +4 -6
- package/packages/dd-trace/src/encode/agentless-ci-visibility.js +8 -8
- package/packages/dd-trace/src/encode/coverage-ci-visibility.js +1 -1
- package/packages/dd-trace/src/encode/tags-processors.js +1 -1
- package/packages/dd-trace/src/exporter.js +7 -6
- package/packages/dd-trace/src/exporters/agent/writer.js +1 -5
- package/packages/dd-trace/src/exporters/common/docker.js +4 -3
- package/packages/dd-trace/src/exporters/common/form-data.js +6 -4
- package/packages/dd-trace/src/exporters/common/request.js +5 -2
- package/packages/dd-trace/src/exporters/common/util.js +4 -2
- package/packages/dd-trace/src/external-logger/src/index.js +5 -5
- package/packages/dd-trace/src/flare/file.js +1 -5
- package/packages/dd-trace/src/format.js +1 -1
- package/packages/dd-trace/src/git_properties.js +1 -1
- package/packages/dd-trace/src/id.js +15 -9
- package/packages/dd-trace/src/iitm.js +10 -22
- package/packages/dd-trace/src/index.js +4 -3
- package/packages/dd-trace/src/lambda/handler.js +7 -6
- package/packages/dd-trace/src/lambda/index.js +2 -1
- package/packages/dd-trace/src/lambda/runtime/patch.js +7 -6
- package/packages/dd-trace/src/lambda/runtime/ritm.js +4 -3
- 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/bedrockruntime.js +6 -6
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chain.js +2 -6
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chat_model.js +3 -3
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/index.js +11 -13
- package/packages/dd-trace/src/llmobs/plugins/langchain/index.js +6 -6
- package/packages/dd-trace/src/llmobs/plugins/openai.js +2 -3
- package/packages/dd-trace/src/llmobs/sdk.js +4 -3
- package/packages/dd-trace/src/llmobs/span_processor.js +1 -1
- package/packages/dd-trace/src/llmobs/tagger.js +129 -102
- package/packages/dd-trace/src/llmobs/util.js +9 -9
- package/packages/dd-trace/src/llmobs/writers/base.js +1 -1
- package/packages/dd-trace/src/llmobs/writers/util.js +1 -1
- package/packages/dd-trace/src/log/index.js +9 -8
- package/packages/dd-trace/src/log/log.js +1 -1
- package/packages/dd-trace/src/log/writer.js +3 -4
- package/packages/dd-trace/src/msgpack/chunk.js +3 -3
- package/packages/dd-trace/src/msgpack/encoder.js +31 -31
- package/packages/dd-trace/src/noop/dogstatsd.js +6 -6
- package/packages/dd-trace/src/noop/span.js +4 -6
- package/packages/dd-trace/src/noop/tracer.js +1 -2
- package/packages/dd-trace/src/opentelemetry/span_processor.js +2 -2
- package/packages/dd-trace/src/opentelemetry/tracer.js +7 -6
- package/packages/dd-trace/src/opentracing/propagation/log.js +10 -13
- package/packages/dd-trace/src/opentracing/propagation/text_map.js +40 -37
- package/packages/dd-trace/src/opentracing/propagation/tracestate.js +8 -4
- package/packages/dd-trace/src/opentracing/span.js +16 -20
- package/packages/dd-trace/src/opentracing/tracer.js +9 -6
- package/packages/dd-trace/src/payload-tagging/config/index.js +17 -21
- package/packages/dd-trace/src/payload-tagging/index.js +1 -1
- package/packages/dd-trace/src/payload-tagging/tagging.js +6 -6
- package/packages/dd-trace/src/pkg.js +1 -1
- package/packages/dd-trace/src/plugin_manager.js +4 -3
- package/packages/dd-trace/src/plugins/ci_plugin.js +87 -11
- package/packages/dd-trace/src/plugins/consumer.js +2 -2
- package/packages/dd-trace/src/plugins/inbound.js +5 -1
- package/packages/dd-trace/src/plugins/index.js +0 -1
- package/packages/dd-trace/src/plugins/outbound.js +4 -5
- package/packages/dd-trace/src/plugins/plugin.js +1 -1
- package/packages/dd-trace/src/plugins/producer.js +2 -2
- package/packages/dd-trace/src/plugins/storage.js +2 -2
- package/packages/dd-trace/src/plugins/util/ci.js +28 -20
- package/packages/dd-trace/src/plugins/util/git.js +166 -12
- package/packages/dd-trace/src/plugins/util/inferred_proxy.js +1 -1
- package/packages/dd-trace/src/plugins/util/ip_extractor.js +1 -1
- package/packages/dd-trace/src/plugins/util/llm.js +27 -10
- package/packages/dd-trace/src/plugins/util/stacktrace.js +9 -2
- package/packages/dd-trace/src/plugins/util/test.js +315 -51
- package/packages/dd-trace/src/plugins/util/url.js +1 -1
- package/packages/dd-trace/src/plugins/util/urlfilter.js +13 -17
- package/packages/dd-trace/src/plugins/util/user-provided-git.js +14 -4
- package/packages/dd-trace/src/plugins/util/web.js +8 -8
- package/packages/dd-trace/src/priority_sampler.js +64 -53
- package/packages/dd-trace/src/profiling/config.js +51 -35
- 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 +7 -6
- package/packages/dd-trace/src/profiling/exporters/file.js +2 -1
- package/packages/dd-trace/src/profiling/index.js +2 -1
- package/packages/dd-trace/src/profiling/profiler.js +44 -6
- package/packages/dd-trace/src/profiling/profilers/events.js +14 -17
- package/packages/dd-trace/src/profiling/profilers/shared.js +6 -1
- package/packages/dd-trace/src/profiling/profilers/space.js +3 -3
- package/packages/dd-trace/src/profiling/profilers/wall.js +6 -7
- package/packages/dd-trace/src/profiling/ssi-heuristics.js +3 -5
- package/packages/dd-trace/src/profiling/ssi-telemetry-mock-profiler.js +3 -1
- package/packages/dd-trace/src/profiling/tagger.js +21 -13
- package/packages/dd-trace/src/profiling/webspan-utils.js +1 -1
- package/packages/dd-trace/src/proxy.js +9 -10
- package/packages/dd-trace/src/random_sampler.js +40 -0
- package/packages/dd-trace/src/rate_limiter.js +4 -4
- package/packages/dd-trace/src/remote_config/index.js +3 -7
- package/packages/dd-trace/src/remote_config/manager.js +25 -13
- package/packages/dd-trace/src/require-package-json.js +1 -1
- package/packages/dd-trace/src/ritm.js +8 -8
- package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +5 -4
- package/packages/dd-trace/src/sampler.js +41 -4
- package/packages/dd-trace/src/sampling_rule.js +12 -3
- package/packages/dd-trace/src/scope.js +1 -1
- package/packages/dd-trace/src/serverless.js +11 -4
- package/packages/dd-trace/src/service-naming/schemas/util.js +1 -1
- package/packages/dd-trace/src/service-naming/schemas/v0/web.js +2 -3
- package/packages/dd-trace/src/span_processor.js +5 -4
- package/packages/dd-trace/src/span_sampler.js +4 -1
- package/packages/dd-trace/src/standalone/tracesource.js +2 -3
- package/packages/dd-trace/src/standalone/tracesource_priority_sampler.js +1 -2
- package/packages/dd-trace/src/startup-log.js +6 -18
- package/packages/dd-trace/src/supported-configurations.json +439 -0
- package/packages/dd-trace/src/telemetry/dependencies.js +64 -59
- package/packages/dd-trace/src/telemetry/logs/log-collector.js +9 -10
- package/packages/dd-trace/src/telemetry/metrics.js +10 -5
- package/packages/dd-trace/src/telemetry/send-data.js +8 -7
- package/packages/dd-trace/src/telemetry/telemetry.js +31 -45
- package/packages/dd-trace/src/tracer.js +3 -7
- package/packages/dd-trace/src/util.js +1 -6
- package/version.js +1 -0
- package/packages/datadog-instrumentations/src/paperplane.js +0 -77
- package/packages/datadog-plugin-paperplane/src/index.js +0 -25
- package/packages/datadog-plugin-paperplane/src/logger.js +0 -11
- package/packages/datadog-plugin-paperplane/src/server.js +0 -24
- package/packages/dd-trace/src/appsec/iast/analyzers/header-injection-analyzer.js +0 -122
- 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,9 +104,9 @@ 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
|
-
return !isNaN(parseFloat(value))
|
|
109
|
+
return !Number.isNaN(Number.parseFloat(value))
|
|
109
110
|
case 'OTEL_SDK_DISABLED':
|
|
110
111
|
return value.toLowerCase() === 'true' || value.toLowerCase() === 'false'
|
|
111
112
|
case 'OTEL_TRACES_EXPORTER':
|
|
@@ -119,27 +120,24 @@ 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
|
}
|
|
131
132
|
}
|
|
132
133
|
}
|
|
133
134
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
const defaultWafObfuscatorKeyRegex = '(?i)pass|pw(?:or)?d|secret|(?:api|private|public|access)[_-]?key|token|consumer[_-]?(?:id|key|secret)|sign(?:ed|ature)|bearer|authorization|jsessionid|phpsessid|asp\\.net[_-]sessionid|sid|jwt'
|
|
141
|
-
// eslint-disable-next-line @stylistic/js/max-len
|
|
142
|
-
const defaultWafObfuscatorValueRegex = '(?i)(?:p(?:ass)?w(?:or)?d|pass(?:[_-]?phrase)?|secret(?:[_-]?key)?|(?:(?:api|private|public|access)[_-]?)key(?:[_-]?id)?|(?:(?:auth|access|id|refresh)[_-]?)?token|consumer[_-]?(?:id|key|secret)|sign(?:ed|ature)?|auth(?:entication|orization)?|jsessionid|phpsessid|asp\\.net(?:[_-]|-)sessionid|sid|jwt)(?:\\s*=([^;&]+)|"\\s*:\\s*("[^"]+"|\\d+))|bearer\\s+([a-z0-9\\._\\-]+)|token\\s*:\\s*([a-z0-9]{13})|gh[opsu]_([0-9a-zA-Z]{36})|ey[I-L][\\w=-]+\\.(ey[I-L][\\w=-]+(?:\\.[\\w.+\\/=-]+)?)|[\\-]{5}BEGIN[a-z\\s]+PRIVATE\\sKEY[\\-]{5}([^\\-]+)[\\-]{5}END[a-z\\s]+PRIVATE\\sKEY|ssh-rsa\\s*([a-z0-9\\/\\.+]{100,})'
|
|
135
|
+
// eslint-disable-next-line @stylistic/max-len
|
|
136
|
+
const qsRegex = String.raw`(?:p(?:ass)?w(?:or)?d|pass(?:_?phrase)?|secret|(?:api_?|private_?|public_?|access_?|secret_?)key(?:_?id)?|token|consumer_?(?:id|key|secret)|sign(?:ed|ature)?|auth(?:entication|orization)?)(?:(?:\s|%20)*(?:=|%3D)[^&]+|(?:"|%22)(?:\s|%20)*(?::|%3A)(?:\s|%20)*(?:"|%22)(?:%2[^2]|%[^2]|[^"%])+(?:"|%22))|bearer(?:\s|%20)+[a-z0-9\._\-]+|token(?::|%3A)[a-z0-9]{13}|gh[opsu]_[0-9a-zA-Z]{36}|ey[I-L](?:[\w=-]|%3D)+\.ey[I-L](?:[\w=-]|%3D)+(?:\.(?:[\w.+\/=-]|%3D|%2F|%2B)+)?|[\-]{5}BEGIN(?:[a-z\s]|%20)+PRIVATE(?:\s|%20)KEY[\-]{5}[^\-]+[\-]{5}END(?:[a-z\s]|%20)+PRIVATE(?:\s|%20)KEY|ssh-rsa(?:\s|%20)*(?:[a-z0-9\/\.+]|%2F|%5C|%2B){100,}`
|
|
137
|
+
// eslint-disable-next-line @stylistic/max-len
|
|
138
|
+
const defaultWafObfuscatorKeyRegex = String.raw`(?i)pass|pw(?:or)?d|secret|(?:api|private|public|access)[_-]?key|token|consumer[_-]?(?:id|key|secret)|sign(?:ed|ature)|bearer|authorization|jsessionid|phpsessid|asp\.net[_-]sessionid|sid|jwt`
|
|
139
|
+
// eslint-disable-next-line @stylistic/max-len
|
|
140
|
+
const defaultWafObfuscatorValueRegex = String.raw`(?i)(?:p(?:ass)?w(?:or)?d|pass(?:[_-]?phrase)?|secret(?:[_-]?key)?|(?:(?:api|private|public|access)[_-]?)key(?:[_-]?id)?|(?:(?:auth|access|id|refresh)[_-]?)?token|consumer[_-]?(?:id|key|secret)|sign(?:ed|ature)?|auth(?:entication|orization)?|jsessionid|phpsessid|asp\.net(?:[_-]|-)sessionid|sid|jwt)(?:\s*=([^;&]+)|"\s*:\s*("[^"]+"|\d+))|bearer\s+([a-z0-9\._\-]+)|token\s*:\s*([a-z0-9]{13})|gh[opsu]_([0-9a-zA-Z]{36})|ey[I-L][\w=-]+\.(ey[I-L][\w=-]+(?:\.[\w.+\/=-]+)?)|[\-]{5}BEGIN[a-z\s]+PRIVATE\sKEY[\-]{5}([^\-]+)[\-]{5}END[a-z\s]+PRIVATE\sKEY|ssh-rsa\s*([a-z0-9\/\.+]{100,})`
|
|
143
141
|
const runtimeId = uuid()
|
|
144
142
|
|
|
145
143
|
function maybeFile (filepath) {
|
|
@@ -148,26 +146,23 @@ function maybeFile (filepath) {
|
|
|
148
146
|
return fs.readFileSync(filepath, 'utf8')
|
|
149
147
|
} catch (e) {
|
|
150
148
|
log.error('Error reading file %s', filepath, e)
|
|
151
|
-
return undefined
|
|
152
149
|
}
|
|
153
150
|
}
|
|
154
151
|
|
|
155
152
|
function safeJsonParse (input) {
|
|
156
153
|
try {
|
|
157
154
|
return JSON.parse(input)
|
|
158
|
-
} catch
|
|
159
|
-
return undefined
|
|
160
|
-
}
|
|
155
|
+
} catch {}
|
|
161
156
|
}
|
|
162
157
|
|
|
163
|
-
const namingVersions = ['v0', 'v1']
|
|
158
|
+
const namingVersions = new Set(['v0', 'v1'])
|
|
164
159
|
const defaultNamingVersion = 'v0'
|
|
165
160
|
|
|
166
161
|
function validateNamingVersion (versionString) {
|
|
167
162
|
if (!versionString) {
|
|
168
163
|
return defaultNamingVersion
|
|
169
164
|
}
|
|
170
|
-
if (!namingVersions.
|
|
165
|
+
if (!namingVersions.has(versionString)) {
|
|
171
166
|
log.warn(
|
|
172
167
|
`Unexpected input for config.spanAttributeSchema, picked default ${defaultNamingVersion}`
|
|
173
168
|
)
|
|
@@ -184,7 +179,7 @@ function validateNamingVersion (versionString) {
|
|
|
184
179
|
* @param {string | string[]} input
|
|
185
180
|
*/
|
|
186
181
|
function splitJSONPathRules (input) {
|
|
187
|
-
if (!input) return
|
|
182
|
+
if (!input) return
|
|
188
183
|
if (Array.isArray(input)) return input
|
|
189
184
|
if (input === 'all') return []
|
|
190
185
|
return input.split(',')
|
|
@@ -217,7 +212,8 @@ function propagationStyle (key, option) {
|
|
|
217
212
|
// Otherwise, fallback to env var parsing
|
|
218
213
|
const envKey = `DD_TRACE_PROPAGATION_STYLE_${key.toUpperCase()}`
|
|
219
214
|
|
|
220
|
-
const envVar = coalesce(
|
|
215
|
+
const envVar = coalesce(getEnvironmentVariable(envKey),
|
|
216
|
+
getEnvironmentVariable('DD_TRACE_PROPAGATION_STYLE'), getEnvironmentVariable('OTEL_PROPAGATORS'))
|
|
221
217
|
if (envVar !== undefined) {
|
|
222
218
|
return envVar.split(',')
|
|
223
219
|
.filter(v => v !== '')
|
|
@@ -245,8 +241,8 @@ class Config {
|
|
|
245
241
|
|
|
246
242
|
options = {
|
|
247
243
|
...options,
|
|
248
|
-
appsec: options.appsec
|
|
249
|
-
iast: options.iast
|
|
244
|
+
appsec: options.appsec == null ? options.experimental?.appsec : options.appsec,
|
|
245
|
+
iast: options.iast == null ? options.experimental?.iast : options.iast
|
|
250
246
|
}
|
|
251
247
|
|
|
252
248
|
// Configure the logger first so it can be used to warn about other configs
|
|
@@ -271,14 +267,11 @@ class Config {
|
|
|
271
267
|
|
|
272
268
|
checkIfBothOtelAndDdEnvVarSet()
|
|
273
269
|
|
|
274
|
-
const DD_API_KEY =
|
|
275
|
-
process.env.DATADOG_API_KEY,
|
|
276
|
-
process.env.DD_API_KEY
|
|
277
|
-
)
|
|
270
|
+
const DD_API_KEY = getEnvironmentVariable('DD_API_KEY')
|
|
278
271
|
|
|
279
|
-
if (
|
|
280
|
-
|
|
281
|
-
|
|
272
|
+
if (getEnvironmentVariable('DD_TRACE_PROPAGATION_STYLE') && (
|
|
273
|
+
getEnvironmentVariable('DD_TRACE_PROPAGATION_STYLE_INJECT') ||
|
|
274
|
+
getEnvironmentVariable('DD_TRACE_PROPAGATION_STYLE_EXTRACT')
|
|
282
275
|
)) {
|
|
283
276
|
log.warn(
|
|
284
277
|
'Use either the DD_TRACE_PROPAGATION_STYLE environment variable or separate ' +
|
|
@@ -300,34 +293,34 @@ class Config {
|
|
|
300
293
|
}
|
|
301
294
|
|
|
302
295
|
const DD_INSTRUMENTATION_INSTALL_ID = coalesce(
|
|
303
|
-
|
|
296
|
+
getEnvironmentVariable('DD_INSTRUMENTATION_INSTALL_ID'),
|
|
304
297
|
null
|
|
305
298
|
)
|
|
306
299
|
const DD_INSTRUMENTATION_INSTALL_TIME = coalesce(
|
|
307
|
-
|
|
300
|
+
getEnvironmentVariable('DD_INSTRUMENTATION_INSTALL_TIME'),
|
|
308
301
|
null
|
|
309
302
|
)
|
|
310
303
|
const DD_INSTRUMENTATION_INSTALL_TYPE = coalesce(
|
|
311
|
-
|
|
304
|
+
getEnvironmentVariable('DD_INSTRUMENTATION_INSTALL_TYPE'),
|
|
312
305
|
null
|
|
313
306
|
)
|
|
314
307
|
|
|
315
308
|
const DD_TRACE_CLOUD_REQUEST_PAYLOAD_TAGGING = splitJSONPathRules(
|
|
316
309
|
coalesce(
|
|
317
|
-
|
|
310
|
+
getEnvironmentVariable('DD_TRACE_CLOUD_REQUEST_PAYLOAD_TAGGING'),
|
|
318
311
|
options.cloudPayloadTagging?.request,
|
|
319
312
|
''
|
|
320
313
|
))
|
|
321
314
|
|
|
322
315
|
const DD_TRACE_CLOUD_RESPONSE_PAYLOAD_TAGGING = splitJSONPathRules(
|
|
323
316
|
coalesce(
|
|
324
|
-
|
|
317
|
+
getEnvironmentVariable('DD_TRACE_CLOUD_RESPONSE_PAYLOAD_TAGGING'),
|
|
325
318
|
options.cloudPayloadTagging?.response,
|
|
326
319
|
''
|
|
327
320
|
))
|
|
328
321
|
|
|
329
322
|
const DD_TRACE_CLOUD_PAYLOAD_TAGGING_MAX_DEPTH = coalesce(
|
|
330
|
-
|
|
323
|
+
getEnvironmentVariable('DD_TRACE_CLOUD_PAYLOAD_TAGGING_MAX_DEPTH'),
|
|
331
324
|
options.cloudPayloadTagging?.maxDepth,
|
|
332
325
|
10
|
|
333
326
|
)
|
|
@@ -376,17 +369,17 @@ class Config {
|
|
|
376
369
|
if (this.gitMetadataEnabled) {
|
|
377
370
|
this.repositoryUrl = removeUserSensitiveInfo(
|
|
378
371
|
coalesce(
|
|
379
|
-
|
|
372
|
+
getEnvironmentVariable('DD_GIT_REPOSITORY_URL'),
|
|
380
373
|
this.tags[GIT_REPOSITORY_URL]
|
|
381
374
|
)
|
|
382
375
|
)
|
|
383
376
|
this.commitSHA = coalesce(
|
|
384
|
-
|
|
377
|
+
getEnvironmentVariable('DD_GIT_COMMIT_SHA'),
|
|
385
378
|
this.tags[GIT_COMMIT_SHA]
|
|
386
379
|
)
|
|
387
380
|
if (!this.repositoryUrl || !this.commitSHA) {
|
|
388
381
|
const DD_GIT_PROPERTIES_FILE = coalesce(
|
|
389
|
-
|
|
382
|
+
getEnvironmentVariable('DD_GIT_PROPERTIES_FILE'),
|
|
390
383
|
`${process.cwd()}/git.properties`
|
|
391
384
|
)
|
|
392
385
|
let gitPropertiesString
|
|
@@ -394,7 +387,7 @@ class Config {
|
|
|
394
387
|
gitPropertiesString = fs.readFileSync(DD_GIT_PROPERTIES_FILE, 'utf8')
|
|
395
388
|
} catch (e) {
|
|
396
389
|
// Only log error if the user has set a git.properties path
|
|
397
|
-
if (
|
|
390
|
+
if (getEnvironmentVariable('DD_GIT_PROPERTIES_FILE')) {
|
|
398
391
|
log.error('Error reading DD_GIT_PROPERTIES_FILE: %s', DD_GIT_PROPERTIES_FILE, e)
|
|
399
392
|
}
|
|
400
393
|
}
|
|
@@ -424,13 +417,12 @@ class Config {
|
|
|
424
417
|
// TODO: Remove the experimental env vars as a major?
|
|
425
418
|
const DD_TRACE_B3_ENABLED = coalesce(
|
|
426
419
|
options.experimental && options.experimental.b3,
|
|
427
|
-
|
|
420
|
+
getEnvironmentVariable('DD_TRACE_EXPERIMENTAL_B3_ENABLED'),
|
|
428
421
|
false
|
|
429
422
|
)
|
|
430
423
|
const defaultPropagationStyle = ['datadog', 'tracecontext']
|
|
431
424
|
if (isTrue(DD_TRACE_B3_ENABLED)) {
|
|
432
|
-
defaultPropagationStyle.push('b3')
|
|
433
|
-
defaultPropagationStyle.push('b3 single header')
|
|
425
|
+
defaultPropagationStyle.push('b3', 'b3 single header')
|
|
434
426
|
}
|
|
435
427
|
return defaultPropagationStyle
|
|
436
428
|
}
|
|
@@ -446,7 +438,7 @@ class Config {
|
|
|
446
438
|
FUNCTION_NAME,
|
|
447
439
|
K_SERVICE,
|
|
448
440
|
WEBSITE_SITE_NAME
|
|
449
|
-
} =
|
|
441
|
+
} = getEnvironmentVariables()
|
|
450
442
|
|
|
451
443
|
const service = AWS_LAMBDA_FUNCTION_NAME ||
|
|
452
444
|
FUNCTION_NAME || // Google Cloud Function Name set by deprecated runtimes
|
|
@@ -460,16 +452,20 @@ class Config {
|
|
|
460
452
|
this._setBoolean(defaults, 'apmTracingEnabled', true)
|
|
461
453
|
this._setValue(defaults, 'appsec.apiSecurity.enabled', true)
|
|
462
454
|
this._setValue(defaults, 'appsec.apiSecurity.sampleDelay', 30)
|
|
463
|
-
this._setValue(defaults, 'appsec.blockedTemplateGraphql'
|
|
464
|
-
this._setValue(defaults, 'appsec.blockedTemplateHtml'
|
|
465
|
-
this._setValue(defaults, 'appsec.blockedTemplateJson'
|
|
466
|
-
this._setValue(defaults, 'appsec.enabled'
|
|
455
|
+
this._setValue(defaults, 'appsec.blockedTemplateGraphql')
|
|
456
|
+
this._setValue(defaults, 'appsec.blockedTemplateHtml')
|
|
457
|
+
this._setValue(defaults, 'appsec.blockedTemplateJson')
|
|
458
|
+
this._setValue(defaults, 'appsec.enabled')
|
|
467
459
|
this._setValue(defaults, 'appsec.eventTracking.mode', 'identification')
|
|
460
|
+
this._setValue(defaults, 'appsec.extendedHeadersCollection.enabled', false)
|
|
461
|
+
this._setValue(defaults, 'appsec.extendedHeadersCollection.redaction', true)
|
|
462
|
+
this._setValue(defaults, 'appsec.extendedHeadersCollection.maxHeaders', 50)
|
|
468
463
|
this._setValue(defaults, 'appsec.obfuscatorKeyRegex', defaultWafObfuscatorKeyRegex)
|
|
469
464
|
this._setValue(defaults, 'appsec.obfuscatorValueRegex', defaultWafObfuscatorValueRegex)
|
|
470
465
|
this._setValue(defaults, 'appsec.rasp.enabled', true)
|
|
466
|
+
this._setValue(defaults, 'appsec.rasp.bodyCollection', false)
|
|
471
467
|
this._setValue(defaults, 'appsec.rateLimit', 100)
|
|
472
|
-
this._setValue(defaults, 'appsec.rules'
|
|
468
|
+
this._setValue(defaults, 'appsec.rules')
|
|
473
469
|
this._setValue(defaults, 'appsec.sca.enabled', null)
|
|
474
470
|
this._setValue(defaults, 'appsec.stackTrace.enabled', true)
|
|
475
471
|
this._setValue(defaults, 'appsec.stackTrace.maxDepth', 32)
|
|
@@ -477,6 +473,7 @@ class Config {
|
|
|
477
473
|
this._setValue(defaults, 'appsec.wafTimeout', 5e3) // µs
|
|
478
474
|
this._setValue(defaults, 'baggageMaxBytes', 8192)
|
|
479
475
|
this._setValue(defaults, 'baggageMaxItems', 64)
|
|
476
|
+
this._setValue(defaults, 'baggageTagKeys', 'user.id,session.id,account.id')
|
|
480
477
|
this._setValue(defaults, 'ciVisibilityTestSessionName', '')
|
|
481
478
|
this._setValue(defaults, 'clientIpEnabled', false)
|
|
482
479
|
this._setValue(defaults, 'clientIpHeader', null)
|
|
@@ -490,9 +487,9 @@ class Config {
|
|
|
490
487
|
this._setValue(defaults, 'dynamicInstrumentation.enabled', false)
|
|
491
488
|
this._setValue(defaults, 'dynamicInstrumentation.redactedIdentifiers', [])
|
|
492
489
|
this._setValue(defaults, 'dynamicInstrumentation.redactionExcludedIdentifiers', [])
|
|
493
|
-
this._setValue(defaults, 'env'
|
|
490
|
+
this._setValue(defaults, 'env')
|
|
494
491
|
this._setValue(defaults, 'experimental.enableGetRumData', false)
|
|
495
|
-
this._setValue(defaults, 'experimental.exporter'
|
|
492
|
+
this._setValue(defaults, 'experimental.exporter')
|
|
496
493
|
this._setValue(defaults, 'experimental.runtimeId', false)
|
|
497
494
|
this._setValue(defaults, 'flushInterval', 2000)
|
|
498
495
|
this._setValue(defaults, 'flushMinSpans', 1000)
|
|
@@ -525,10 +522,10 @@ class Config {
|
|
|
525
522
|
this._setValue(defaults, 'isIntelligentTestRunnerEnabled', false)
|
|
526
523
|
this._setValue(defaults, 'isManualApiEnabled', false)
|
|
527
524
|
this._setValue(defaults, 'langchain.spanCharLimit', 128)
|
|
528
|
-
this._setValue(defaults, 'langchain.spanPromptCompletionSampleRate', 1
|
|
529
|
-
this._setValue(defaults, 'llmobs.agentlessEnabled'
|
|
525
|
+
this._setValue(defaults, 'langchain.spanPromptCompletionSampleRate', 1)
|
|
526
|
+
this._setValue(defaults, 'llmobs.agentlessEnabled')
|
|
530
527
|
this._setValue(defaults, 'llmobs.enabled', false)
|
|
531
|
-
this._setValue(defaults, 'llmobs.mlApp'
|
|
528
|
+
this._setValue(defaults, 'llmobs.mlApp')
|
|
532
529
|
this._setValue(defaults, 'ciVisibilityTestSessionName', '')
|
|
533
530
|
this._setValue(defaults, 'ciVisAgentlessLogSubmissionEnabled', false)
|
|
534
531
|
this._setValue(defaults, 'legacyBaggageEnabled', true)
|
|
@@ -536,8 +533,9 @@ class Config {
|
|
|
536
533
|
this._setValue(defaults, 'isServiceUserProvided', false)
|
|
537
534
|
this._setValue(defaults, 'testManagementAttemptToFixRetries', 20)
|
|
538
535
|
this._setValue(defaults, 'isTestManagementEnabled', false)
|
|
536
|
+
this._setValue(defaults, 'isImpactedTestsEnabled', false)
|
|
539
537
|
this._setValue(defaults, 'logInjection', false)
|
|
540
|
-
this._setValue(defaults, 'lookup'
|
|
538
|
+
this._setValue(defaults, 'lookup')
|
|
541
539
|
this._setValue(defaults, 'inferredProxyServicesEnabled', false)
|
|
542
540
|
this._setValue(defaults, 'memcachedCommandEnabled', false)
|
|
543
541
|
this._setValue(defaults, 'middlewareTracingEnabled', true)
|
|
@@ -546,21 +544,21 @@ class Config {
|
|
|
546
544
|
this._setValue(defaults, 'peerServiceMapping', {})
|
|
547
545
|
this._setValue(defaults, 'plugins', true)
|
|
548
546
|
this._setValue(defaults, 'port', '8126')
|
|
549
|
-
this._setValue(defaults, 'profiling.enabled'
|
|
547
|
+
this._setValue(defaults, 'profiling.enabled')
|
|
550
548
|
this._setValue(defaults, 'profiling.exporters', 'agent')
|
|
551
549
|
this._setValue(defaults, 'profiling.sourceMap', true)
|
|
552
|
-
this._setValue(defaults, 'profiling.longLivedThreshold'
|
|
550
|
+
this._setValue(defaults, 'profiling.longLivedThreshold')
|
|
553
551
|
this._setValue(defaults, 'protocolVersion', '0.4')
|
|
554
552
|
this._setValue(defaults, 'queryStringObfuscation', qsRegex)
|
|
555
553
|
this._setValue(defaults, 'remoteConfig.enabled', true)
|
|
556
554
|
this._setValue(defaults, 'remoteConfig.pollInterval', 5) // seconds
|
|
557
555
|
this._setValue(defaults, 'reportHostname', false)
|
|
558
556
|
this._setValue(defaults, 'runtimeMetrics', false)
|
|
559
|
-
this._setValue(defaults, 'sampleRate'
|
|
557
|
+
this._setValue(defaults, 'sampleRate')
|
|
560
558
|
this._setValue(defaults, 'sampler.rateLimit', 100)
|
|
561
559
|
this._setValue(defaults, 'sampler.rules', [])
|
|
562
560
|
this._setValue(defaults, 'sampler.spanSamplingRules', [])
|
|
563
|
-
this._setValue(defaults, 'scope'
|
|
561
|
+
this._setValue(defaults, 'scope')
|
|
564
562
|
this._setValue(defaults, 'service', service)
|
|
565
563
|
this._setValue(defaults, 'serviceMapping', {})
|
|
566
564
|
this._setValue(defaults, 'site', 'datadoghq.com')
|
|
@@ -575,7 +573,7 @@ class Config {
|
|
|
575
573
|
this._setValue(defaults, 'telemetry.debug', false)
|
|
576
574
|
this._setValue(defaults, 'telemetry.dependencyCollection', true)
|
|
577
575
|
this._setValue(defaults, 'telemetry.enabled', true)
|
|
578
|
-
this._setValue(defaults, 'telemetry.heartbeatInterval',
|
|
576
|
+
this._setValue(defaults, 'telemetry.heartbeatInterval', 60_000)
|
|
579
577
|
this._setValue(defaults, 'telemetry.logCollection', true)
|
|
580
578
|
this._setValue(defaults, 'telemetry.metrics', true)
|
|
581
579
|
this._setValue(defaults, 'traceEnabled', true)
|
|
@@ -587,13 +585,13 @@ class Config {
|
|
|
587
585
|
this._setValue(defaults, 'tracePropagationStyle.extract', ['datadog', 'tracecontext', 'baggage'])
|
|
588
586
|
this._setValue(defaults, 'tracePropagationStyle.otelPropagators', false)
|
|
589
587
|
this._setValue(defaults, 'tracing', true)
|
|
590
|
-
this._setValue(defaults, 'url'
|
|
588
|
+
this._setValue(defaults, 'url')
|
|
591
589
|
this._setValue(defaults, 'version', pkg.version)
|
|
592
|
-
this._setValue(defaults, 'instrumentation_config_id'
|
|
590
|
+
this._setValue(defaults, 'instrumentation_config_id')
|
|
593
591
|
this._setValue(defaults, 'vertexai.spanCharLimit', 128)
|
|
594
|
-
this._setValue(defaults, 'vertexai.spanPromptCompletionSampleRate', 1
|
|
592
|
+
this._setValue(defaults, 'vertexai.spanPromptCompletionSampleRate', 1)
|
|
595
593
|
this._setValue(defaults, 'trace.aws.addSpanPointers', true)
|
|
596
|
-
this._setValue(defaults, 'trace.dynamoDb.tablePrimaryKeys'
|
|
594
|
+
this._setValue(defaults, 'trace.dynamoDb.tablePrimaryKeys')
|
|
597
595
|
this._setValue(defaults, 'trace.nativeSpanEvents', false)
|
|
598
596
|
}
|
|
599
597
|
|
|
@@ -644,11 +642,13 @@ class Config {
|
|
|
644
642
|
DD_API_SECURITY_SAMPLE_DELAY,
|
|
645
643
|
DD_APM_TRACING_ENABLED,
|
|
646
644
|
DD_APPSEC_AUTO_USER_INSTRUMENTATION_MODE,
|
|
647
|
-
|
|
645
|
+
DD_APPSEC_COLLECT_ALL_HEADERS,
|
|
648
646
|
DD_APPSEC_ENABLED,
|
|
649
647
|
DD_APPSEC_GRAPHQL_BLOCKED_TEMPLATE_JSON,
|
|
648
|
+
DD_APPSEC_HEADER_COLLECTION_REDACTION_ENABLED,
|
|
650
649
|
DD_APPSEC_HTTP_BLOCKED_TEMPLATE_HTML,
|
|
651
650
|
DD_APPSEC_HTTP_BLOCKED_TEMPLATE_JSON,
|
|
651
|
+
DD_APPSEC_MAX_COLLECTED_HEADERS,
|
|
652
652
|
DD_APPSEC_MAX_STACK_TRACES,
|
|
653
653
|
DD_APPSEC_MAX_STACK_TRACE_DEPTH,
|
|
654
654
|
DD_APPSEC_OBFUSCATION_PARAMETER_KEY_REGEXP,
|
|
@@ -657,6 +657,7 @@ class Config {
|
|
|
657
657
|
DD_APPSEC_SCA_ENABLED,
|
|
658
658
|
DD_APPSEC_STACK_TRACE_ENABLED,
|
|
659
659
|
DD_APPSEC_RASP_ENABLED,
|
|
660
|
+
DD_APPSEC_RASP_COLLECT_REQUEST_BODY,
|
|
660
661
|
DD_APPSEC_TRACE_RATE_LIMIT,
|
|
661
662
|
DD_APPSEC_WAF_TIMEOUT,
|
|
662
663
|
DD_CRASHTRACKING_ENABLED,
|
|
@@ -664,16 +665,14 @@ class Config {
|
|
|
664
665
|
DD_CODE_ORIGIN_FOR_SPANS_EXPERIMENTAL_EXIT_SPANS_ENABLED,
|
|
665
666
|
DD_DATA_STREAMS_ENABLED,
|
|
666
667
|
DD_DBM_PROPAGATION_MODE,
|
|
667
|
-
DD_DOGSTATSD_HOSTNAME,
|
|
668
668
|
DD_DOGSTATSD_HOST,
|
|
669
669
|
DD_DOGSTATSD_PORT,
|
|
670
670
|
DD_DYNAMIC_INSTRUMENTATION_ENABLED,
|
|
671
671
|
DD_DYNAMIC_INSTRUMENTATION_REDACTED_IDENTIFIERS,
|
|
672
672
|
DD_DYNAMIC_INSTRUMENTATION_REDACTION_EXCLUDED_IDENTIFIERS,
|
|
673
673
|
DD_ENV,
|
|
674
|
-
DD_EXPERIMENTAL_API_SECURITY_ENABLED,
|
|
675
674
|
DD_EXPERIMENTAL_APPSEC_STANDALONE_ENABLED,
|
|
676
|
-
|
|
675
|
+
DD_PROFILING_ENABLED,
|
|
677
676
|
DD_GRPC_CLIENT_ERROR_STATUSES,
|
|
678
677
|
DD_GRPC_SERVER_ERROR_STATUSES,
|
|
679
678
|
JEST_WORKER_ID,
|
|
@@ -700,7 +699,6 @@ class Config {
|
|
|
700
699
|
DD_LLMOBS_ML_APP,
|
|
701
700
|
DD_OPENAI_LOGS_ENABLED,
|
|
702
701
|
DD_OPENAI_SPAN_CHAR_LIMIT,
|
|
703
|
-
DD_PROFILING_ENABLED,
|
|
704
702
|
DD_PROFILING_EXPORTERS,
|
|
705
703
|
DD_PROFILING_SOURCE_MAP,
|
|
706
704
|
DD_INTERNAL_PROFILING_LONG_LIVED_THRESHOLD,
|
|
@@ -709,7 +707,6 @@ class Config {
|
|
|
709
707
|
DD_RUNTIME_METRICS_ENABLED,
|
|
710
708
|
DD_SERVICE,
|
|
711
709
|
DD_SERVICE_MAPPING,
|
|
712
|
-
DD_SERVICE_NAME,
|
|
713
710
|
DD_SITE,
|
|
714
711
|
DD_SPAN_SAMPLING_RULES,
|
|
715
712
|
DD_SPAN_SAMPLING_RULES_FILE,
|
|
@@ -721,12 +718,12 @@ class Config {
|
|
|
721
718
|
DD_TELEMETRY_METRICS_ENABLED,
|
|
722
719
|
DD_TRACE_128_BIT_TRACEID_GENERATION_ENABLED,
|
|
723
720
|
DD_TRACE_128_BIT_TRACEID_LOGGING_ENABLED,
|
|
724
|
-
DD_TRACE_AGENT_HOSTNAME,
|
|
725
721
|
DD_TRACE_AGENT_PORT,
|
|
726
722
|
DD_TRACE_AGENT_PROTOCOL_VERSION,
|
|
727
723
|
DD_TRACE_AWS_ADD_SPAN_POINTERS,
|
|
728
724
|
DD_TRACE_BAGGAGE_MAX_BYTES,
|
|
729
725
|
DD_TRACE_BAGGAGE_MAX_ITEMS,
|
|
726
|
+
DD_TRACE_BAGGAGE_TAG_KEYS,
|
|
730
727
|
DD_TRACE_CLIENT_IP_ENABLED,
|
|
731
728
|
DD_TRACE_CLIENT_IP_HEADER,
|
|
732
729
|
DD_TRACE_DYNAMODB_TABLE_PRIMARY_KEYS,
|
|
@@ -759,7 +756,6 @@ class Config {
|
|
|
759
756
|
DD_TRACE_SPAN_LEAK_DEBUG,
|
|
760
757
|
DD_TRACE_STARTUP_LOGS,
|
|
761
758
|
DD_TRACE_TAGS,
|
|
762
|
-
DD_TRACE_TELEMETRY_ENABLED,
|
|
763
759
|
DD_TRACE_X_DATADOG_TAGS_MAX_LENGTH,
|
|
764
760
|
DD_TRACING_ENABLED,
|
|
765
761
|
DD_VERSION,
|
|
@@ -773,7 +769,7 @@ class Config {
|
|
|
773
769
|
OTEL_SERVICE_NAME,
|
|
774
770
|
OTEL_TRACES_SAMPLER,
|
|
775
771
|
OTEL_TRACES_SAMPLER_ARG
|
|
776
|
-
} =
|
|
772
|
+
} = getEnvironmentVariables()
|
|
777
773
|
|
|
778
774
|
const tags = {}
|
|
779
775
|
const env = setHiddenProperty(this, '_env', {})
|
|
@@ -788,10 +784,7 @@ class Config {
|
|
|
788
784
|
DD_APM_TRACING_ENABLED,
|
|
789
785
|
DD_EXPERIMENTAL_APPSEC_STANDALONE_ENABLED && isFalse(DD_EXPERIMENTAL_APPSEC_STANDALONE_ENABLED)
|
|
790
786
|
))
|
|
791
|
-
this._setBoolean(env, 'appsec.apiSecurity.enabled',
|
|
792
|
-
DD_API_SECURITY_ENABLED && isTrue(DD_API_SECURITY_ENABLED),
|
|
793
|
-
DD_EXPERIMENTAL_API_SECURITY_ENABLED && isTrue(DD_EXPERIMENTAL_API_SECURITY_ENABLED)
|
|
794
|
-
))
|
|
787
|
+
this._setBoolean(env, 'appsec.apiSecurity.enabled', DD_API_SECURITY_ENABLED && isTrue(DD_API_SECURITY_ENABLED))
|
|
795
788
|
this._setValue(env, 'appsec.apiSecurity.sampleDelay', maybeFloat(DD_API_SECURITY_SAMPLE_DELAY))
|
|
796
789
|
this._setValue(env, 'appsec.blockedTemplateGraphql', maybeFile(DD_APPSEC_GRAPHQL_BLOCKED_TEMPLATE_JSON))
|
|
797
790
|
this._setValue(env, 'appsec.blockedTemplateHtml', maybeFile(DD_APPSEC_HTTP_BLOCKED_TEMPLATE_HTML))
|
|
@@ -799,13 +792,19 @@ class Config {
|
|
|
799
792
|
this._setValue(env, 'appsec.blockedTemplateJson', maybeFile(DD_APPSEC_HTTP_BLOCKED_TEMPLATE_JSON))
|
|
800
793
|
this._envUnprocessed['appsec.blockedTemplateJson'] = DD_APPSEC_HTTP_BLOCKED_TEMPLATE_JSON
|
|
801
794
|
this._setBoolean(env, 'appsec.enabled', DD_APPSEC_ENABLED)
|
|
802
|
-
this._setString(env, 'appsec.eventTracking.mode',
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
795
|
+
this._setString(env, 'appsec.eventTracking.mode', DD_APPSEC_AUTO_USER_INSTRUMENTATION_MODE)
|
|
796
|
+
this._setBoolean(env, 'appsec.extendedHeadersCollection.enabled', DD_APPSEC_COLLECT_ALL_HEADERS)
|
|
797
|
+
this._setBoolean(
|
|
798
|
+
env,
|
|
799
|
+
'appsec.extendedHeadersCollection.redaction',
|
|
800
|
+
DD_APPSEC_HEADER_COLLECTION_REDACTION_ENABLED
|
|
801
|
+
)
|
|
802
|
+
this._setValue(env, 'appsec.extendedHeadersCollection.maxHeaders', maybeInt(DD_APPSEC_MAX_COLLECTED_HEADERS))
|
|
803
|
+
this._envUnprocessed['appsec.extendedHeadersCollection.maxHeaders'] = DD_APPSEC_MAX_COLLECTED_HEADERS
|
|
806
804
|
this._setString(env, 'appsec.obfuscatorKeyRegex', DD_APPSEC_OBFUSCATION_PARAMETER_KEY_REGEXP)
|
|
807
805
|
this._setString(env, 'appsec.obfuscatorValueRegex', DD_APPSEC_OBFUSCATION_PARAMETER_VALUE_REGEXP)
|
|
808
806
|
this._setBoolean(env, 'appsec.rasp.enabled', DD_APPSEC_RASP_ENABLED)
|
|
807
|
+
this._setBoolean(env, 'appsec.rasp.bodyCollection', DD_APPSEC_RASP_COLLECT_REQUEST_BODY)
|
|
809
808
|
this._setValue(env, 'appsec.rateLimit', maybeInt(DD_APPSEC_TRACE_RATE_LIMIT))
|
|
810
809
|
this._envUnprocessed['appsec.rateLimit'] = DD_APPSEC_TRACE_RATE_LIMIT
|
|
811
810
|
this._setString(env, 'appsec.rules', DD_APPSEC_RULES)
|
|
@@ -820,6 +819,7 @@ class Config {
|
|
|
820
819
|
this._envUnprocessed['appsec.wafTimeout'] = DD_APPSEC_WAF_TIMEOUT
|
|
821
820
|
this._setValue(env, 'baggageMaxBytes', DD_TRACE_BAGGAGE_MAX_BYTES)
|
|
822
821
|
this._setValue(env, 'baggageMaxItems', DD_TRACE_BAGGAGE_MAX_ITEMS)
|
|
822
|
+
this._setValue(env, 'baggageTagKeys', DD_TRACE_BAGGAGE_TAG_KEYS)
|
|
823
823
|
this._setBoolean(env, 'clientIpEnabled', DD_TRACE_CLIENT_IP_ENABLED)
|
|
824
824
|
this._setString(env, 'clientIpHeader', DD_TRACE_CLIENT_IP_HEADER?.toLowerCase())
|
|
825
825
|
this._setBoolean(env, 'crashtracking.enabled', coalesce(
|
|
@@ -833,7 +833,7 @@ class Config {
|
|
|
833
833
|
DD_CODE_ORIGIN_FOR_SPANS_EXPERIMENTAL_EXIT_SPANS_ENABLED
|
|
834
834
|
)
|
|
835
835
|
this._setString(env, 'dbmPropagationMode', DD_DBM_PROPAGATION_MODE)
|
|
836
|
-
this._setString(env, 'dogstatsd.hostname', DD_DOGSTATSD_HOST
|
|
836
|
+
this._setString(env, 'dogstatsd.hostname', DD_DOGSTATSD_HOST)
|
|
837
837
|
this._setString(env, 'dogstatsd.port', DD_DOGSTATSD_PORT)
|
|
838
838
|
this._setBoolean(env, 'dsmEnabled', DD_DATA_STREAMS_ENABLED)
|
|
839
839
|
this._setBoolean(env, 'dynamicInstrumentation.enabled', DD_DYNAMIC_INSTRUMENTATION_ENABLED)
|
|
@@ -855,7 +855,7 @@ class Config {
|
|
|
855
855
|
this._setIntegerRangeSet(env, 'grpc.client.error.statuses', DD_GRPC_CLIENT_ERROR_STATUSES)
|
|
856
856
|
this._setIntegerRangeSet(env, 'grpc.server.error.statuses', DD_GRPC_SERVER_ERROR_STATUSES)
|
|
857
857
|
this._setArray(env, 'headerTags', DD_TRACE_HEADER_TAGS)
|
|
858
|
-
this._setString(env, 'hostname',
|
|
858
|
+
this._setString(env, 'hostname', DD_AGENT_HOST)
|
|
859
859
|
this._setValue(env, 'iast.dbRowsToTaint', maybeInt(DD_IAST_DB_ROWS_TO_TAINT))
|
|
860
860
|
this._setBoolean(env, 'iast.deduplicationEnabled', DD_IAST_DEDUPLICATION_ENABLED)
|
|
861
861
|
this._setBoolean(env, 'iast.enabled', DD_IAST_ENABLED)
|
|
@@ -893,7 +893,7 @@ class Config {
|
|
|
893
893
|
this._setValue(env, 'openai.spanCharLimit', maybeInt(DD_OPENAI_SPAN_CHAR_LIMIT))
|
|
894
894
|
this._envUnprocessed.openaiSpanCharLimit = DD_OPENAI_SPAN_CHAR_LIMIT
|
|
895
895
|
if (DD_TRACE_PEER_SERVICE_MAPPING) {
|
|
896
|
-
this._setValue(env, 'peerServiceMapping', fromEntries(
|
|
896
|
+
this._setValue(env, 'peerServiceMapping', Object.fromEntries(
|
|
897
897
|
DD_TRACE_PEER_SERVICE_MAPPING.split(',').map(x => x.trim().split(':'))
|
|
898
898
|
))
|
|
899
899
|
this._envUnprocessed.peerServiceMapping = DD_TRACE_PEER_SERVICE_MAPPING
|
|
@@ -901,7 +901,6 @@ class Config {
|
|
|
901
901
|
this._setString(env, 'port', DD_TRACE_AGENT_PORT)
|
|
902
902
|
const profilingEnabled = normalizeProfilingEnabledValue(
|
|
903
903
|
coalesce(
|
|
904
|
-
DD_EXPERIMENTAL_PROFILING_ENABLED,
|
|
905
904
|
DD_PROFILING_ENABLED,
|
|
906
905
|
this._isInServerlessEnvironment() ? 'false' : undefined
|
|
907
906
|
)
|
|
@@ -939,10 +938,10 @@ class Config {
|
|
|
939
938
|
this._setSamplingRule(env, 'sampler.rules', safeJsonParse(DD_TRACE_SAMPLING_RULES))
|
|
940
939
|
this._envUnprocessed['sampler.rules'] = DD_TRACE_SAMPLING_RULES
|
|
941
940
|
this._setString(env, 'scope', DD_TRACE_SCOPE)
|
|
942
|
-
this._setString(env, 'service', DD_SERVICE ||
|
|
941
|
+
this._setString(env, 'service', DD_SERVICE || tags.service || OTEL_SERVICE_NAME)
|
|
943
942
|
if (DD_SERVICE_MAPPING) {
|
|
944
|
-
this._setValue(env, 'serviceMapping', fromEntries(
|
|
945
|
-
|
|
943
|
+
this._setValue(env, 'serviceMapping', Object.fromEntries(
|
|
944
|
+
DD_SERVICE_MAPPING.split(',').map(x => x.trim().split(':'))
|
|
946
945
|
))
|
|
947
946
|
}
|
|
948
947
|
this._setString(env, 'site', DD_SITE)
|
|
@@ -957,8 +956,7 @@ class Config {
|
|
|
957
956
|
this._setTags(env, 'tags', tags)
|
|
958
957
|
this._setValue(env, 'tagsHeaderMaxLength', DD_TRACE_X_DATADOG_TAGS_MAX_LENGTH)
|
|
959
958
|
this._setBoolean(env, 'telemetry.enabled', coalesce(
|
|
960
|
-
|
|
961
|
-
DD_INSTRUMENTATION_TELEMETRY_ENABLED, // to comply with instrumentation telemetry specs
|
|
959
|
+
DD_INSTRUMENTATION_TELEMETRY_ENABLED,
|
|
962
960
|
!(this._isInServerlessEnvironment() || JEST_WORKER_ID)
|
|
963
961
|
))
|
|
964
962
|
this._setString(env, 'instrumentation_config_id', DD_INSTRUMENTATION_CONFIG_ID)
|
|
@@ -1002,7 +1000,7 @@ class Config {
|
|
|
1002
1000
|
const tags = {}
|
|
1003
1001
|
setHiddenProperty(this, '_optsUnprocessed', {})
|
|
1004
1002
|
|
|
1005
|
-
options = setHiddenProperty(this, '_optionsArg',
|
|
1003
|
+
options = setHiddenProperty(this, '_optionsArg', { ingestion: {}, ...options, ...opts })
|
|
1006
1004
|
|
|
1007
1005
|
tagger.add(tags, options.tags)
|
|
1008
1006
|
|
|
@@ -1018,9 +1016,24 @@ class Config {
|
|
|
1018
1016
|
this._optsUnprocessed['appsec.blockedTemplateJson'] = options.appsec?.blockedTemplateJson
|
|
1019
1017
|
this._setBoolean(opts, 'appsec.enabled', options.appsec?.enabled)
|
|
1020
1018
|
this._setString(opts, 'appsec.eventTracking.mode', options.appsec?.eventTracking?.mode)
|
|
1019
|
+
this._setBoolean(
|
|
1020
|
+
opts,
|
|
1021
|
+
'appsec.extendedHeadersCollection.enabled',
|
|
1022
|
+
options.appsec?.extendedHeadersCollection?.enabled
|
|
1023
|
+
)
|
|
1024
|
+
this._setBoolean(
|
|
1025
|
+
opts,
|
|
1026
|
+
'appsec.extendedHeadersCollection.redaction',
|
|
1027
|
+
options.appsec?.extendedHeadersCollection?.redaction
|
|
1028
|
+
)
|
|
1029
|
+
this._setValue(opts,
|
|
1030
|
+
'appsec.extendedHeadersCollection.maxHeaders',
|
|
1031
|
+
options.appsec?.extendedHeadersCollection?.maxHeaders
|
|
1032
|
+
)
|
|
1021
1033
|
this._setString(opts, 'appsec.obfuscatorKeyRegex', options.appsec?.obfuscatorKeyRegex)
|
|
1022
1034
|
this._setString(opts, 'appsec.obfuscatorValueRegex', options.appsec?.obfuscatorValueRegex)
|
|
1023
1035
|
this._setBoolean(opts, 'appsec.rasp.enabled', options.appsec?.rasp?.enabled)
|
|
1036
|
+
this._setBoolean(opts, 'appsec.rasp.bodyCollection', options.appsec?.rasp?.bodyCollection)
|
|
1024
1037
|
this._setValue(opts, 'appsec.rateLimit', maybeInt(options.appsec?.rateLimit))
|
|
1025
1038
|
this._optsUnprocessed['appsec.rateLimit'] = options.appsec?.rateLimit
|
|
1026
1039
|
this._setString(opts, 'appsec.rules', options.appsec?.rules)
|
|
@@ -1035,6 +1048,7 @@ class Config {
|
|
|
1035
1048
|
this._setString(opts, 'clientIpHeader', options.clientIpHeader?.toLowerCase())
|
|
1036
1049
|
this._setValue(opts, 'baggageMaxBytes', options.baggageMaxBytes)
|
|
1037
1050
|
this._setValue(opts, 'baggageMaxItems', options.baggageMaxItems)
|
|
1051
|
+
this._setValue(opts, 'baggageTagKeys', options.baggageTagKeys)
|
|
1038
1052
|
this._setBoolean(opts, 'codeOriginForSpans.enabled', options.codeOriginForSpans?.enabled)
|
|
1039
1053
|
this._setBoolean(
|
|
1040
1054
|
opts,
|
|
@@ -1151,20 +1165,19 @@ class Config {
|
|
|
1151
1165
|
|
|
1152
1166
|
_isCiVisibilityItrEnabled () {
|
|
1153
1167
|
return coalesce(
|
|
1154
|
-
|
|
1168
|
+
getEnvironmentVariable('DD_CIVISIBILITY_ITR_ENABLED'),
|
|
1155
1169
|
true
|
|
1156
1170
|
)
|
|
1157
1171
|
}
|
|
1158
1172
|
|
|
1159
1173
|
_getHostname () {
|
|
1160
|
-
const DD_CIVISIBILITY_AGENTLESS_URL =
|
|
1174
|
+
const DD_CIVISIBILITY_AGENTLESS_URL = getEnvironmentVariable('DD_CIVISIBILITY_AGENTLESS_URL')
|
|
1161
1175
|
const url = DD_CIVISIBILITY_AGENTLESS_URL
|
|
1162
1176
|
? new URL(DD_CIVISIBILITY_AGENTLESS_URL)
|
|
1163
1177
|
: getAgentUrl(this._getTraceAgentUrl(), this._optionsArg)
|
|
1164
1178
|
const DD_AGENT_HOST = coalesce(
|
|
1165
1179
|
this._optionsArg.hostname,
|
|
1166
|
-
|
|
1167
|
-
process.env.DD_TRACE_AGENT_HOSTNAME,
|
|
1180
|
+
getEnvironmentVariable('DD_AGENT_HOST'),
|
|
1168
1181
|
'127.0.0.1'
|
|
1169
1182
|
)
|
|
1170
1183
|
return DD_AGENT_HOST || (url && url.hostname)
|
|
@@ -1174,17 +1187,17 @@ class Config {
|
|
|
1174
1187
|
const DD_TRACE_SPAN_ATTRIBUTE_SCHEMA = validateNamingVersion(
|
|
1175
1188
|
coalesce(
|
|
1176
1189
|
this._optionsArg.spanAttributeSchema,
|
|
1177
|
-
|
|
1190
|
+
getEnvironmentVariable('DD_TRACE_SPAN_ATTRIBUTE_SCHEMA')
|
|
1178
1191
|
)
|
|
1179
1192
|
)
|
|
1180
1193
|
|
|
1181
1194
|
const peerServiceSet = (
|
|
1182
1195
|
this._optionsArg.hasOwnProperty('spanComputePeerService') ||
|
|
1183
|
-
|
|
1196
|
+
getEnvironmentVariables().hasOwnProperty('DD_TRACE_PEER_SERVICE_DEFAULTS_ENABLED')
|
|
1184
1197
|
)
|
|
1185
1198
|
const peerServiceValue = coalesce(
|
|
1186
1199
|
this._optionsArg.spanComputePeerService,
|
|
1187
|
-
|
|
1200
|
+
getEnvironmentVariable('DD_TRACE_PEER_SERVICE_DEFAULTS_ENABLED')
|
|
1188
1201
|
)
|
|
1189
1202
|
|
|
1190
1203
|
const spanComputePeerService = (
|
|
@@ -1200,14 +1213,14 @@ class Config {
|
|
|
1200
1213
|
|
|
1201
1214
|
_isCiVisibilityGitUploadEnabled () {
|
|
1202
1215
|
return coalesce(
|
|
1203
|
-
|
|
1216
|
+
getEnvironmentVariable('DD_CIVISIBILITY_GIT_UPLOAD_ENABLED'),
|
|
1204
1217
|
true
|
|
1205
1218
|
)
|
|
1206
1219
|
}
|
|
1207
1220
|
|
|
1208
1221
|
_isCiVisibilityManualApiEnabled () {
|
|
1209
1222
|
return coalesce(
|
|
1210
|
-
|
|
1223
|
+
getEnvironmentVariable('DD_CIVISIBILITY_MANUAL_API_ENABLED'),
|
|
1211
1224
|
true
|
|
1212
1225
|
)
|
|
1213
1226
|
}
|
|
@@ -1218,7 +1231,7 @@ class Config {
|
|
|
1218
1231
|
|
|
1219
1232
|
return apmTracingEnabled && coalesce(
|
|
1220
1233
|
this._optionsArg.stats,
|
|
1221
|
-
|
|
1234
|
+
getEnvironmentVariable('DD_TRACE_STATS_COMPUTATION_ENABLED'),
|
|
1222
1235
|
getIsGCPFunction() || getIsAzureFunction()
|
|
1223
1236
|
)
|
|
1224
1237
|
}
|
|
@@ -1226,8 +1239,7 @@ class Config {
|
|
|
1226
1239
|
_getTraceAgentUrl () {
|
|
1227
1240
|
return coalesce(
|
|
1228
1241
|
this._optionsArg.url,
|
|
1229
|
-
|
|
1230
|
-
process.env.DD_TRACE_URL,
|
|
1242
|
+
getEnvironmentVariable('DD_TRACE_AGENT_URL'),
|
|
1231
1243
|
null
|
|
1232
1244
|
)
|
|
1233
1245
|
}
|
|
@@ -1245,8 +1257,9 @@ class Config {
|
|
|
1245
1257
|
DD_AGENTLESS_LOG_SUBMISSION_ENABLED,
|
|
1246
1258
|
DD_TEST_FAILED_TEST_REPLAY_ENABLED,
|
|
1247
1259
|
DD_TEST_MANAGEMENT_ENABLED,
|
|
1248
|
-
DD_TEST_MANAGEMENT_ATTEMPT_TO_FIX_RETRIES
|
|
1249
|
-
|
|
1260
|
+
DD_TEST_MANAGEMENT_ATTEMPT_TO_FIX_RETRIES,
|
|
1261
|
+
DD_CIVISIBILITY_IMPACTED_TESTS_DETECTION_ENABLED
|
|
1262
|
+
} = getEnvironmentVariables()
|
|
1250
1263
|
|
|
1251
1264
|
if (DD_CIVISIBILITY_AGENTLESS_URL) {
|
|
1252
1265
|
this._setValue(calc, 'url', new URL(DD_CIVISIBILITY_AGENTLESS_URL))
|
|
@@ -1270,6 +1283,7 @@ class Config {
|
|
|
1270
1283
|
'testManagementAttemptToFixRetries',
|
|
1271
1284
|
coalesce(maybeInt(DD_TEST_MANAGEMENT_ATTEMPT_TO_FIX_RETRIES), 20)
|
|
1272
1285
|
)
|
|
1286
|
+
this._setBoolean(calc, 'isImpactedTestsEnabled', !isFalse(DD_CIVISIBILITY_IMPACTED_TESTS_DETECTION_ENABLED))
|
|
1273
1287
|
}
|
|
1274
1288
|
this._setString(calc, 'dogstatsd.hostname', this._getHostname())
|
|
1275
1289
|
this._setBoolean(calc, 'isGitUploadEnabled',
|
|
@@ -1341,9 +1355,9 @@ class Config {
|
|
|
1341
1355
|
return this._setValue(obj, name, value)
|
|
1342
1356
|
}
|
|
1343
1357
|
|
|
1344
|
-
value = parseFloat(value)
|
|
1358
|
+
value = Number.parseFloat(value)
|
|
1345
1359
|
|
|
1346
|
-
if (!isNaN(value)) {
|
|
1360
|
+
if (!Number.isNaN(value)) {
|
|
1347
1361
|
// TODO: Ignore out of range values instead of normalizing them.
|
|
1348
1362
|
this._setValue(obj, name, Math.min(Math.max(value, 0), 1))
|
|
1349
1363
|
}
|
|
@@ -1358,7 +1372,7 @@ class Config {
|
|
|
1358
1372
|
value = value.split(',').map(item => {
|
|
1359
1373
|
// Trim each item and remove whitespace around the colon
|
|
1360
1374
|
const [key, val] = item.split(':').map(part => part.trim())
|
|
1361
|
-
return val
|
|
1375
|
+
return val === undefined ? key : `${key}:${val}`
|
|
1362
1376
|
})
|
|
1363
1377
|
}
|
|
1364
1378
|
|
|
@@ -1422,13 +1436,7 @@ class Config {
|
|
|
1422
1436
|
obj[name] = value
|
|
1423
1437
|
}
|
|
1424
1438
|
|
|
1425
|
-
|
|
1426
|
-
// TODO: Deeply merge configurations.
|
|
1427
|
-
// TODO: Move change tracking to telemetry.
|
|
1428
|
-
// for telemetry reporting, `name`s in `containers` need to be keys from:
|
|
1429
|
-
// eslint-disable-next-line @stylistic/js/max-len
|
|
1430
|
-
// https://github.com/DataDog/dd-go/blob/prod/trace/apps/tracer-telemetry-intake/telemetry-payload/static/config_norm_rules.json
|
|
1431
|
-
_merge () {
|
|
1439
|
+
_getContainersAndOriginsOrdered () {
|
|
1432
1440
|
const containers = [
|
|
1433
1441
|
this._remote,
|
|
1434
1442
|
this._options,
|
|
@@ -1447,6 +1455,17 @@ class Config {
|
|
|
1447
1455
|
'calculated',
|
|
1448
1456
|
'default'
|
|
1449
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()
|
|
1450
1469
|
const unprocessedValues = [
|
|
1451
1470
|
this._remoteUnprocessed,
|
|
1452
1471
|
this._optsUnprocessed,
|
|
@@ -1483,6 +1502,18 @@ class Config {
|
|
|
1483
1502
|
updateConfig(changes, this)
|
|
1484
1503
|
}
|
|
1485
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
|
+
|
|
1486
1517
|
// TODO: Refactor the Config class so it never produces any config objects that are incompatible with MessageChannel
|
|
1487
1518
|
/**
|
|
1488
1519
|
* Serializes the config object so it can be passed over a Worker Thread MessageChannel.
|
|
@@ -1505,24 +1536,24 @@ function handleOtel (tagString) {
|
|
|
1505
1536
|
?.replace(/(^|,)deployment\.environment=/, '$1env:')
|
|
1506
1537
|
.replace(/(^|,)service\.name=/, '$1service:')
|
|
1507
1538
|
.replace(/(^|,)service\.version=/, '$1version:')
|
|
1508
|
-
.
|
|
1539
|
+
.replaceAll('=', ':')
|
|
1509
1540
|
}
|
|
1510
1541
|
|
|
1511
1542
|
function parseSpaceSeparatedTags (tagString) {
|
|
1512
1543
|
if (tagString && !tagString.includes(',')) {
|
|
1513
|
-
tagString = tagString.
|
|
1544
|
+
tagString = tagString.replaceAll(/\s+/g, ',')
|
|
1514
1545
|
}
|
|
1515
1546
|
return tagString
|
|
1516
1547
|
}
|
|
1517
1548
|
|
|
1518
1549
|
function maybeInt (number) {
|
|
1519
|
-
const parsed = parseInt(number)
|
|
1520
|
-
return isNaN(parsed) ? undefined : parsed
|
|
1550
|
+
const parsed = Number.parseInt(number)
|
|
1551
|
+
return Number.isNaN(parsed) ? undefined : parsed
|
|
1521
1552
|
}
|
|
1522
1553
|
|
|
1523
1554
|
function maybeFloat (number) {
|
|
1524
|
-
const parsed = parseFloat(number)
|
|
1525
|
-
return isNaN(parsed) ? undefined : parsed
|
|
1555
|
+
const parsed = Number.parseFloat(number)
|
|
1556
|
+
return Number.isNaN(parsed) ? undefined : parsed
|
|
1526
1557
|
}
|
|
1527
1558
|
|
|
1528
1559
|
function getAgentUrl (url, options) {
|
|
@@ -1533,9 +1564,8 @@ function getAgentUrl (url, options) {
|
|
|
1533
1564
|
if (
|
|
1534
1565
|
!options.hostname &&
|
|
1535
1566
|
!options.port &&
|
|
1536
|
-
!
|
|
1537
|
-
!
|
|
1538
|
-
!process.env.DD_TRACE_AGENT_PORT &&
|
|
1567
|
+
!getEnvironmentVariable('DD_AGENT_HOST') &&
|
|
1568
|
+
!getEnvironmentVariable('DD_TRACE_AGENT_PORT') &&
|
|
1539
1569
|
fs.existsSync('/var/run/datadog/apm.socket')
|
|
1540
1570
|
) {
|
|
1541
1571
|
return new URL('unix:///var/run/datadog/apm.socket')
|