dd-trace 5.83.0 → 5.85.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 +0 -1
- package/ci/cypress/polyfills.js +1 -1
- package/ci/init.js +5 -5
- package/ext/exporters.js +1 -1
- package/ext/formats.js +1 -1
- package/ext/index.js +1 -1
- package/ext/kinds.js +1 -1
- package/ext/priority.js +1 -1
- package/ext/scopes.js +1 -1
- package/ext/tags.js +1 -1
- package/ext/types.js +1 -1
- package/index.d.ts +115 -2
- package/initialize.mjs +47 -31
- package/loader-hook.mjs +35 -22
- package/package.json +36 -33
- package/packages/datadog-code-origin/index.js +12 -10
- package/packages/datadog-core/src/utils/src/pick.js +2 -2
- package/packages/datadog-esbuild/index.js +75 -79
- package/packages/datadog-esbuild/src/log.js +32 -0
- package/packages/datadog-esbuild/src/utils.js +12 -8
- package/packages/datadog-instrumentations/src/aerospike.js +3 -3
- package/packages/datadog-instrumentations/src/ai.js +5 -5
- package/packages/datadog-instrumentations/src/amqp10.js +1 -1
- package/packages/datadog-instrumentations/src/amqplib.js +1 -1
- package/packages/datadog-instrumentations/src/anthropic.js +3 -3
- package/packages/datadog-instrumentations/src/apollo-server.js +4 -4
- package/packages/datadog-instrumentations/src/apollo.js +2 -2
- package/packages/datadog-instrumentations/src/avsc.js +1 -1
- package/packages/datadog-instrumentations/src/aws-sdk.js +4 -4
- package/packages/datadog-instrumentations/src/azure-event-hubs.js +2 -2
- package/packages/datadog-instrumentations/src/azure-functions.js +1 -1
- package/packages/datadog-instrumentations/src/azure-service-bus.js +1 -1
- package/packages/datadog-instrumentations/src/body-parser.js +2 -2
- package/packages/datadog-instrumentations/src/bunyan.js +1 -1
- package/packages/datadog-instrumentations/src/cassandra-driver.js +1 -1
- package/packages/datadog-instrumentations/src/child_process.js +7 -7
- package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +17 -16
- package/packages/datadog-instrumentations/src/cookie-parser.js +1 -1
- package/packages/datadog-instrumentations/src/couchbase.js +8 -6
- package/packages/datadog-instrumentations/src/crypto.js +1 -1
- package/packages/datadog-instrumentations/src/cucumber.js +19 -19
- package/packages/datadog-instrumentations/src/cypress.js +1 -1
- package/packages/datadog-instrumentations/src/dns.js +2 -2
- package/packages/datadog-instrumentations/src/elasticsearch.js +2 -2
- package/packages/datadog-instrumentations/src/express-mongo-sanitize.js +2 -2
- package/packages/datadog-instrumentations/src/express-session.js +1 -1
- package/packages/datadog-instrumentations/src/express.js +4 -4
- package/packages/datadog-instrumentations/src/fastify.js +1 -1
- package/packages/datadog-instrumentations/src/fetch.js +2 -2
- package/packages/datadog-instrumentations/src/fs.js +7 -7
- package/packages/datadog-instrumentations/src/generic-pool.js +2 -2
- package/packages/datadog-instrumentations/src/google-cloud-pubsub.js +8 -8
- package/packages/datadog-instrumentations/src/google-cloud-vertexai.js +4 -4
- package/packages/datadog-instrumentations/src/google-genai.js +1 -1
- package/packages/datadog-instrumentations/src/graphql.js +10 -10
- package/packages/datadog-instrumentations/src/grpc/client.js +9 -13
- package/packages/datadog-instrumentations/src/grpc/types.js +1 -1
- package/packages/datadog-instrumentations/src/helpers/bundler-register.js +1 -1
- package/packages/datadog-instrumentations/src/helpers/check-require-cache.js +1 -1
- package/packages/datadog-instrumentations/src/helpers/extract-package-and-module-path.js +2 -2
- package/packages/datadog-instrumentations/src/helpers/hooks.js +1 -1
- package/packages/datadog-instrumentations/src/helpers/register.js +7 -7
- package/packages/datadog-instrumentations/src/helpers/rewriter/compiler.js +6 -0
- package/packages/datadog-instrumentations/src/helpers/rewriter/index.js +1 -0
- package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/index.js +1 -1
- package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/langchain.js +55 -55
- package/packages/datadog-instrumentations/src/helpers/rewriter/transforms.js +74 -17
- package/packages/datadog-instrumentations/src/helpers/router-helper.js +7 -7
- package/packages/datadog-instrumentations/src/helpers/shared-utils.js +1 -1
- package/packages/datadog-instrumentations/src/hono.js +6 -6
- package/packages/datadog-instrumentations/src/http/client.js +1 -1
- package/packages/datadog-instrumentations/src/http/server.js +4 -4
- package/packages/datadog-instrumentations/src/http2/server.js +1 -1
- package/packages/datadog-instrumentations/src/ioredis.js +1 -1
- package/packages/datadog-instrumentations/src/iovalkey.js +1 -1
- package/packages/datadog-instrumentations/src/jest.js +250 -106
- package/packages/datadog-instrumentations/src/kafkajs.js +9 -8
- package/packages/datadog-instrumentations/src/knex.js +2 -2
- package/packages/datadog-instrumentations/src/koa.js +3 -1
- package/packages/datadog-instrumentations/src/ldapjs.js +1 -1
- package/packages/datadog-instrumentations/src/light-my-request.js +1 -1
- package/packages/datadog-instrumentations/src/limitd-client.js +1 -1
- package/packages/datadog-instrumentations/src/mariadb.js +1 -1
- package/packages/datadog-instrumentations/src/memcached.js +1 -1
- package/packages/datadog-instrumentations/src/mocha/common.js +3 -3
- package/packages/datadog-instrumentations/src/mocha/main.js +24 -24
- package/packages/datadog-instrumentations/src/mocha/utils.js +15 -11
- package/packages/datadog-instrumentations/src/mocha/worker.js +4 -4
- package/packages/datadog-instrumentations/src/moleculer/server.js +1 -1
- package/packages/datadog-instrumentations/src/mongodb-core.js +3 -3
- package/packages/datadog-instrumentations/src/mongodb.js +7 -7
- package/packages/datadog-instrumentations/src/mongoose.js +10 -10
- package/packages/datadog-instrumentations/src/mquery.js +6 -6
- package/packages/datadog-instrumentations/src/multer.js +1 -1
- package/packages/datadog-instrumentations/src/mysql.js +1 -1
- package/packages/datadog-instrumentations/src/net.js +6 -6
- package/packages/datadog-instrumentations/src/next.js +6 -6
- package/packages/datadog-instrumentations/src/nyc.js +34 -2
- package/packages/datadog-instrumentations/src/openai.js +24 -24
- package/packages/datadog-instrumentations/src/oracledb.js +2 -2
- package/packages/datadog-instrumentations/src/otel-sdk-trace.js +1 -1
- package/packages/datadog-instrumentations/src/passport-http.js +1 -1
- package/packages/datadog-instrumentations/src/passport-local.js +1 -1
- package/packages/datadog-instrumentations/src/passport-utils.js +1 -1
- package/packages/datadog-instrumentations/src/passport.js +1 -1
- package/packages/datadog-instrumentations/src/pg.js +3 -3
- package/packages/datadog-instrumentations/src/pino.js +2 -2
- package/packages/datadog-instrumentations/src/playwright.js +71 -67
- package/packages/datadog-instrumentations/src/prisma.js +24 -78
- package/packages/datadog-instrumentations/src/promise-js.js +1 -1
- package/packages/datadog-instrumentations/src/promise.js +1 -1
- package/packages/datadog-instrumentations/src/protobufjs.js +6 -6
- package/packages/datadog-instrumentations/src/q.js +2 -2
- package/packages/datadog-instrumentations/src/redis.js +2 -2
- package/packages/datadog-instrumentations/src/rhea.js +5 -5
- package/packages/datadog-instrumentations/src/router.js +8 -8
- package/packages/datadog-instrumentations/src/selenium.js +3 -3
- package/packages/datadog-instrumentations/src/sequelize.js +1 -1
- package/packages/datadog-instrumentations/src/sharedb.js +2 -2
- package/packages/datadog-instrumentations/src/tedious.js +1 -1
- package/packages/datadog-instrumentations/src/undici.js +2 -2
- package/packages/datadog-instrumentations/src/url.js +5 -5
- package/packages/datadog-instrumentations/src/vitest.js +56 -45
- package/packages/datadog-instrumentations/src/when.js +1 -1
- package/packages/datadog-instrumentations/src/winston.js +1 -1
- package/packages/datadog-instrumentations/src/ws.js +128 -41
- package/packages/datadog-plugin-aerospike/src/index.js +4 -4
- package/packages/datadog-plugin-ai/src/index.js +1 -1
- package/packages/datadog-plugin-ai/src/tracing.js +2 -2
- package/packages/datadog-plugin-ai/src/utils.js +1 -1
- package/packages/datadog-plugin-amqp10/src/consumer.js +2 -2
- package/packages/datadog-plugin-amqp10/src/index.js +1 -1
- package/packages/datadog-plugin-amqp10/src/producer.js +2 -2
- package/packages/datadog-plugin-amqplib/src/client.js +2 -2
- package/packages/datadog-plugin-amqplib/src/consumer.js +2 -2
- package/packages/datadog-plugin-amqplib/src/index.js +1 -1
- package/packages/datadog-plugin-amqplib/src/producer.js +2 -2
- package/packages/datadog-plugin-amqplib/src/util.js +1 -1
- package/packages/datadog-plugin-anthropic/src/index.js +1 -1
- package/packages/datadog-plugin-anthropic/src/tracing.js +2 -2
- package/packages/datadog-plugin-apollo/src/gateway/fetch.js +1 -1
- package/packages/datadog-plugin-apollo/src/gateway/index.js +1 -1
- package/packages/datadog-plugin-apollo/src/gateway/request.js +5 -5
- package/packages/datadog-plugin-apollo/src/index.js +1 -1
- package/packages/datadog-plugin-avsc/src/schema_iterator.js +3 -3
- package/packages/datadog-plugin-aws-sdk/src/base.js +11 -10
- package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/index.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/tracing.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/utils.js +24 -24
- package/packages/datadog-plugin-aws-sdk/src/services/cloudwatchlogs.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +6 -6
- package/packages/datadog-plugin-aws-sdk/src/services/lambda.js +3 -3
- package/packages/datadog-plugin-aws-sdk/src/services/redshift.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/services/s3.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/services/sns.js +5 -5
- package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +12 -12
- package/packages/datadog-plugin-aws-sdk/src/util.js +1 -1
- package/packages/datadog-plugin-azure-event-hubs/src/index.js +1 -1
- package/packages/datadog-plugin-azure-event-hubs/src/producer.js +3 -3
- package/packages/datadog-plugin-azure-functions/src/index.js +11 -10
- package/packages/datadog-plugin-azure-service-bus/src/index.js +1 -1
- package/packages/datadog-plugin-azure-service-bus/src/producer.js +3 -3
- package/packages/datadog-plugin-bullmq/src/consumer.js +2 -2
- package/packages/datadog-plugin-bullmq/src/index.js +1 -1
- package/packages/datadog-plugin-bullmq/src/producer.js +11 -11
- package/packages/datadog-plugin-cassandra-driver/src/index.js +2 -2
- package/packages/datadog-plugin-child_process/src/index.js +2 -2
- package/packages/datadog-plugin-child_process/src/scrub-cmd-params.js +5 -5
- package/packages/datadog-plugin-confluentinc-kafka-javascript/src/index.js +1 -1
- package/packages/datadog-plugin-couchbase/src/index.js +3 -3
- package/packages/datadog-plugin-cucumber/src/index.js +46 -45
- package/packages/datadog-plugin-cypress/src/cypress-plugin.js +68 -55
- package/packages/datadog-plugin-cypress/src/plugin.js +1 -1
- package/packages/datadog-plugin-cypress/src/support.js +56 -9
- package/packages/datadog-plugin-dd-trace-api/src/index.js +1 -1
- package/packages/datadog-plugin-dns/src/index.js +1 -1
- package/packages/datadog-plugin-dns/src/lookup.js +2 -2
- package/packages/datadog-plugin-dns/src/lookup_service.js +3 -3
- package/packages/datadog-plugin-dns/src/resolve.js +2 -2
- package/packages/datadog-plugin-dns/src/reverse.js +2 -2
- package/packages/datadog-plugin-elasticsearch/src/index.js +2 -2
- package/packages/datadog-plugin-express/src/index.js +1 -1
- package/packages/datadog-plugin-fastify/src/index.js +1 -1
- package/packages/datadog-plugin-fs/src/index.js +2 -2
- package/packages/datadog-plugin-google-cloud-pubsub/src/client.js +2 -2
- package/packages/datadog-plugin-google-cloud-pubsub/src/consumer.js +8 -6
- package/packages/datadog-plugin-google-cloud-pubsub/src/index.js +1 -1
- package/packages/datadog-plugin-google-cloud-pubsub/src/producer.js +11 -10
- package/packages/datadog-plugin-google-cloud-pubsub/src/pubsub-push-subscription.js +6 -6
- package/packages/datadog-plugin-google-cloud-vertexai/src/index.js +1 -1
- package/packages/datadog-plugin-google-cloud-vertexai/src/tracing.js +2 -2
- package/packages/datadog-plugin-google-cloud-vertexai/src/utils.js +1 -1
- package/packages/datadog-plugin-google-genai/src/index.js +1 -1
- package/packages/datadog-plugin-google-genai/src/tracing.js +2 -2
- package/packages/datadog-plugin-graphql/src/execute.js +2 -2
- package/packages/datadog-plugin-graphql/src/index.js +2 -2
- package/packages/datadog-plugin-graphql/src/parse.js +1 -1
- package/packages/datadog-plugin-graphql/src/resolve.js +6 -6
- package/packages/datadog-plugin-graphql/src/utils.js +1 -1
- package/packages/datadog-plugin-graphql/src/validate.js +2 -2
- package/packages/datadog-plugin-grpc/src/client.js +3 -3
- package/packages/datadog-plugin-grpc/src/index.js +1 -1
- package/packages/datadog-plugin-grpc/src/server.js +3 -3
- package/packages/datadog-plugin-grpc/src/util.js +2 -2
- package/packages/datadog-plugin-http/src/client.js +10 -10
- package/packages/datadog-plugin-http/src/index.js +1 -1
- package/packages/datadog-plugin-http2/src/client.js +6 -6
- package/packages/datadog-plugin-http2/src/index.js +1 -1
- package/packages/datadog-plugin-http2/src/server.js +1 -1
- package/packages/datadog-plugin-jest/src/index.js +39 -22
- package/packages/datadog-plugin-jest/src/util.js +1 -1
- package/packages/datadog-plugin-kafkajs/src/consumer.js +5 -5
- package/packages/datadog-plugin-kafkajs/src/index.js +1 -1
- package/packages/datadog-plugin-kafkajs/src/producer.js +5 -5
- package/packages/datadog-plugin-kafkajs/src/utils.js +1 -1
- package/packages/datadog-plugin-langchain/src/tokens.js +2 -2
- package/packages/datadog-plugin-langchain/src/tracing.js +4 -4
- package/packages/datadog-plugin-memcached/src/index.js +2 -2
- package/packages/datadog-plugin-mocha/src/index.js +12 -12
- package/packages/datadog-plugin-moleculer/src/client.js +1 -1
- package/packages/datadog-plugin-moleculer/src/index.js +1 -1
- package/packages/datadog-plugin-moleculer/src/server.js +2 -2
- package/packages/datadog-plugin-moleculer/src/util.js +1 -1
- package/packages/datadog-plugin-mongodb-core/src/index.js +5 -5
- package/packages/datadog-plugin-mysql/src/index.js +2 -2
- package/packages/datadog-plugin-net/src/ipc.js +2 -2
- package/packages/datadog-plugin-net/src/tcp.js +4 -4
- package/packages/datadog-plugin-next/src/index.js +4 -4
- package/packages/datadog-plugin-nyc/src/index.js +60 -0
- package/packages/datadog-plugin-openai/src/index.js +1 -1
- package/packages/datadog-plugin-openai/src/services.js +3 -3
- package/packages/datadog-plugin-openai/src/stream-helpers.js +1 -1
- package/packages/datadog-plugin-openai/src/tracing.js +10 -10
- package/packages/datadog-plugin-oracledb/src/connection-parser.js +1 -1
- package/packages/datadog-plugin-oracledb/src/index.js +1 -1
- package/packages/datadog-plugin-pg/src/index.js +2 -2
- package/packages/datadog-plugin-playwright/src/index.js +42 -42
- package/packages/datadog-plugin-prisma/src/datadog-tracing-helper.js +95 -0
- package/packages/datadog-plugin-prisma/src/index.js +129 -10
- package/packages/datadog-plugin-protobufjs/src/schema_iterator.js +3 -3
- package/packages/datadog-plugin-redis/src/index.js +2 -2
- package/packages/datadog-plugin-restify/src/index.js +1 -1
- package/packages/datadog-plugin-rhea/src/consumer.js +2 -2
- package/packages/datadog-plugin-rhea/src/index.js +1 -1
- package/packages/datadog-plugin-rhea/src/producer.js +2 -2
- package/packages/datadog-plugin-router/src/index.js +3 -3
- package/packages/datadog-plugin-selenium/src/index.js +2 -2
- package/packages/datadog-plugin-sharedb/src/index.js +2 -2
- package/packages/datadog-plugin-tedious/src/index.js +2 -2
- package/packages/datadog-plugin-undici/src/index.js +5 -5
- package/packages/datadog-plugin-vitest/src/index.js +39 -18
- package/packages/datadog-plugin-ws/src/close.js +10 -11
- package/packages/datadog-plugin-ws/src/index.js +1 -1
- package/packages/datadog-plugin-ws/src/producer.js +8 -9
- package/packages/datadog-plugin-ws/src/receiver.js +8 -9
- package/packages/datadog-plugin-ws/src/server.js +17 -12
- package/packages/datadog-plugin-ws/src/util.js +48 -16
- package/packages/datadog-shimmer/src/shimmer.js +5 -8
- package/packages/dd-trace/index.js +2 -2
- package/packages/dd-trace/src/agent/info.js +57 -0
- package/packages/dd-trace/src/agent/url.js +28 -0
- package/packages/dd-trace/src/aiguard/client.js +3 -3
- package/packages/dd-trace/src/aiguard/sdk.js +6 -6
- package/packages/dd-trace/src/aiguard/tags.js +1 -1
- package/packages/dd-trace/src/analytics_sampler.js +1 -1
- package/packages/dd-trace/src/appsec/activation.js +1 -1
- package/packages/dd-trace/src/appsec/addresses.js +1 -1
- package/packages/dd-trace/src/appsec/api_security_sampler.js +1 -1
- package/packages/dd-trace/src/appsec/blocked_templates.js +1 -1
- package/packages/dd-trace/src/appsec/blocking.js +5 -5
- package/packages/dd-trace/src/appsec/channels.js +1 -1
- package/packages/dd-trace/src/appsec/graphql.js +13 -13
- package/packages/dd-trace/src/appsec/iast/analyzers/analyzers.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/cookie-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-base-analyzer.js +6 -5
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-password-rules.js +2 -2
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-rule-type.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secret-rules.js +148 -148
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secrets-rules.js +148 -148
- package/packages/dd-trace/src/appsec/iast/analyzers/index.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/missing-header-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/nosql-injection-mongodb-analyzer.js +7 -8
- package/packages/dd-trace/src/appsec/iast/analyzers/path-traversal-analyzer.js +2 -2
- package/packages/dd-trace/src/appsec/iast/analyzers/set-cookies-header-interceptor.js +2 -2
- package/packages/dd-trace/src/appsec/iast/analyzers/unvalidated-redirect-analyzer.js +2 -2
- package/packages/dd-trace/src/appsec/iast/analyzers/vulnerability-analyzer.js +3 -3
- package/packages/dd-trace/src/appsec/iast/analyzers/weak-cipher-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/weak-hash-analyzer.js +2 -2
- package/packages/dd-trace/src/appsec/iast/context/context-plugin.js +3 -3
- package/packages/dd-trace/src/appsec/iast/iast-context.js +6 -3
- package/packages/dd-trace/src/appsec/iast/iast-plugin.js +17 -9
- package/packages/dd-trace/src/appsec/iast/index.js +2 -2
- package/packages/dd-trace/src/appsec/iast/overhead-controller.js +9 -9
- package/packages/dd-trace/src/appsec/iast/path-line.js +6 -6
- package/packages/dd-trace/src/appsec/iast/security-controls/index.js +11 -11
- package/packages/dd-trace/src/appsec/iast/security-controls/parser.js +49 -17
- package/packages/dd-trace/src/appsec/iast/tags.js +1 -1
- package/packages/dd-trace/src/appsec/iast/taint-tracking/constants.js +1 -1
- package/packages/dd-trace/src/appsec/iast/taint-tracking/csi-methods.js +2 -2
- package/packages/dd-trace/src/appsec/iast/taint-tracking/filter.js +1 -1
- package/packages/dd-trace/src/appsec/iast/taint-tracking/index.js +2 -2
- package/packages/dd-trace/src/appsec/iast/taint-tracking/operations-taint-object.js +3 -6
- package/packages/dd-trace/src/appsec/iast/taint-tracking/operations.js +2 -2
- package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +5 -5
- package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter-esm.mjs +4 -4
- package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +5 -5
- package/packages/dd-trace/src/appsec/iast/taint-tracking/secure-marks.js +6 -4
- package/packages/dd-trace/src/appsec/iast/taint-tracking/source-types.js +1 -1
- package/packages/dd-trace/src/appsec/iast/taint-tracking/taint-tracking-impl.js +8 -8
- package/packages/dd-trace/src/appsec/iast/telemetry/iast-metric.js +4 -4
- package/packages/dd-trace/src/appsec/iast/telemetry/namespaces.js +2 -2
- package/packages/dd-trace/src/appsec/iast/telemetry/span-tags.js +6 -6
- package/packages/dd-trace/src/appsec/iast/telemetry/verbosity.js +2 -2
- package/packages/dd-trace/src/appsec/iast/utils.js +3 -3
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/constants.js +1 -1
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/range-utils.js +1 -1
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/hardcoded-password-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/sql-sensitive-analyzer.js +6 -6
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/tainted-range-based-sensitive-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-handler.js +8 -8
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-regex.js +1 -1
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/index.js +12 -11
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/utils.js +5 -5
- package/packages/dd-trace/src/appsec/iast/vulnerabilities.js +1 -1
- package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +4 -4
- package/packages/dd-trace/src/appsec/index.js +65 -27
- package/packages/dd-trace/src/appsec/rasp/command_injection.js +3 -3
- package/packages/dd-trace/src/appsec/rasp/fs-plugin.js +4 -4
- package/packages/dd-trace/src/appsec/rasp/index.js +2 -2
- package/packages/dd-trace/src/appsec/rasp/lfi.js +5 -5
- package/packages/dd-trace/src/appsec/rasp/sql_injection.js +2 -2
- package/packages/dd-trace/src/appsec/rasp/ssrf.js +1 -1
- package/packages/dd-trace/src/appsec/rasp/utils.js +4 -4
- package/packages/dd-trace/src/appsec/rc-products.js +1 -1
- package/packages/dd-trace/src/appsec/remote_config.js +3 -3
- package/packages/dd-trace/src/appsec/reporter.js +11 -11
- package/packages/dd-trace/src/appsec/rule_manager.js +1 -1
- package/packages/dd-trace/src/appsec/sdk/index.js +1 -1
- package/packages/dd-trace/src/appsec/sdk/set_user.js +2 -2
- package/packages/dd-trace/src/appsec/sdk/track_event.js +7 -7
- package/packages/dd-trace/src/appsec/sdk/user_blocking.js +1 -1
- package/packages/dd-trace/src/appsec/sdk/utils.js +1 -1
- package/packages/dd-trace/src/appsec/stack_trace.js +5 -5
- package/packages/dd-trace/src/appsec/telemetry/common.js +3 -3
- package/packages/dd-trace/src/appsec/telemetry/index.js +5 -5
- package/packages/dd-trace/src/appsec/telemetry/rasp.js +3 -3
- package/packages/dd-trace/src/appsec/telemetry/user.js +4 -4
- package/packages/dd-trace/src/appsec/telemetry/waf.js +3 -3
- package/packages/dd-trace/src/appsec/user_tracking.js +7 -7
- package/packages/dd-trace/src/appsec/waf/diagnostics.js +2 -2
- package/packages/dd-trace/src/appsec/waf/index.js +1 -1
- package/packages/dd-trace/src/appsec/waf/waf_context_wrapper.js +2 -2
- package/packages/dd-trace/src/azure_metadata.js +16 -9
- package/packages/dd-trace/src/baggage.js +1 -1
- package/packages/dd-trace/src/ci-visibility/coverage-report-discovery.js +82 -0
- package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/index.js +5 -5
- package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/worker/index.js +9 -9
- package/packages/dd-trace/src/ci-visibility/early-flake-detection/get-known-tests.js +8 -8
- package/packages/dd-trace/src/ci-visibility/exporters/agent-proxy/index.js +11 -11
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/coverage-writer.js +4 -3
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +8 -6
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/index.js +2 -0
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +4 -3
- package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +39 -20
- package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +22 -22
- package/packages/dd-trace/src/ci-visibility/exporters/test-worker/index.js +1 -1
- package/packages/dd-trace/src/ci-visibility/exporters/test-worker/writer.js +1 -1
- package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +8 -8
- package/packages/dd-trace/src/ci-visibility/log-submission/log-submission-plugin.js +3 -3
- package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +17 -12
- package/packages/dd-trace/src/ci-visibility/requests/upload-coverage-report.js +92 -0
- package/packages/dd-trace/src/ci-visibility/telemetry.js +8 -4
- package/packages/dd-trace/src/ci-visibility/test-api-manual/test-api-manual-plugin.js +1 -1
- package/packages/dd-trace/src/ci-visibility/test-management/get-test-management-tests.js +6 -6
- package/packages/dd-trace/src/ci-visibility/test-optimization-cache.js +61 -0
- package/packages/dd-trace/src/config/defaults.js +1 -1
- package/packages/dd-trace/src/config/git_properties.js +1 -1
- package/packages/dd-trace/src/config/helper.js +2 -2
- package/packages/dd-trace/src/config/index.js +645 -641
- package/packages/dd-trace/src/config/remote_config.js +2 -1
- package/packages/dd-trace/src/config/stable.js +2 -2
- package/packages/dd-trace/src/config/supported-configurations.json +2 -1
- package/packages/dd-trace/src/constants.js +3 -3
- package/packages/dd-trace/src/crashtracking/crashtracker.js +8 -11
- package/packages/dd-trace/src/datastreams/checkpointer.js +1 -1
- package/packages/dd-trace/src/datastreams/context.js +1 -1
- package/packages/dd-trace/src/datastreams/encoding.js +1 -1
- package/packages/dd-trace/src/datastreams/fnv.js +1 -1
- package/packages/dd-trace/src/datastreams/index.js +8 -8
- package/packages/dd-trace/src/datastreams/pathway.js +5 -3
- package/packages/dd-trace/src/datastreams/processor.js +14 -12
- package/packages/dd-trace/src/datastreams/schemas/schema_builder.js +27 -25
- package/packages/dd-trace/src/datastreams/schemas/schema_sampler.js +1 -1
- package/packages/dd-trace/src/datastreams/size.js +3 -3
- package/packages/dd-trace/src/datastreams/writer.js +5 -11
- package/packages/dd-trace/src/debugger/config.js +2 -1
- package/packages/dd-trace/src/debugger/constants.js +7 -0
- package/packages/dd-trace/src/debugger/devtools_client/breakpoints.js +14 -10
- package/packages/dd-trace/src/debugger/devtools_client/condition.js +2 -2
- package/packages/dd-trace/src/debugger/devtools_client/config.js +6 -12
- package/packages/dd-trace/src/debugger/devtools_client/defaults.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/index.js +32 -25
- package/packages/dd-trace/src/debugger/devtools_client/inspector_promises_polyfill.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/json-buffer.js +10 -11
- package/packages/dd-trace/src/debugger/devtools_client/log.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/send.js +54 -10
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/collector.js +94 -37
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/index.js +4 -4
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/processor.js +7 -7
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/redaction.js +2 -2
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/symbols.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/snapshot-pruner.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/source-maps.js +10 -1
- package/packages/dd-trace/src/debugger/devtools_client/state.js +65 -8
- package/packages/dd-trace/src/debugger/devtools_client/status.js +9 -8
- package/packages/dd-trace/src/debugger/index.js +95 -37
- package/packages/dd-trace/src/dogstatsd.js +17 -18
- package/packages/dd-trace/src/encode/0.4.js +7 -6
- package/packages/dd-trace/src/encode/agentless-ci-visibility.js +8 -8
- package/packages/dd-trace/src/encode/coverage-ci-visibility.js +3 -3
- package/packages/dd-trace/src/encode/span-stats.js +2 -2
- package/packages/dd-trace/src/encode/tags-processors.js +1 -1
- package/packages/dd-trace/src/exporters/agent/index.js +5 -9
- package/packages/dd-trace/src/exporters/agent/writer.js +5 -4
- package/packages/dd-trace/src/exporters/common/agents.js +1 -1
- package/packages/dd-trace/src/exporters/common/{agent-info-exporter.js → buffering-exporter.js} +12 -39
- package/packages/dd-trace/src/exporters/common/docker.js +11 -7
- package/packages/dd-trace/src/exporters/common/request.js +28 -8
- package/packages/dd-trace/src/exporters/common/url-to-http-options-polyfill.js +2 -2
- package/packages/dd-trace/src/exporters/common/writer.js +2 -0
- package/packages/dd-trace/src/exporters/span-stats/index.js +4 -11
- package/packages/dd-trace/src/exporters/span-stats/writer.js +3 -3
- package/packages/dd-trace/src/external-logger/src/index.js +4 -4
- package/packages/dd-trace/src/flare/index.js +3 -3
- package/packages/dd-trace/src/guardrails/telemetry.js +1 -1
- package/packages/dd-trace/src/heap_snapshots.js +1 -1
- package/packages/dd-trace/src/id.js +1 -1
- package/packages/dd-trace/src/iitm.js +1 -1
- package/packages/dd-trace/src/lambda/handler.js +1 -1
- package/packages/dd-trace/src/lambda/runtime/errors.js +1 -1
- package/packages/dd-trace/src/lambda/runtime/ritm.js +3 -3
- package/packages/dd-trace/src/llmobs/constants/tags.js +1 -1
- package/packages/dd-trace/src/llmobs/constants/text.js +1 -1
- package/packages/dd-trace/src/llmobs/constants/writers.js +1 -1
- package/packages/dd-trace/src/llmobs/index.js +2 -4
- package/packages/dd-trace/src/llmobs/noop.js +2 -2
- package/packages/dd-trace/src/llmobs/plugins/ai/index.js +8 -8
- package/packages/dd-trace/src/llmobs/plugins/ai/util.js +2 -2
- package/packages/dd-trace/src/llmobs/plugins/anthropic.js +5 -5
- package/packages/dd-trace/src/llmobs/plugins/base.js +1 -1
- package/packages/dd-trace/src/llmobs/plugins/bedrockruntime.js +8 -8
- package/packages/dd-trace/src/llmobs/plugins/genai/index.js +2 -2
- package/packages/dd-trace/src/llmobs/plugins/genai/util.js +15 -15
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chat_model.js +2 -2
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/index.js +5 -5
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/vectorstore.js +1 -1
- package/packages/dd-trace/src/llmobs/plugins/langchain/index.js +3 -3
- package/packages/dd-trace/src/llmobs/plugins/openai/constants.js +1 -1
- package/packages/dd-trace/src/llmobs/plugins/openai/index.js +17 -17
- package/packages/dd-trace/src/llmobs/plugins/openai/utils.js +3 -3
- package/packages/dd-trace/src/llmobs/plugins/vertexai.js +6 -6
- package/packages/dd-trace/src/llmobs/sdk.js +11 -11
- package/packages/dd-trace/src/llmobs/span_processor.js +6 -6
- package/packages/dd-trace/src/llmobs/tagger.js +4 -4
- package/packages/dd-trace/src/llmobs/telemetry.js +8 -8
- package/packages/dd-trace/src/llmobs/util.js +1 -1
- package/packages/dd-trace/src/llmobs/writers/base.js +11 -17
- package/packages/dd-trace/src/llmobs/writers/evaluations.js +5 -5
- package/packages/dd-trace/src/llmobs/writers/spans.js +3 -3
- package/packages/dd-trace/src/llmobs/writers/util.js +4 -10
- package/packages/dd-trace/src/log/channels.js +2 -2
- package/packages/dd-trace/src/log/index.js +46 -31
- package/packages/dd-trace/src/log/log.js +1 -1
- package/packages/dd-trace/src/log/writer.js +14 -79
- package/packages/dd-trace/src/noop/span.js +2 -2
- package/packages/dd-trace/src/openfeature/constants/constants.js +1 -1
- package/packages/dd-trace/src/openfeature/flagging_provider.js +4 -4
- package/packages/dd-trace/src/openfeature/index.js +2 -2
- package/packages/dd-trace/src/openfeature/noop.js +3 -3
- package/packages/dd-trace/src/openfeature/remote_config.js +1 -1
- package/packages/dd-trace/src/openfeature/writers/base.js +14 -20
- package/packages/dd-trace/src/openfeature/writers/exposures.js +10 -10
- package/packages/dd-trace/src/openfeature/writers/util.js +4 -9
- package/packages/dd-trace/src/opentelemetry/context_manager.js +48 -29
- package/packages/dd-trace/src/opentelemetry/logs/index.js +2 -2
- package/packages/dd-trace/src/opentelemetry/logs/logger_provider.js +2 -2
- package/packages/dd-trace/src/opentelemetry/logs/otlp_transformer.js +10 -10
- package/packages/dd-trace/src/opentelemetry/metrics/constants.js +3 -3
- package/packages/dd-trace/src/opentelemetry/metrics/index.js +2 -2
- package/packages/dd-trace/src/opentelemetry/metrics/instruments.js +3 -3
- package/packages/dd-trace/src/opentelemetry/metrics/meter.js +1 -1
- package/packages/dd-trace/src/opentelemetry/metrics/otlp_transformer.js +11 -11
- package/packages/dd-trace/src/opentelemetry/metrics/periodic_metric_reader.js +18 -18
- package/packages/dd-trace/src/opentelemetry/otlp/otlp_http_exporter_base.js +6 -6
- package/packages/dd-trace/src/opentelemetry/otlp/otlp_transformer_base.js +10 -7
- package/packages/dd-trace/src/opentelemetry/otlp/protobuf_loader.js +3 -3
- package/packages/dd-trace/src/opentelemetry/span.js +8 -8
- package/packages/dd-trace/src/opentelemetry/span_context.js +1 -1
- package/packages/dd-trace/src/opentelemetry/span_processor.js +1 -1
- package/packages/dd-trace/src/opentelemetry/tracer.js +4 -4
- package/packages/dd-trace/src/opentracing/propagation/log.js +2 -2
- package/packages/dd-trace/src/opentracing/propagation/text_map.js +14 -12
- package/packages/dd-trace/src/opentracing/propagation/text_map_dsm.js +2 -0
- package/packages/dd-trace/src/opentracing/span.js +20 -20
- package/packages/dd-trace/src/opentracing/span_context.js +3 -3
- package/packages/dd-trace/src/opentracing/tracer.js +3 -3
- package/packages/dd-trace/src/payload-tagging/config/index.js +1 -1
- package/packages/dd-trace/src/payload-tagging/index.js +1 -1
- package/packages/dd-trace/src/payload-tagging/tagging.js +2 -2
- package/packages/dd-trace/src/plugin_manager.js +6 -6
- package/packages/dd-trace/src/plugins/apollo.js +4 -4
- package/packages/dd-trace/src/plugins/ci_plugin.js +101 -36
- package/packages/dd-trace/src/plugins/database.js +1 -1
- package/packages/dd-trace/src/plugins/index.js +1 -1
- package/packages/dd-trace/src/plugins/log_plugin.js +2 -2
- package/packages/dd-trace/src/plugins/outbound.js +9 -8
- package/packages/dd-trace/src/plugins/plugin.js +17 -7
- package/packages/dd-trace/src/plugins/producer.js +6 -5
- package/packages/dd-trace/src/plugins/tracing.js +37 -8
- package/packages/dd-trace/src/plugins/util/ci.js +40 -40
- package/packages/dd-trace/src/plugins/util/env.js +2 -2
- package/packages/dd-trace/src/plugins/util/git-cache.js +2 -2
- package/packages/dd-trace/src/plugins/util/git.js +20 -18
- package/packages/dd-trace/src/plugins/util/inferred_proxy.js +6 -6
- package/packages/dd-trace/src/plugins/util/ip_extractor.js +3 -3
- package/packages/dd-trace/src/plugins/util/llm.js +1 -1
- package/packages/dd-trace/src/plugins/util/stacktrace.js +3 -3
- package/packages/dd-trace/src/plugins/util/tags.js +1 -1
- package/packages/dd-trace/src/plugins/util/test.js +46 -40
- package/packages/dd-trace/src/plugins/util/url.js +1 -1
- package/packages/dd-trace/src/plugins/util/urlfilter.js +1 -1
- package/packages/dd-trace/src/plugins/util/user-provided-git.js +2 -2
- package/packages/dd-trace/src/plugins/util/web.js +12 -12
- package/packages/dd-trace/src/priority_sampler.js +4 -4
- package/packages/dd-trace/src/process-tags/index.js +2 -2
- package/packages/dd-trace/src/profiler.js +1 -1
- package/packages/dd-trace/src/profiling/config.js +11 -14
- package/packages/dd-trace/src/profiling/constants.js +2 -2
- package/packages/dd-trace/src/profiling/exporter_cli.js +3 -3
- package/packages/dd-trace/src/profiling/exporters/agent.js +5 -5
- package/packages/dd-trace/src/profiling/exporters/event_serializer.js +8 -8
- package/packages/dd-trace/src/profiling/index.js +1 -1
- package/packages/dd-trace/src/profiling/libuv-size.js +1 -1
- package/packages/dd-trace/src/profiling/loggers/console.js +1 -1
- package/packages/dd-trace/src/profiling/profiler.js +21 -23
- package/packages/dd-trace/src/profiling/profilers/event_plugins/event.js +1 -1
- package/packages/dd-trace/src/profiling/profilers/event_plugins/fs.js +3 -3
- package/packages/dd-trace/src/profiling/profilers/events.js +27 -19
- package/packages/dd-trace/src/profiling/profilers/shared.js +2 -2
- package/packages/dd-trace/src/profiling/profilers/wall.js +4 -4
- package/packages/dd-trace/src/profiling/tagger.js +1 -1
- package/packages/dd-trace/src/profiling/webspan-utils.js +2 -2
- package/packages/dd-trace/src/proxy.js +13 -13
- package/packages/dd-trace/src/remote_config/apply_states.js +1 -1
- package/packages/dd-trace/src/remote_config/capabilities.js +1 -0
- package/packages/dd-trace/src/remote_config/index.js +17 -22
- package/packages/dd-trace/src/remote_config/scheduler.js +1 -1
- package/packages/dd-trace/src/ritm.js +1 -1
- package/packages/dd-trace/src/runtime_metrics/index.js +2 -2
- package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +3 -3
- package/packages/dd-trace/src/serverless.js +1 -1
- package/packages/dd-trace/src/service-naming/extra-services.js +1 -1
- package/packages/dd-trace/src/service-naming/index.js +1 -1
- package/packages/dd-trace/src/service-naming/schemas/v0/graphql.js +3 -3
- package/packages/dd-trace/src/service-naming/schemas/v0/messaging.js +25 -25
- package/packages/dd-trace/src/service-naming/schemas/v0/serverless.js +3 -3
- package/packages/dd-trace/src/service-naming/schemas/v0/storage.js +18 -18
- package/packages/dd-trace/src/service-naming/schemas/v0/web.js +23 -23
- package/packages/dd-trace/src/service-naming/schemas/v0/websocket.js +9 -9
- package/packages/dd-trace/src/service-naming/schemas/v1/graphql.js +3 -3
- package/packages/dd-trace/src/service-naming/schemas/v1/messaging.js +21 -21
- package/packages/dd-trace/src/service-naming/schemas/v1/serverless.js +3 -3
- package/packages/dd-trace/src/service-naming/schemas/v1/storage.js +17 -17
- package/packages/dd-trace/src/service-naming/schemas/v1/web.js +23 -23
- package/packages/dd-trace/src/service-naming/schemas/v1/websocket.js +9 -9
- package/packages/dd-trace/src/span_format.js +4 -4
- package/packages/dd-trace/src/span_sampler.js +1 -1
- package/packages/dd-trace/src/span_stats.js +11 -11
- package/packages/dd-trace/src/spanleak.js +1 -1
- package/packages/dd-trace/src/standalone/index.js +1 -1
- package/packages/dd-trace/src/standalone/product.js +2 -2
- package/packages/dd-trace/src/standalone/tracesource.js +1 -1
- package/packages/dd-trace/src/startup-log.js +4 -4
- package/packages/dd-trace/src/tagger.js +3 -1
- package/packages/dd-trace/src/telemetry/dependencies.js +4 -4
- package/packages/dd-trace/src/telemetry/endpoints.js +4 -4
- package/packages/dd-trace/src/telemetry/index.js +1 -1
- package/packages/dd-trace/src/telemetry/logs/index.js +2 -2
- package/packages/dd-trace/src/telemetry/logs/log-collector.js +2 -2
- package/packages/dd-trace/src/telemetry/metrics.js +6 -6
- package/packages/dd-trace/src/telemetry/send-data.js +5 -5
- package/packages/dd-trace/src/telemetry/telemetry.js +10 -10
- package/packages/dd-trace/src/tracer.js +3 -2
- package/packages/dd-trace/src/util.js +1 -1
- package/scripts/preinstall.js +1 -1
- package/vendor/dist/@datadog/sketches-js/index.js +1 -1
- package/vendor/dist/@datadog/source-map/index.js +1 -1
- package/vendor/dist/@isaacs/ttlcache/index.js +1 -1
- package/vendor/dist/@opentelemetry/core/index.js +1 -1
- package/vendor/dist/@opentelemetry/resources/index.js +1 -1
- package/vendor/dist/astring/index.js +1 -1
- package/vendor/dist/crypto-randomuuid/index.js +1 -1
- package/vendor/dist/escape-string-regexp/index.js +1 -1
- package/vendor/dist/esquery/index.js +1 -1
- package/vendor/dist/ignore/index.js +1 -1
- package/vendor/dist/istanbul-lib-coverage/index.js +1 -1
- package/vendor/dist/jest-docblock/index.js +1 -1
- package/vendor/dist/jsonpath-plus/index.js +1 -1
- package/vendor/dist/limiter/index.js +1 -1
- package/vendor/dist/lodash.sortby/index.js +1 -1
- package/vendor/dist/lru-cache/index.js +1 -1
- package/vendor/dist/meriyah/index.js +1 -1
- package/vendor/dist/module-details-from-path/index.js +1 -1
- package/vendor/dist/mutexify/promise/index.js +1 -1
- package/vendor/dist/opentracing/index.js +1 -1
- package/vendor/dist/path-to-regexp/index.js +1 -1
- package/vendor/dist/pprof-format/index.js +1 -1
- package/vendor/dist/protobufjs/index.js +1 -1
- package/vendor/dist/protobufjs/minimal/index.js +1 -1
- package/vendor/dist/retry/index.js +1 -1
- package/vendor/dist/rfdc/index.js +1 -1
- package/vendor/dist/semifies/index.js +1 -1
- package/vendor/dist/shell-quote/index.js +1 -1
- package/vendor/dist/source-map/index.js +1 -1
- package/vendor/dist/source-map/lib/util/index.js +1 -1
- package/vendor/dist/tlhunter-sorted-set/index.js +1 -1
- package/vendor/dist/ttl-set/index.js +1 -1
- package/packages/datadog-plugin-prisma/src/client.js +0 -60
- package/packages/datadog-plugin-prisma/src/engine.js +0 -81
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const fs = require('fs')
|
|
4
|
-
const os = require('os')
|
|
5
|
-
const { URL } = require('url')
|
|
6
|
-
const path = require('path')
|
|
3
|
+
const fs = require('node:fs')
|
|
4
|
+
const os = require('node:os')
|
|
5
|
+
const { URL } = require('node:url')
|
|
6
|
+
const path = require('node:path')
|
|
7
|
+
|
|
7
8
|
const uuid = require('../../../../vendor/dist/crypto-randomuuid') // we need to keep the old uuid dep because of cypress
|
|
8
9
|
|
|
9
10
|
const set = require('../../../datadog-core/src/utils/src/set')
|
|
@@ -15,10 +16,10 @@ const { GIT_REPOSITORY_URL, GIT_COMMIT_SHA } = require('../plugins/util/tags')
|
|
|
15
16
|
const { updateConfig } = require('../telemetry')
|
|
16
17
|
const telemetryMetrics = require('../telemetry/metrics')
|
|
17
18
|
const {
|
|
18
|
-
|
|
19
|
+
IS_SERVERLESS,
|
|
19
20
|
getIsGCPFunction,
|
|
20
21
|
getIsAzureFunction,
|
|
21
|
-
enableGCPPubSubPushSubscription
|
|
22
|
+
enableGCPPubSubPushSubscription,
|
|
22
23
|
} = require('../serverless')
|
|
23
24
|
const { ORIGIN_KEY } = require('../constants')
|
|
24
25
|
const { appendRules } = require('../payload-tagging/config')
|
|
@@ -27,221 +28,36 @@ const { getGitMetadataFromGitProperties, removeUserSensitiveInfo, getRemoteOrigi
|
|
|
27
28
|
const { getEnvironmentVariable: getEnv, getEnvironmentVariables, getStableConfigSources } = require('./helper')
|
|
28
29
|
const defaults = require('./defaults')
|
|
29
30
|
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
const
|
|
35
|
-
'
|
|
36
|
-
'
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
tags.push(ddVar)
|
|
47
|
-
}
|
|
48
|
-
if (otelVar) {
|
|
49
|
-
otelVar = otelVarPrefix + otelVar.toLowerCase()
|
|
50
|
-
tags.push(otelVar)
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
if (!(otelVar in counters)) counters[otelVar] = {}
|
|
54
|
-
|
|
55
|
-
const counter = tracerMetrics.count(event, tags)
|
|
56
|
-
counters[otelVar][ddVar] = counter
|
|
57
|
-
return counter
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
const otelDdEnvMapping = {
|
|
61
|
-
OTEL_LOG_LEVEL: 'DD_TRACE_LOG_LEVEL',
|
|
62
|
-
OTEL_PROPAGATORS: 'DD_TRACE_PROPAGATION_STYLE',
|
|
63
|
-
OTEL_SERVICE_NAME: 'DD_SERVICE',
|
|
64
|
-
OTEL_TRACES_SAMPLER: 'DD_TRACE_SAMPLE_RATE',
|
|
65
|
-
OTEL_TRACES_SAMPLER_ARG: 'DD_TRACE_SAMPLE_RATE',
|
|
66
|
-
OTEL_TRACES_EXPORTER: 'DD_TRACE_ENABLED',
|
|
67
|
-
OTEL_METRICS_EXPORTER: 'DD_RUNTIME_METRICS_ENABLED',
|
|
68
|
-
OTEL_RESOURCE_ATTRIBUTES: 'DD_TAGS',
|
|
69
|
-
OTEL_SDK_DISABLED: 'DD_TRACE_OTEL_ENABLED',
|
|
70
|
-
OTEL_LOGS_EXPORTER: undefined
|
|
71
|
-
}
|
|
72
|
-
|
|
31
|
+
const TELEMETRY_COUNTERS = new Map([
|
|
32
|
+
['otel.env.hiding', {}],
|
|
33
|
+
['otel.env.invalid', {}],
|
|
34
|
+
])
|
|
35
|
+
const OTEL_DD_ENV_MAPPING = new Map([
|
|
36
|
+
['OTEL_LOG_LEVEL', 'DD_TRACE_LOG_LEVEL'],
|
|
37
|
+
['OTEL_PROPAGATORS', 'DD_TRACE_PROPAGATION_STYLE'],
|
|
38
|
+
['OTEL_SERVICE_NAME', 'DD_SERVICE'],
|
|
39
|
+
['OTEL_TRACES_SAMPLER', 'DD_TRACE_SAMPLE_RATE'],
|
|
40
|
+
['OTEL_TRACES_SAMPLER_ARG', 'DD_TRACE_SAMPLE_RATE'],
|
|
41
|
+
['OTEL_TRACES_EXPORTER', 'DD_TRACE_ENABLED'],
|
|
42
|
+
['OTEL_METRICS_EXPORTER', 'DD_RUNTIME_METRICS_ENABLED'],
|
|
43
|
+
['OTEL_RESOURCE_ATTRIBUTES', 'DD_TAGS'],
|
|
44
|
+
['OTEL_SDK_DISABLED', 'DD_TRACE_OTEL_ENABLED'],
|
|
45
|
+
['OTEL_LOGS_EXPORTER', undefined],
|
|
46
|
+
])
|
|
73
47
|
const VALID_PROPAGATION_STYLES = new Set(['datadog', 'tracecontext', 'b3', 'b3 single header', 'none'])
|
|
74
|
-
|
|
75
48
|
const VALID_PROPAGATION_BEHAVIOR_EXTRACT = new Set(['continue', 'restart', 'ignore'])
|
|
76
|
-
|
|
77
49
|
const VALID_LOG_LEVELS = new Set(['debug', 'info', 'warn', 'error'])
|
|
78
|
-
|
|
79
50
|
const DEFAULT_OTLP_PORT = 4318
|
|
51
|
+
const RUNTIME_ID = uuid()
|
|
52
|
+
const NAMING_VERSIONS = new Set(['v0', 'v1'])
|
|
53
|
+
const DEFAULT_NAMING_VERSION = 'v0'
|
|
80
54
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
always_on: '1.0',
|
|
84
|
-
always_off: '0.0',
|
|
85
|
-
traceidratio: otelTracesSamplerArg,
|
|
86
|
-
parentbased_always_on: '1.0',
|
|
87
|
-
parentbased_always_off: '0.0',
|
|
88
|
-
parentbased_traceidratio: otelTracesSamplerArg
|
|
89
|
-
}
|
|
90
|
-
return OTEL_TRACES_SAMPLER_MAPPING[otelTracesSampler]
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
/**
|
|
94
|
-
* Validate the type of an environment variable
|
|
95
|
-
* @param {string} envVar - The name of the environment variable
|
|
96
|
-
* @param {string} [value] - The value of the environment variable
|
|
97
|
-
* @returns {boolean} - True if the value is valid, false otherwise
|
|
98
|
-
*/
|
|
99
|
-
function isInvalidOtelEnvironmentVariable (envVar, value) {
|
|
100
|
-
// Skip validation if the value is undefined (it was not set as environment variable)
|
|
101
|
-
if (value === undefined) return false
|
|
102
|
-
|
|
103
|
-
switch (envVar) {
|
|
104
|
-
case 'OTEL_LOG_LEVEL':
|
|
105
|
-
return !VALID_LOG_LEVELS.has(value)
|
|
106
|
-
case 'OTEL_PROPAGATORS':
|
|
107
|
-
case 'OTEL_RESOURCE_ATTRIBUTES':
|
|
108
|
-
case 'OTEL_SERVICE_NAME':
|
|
109
|
-
return typeof value !== 'string'
|
|
110
|
-
case 'OTEL_TRACES_SAMPLER':
|
|
111
|
-
return getFromOtelSamplerMap(value, getEnv('OTEL_TRACES_SAMPLER_ARG')) === undefined
|
|
112
|
-
case 'OTEL_TRACES_SAMPLER_ARG':
|
|
113
|
-
return Number.isNaN(Number.parseFloat(value))
|
|
114
|
-
case 'OTEL_SDK_DISABLED':
|
|
115
|
-
return value.toLowerCase() !== 'true' && value.toLowerCase() !== 'false'
|
|
116
|
-
case 'OTEL_TRACES_EXPORTER':
|
|
117
|
-
case 'OTEL_METRICS_EXPORTER':
|
|
118
|
-
case 'OTEL_LOGS_EXPORTER':
|
|
119
|
-
return value.toLowerCase() !== 'none'
|
|
120
|
-
default:
|
|
121
|
-
return true
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
function checkIfBothOtelAndDdEnvVarSet () {
|
|
126
|
-
for (const [otelEnvVar, ddEnvVar] of Object.entries(otelDdEnvMapping)) {
|
|
127
|
-
const otelValue = getEnv(otelEnvVar)
|
|
128
|
-
|
|
129
|
-
if (ddEnvVar && getEnv(ddEnvVar) && otelValue) {
|
|
130
|
-
log.warn('both %s and %s environment variables are set', ddEnvVar, otelEnvVar)
|
|
131
|
-
getCounter('otel.env.hiding', ddEnvVar, otelEnvVar).inc()
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
if (isInvalidOtelEnvironmentVariable(otelEnvVar, otelValue)) {
|
|
135
|
-
log.warn('unexpected value %s for %s environment variable', otelValue, otelEnvVar)
|
|
136
|
-
getCounter('otel.env.invalid', ddEnvVar, otelEnvVar).inc()
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
const runtimeId = uuid()
|
|
142
|
-
|
|
143
|
-
function maybeFile (filepath) {
|
|
144
|
-
if (!filepath) return
|
|
145
|
-
try {
|
|
146
|
-
return fs.readFileSync(filepath, 'utf8')
|
|
147
|
-
} catch (e) {
|
|
148
|
-
log.error('Error reading file %s', filepath, e)
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
function maybeJsonFile (filepath) {
|
|
153
|
-
const file = maybeFile(filepath)
|
|
154
|
-
if (!file) return
|
|
155
|
-
try {
|
|
156
|
-
return JSON.parse(file)
|
|
157
|
-
} catch (e) {
|
|
158
|
-
log.error('Error parsing JSON file %s', filepath, e)
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
function safeJsonParse (input) {
|
|
163
|
-
try {
|
|
164
|
-
return JSON.parse(input)
|
|
165
|
-
} catch {}
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
const namingVersions = new Set(['v0', 'v1'])
|
|
169
|
-
const defaultNamingVersion = 'v0'
|
|
170
|
-
|
|
171
|
-
function validateNamingVersion (versionString) {
|
|
172
|
-
if (!versionString) {
|
|
173
|
-
return defaultNamingVersion
|
|
174
|
-
}
|
|
175
|
-
if (!namingVersions.has(versionString)) {
|
|
176
|
-
log.warn('Unexpected input for config.spanAttributeSchema, picked default', defaultNamingVersion)
|
|
177
|
-
return defaultNamingVersion
|
|
178
|
-
}
|
|
179
|
-
return versionString
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
/**
|
|
183
|
-
* Given a string of comma-separated paths, return the array of paths.
|
|
184
|
-
* If a blank path is provided a null is returned to signal that the feature is disabled.
|
|
185
|
-
* An empty array means the feature is enabled but that no rules need to be applied.
|
|
186
|
-
*
|
|
187
|
-
* @param {string | string[]} input
|
|
188
|
-
*/
|
|
189
|
-
function splitJSONPathRules (input) {
|
|
190
|
-
if (!input || input === '$') return
|
|
191
|
-
if (Array.isArray(input)) return input
|
|
192
|
-
if (input === 'all') return []
|
|
193
|
-
return input.split(',')
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
// Shallow clone with property name remapping
|
|
197
|
-
function remapify (input, mappings) {
|
|
198
|
-
if (!input) return
|
|
199
|
-
const output = {}
|
|
200
|
-
for (const [key, value] of Object.entries(input)) {
|
|
201
|
-
output[key in mappings ? mappings[key] : key] = value
|
|
202
|
-
}
|
|
203
|
-
return output
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
/**
|
|
207
|
-
* Normalizes propagation style values to a lowercase array.
|
|
208
|
-
* Handles both string (comma-separated) and array inputs.
|
|
209
|
-
*/
|
|
210
|
-
function normalizePropagationStyle (value) {
|
|
211
|
-
if (Array.isArray(value)) {
|
|
212
|
-
return value.map(v => v.toLowerCase())
|
|
213
|
-
}
|
|
214
|
-
if (typeof value === 'string') {
|
|
215
|
-
return value.split(',')
|
|
216
|
-
.filter(v => v !== '')
|
|
217
|
-
.map(v => v.trim().toLowerCase())
|
|
218
|
-
}
|
|
219
|
-
if (value !== undefined) {
|
|
220
|
-
log.warn('Unexpected input for config.tracePropagationStyle')
|
|
221
|
-
}
|
|
222
|
-
}
|
|
55
|
+
const tracerMetrics = telemetryMetrics.manager.namespace('tracers')
|
|
56
|
+
const changeTracker = {}
|
|
223
57
|
|
|
224
|
-
|
|
225
|
-
* Warns if both DD_TRACE_PROPAGATION_STYLE and specific inject/extract vars are set.
|
|
226
|
-
*/
|
|
227
|
-
function warnIfPropagationStyleConflict (general, inject, extract) {
|
|
228
|
-
if (general && (inject || extract)) {
|
|
229
|
-
log.warn(
|
|
230
|
-
// eslint-disable-next-line @stylistic/max-len
|
|
231
|
-
'Use either the DD_TRACE_PROPAGATION_STYLE environment variable or separate DD_TRACE_PROPAGATION_STYLE_INJECT and DD_TRACE_PROPAGATION_STYLE_EXTRACT environment variables'
|
|
232
|
-
)
|
|
233
|
-
}
|
|
234
|
-
}
|
|
58
|
+
let configInstance = null
|
|
235
59
|
|
|
236
|
-
|
|
237
|
-
if (!rules) return rules
|
|
238
|
-
return rules.map(rule => {
|
|
239
|
-
return remapify(rule, {
|
|
240
|
-
sample_rate: 'sampleRate',
|
|
241
|
-
max_per_second: 'maxPerSecond'
|
|
242
|
-
})
|
|
243
|
-
})
|
|
244
|
-
}
|
|
60
|
+
module.exports = getConfig
|
|
245
61
|
|
|
246
62
|
class Config {
|
|
247
63
|
/**
|
|
@@ -249,7 +65,6 @@ class Config {
|
|
|
249
65
|
* @type {Record<string, string> | undefined}
|
|
250
66
|
*/
|
|
251
67
|
#parsedDdTags = {}
|
|
252
|
-
|
|
253
68
|
#envUnprocessed = {}
|
|
254
69
|
#optsUnprocessed = {}
|
|
255
70
|
#remoteUnprocessed = {}
|
|
@@ -262,32 +77,20 @@ class Config {
|
|
|
262
77
|
#fleetStableConfig = {}
|
|
263
78
|
#calculated = {}
|
|
264
79
|
|
|
265
|
-
#getSourcesInOrder () {
|
|
266
|
-
return [
|
|
267
|
-
{ container: this.#remote, origin: 'remote_config', unprocessed: this.#remoteUnprocessed },
|
|
268
|
-
{ container: this.#options, origin: 'code', unprocessed: this.#optsUnprocessed },
|
|
269
|
-
{ container: this.#fleetStableConfig, origin: 'fleet_stable_config' },
|
|
270
|
-
{ container: this.#env, origin: 'env_var', unprocessed: this.#envUnprocessed },
|
|
271
|
-
{ container: this.#localStableConfig, origin: 'local_stable_config' },
|
|
272
|
-
{ container: this.#calculated, origin: 'calculated' },
|
|
273
|
-
{ container: this.#defaults, origin: 'default' }
|
|
274
|
-
]
|
|
275
|
-
}
|
|
276
|
-
|
|
277
80
|
constructor (options = {}) {
|
|
278
|
-
if (!
|
|
81
|
+
if (!IS_SERVERLESS) {
|
|
279
82
|
const configEnvSources = getStableConfigSources()
|
|
280
83
|
this.stableConfig = {
|
|
281
84
|
fleetEntries: configEnvSources.fleetStableConfig,
|
|
282
85
|
localEntries: configEnvSources.localStableConfig,
|
|
283
|
-
warnings: configEnvSources.stableConfigWarnings
|
|
86
|
+
warnings: configEnvSources.stableConfigWarnings,
|
|
284
87
|
}
|
|
285
88
|
}
|
|
286
89
|
|
|
287
90
|
options = {
|
|
288
91
|
...options,
|
|
289
92
|
appsec: options.appsec == null ? options.experimental?.appsec : options.appsec,
|
|
290
|
-
iast: options.iast == null ? options.experimental?.iast : options.iast
|
|
93
|
+
iast: options.iast == null ? options.experimental?.iast : options.iast,
|
|
291
94
|
}
|
|
292
95
|
|
|
293
96
|
// Configure the logger first so it can be used to warn about other configs
|
|
@@ -314,13 +117,13 @@ class Config {
|
|
|
314
117
|
|
|
315
118
|
if (typeof options.appsec === 'boolean') {
|
|
316
119
|
options.appsec = {
|
|
317
|
-
enabled: options.appsec
|
|
120
|
+
enabled: options.appsec,
|
|
318
121
|
}
|
|
319
122
|
}
|
|
320
123
|
|
|
321
124
|
if (typeof options.runtimeMetrics === 'boolean') {
|
|
322
125
|
options.runtimeMetrics = {
|
|
323
|
-
enabled: options.runtimeMetrics
|
|
126
|
+
enabled: options.runtimeMetrics,
|
|
324
127
|
}
|
|
325
128
|
}
|
|
326
129
|
|
|
@@ -337,12 +140,12 @@ class Config {
|
|
|
337
140
|
service: this.service,
|
|
338
141
|
env: this.env,
|
|
339
142
|
version: this.version,
|
|
340
|
-
'runtime-id':
|
|
143
|
+
'runtime-id': RUNTIME_ID,
|
|
341
144
|
})
|
|
342
145
|
|
|
343
146
|
if (this.isCiVisibility) {
|
|
344
147
|
tagger.add(this.tags, {
|
|
345
|
-
[ORIGIN_KEY]: 'ciapp-test'
|
|
148
|
+
[ORIGIN_KEY]: 'ciapp-test',
|
|
346
149
|
})
|
|
347
150
|
}
|
|
348
151
|
|
|
@@ -391,19 +194,25 @@ class Config {
|
|
|
391
194
|
this.#merge()
|
|
392
195
|
}
|
|
393
196
|
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
defaultPropagationStyle.push('b3', 'b3 single header')
|
|
197
|
+
getOrigin (name) {
|
|
198
|
+
for (const { container, origin } of this.#getSourcesInOrder()) {
|
|
199
|
+
const value = container[name]
|
|
200
|
+
if (value != null || container === this.#defaults) {
|
|
201
|
+
return origin
|
|
202
|
+
}
|
|
401
203
|
}
|
|
402
|
-
return defaultPropagationStyle
|
|
403
204
|
}
|
|
404
205
|
|
|
405
|
-
|
|
406
|
-
return
|
|
206
|
+
#getSourcesInOrder () {
|
|
207
|
+
return [
|
|
208
|
+
{ container: this.#remote, origin: 'remote_config', unprocessed: this.#remoteUnprocessed },
|
|
209
|
+
{ container: this.#options, origin: 'code', unprocessed: this.#optsUnprocessed },
|
|
210
|
+
{ container: this.#fleetStableConfig, origin: 'fleet_stable_config' },
|
|
211
|
+
{ container: this.#env, origin: 'env_var', unprocessed: this.#envUnprocessed },
|
|
212
|
+
{ container: this.#localStableConfig, origin: 'local_stable_config' },
|
|
213
|
+
{ container: this.#calculated, origin: 'calculated' },
|
|
214
|
+
{ container: this.#defaults, origin: 'default' },
|
|
215
|
+
]
|
|
407
216
|
}
|
|
408
217
|
|
|
409
218
|
#applyStableConfig (config, obj) {
|
|
@@ -414,17 +223,17 @@ class Config {
|
|
|
414
223
|
#applyDefaults () {
|
|
415
224
|
const defaults = this.#defaults
|
|
416
225
|
|
|
417
|
-
if (
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
226
|
+
if (IS_SERVERLESS) {
|
|
227
|
+
setBoolean(defaults, 'crashtracking.enabled', false)
|
|
228
|
+
setString(defaults, 'profiling.enabled', 'false')
|
|
229
|
+
setBoolean(defaults, 'telemetry.enabled', false)
|
|
230
|
+
setBoolean(defaults, 'remoteConfig.enabled', false)
|
|
422
231
|
} else {
|
|
423
|
-
|
|
232
|
+
setBoolean(defaults, 'crashtracking.enabled', true)
|
|
424
233
|
}
|
|
425
234
|
|
|
426
235
|
if (getEnv('JEST_WORKER_ID')) {
|
|
427
|
-
|
|
236
|
+
setBoolean(defaults, 'telemetry.enabled', false)
|
|
428
237
|
}
|
|
429
238
|
}
|
|
430
239
|
|
|
@@ -600,6 +409,7 @@ class Config {
|
|
|
600
409
|
OTEL_TRACES_SAMPLER,
|
|
601
410
|
OTEL_TRACES_SAMPLER_ARG,
|
|
602
411
|
DD_EXPERIMENTAL_FLAGGING_PROVIDER_ENABLED,
|
|
412
|
+
DD_EXPERIMENTAL_FLAGGING_PROVIDER_INITIALIZATION_TIMEOUT_MS,
|
|
603
413
|
OTEL_EXPORTER_OTLP_LOGS_ENDPOINT,
|
|
604
414
|
OTEL_EXPORTER_OTLP_LOGS_HEADERS,
|
|
605
415
|
OTEL_EXPORTER_OTLP_LOGS_PROTOCOL,
|
|
@@ -618,7 +428,7 @@ class Config {
|
|
|
618
428
|
OTEL_BSP_MAX_EXPORT_BATCH_SIZE,
|
|
619
429
|
OTEL_BSP_MAX_QUEUE_SIZE,
|
|
620
430
|
OTEL_METRIC_EXPORT_INTERVAL,
|
|
621
|
-
NX_TASK_TARGET_PROJECT
|
|
431
|
+
NX_TASK_TARGET_PROJECT,
|
|
622
432
|
} = source
|
|
623
433
|
|
|
624
434
|
const tags = {}
|
|
@@ -631,20 +441,20 @@ class Config {
|
|
|
631
441
|
tagger.add(tags, DD_TRACE_TAGS)
|
|
632
442
|
tagger.add(tags, DD_TRACE_GLOBAL_TAGS)
|
|
633
443
|
|
|
634
|
-
|
|
635
|
-
|
|
444
|
+
setString(target, 'apiKey', DD_API_KEY)
|
|
445
|
+
setBoolean(target, 'otelLogsEnabled', DD_LOGS_OTEL_ENABLED)
|
|
636
446
|
// Set OpenTelemetry logs configuration with specific _LOGS_ vars taking precedence over generic _EXPORTERS_ vars
|
|
637
447
|
if (OTEL_EXPORTER_OTLP_ENDPOINT) {
|
|
638
448
|
// Only set if there's a custom URL, otherwise let calc phase handle the default
|
|
639
|
-
|
|
449
|
+
setString(target, 'otelUrl', OTEL_EXPORTER_OTLP_ENDPOINT)
|
|
640
450
|
}
|
|
641
451
|
if (OTEL_EXPORTER_OTLP_ENDPOINT || OTEL_EXPORTER_OTLP_LOGS_ENDPOINT) {
|
|
642
|
-
|
|
452
|
+
setString(target, 'otelLogsUrl', OTEL_EXPORTER_OTLP_LOGS_ENDPOINT || target.otelUrl)
|
|
643
453
|
}
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
454
|
+
setString(target, 'otelHeaders', OTEL_EXPORTER_OTLP_HEADERS)
|
|
455
|
+
setString(target, 'otelLogsHeaders', OTEL_EXPORTER_OTLP_LOGS_HEADERS || target.otelHeaders)
|
|
456
|
+
setString(target, 'otelProtocol', OTEL_EXPORTER_OTLP_PROTOCOL)
|
|
457
|
+
setString(target, 'otelLogsProtocol', OTEL_EXPORTER_OTLP_LOGS_PROTOCOL || target.otelProtocol)
|
|
648
458
|
const otelTimeout = nonNegInt(OTEL_EXPORTER_OTLP_TIMEOUT, 'OTEL_EXPORTER_OTLP_TIMEOUT')
|
|
649
459
|
if (otelTimeout !== undefined) {
|
|
650
460
|
target.otelTimeout = otelTimeout
|
|
@@ -659,7 +469,7 @@ class Config {
|
|
|
659
469
|
target.otelMaxQueueSize = nonNegInt(OTEL_BSP_MAX_QUEUE_SIZE, 'OTEL_BSP_MAX_QUEUE_SIZE', false)
|
|
660
470
|
|
|
661
471
|
const otelMetricsExporterEnabled = OTEL_METRICS_EXPORTER?.toLowerCase() !== 'none'
|
|
662
|
-
|
|
472
|
+
setBoolean(
|
|
663
473
|
target,
|
|
664
474
|
'otelMetricsEnabled',
|
|
665
475
|
DD_METRICS_OTEL_ENABLED && isTrue(DD_METRICS_OTEL_ENABLED) && otelMetricsExporterEnabled
|
|
@@ -667,10 +477,10 @@ class Config {
|
|
|
667
477
|
// Set OpenTelemetry metrics configuration with specific _METRICS_ vars
|
|
668
478
|
// taking precedence over generic _EXPORTERS_ vars
|
|
669
479
|
if (OTEL_EXPORTER_OTLP_ENDPOINT || OTEL_EXPORTER_OTLP_METRICS_ENDPOINT) {
|
|
670
|
-
|
|
480
|
+
setString(target, 'otelMetricsUrl', OTEL_EXPORTER_OTLP_METRICS_ENDPOINT || target.otelUrl)
|
|
671
481
|
}
|
|
672
|
-
|
|
673
|
-
|
|
482
|
+
setString(target, 'otelMetricsHeaders', OTEL_EXPORTER_OTLP_METRICS_HEADERS || target.otelHeaders)
|
|
483
|
+
setString(target, 'otelMetricsProtocol', OTEL_EXPORTER_OTLP_METRICS_PROTOCOL || target.otelProtocol)
|
|
674
484
|
const otelMetricsTimeout = nonNegInt(OTEL_EXPORTER_OTLP_METRICS_TIMEOUT, 'OTEL_EXPORTER_OTLP_METRICS_TIMEOUT')
|
|
675
485
|
target.otelMetricsTimeout = otelMetricsTimeout === undefined ? target.otelTimeout : otelMetricsTimeout
|
|
676
486
|
target.otelMetricsExportTimeout = nonNegInt(OTEL_METRIC_EXPORT_TIMEOUT, 'OTEL_METRIC_EXPORT_TIMEOUT')
|
|
@@ -680,20 +490,20 @@ class Config {
|
|
|
680
490
|
if (OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE) {
|
|
681
491
|
const temporalityPref = OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE.toUpperCase()
|
|
682
492
|
if (['DELTA', 'CUMULATIVE', 'LOWMEMORY'].includes(temporalityPref)) {
|
|
683
|
-
|
|
493
|
+
setString(target, 'otelMetricsTemporalityPreference', temporalityPref)
|
|
684
494
|
}
|
|
685
495
|
}
|
|
686
|
-
|
|
496
|
+
setBoolean(
|
|
687
497
|
target,
|
|
688
498
|
'apmTracingEnabled',
|
|
689
499
|
DD_APM_TRACING_ENABLED ??
|
|
690
500
|
(DD_EXPERIMENTAL_APPSEC_STANDALONE_ENABLED && isFalse(DD_EXPERIMENTAL_APPSEC_STANDALONE_ENABLED))
|
|
691
501
|
)
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
502
|
+
setBoolean(target, 'propagateProcessTags.enabled', DD_EXPERIMENTAL_PROPAGATE_PROCESS_TAGS_ENABLED)
|
|
503
|
+
setString(target, 'appKey', DD_APP_KEY)
|
|
504
|
+
setBoolean(target, 'appsec.apiSecurity.enabled', DD_API_SECURITY_ENABLED && isTrue(DD_API_SECURITY_ENABLED))
|
|
695
505
|
target['appsec.apiSecurity.sampleDelay'] = maybeFloat(DD_API_SECURITY_SAMPLE_DELAY)
|
|
696
|
-
|
|
506
|
+
setBoolean(target, 'appsec.apiSecurity.endpointCollectionEnabled',
|
|
697
507
|
DD_API_SECURITY_ENDPOINT_COLLECTION_ENABLED)
|
|
698
508
|
target['appsec.apiSecurity.endpointCollectionMessageLimit'] =
|
|
699
509
|
maybeInt(DD_API_SECURITY_ENDPOINT_COLLECTION_MESSAGE_LIMIT)
|
|
@@ -702,28 +512,28 @@ class Config {
|
|
|
702
512
|
unprocessedTarget['appsec.blockedTemplateHtml'] = DD_APPSEC_HTTP_BLOCKED_TEMPLATE_HTML
|
|
703
513
|
target['appsec.blockedTemplateJson'] = maybeFile(DD_APPSEC_HTTP_BLOCKED_TEMPLATE_JSON)
|
|
704
514
|
unprocessedTarget['appsec.blockedTemplateJson'] = DD_APPSEC_HTTP_BLOCKED_TEMPLATE_JSON
|
|
705
|
-
|
|
706
|
-
|
|
515
|
+
setBoolean(target, 'appsec.enabled', DD_APPSEC_ENABLED)
|
|
516
|
+
setString(target, 'appsec.eventTracking.mode', DD_APPSEC_AUTO_USER_INSTRUMENTATION_MODE)
|
|
707
517
|
// TODO appsec.extendedHeadersCollection are deprecated, to delete in a major
|
|
708
|
-
|
|
709
|
-
|
|
518
|
+
setBoolean(target, 'appsec.extendedHeadersCollection.enabled', DD_APPSEC_COLLECT_ALL_HEADERS)
|
|
519
|
+
setBoolean(
|
|
710
520
|
target,
|
|
711
521
|
'appsec.extendedHeadersCollection.redaction',
|
|
712
522
|
DD_APPSEC_HEADER_COLLECTION_REDACTION_ENABLED
|
|
713
523
|
)
|
|
714
524
|
target['appsec.extendedHeadersCollection.maxHeaders'] = maybeInt(DD_APPSEC_MAX_COLLECTED_HEADERS)
|
|
715
525
|
unprocessedTarget['appsec.extendedHeadersCollection.maxHeaders'] = DD_APPSEC_MAX_COLLECTED_HEADERS
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
526
|
+
setString(target, 'appsec.obfuscatorKeyRegex', DD_APPSEC_OBFUSCATION_PARAMETER_KEY_REGEXP)
|
|
527
|
+
setString(target, 'appsec.obfuscatorValueRegex', DD_APPSEC_OBFUSCATION_PARAMETER_VALUE_REGEXP)
|
|
528
|
+
setBoolean(target, 'appsec.rasp.enabled', DD_APPSEC_RASP_ENABLED)
|
|
719
529
|
// TODO Deprecated, to delete in a major
|
|
720
|
-
|
|
530
|
+
setBoolean(target, 'appsec.rasp.bodyCollection', DD_APPSEC_RASP_COLLECT_REQUEST_BODY)
|
|
721
531
|
target['appsec.rateLimit'] = maybeInt(DD_APPSEC_TRACE_RATE_LIMIT)
|
|
722
532
|
unprocessedTarget['appsec.rateLimit'] = DD_APPSEC_TRACE_RATE_LIMIT
|
|
723
|
-
|
|
533
|
+
setString(target, 'appsec.rules', DD_APPSEC_RULES)
|
|
724
534
|
// DD_APPSEC_SCA_ENABLED is never used locally, but only sent to the backend
|
|
725
|
-
|
|
726
|
-
|
|
535
|
+
setBoolean(target, 'appsec.sca.enabled', DD_APPSEC_SCA_ENABLED)
|
|
536
|
+
setBoolean(target, 'appsec.stackTrace.enabled', DD_APPSEC_STACK_TRACE_ENABLED)
|
|
727
537
|
target['appsec.stackTrace.maxDepth'] = maybeInt(DD_APPSEC_MAX_STACK_TRACE_DEPTH)
|
|
728
538
|
unprocessedTarget['appsec.stackTrace.maxDepth'] = DD_APPSEC_MAX_STACK_TRACE_DEPTH
|
|
729
539
|
target['appsec.stackTrace.maxStackTraces'] = maybeInt(DD_APPSEC_MAX_STACK_TRACES)
|
|
@@ -733,14 +543,14 @@ class Config {
|
|
|
733
543
|
target.baggageMaxBytes = DD_TRACE_BAGGAGE_MAX_BYTES
|
|
734
544
|
target.baggageMaxItems = DD_TRACE_BAGGAGE_MAX_ITEMS
|
|
735
545
|
target.baggageTagKeys = DD_TRACE_BAGGAGE_TAG_KEYS
|
|
736
|
-
|
|
737
|
-
|
|
546
|
+
setBoolean(target, 'clientIpEnabled', DD_TRACE_CLIENT_IP_ENABLED)
|
|
547
|
+
setString(target, 'clientIpHeader', DD_TRACE_CLIENT_IP_HEADER?.toLowerCase())
|
|
738
548
|
if (DD_TRACE_CLOUD_REQUEST_PAYLOAD_TAGGING || DD_TRACE_CLOUD_RESPONSE_PAYLOAD_TAGGING) {
|
|
739
549
|
if (DD_TRACE_CLOUD_REQUEST_PAYLOAD_TAGGING) {
|
|
740
|
-
|
|
550
|
+
setBoolean(target, 'cloudPayloadTagging.requestsEnabled', true)
|
|
741
551
|
}
|
|
742
552
|
if (DD_TRACE_CLOUD_RESPONSE_PAYLOAD_TAGGING) {
|
|
743
|
-
|
|
553
|
+
setBoolean(target, 'cloudPayloadTagging.responsesEnabled', true)
|
|
744
554
|
}
|
|
745
555
|
target['cloudPayloadTagging.rules'] = appendRules(
|
|
746
556
|
splitJSONPathRules(DD_TRACE_CLOUD_REQUEST_PAYLOAD_TAGGING),
|
|
@@ -750,24 +560,24 @@ class Config {
|
|
|
750
560
|
if (DD_TRACE_CLOUD_PAYLOAD_TAGGING_MAX_DEPTH) {
|
|
751
561
|
target['cloudPayloadTagging.maxDepth'] = maybeInt(DD_TRACE_CLOUD_PAYLOAD_TAGGING_MAX_DEPTH)
|
|
752
562
|
}
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
563
|
+
setBoolean(target, 'crashtracking.enabled', DD_CRASHTRACKING_ENABLED)
|
|
564
|
+
setBoolean(target, 'codeOriginForSpans.enabled', DD_CODE_ORIGIN_FOR_SPANS_ENABLED)
|
|
565
|
+
setBoolean(
|
|
756
566
|
target,
|
|
757
567
|
'codeOriginForSpans.experimental.exit_spans.enabled',
|
|
758
568
|
DD_CODE_ORIGIN_FOR_SPANS_EXPERIMENTAL_EXIT_SPANS_ENABLED
|
|
759
569
|
)
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
570
|
+
setString(target, 'dbmPropagationMode', DD_DBM_PROPAGATION_MODE)
|
|
571
|
+
setString(target, 'dogstatsd.hostname', DD_DOGSTATSD_HOST)
|
|
572
|
+
setString(target, 'dogstatsd.port', DD_DOGSTATSD_PORT)
|
|
573
|
+
setBoolean(target, 'dsmEnabled', DD_DATA_STREAMS_ENABLED)
|
|
764
574
|
target['dynamicInstrumentation.captureTimeoutMs'] = maybeInt(DD_DYNAMIC_INSTRUMENTATION_CAPTURE_TIMEOUT_MS)
|
|
765
575
|
unprocessedTarget['dynamicInstrumentation.captureTimeoutMs'] = DD_DYNAMIC_INSTRUMENTATION_CAPTURE_TIMEOUT_MS
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
576
|
+
setBoolean(target, 'dynamicInstrumentation.enabled', DD_DYNAMIC_INSTRUMENTATION_ENABLED)
|
|
577
|
+
setString(target, 'dynamicInstrumentation.probeFile', DD_DYNAMIC_INSTRUMENTATION_PROBE_FILE)
|
|
578
|
+
setArray(target, 'dynamicInstrumentation.redactedIdentifiers',
|
|
769
579
|
DD_DYNAMIC_INSTRUMENTATION_REDACTED_IDENTIFIERS)
|
|
770
|
-
|
|
580
|
+
setArray(
|
|
771
581
|
target,
|
|
772
582
|
'dynamicInstrumentation.redactionExcludedIdentifiers',
|
|
773
583
|
DD_DYNAMIC_INSTRUMENTATION_REDACTION_EXCLUDED_IDENTIFIERS
|
|
@@ -775,19 +585,27 @@ class Config {
|
|
|
775
585
|
target['dynamicInstrumentation.uploadIntervalSeconds'] =
|
|
776
586
|
maybeFloat(DD_DYNAMIC_INSTRUMENTATION_UPLOAD_INTERVAL_SECONDS)
|
|
777
587
|
unprocessedTarget['dynamicInstrumentation.uploadInterval'] = DD_DYNAMIC_INSTRUMENTATION_UPLOAD_INTERVAL_SECONDS
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
588
|
+
setString(target, 'env', DD_ENV || tags.env)
|
|
589
|
+
setBoolean(
|
|
590
|
+
target,
|
|
591
|
+
'experimental.flaggingProvider.enabled',
|
|
592
|
+
DD_EXPERIMENTAL_FLAGGING_PROVIDER_ENABLED
|
|
593
|
+
)
|
|
594
|
+
if (DD_EXPERIMENTAL_FLAGGING_PROVIDER_INITIALIZATION_TIMEOUT_MS != null) {
|
|
595
|
+
target['experimental.flaggingProvider.initializationTimeoutMs'] =
|
|
596
|
+
maybeInt(DD_EXPERIMENTAL_FLAGGING_PROVIDER_INITIALIZATION_TIMEOUT_MS)
|
|
597
|
+
}
|
|
598
|
+
setBoolean(target, 'traceEnabled', DD_TRACE_ENABLED)
|
|
599
|
+
setBoolean(target, 'experimental.aiguard.enabled', DD_AI_GUARD_ENABLED)
|
|
600
|
+
setString(target, 'experimental.aiguard.endpoint', DD_AI_GUARD_ENDPOINT)
|
|
783
601
|
target['experimental.aiguard.maxContentSize'] = maybeInt(DD_AI_GUARD_MAX_CONTENT_SIZE)
|
|
784
602
|
unprocessedTarget['experimental.aiguard.maxContentSize'] = DD_AI_GUARD_MAX_CONTENT_SIZE
|
|
785
603
|
target['experimental.aiguard.maxMessagesLength'] = maybeInt(DD_AI_GUARD_MAX_MESSAGES_LENGTH)
|
|
786
604
|
unprocessedTarget['experimental.aiguard.maxMessagesLength'] = DD_AI_GUARD_MAX_MESSAGES_LENGTH
|
|
787
605
|
target['experimental.aiguard.timeout'] = maybeInt(DD_AI_GUARD_TIMEOUT)
|
|
788
606
|
unprocessedTarget['experimental.aiguard.timeout'] = DD_AI_GUARD_TIMEOUT
|
|
789
|
-
|
|
790
|
-
|
|
607
|
+
setBoolean(target, 'experimental.enableGetRumData', DD_TRACE_EXPERIMENTAL_GET_RUM_DATA_ENABLED)
|
|
608
|
+
setString(target, 'experimental.exporter', DD_TRACE_EXPERIMENTAL_EXPORTER)
|
|
791
609
|
if (AWS_LAMBDA_FUNCTION_NAME) {
|
|
792
610
|
target.flushInterval = 0
|
|
793
611
|
} else if (DD_TRACE_FLUSH_INTERVAL) {
|
|
@@ -795,54 +613,54 @@ class Config {
|
|
|
795
613
|
}
|
|
796
614
|
target.flushMinSpans = maybeInt(DD_TRACE_PARTIAL_FLUSH_MIN_SPANS)
|
|
797
615
|
unprocessedTarget.flushMinSpans = DD_TRACE_PARTIAL_FLUSH_MIN_SPANS
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
616
|
+
setBoolean(target, 'gitMetadataEnabled', DD_TRACE_GIT_METADATA_ENABLED)
|
|
617
|
+
setIntegerRangeSet(target, 'grpc.client.error.statuses', DD_GRPC_CLIENT_ERROR_STATUSES)
|
|
618
|
+
setIntegerRangeSet(target, 'grpc.server.error.statuses', DD_GRPC_SERVER_ERROR_STATUSES)
|
|
619
|
+
setArray(target, 'headerTags', DD_TRACE_HEADER_TAGS)
|
|
802
620
|
target['heapSnapshot.count'] = maybeInt(DD_HEAP_SNAPSHOT_COUNT)
|
|
803
|
-
|
|
621
|
+
setString(target, 'heapSnapshot.destination', DD_HEAP_SNAPSHOT_DESTINATION)
|
|
804
622
|
target['heapSnapshot.interval'] = maybeInt(DD_HEAP_SNAPSHOT_INTERVAL)
|
|
805
|
-
|
|
623
|
+
setString(target, 'hostname', DD_AGENT_HOST)
|
|
806
624
|
target['iast.dbRowsToTaint'] = maybeInt(DD_IAST_DB_ROWS_TO_TAINT)
|
|
807
|
-
|
|
808
|
-
|
|
625
|
+
setBoolean(target, 'iast.deduplicationEnabled', DD_IAST_DEDUPLICATION_ENABLED)
|
|
626
|
+
setBoolean(target, 'iast.enabled', DD_IAST_ENABLED)
|
|
809
627
|
target['iast.maxConcurrentRequests'] = maybeInt(DD_IAST_MAX_CONCURRENT_REQUESTS)
|
|
810
628
|
unprocessedTarget['iast.maxConcurrentRequests'] = DD_IAST_MAX_CONCURRENT_REQUESTS
|
|
811
629
|
target['iast.maxContextOperations'] = maybeInt(DD_IAST_MAX_CONTEXT_OPERATIONS)
|
|
812
630
|
unprocessedTarget['iast.maxContextOperations'] = DD_IAST_MAX_CONTEXT_OPERATIONS
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
631
|
+
setBoolean(target, 'iast.redactionEnabled', DD_IAST_REDACTION_ENABLED && !isFalse(DD_IAST_REDACTION_ENABLED))
|
|
632
|
+
setString(target, 'iast.redactionNamePattern', DD_IAST_REDACTION_NAME_PATTERN)
|
|
633
|
+
setString(target, 'iast.redactionValuePattern', DD_IAST_REDACTION_VALUE_PATTERN)
|
|
816
634
|
const iastRequestSampling = maybeInt(DD_IAST_REQUEST_SAMPLING)
|
|
817
635
|
if (iastRequestSampling !== undefined && iastRequestSampling > -1 && iastRequestSampling < 101) {
|
|
818
636
|
target['iast.requestSampling'] = iastRequestSampling
|
|
819
637
|
}
|
|
820
638
|
unprocessedTarget['iast.requestSampling'] = DD_IAST_REQUEST_SAMPLING
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
639
|
+
setString(target, 'iast.securityControlsConfiguration', DD_IAST_SECURITY_CONTROLS_CONFIGURATION)
|
|
640
|
+
setString(target, 'iast.telemetryVerbosity', DD_IAST_TELEMETRY_VERBOSITY)
|
|
641
|
+
setBoolean(target, 'iast.stackTrace.enabled', DD_IAST_STACK_TRACE_ENABLED)
|
|
642
|
+
setString(target, 'installSignature.id', DD_INSTRUMENTATION_INSTALL_ID)
|
|
643
|
+
setString(target, 'installSignature.time', DD_INSTRUMENTATION_INSTALL_TIME)
|
|
644
|
+
setString(target, 'installSignature.type', DD_INSTRUMENTATION_INSTALL_TYPE)
|
|
645
|
+
setArray(target, 'injectionEnabled', DD_INJECTION_ENABLED)
|
|
828
646
|
if (DD_INJECTION_ENABLED !== undefined) {
|
|
829
|
-
|
|
647
|
+
setString(target, 'instrumentationSource', DD_INJECTION_ENABLED ? 'ssi' : 'manual')
|
|
830
648
|
}
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
649
|
+
setBoolean(target, 'injectForce', DD_INJECT_FORCE)
|
|
650
|
+
setBoolean(target, 'isAzureFunction', getIsAzureFunction())
|
|
651
|
+
setBoolean(target, 'isGCPFunction', getIsGCPFunction())
|
|
652
|
+
setBoolean(target, 'gcpPubSubPushSubscriptionEnabled', enableGCPPubSubPushSubscription())
|
|
835
653
|
target['langchain.spanCharLimit'] = maybeInt(DD_LANGCHAIN_SPAN_CHAR_LIMIT)
|
|
836
654
|
target['langchain.spanPromptCompletionSampleRate'] = maybeFloat(DD_LANGCHAIN_SPAN_PROMPT_COMPLETION_SAMPLE_RATE)
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
655
|
+
setBoolean(target, 'legacyBaggageEnabled', DD_TRACE_LEGACY_BAGGAGE_ENABLED)
|
|
656
|
+
setBoolean(target, 'llmobs.agentlessEnabled', DD_LLMOBS_AGENTLESS_ENABLED)
|
|
657
|
+
setBoolean(target, 'llmobs.enabled', DD_LLMOBS_ENABLED)
|
|
658
|
+
setString(target, 'llmobs.mlApp', DD_LLMOBS_ML_APP)
|
|
659
|
+
setBoolean(target, 'logInjection', DD_LOGS_INJECTION)
|
|
842
660
|
// Requires an accompanying DD_APM_OBFUSCATION_MEMCACHED_KEEP_COMMAND=true in the agent
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
661
|
+
setBoolean(target, 'memcachedCommandEnabled', DD_TRACE_MEMCACHED_COMMAND_ENABLED)
|
|
662
|
+
setBoolean(target, 'middlewareTracingEnabled', DD_TRACE_MIDDLEWARE_TRACING_ENABLED)
|
|
663
|
+
setBoolean(target, 'openAiLogsEnabled', DD_OPENAI_LOGS_ENABLED)
|
|
846
664
|
target['openai.spanCharLimit'] = maybeInt(DD_OPENAI_SPAN_CHAR_LIMIT)
|
|
847
665
|
unprocessedTarget.openaiSpanCharLimit = DD_OPENAI_SPAN_CHAR_LIMIT
|
|
848
666
|
if (DD_TRACE_PEER_SERVICE_MAPPING) {
|
|
@@ -851,44 +669,44 @@ class Config {
|
|
|
851
669
|
)
|
|
852
670
|
unprocessedTarget.peerServiceMapping = DD_TRACE_PEER_SERVICE_MAPPING
|
|
853
671
|
}
|
|
854
|
-
|
|
672
|
+
setString(target, 'port', DD_TRACE_AGENT_PORT)
|
|
855
673
|
const profilingEnabled = normalizeProfilingEnabledValue(DD_PROFILING_ENABLED)
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
674
|
+
setString(target, 'profiling.enabled', profilingEnabled)
|
|
675
|
+
setString(target, 'profiling.exporters', DD_PROFILING_EXPORTERS)
|
|
676
|
+
setBoolean(target, 'profiling.sourceMap', DD_PROFILING_SOURCE_MAP && !isFalse(DD_PROFILING_SOURCE_MAP))
|
|
859
677
|
if (DD_INTERNAL_PROFILING_LONG_LIVED_THRESHOLD) {
|
|
860
678
|
// This is only used in testing to not have to wait 30s
|
|
861
679
|
target['profiling.longLivedThreshold'] = Number(DD_INTERNAL_PROFILING_LONG_LIVED_THRESHOLD)
|
|
862
680
|
}
|
|
863
681
|
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
682
|
+
setString(target, 'protocolVersion', DD_TRACE_AGENT_PROTOCOL_VERSION)
|
|
683
|
+
setString(target, 'queryStringObfuscation', DD_TRACE_OBFUSCATION_QUERY_STRING_REGEXP)
|
|
684
|
+
setBoolean(target, 'remoteConfig.enabled', DD_REMOTE_CONFIGURATION_ENABLED)
|
|
867
685
|
target['remoteConfig.pollInterval'] = maybeFloat(DD_REMOTE_CONFIG_POLL_INTERVAL_SECONDS)
|
|
868
686
|
unprocessedTarget['remoteConfig.pollInterval'] = DD_REMOTE_CONFIG_POLL_INTERVAL_SECONDS
|
|
869
|
-
|
|
687
|
+
setBoolean(target, 'reportHostname', DD_TRACE_REPORT_HOSTNAME)
|
|
870
688
|
if (DD_TRACE_RESOURCE_RENAMING_ENABLED !== undefined) {
|
|
871
|
-
|
|
689
|
+
setBoolean(target, 'resourceRenamingEnabled', DD_TRACE_RESOURCE_RENAMING_ENABLED)
|
|
872
690
|
}
|
|
873
691
|
// only used to explicitly set runtimeMetrics to false
|
|
874
692
|
const otelSetRuntimeMetrics = String(OTEL_METRICS_EXPORTER).toLowerCase() === 'none'
|
|
875
693
|
? false
|
|
876
694
|
: undefined
|
|
877
|
-
|
|
695
|
+
setBoolean(target, 'runtimeMetrics.enabled', DD_RUNTIME_METRICS_ENABLED ||
|
|
878
696
|
otelSetRuntimeMetrics)
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
697
|
+
setBoolean(target, 'runtimeMetrics.eventLoop', DD_RUNTIME_METRICS_EVENT_LOOP_ENABLED)
|
|
698
|
+
setBoolean(target, 'runtimeMetrics.gc', DD_RUNTIME_METRICS_GC_ENABLED)
|
|
699
|
+
setBoolean(target, 'runtimeMetricsRuntimeId', DD_RUNTIME_METRICS_RUNTIME_ID_ENABLED)
|
|
700
|
+
setArray(target, 'sampler.spanSamplingRules', reformatSpanSamplingRules(
|
|
883
701
|
maybeJsonFile(DD_SPAN_SAMPLING_RULES_FILE) ??
|
|
884
702
|
safeJsonParse(DD_SPAN_SAMPLING_RULES)
|
|
885
703
|
))
|
|
886
|
-
|
|
704
|
+
setUnit(target, 'sampleRate', DD_TRACE_SAMPLE_RATE ||
|
|
887
705
|
getFromOtelSamplerMap(OTEL_TRACES_SAMPLER, OTEL_TRACES_SAMPLER_ARG))
|
|
888
706
|
target['sampler.rateLimit'] = DD_TRACE_RATE_LIMIT
|
|
889
|
-
|
|
707
|
+
setSamplingRule(target, 'sampler.rules', safeJsonParse(DD_TRACE_SAMPLING_RULES))
|
|
890
708
|
unprocessedTarget['sampler.rules'] = DD_TRACE_SAMPLING_RULES
|
|
891
|
-
|
|
709
|
+
setString(target, 'scope', DD_TRACE_SCOPE)
|
|
892
710
|
// Priority:
|
|
893
711
|
// DD_SERVICE > tags.service > OTEL_SERVICE_NAME > NX_TASK_TARGET_PROJECT (if DD_ENABLE_NX_SERVICE_NAME) > default
|
|
894
712
|
let serviceName = DD_SERVICE || tags.service || OTEL_SERVICE_NAME
|
|
@@ -898,57 +716,56 @@ class Config {
|
|
|
898
716
|
} else if (DD_MAJOR < 6) {
|
|
899
717
|
// Warn about v6 behavior change for Nx projects
|
|
900
718
|
log.warn(
|
|
901
|
-
|
|
902
|
-
'In v6, NX_TASK_TARGET_PROJECT will be used as the default service name. '
|
|
903
|
-
'Set DD_ENABLE_NX_SERVICE_NAME=true to opt-in to this behavior now, or set a service name explicitly.'
|
|
719
|
+
// eslint-disable-next-line @stylistic/max-len
|
|
720
|
+
'NX_TASK_TARGET_PROJECT is set but no service name was configured. In v6, NX_TASK_TARGET_PROJECT will be used as the default service name. Set DD_ENABLE_NX_SERVICE_NAME=true to opt-in to this behavior now, or set a service name explicitly.'
|
|
904
721
|
)
|
|
905
722
|
}
|
|
906
723
|
}
|
|
907
|
-
|
|
724
|
+
setString(target, 'service', serviceName)
|
|
908
725
|
if (DD_SERVICE_MAPPING) {
|
|
909
726
|
target.serviceMapping = Object.fromEntries(
|
|
910
727
|
DD_SERVICE_MAPPING.split(',').map(x => x.trim().split(':'))
|
|
911
728
|
)
|
|
912
729
|
}
|
|
913
|
-
|
|
730
|
+
setString(target, 'site', DD_SITE)
|
|
914
731
|
if (DD_TRACE_SPAN_ATTRIBUTE_SCHEMA) {
|
|
915
|
-
|
|
732
|
+
setString(target, 'spanAttributeSchema', validateNamingVersion(DD_TRACE_SPAN_ATTRIBUTE_SCHEMA))
|
|
916
733
|
unprocessedTarget.spanAttributeSchema = DD_TRACE_SPAN_ATTRIBUTE_SCHEMA
|
|
917
734
|
}
|
|
918
735
|
// 0: disabled, 1: logging, 2: garbage collection + logging
|
|
919
736
|
target.spanLeakDebug = maybeInt(DD_TRACE_SPAN_LEAK_DEBUG)
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
737
|
+
setBoolean(target, 'spanRemoveIntegrationFromService', DD_TRACE_REMOVE_INTEGRATION_SERVICE_NAMES_ENABLED)
|
|
738
|
+
setBoolean(target, 'startupLogs', DD_TRACE_STARTUP_LOGS)
|
|
739
|
+
setTags(target, 'tags', tags)
|
|
923
740
|
target.tagsHeaderMaxLength = DD_TRACE_X_DATADOG_TAGS_MAX_LENGTH
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
741
|
+
setBoolean(target, 'telemetry.enabled', DD_INSTRUMENTATION_TELEMETRY_ENABLED)
|
|
742
|
+
setString(target, 'instrumentation_config_id', DD_INSTRUMENTATION_CONFIG_ID)
|
|
743
|
+
setBoolean(target, 'telemetry.debug', DD_TELEMETRY_DEBUG)
|
|
744
|
+
setBoolean(target, 'telemetry.dependencyCollection', DD_TELEMETRY_DEPENDENCY_COLLECTION_ENABLED)
|
|
928
745
|
target['telemetry.heartbeatInterval'] = maybeInt(Math.floor(DD_TELEMETRY_HEARTBEAT_INTERVAL * 1000))
|
|
929
746
|
unprocessedTarget['telemetry.heartbeatInterval'] = DD_TELEMETRY_HEARTBEAT_INTERVAL * 1000
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
747
|
+
setBoolean(target, 'telemetry.logCollection', DD_TELEMETRY_LOG_COLLECTION_ENABLED)
|
|
748
|
+
setBoolean(target, 'telemetry.metrics', DD_TELEMETRY_METRICS_ENABLED)
|
|
749
|
+
setBoolean(target, 'traceId128BitGenerationEnabled', DD_TRACE_128_BIT_TRACEID_GENERATION_ENABLED)
|
|
750
|
+
setBoolean(target, 'traceId128BitLoggingEnabled', DD_TRACE_128_BIT_TRACEID_LOGGING_ENABLED)
|
|
934
751
|
warnIfPropagationStyleConflict(
|
|
935
752
|
DD_TRACE_PROPAGATION_STYLE,
|
|
936
753
|
DD_TRACE_PROPAGATION_STYLE_INJECT,
|
|
937
754
|
DD_TRACE_PROPAGATION_STYLE_EXTRACT
|
|
938
755
|
)
|
|
939
756
|
if (DD_TRACE_PROPAGATION_STYLE !== undefined) {
|
|
940
|
-
|
|
941
|
-
|
|
757
|
+
setArray(target, 'tracePropagationStyle.inject', normalizePropagationStyle(DD_TRACE_PROPAGATION_STYLE))
|
|
758
|
+
setArray(target, 'tracePropagationStyle.extract', normalizePropagationStyle(DD_TRACE_PROPAGATION_STYLE))
|
|
942
759
|
}
|
|
943
760
|
if (DD_TRACE_PROPAGATION_STYLE_INJECT !== undefined) {
|
|
944
|
-
|
|
761
|
+
setArray(target, 'tracePropagationStyle.inject',
|
|
945
762
|
normalizePropagationStyle(DD_TRACE_PROPAGATION_STYLE_INJECT))
|
|
946
763
|
}
|
|
947
764
|
if (DD_TRACE_PROPAGATION_STYLE_EXTRACT !== undefined) {
|
|
948
|
-
|
|
765
|
+
setArray(target, 'tracePropagationStyle.extract',
|
|
949
766
|
normalizePropagationStyle(DD_TRACE_PROPAGATION_STYLE_EXTRACT))
|
|
950
767
|
}
|
|
951
|
-
|
|
768
|
+
setBoolean(target, 'tracePropagationExtractFirst', DD_TRACE_PROPAGATION_EXTRACT_FIRST)
|
|
952
769
|
if (DD_TRACE_PROPAGATION_BEHAVIOR_EXTRACT !== undefined) {
|
|
953
770
|
const stringPropagationBehaviorExtract = String(DD_TRACE_PROPAGATION_BEHAVIOR_EXTRACT)
|
|
954
771
|
target.tracePropagationBehaviorExtract =
|
|
@@ -964,7 +781,7 @@ class Config {
|
|
|
964
781
|
const useDdStyle = DD_TRACE_PROPAGATION_STYLE ||
|
|
965
782
|
DD_TRACE_PROPAGATION_STYLE_INJECT ||
|
|
966
783
|
DD_TRACE_PROPAGATION_STYLE_EXTRACT
|
|
967
|
-
|
|
784
|
+
setBoolean(target, 'tracePropagationStyle.otelPropagators',
|
|
968
785
|
useDdStyle ? false : !!OTEL_PROPAGATORS)
|
|
969
786
|
|
|
970
787
|
// Use OTEL_PROPAGATORS if no DD-specific vars are set
|
|
@@ -979,21 +796,21 @@ class Config {
|
|
|
979
796
|
}
|
|
980
797
|
// Set inject/extract from OTEL_PROPAGATORS
|
|
981
798
|
if (otelStyles) {
|
|
982
|
-
|
|
983
|
-
|
|
799
|
+
setArray(target, 'tracePropagationStyle.inject', otelStyles)
|
|
800
|
+
setArray(target, 'tracePropagationStyle.extract', otelStyles)
|
|
984
801
|
}
|
|
985
802
|
}
|
|
986
803
|
}
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
804
|
+
setBoolean(target, 'traceWebsocketMessagesEnabled', DD_TRACE_WEBSOCKET_MESSAGES_ENABLED)
|
|
805
|
+
setBoolean(target, 'traceWebsocketMessagesInheritSampling', DD_TRACE_WEBSOCKET_MESSAGES_INHERIT_SAMPLING)
|
|
806
|
+
setBoolean(target, 'traceWebsocketMessagesSeparateTraces', DD_TRACE_WEBSOCKET_MESSAGES_SEPARATE_TRACES)
|
|
807
|
+
setBoolean(target, 'tracing', DD_TRACING_ENABLED)
|
|
808
|
+
setString(target, 'version', DD_VERSION || tags.version)
|
|
809
|
+
setBoolean(target, 'inferredProxyServicesEnabled', DD_TRACE_INFERRED_PROXY_SERVICES_ENABLED)
|
|
810
|
+
setBoolean(target, 'trace.aws.addSpanPointers', DD_TRACE_AWS_ADD_SPAN_POINTERS)
|
|
811
|
+
setString(target, 'trace.dynamoDb.tablePrimaryKeys', DD_TRACE_DYNAMODB_TABLE_PRIMARY_KEYS)
|
|
812
|
+
setArray(target, 'graphqlErrorExtensions', DD_TRACE_GRAPHQL_ERROR_EXTENSIONS)
|
|
813
|
+
setBoolean(target, 'trace.nativeSpanEvents', DD_TRACE_NATIVE_SPAN_EVENTS)
|
|
997
814
|
target['vertexai.spanPromptCompletionSampleRate'] = maybeFloat(DD_VERTEXAI_SPAN_PROMPT_COMPLETION_SAMPLE_RATE)
|
|
998
815
|
target['vertexai.spanCharLimit'] = maybeInt(DD_VERTEXAI_SPAN_CHAR_LIMIT)
|
|
999
816
|
}
|
|
@@ -1006,11 +823,11 @@ class Config {
|
|
|
1006
823
|
|
|
1007
824
|
tagger.add(tags, options.tags)
|
|
1008
825
|
|
|
1009
|
-
|
|
826
|
+
setBoolean(opts, 'apmTracingEnabled', options.apmTracingEnabled ??
|
|
1010
827
|
(options.experimental?.appsec?.standalone && !options.experimental.appsec.standalone.enabled)
|
|
1011
828
|
)
|
|
1012
|
-
|
|
1013
|
-
|
|
829
|
+
setBoolean(opts, 'appsec.apiSecurity.enabled', options.appsec?.apiSecurity?.enabled)
|
|
830
|
+
setBoolean(opts, 'appsec.apiSecurity.endpointCollectionEnabled',
|
|
1014
831
|
options.appsec?.apiSecurity?.endpointCollectionEnabled)
|
|
1015
832
|
opts['appsec.apiSecurity.endpointCollectionMessageLimit'] =
|
|
1016
833
|
maybeInt(options.appsec?.apiSecurity?.endpointCollectionMessageLimit)
|
|
@@ -1019,41 +836,41 @@ class Config {
|
|
|
1019
836
|
this.#optsUnprocessed['appsec.blockedTemplateHtml'] = options.appsec?.blockedTemplateHtml
|
|
1020
837
|
opts['appsec.blockedTemplateJson'] = maybeFile(options.appsec?.blockedTemplateJson)
|
|
1021
838
|
this.#optsUnprocessed['appsec.blockedTemplateJson'] = options.appsec?.blockedTemplateJson
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
839
|
+
setBoolean(opts, 'appsec.enabled', options.appsec?.enabled)
|
|
840
|
+
setString(opts, 'appsec.eventTracking.mode', options.appsec?.eventTracking?.mode)
|
|
841
|
+
setBoolean(
|
|
1025
842
|
opts,
|
|
1026
843
|
'appsec.extendedHeadersCollection.enabled',
|
|
1027
844
|
options.appsec?.extendedHeadersCollection?.enabled
|
|
1028
845
|
)
|
|
1029
|
-
|
|
846
|
+
setBoolean(
|
|
1030
847
|
opts,
|
|
1031
848
|
'appsec.extendedHeadersCollection.redaction',
|
|
1032
849
|
options.appsec?.extendedHeadersCollection?.redaction
|
|
1033
850
|
)
|
|
1034
851
|
opts['appsec.extendedHeadersCollection.maxHeaders'] = options.appsec?.extendedHeadersCollection?.maxHeaders
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
852
|
+
setString(opts, 'appsec.obfuscatorKeyRegex', options.appsec?.obfuscatorKeyRegex)
|
|
853
|
+
setString(opts, 'appsec.obfuscatorValueRegex', options.appsec?.obfuscatorValueRegex)
|
|
854
|
+
setBoolean(opts, 'appsec.rasp.enabled', options.appsec?.rasp?.enabled)
|
|
855
|
+
setBoolean(opts, 'appsec.rasp.bodyCollection', options.appsec?.rasp?.bodyCollection)
|
|
1039
856
|
opts['appsec.rateLimit'] = maybeInt(options.appsec?.rateLimit)
|
|
1040
857
|
this.#optsUnprocessed['appsec.rateLimit'] = options.appsec?.rateLimit
|
|
1041
|
-
|
|
1042
|
-
|
|
858
|
+
setString(opts, 'appsec.rules', options.appsec?.rules)
|
|
859
|
+
setBoolean(opts, 'appsec.stackTrace.enabled', options.appsec?.stackTrace?.enabled)
|
|
1043
860
|
opts['appsec.stackTrace.maxDepth'] = maybeInt(options.appsec?.stackTrace?.maxDepth)
|
|
1044
861
|
this.#optsUnprocessed['appsec.stackTrace.maxDepth'] = options.appsec?.stackTrace?.maxDepth
|
|
1045
862
|
opts['appsec.stackTrace.maxStackTraces'] = maybeInt(options.appsec?.stackTrace?.maxStackTraces)
|
|
1046
863
|
this.#optsUnprocessed['appsec.stackTrace.maxStackTraces'] = options.appsec?.stackTrace?.maxStackTraces
|
|
1047
864
|
opts['appsec.wafTimeout'] = maybeInt(options.appsec?.wafTimeout)
|
|
1048
865
|
this.#optsUnprocessed['appsec.wafTimeout'] = options.appsec?.wafTimeout
|
|
1049
|
-
|
|
1050
|
-
|
|
866
|
+
setBoolean(opts, 'clientIpEnabled', options.clientIpEnabled)
|
|
867
|
+
setString(opts, 'clientIpHeader', options.clientIpHeader?.toLowerCase())
|
|
1051
868
|
if (options.cloudPayloadTagging?.request || options.cloudPayloadTagging?.response) {
|
|
1052
869
|
if (options.cloudPayloadTagging.request) {
|
|
1053
|
-
|
|
870
|
+
setBoolean(opts, 'cloudPayloadTagging.requestsEnabled', true)
|
|
1054
871
|
}
|
|
1055
872
|
if (options.cloudPayloadTagging.response) {
|
|
1056
|
-
|
|
873
|
+
setBoolean(opts, 'cloudPayloadTagging.responsesEnabled', true)
|
|
1057
874
|
}
|
|
1058
875
|
opts['cloudPayloadTagging.rules'] = appendRules(
|
|
1059
876
|
splitJSONPathRules(options.cloudPayloadTagging.request),
|
|
@@ -1061,37 +878,37 @@ class Config {
|
|
|
1061
878
|
)
|
|
1062
879
|
}
|
|
1063
880
|
if (options.cloudPayloadTagging?.requestsEnabled !== undefined) {
|
|
1064
|
-
|
|
881
|
+
setBoolean(opts, 'cloudPayloadTagging.requestsEnabled', options.cloudPayloadTagging.requestsEnabled)
|
|
1065
882
|
}
|
|
1066
883
|
if (options.cloudPayloadTagging?.responsesEnabled !== undefined) {
|
|
1067
|
-
|
|
884
|
+
setBoolean(opts, 'cloudPayloadTagging.responsesEnabled', options.cloudPayloadTagging.responsesEnabled)
|
|
1068
885
|
}
|
|
1069
886
|
opts['cloudPayloadTagging.maxDepth'] = maybeInt(options.cloudPayloadTagging?.maxDepth)
|
|
1070
887
|
opts.baggageMaxBytes = options.baggageMaxBytes
|
|
1071
888
|
opts.baggageMaxItems = options.baggageMaxItems
|
|
1072
889
|
opts.baggageTagKeys = options.baggageTagKeys
|
|
1073
|
-
|
|
1074
|
-
|
|
890
|
+
setBoolean(opts, 'codeOriginForSpans.enabled', options.codeOriginForSpans?.enabled)
|
|
891
|
+
setBoolean(
|
|
1075
892
|
opts,
|
|
1076
893
|
'codeOriginForSpans.experimental.exit_spans.enabled',
|
|
1077
894
|
options.codeOriginForSpans?.experimental?.exit_spans?.enabled
|
|
1078
895
|
)
|
|
1079
|
-
|
|
896
|
+
setString(opts, 'dbmPropagationMode', options.dbmPropagationMode)
|
|
1080
897
|
if (options.dogstatsd) {
|
|
1081
|
-
|
|
1082
|
-
|
|
898
|
+
setString(opts, 'dogstatsd.hostname', options.dogstatsd.hostname)
|
|
899
|
+
setString(opts, 'dogstatsd.port', options.dogstatsd.port)
|
|
1083
900
|
}
|
|
1084
|
-
|
|
901
|
+
setBoolean(opts, 'dsmEnabled', options.dsmEnabled)
|
|
1085
902
|
opts['dynamicInstrumentation.captureTimeoutMs'] = maybeInt(options.dynamicInstrumentation?.captureTimeoutMs)
|
|
1086
903
|
this.#optsUnprocessed['dynamicInstrumentation.captureTimeoutMs'] = options.dynamicInstrumentation?.captureTimeoutMs
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
904
|
+
setBoolean(opts, 'dynamicInstrumentation.enabled', options.dynamicInstrumentation?.enabled)
|
|
905
|
+
setString(opts, 'dynamicInstrumentation.probeFile', options.dynamicInstrumentation?.probeFile)
|
|
906
|
+
setArray(
|
|
1090
907
|
opts,
|
|
1091
908
|
'dynamicInstrumentation.redactedIdentifiers',
|
|
1092
909
|
options.dynamicInstrumentation?.redactedIdentifiers
|
|
1093
910
|
)
|
|
1094
|
-
|
|
911
|
+
setArray(
|
|
1095
912
|
opts,
|
|
1096
913
|
'dynamicInstrumentation.redactionExcludedIdentifiers',
|
|
1097
914
|
options.dynamicInstrumentation?.redactionExcludedIdentifiers
|
|
@@ -1100,35 +917,40 @@ class Config {
|
|
|
1100
917
|
maybeFloat(options.dynamicInstrumentation?.uploadIntervalSeconds)
|
|
1101
918
|
this.#optsUnprocessed['dynamicInstrumentation.uploadIntervalSeconds'] =
|
|
1102
919
|
options.dynamicInstrumentation?.uploadIntervalSeconds
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
|
|
920
|
+
setString(opts, 'env', options.env || tags.env)
|
|
921
|
+
setBoolean(opts, 'experimental.aiguard.enabled', options.experimental?.aiguard?.enabled)
|
|
922
|
+
setString(opts, 'experimental.aiguard.endpoint', options.experimental?.aiguard?.endpoint)
|
|
1106
923
|
opts['experimental.aiguard.maxMessagesLength'] = maybeInt(options.experimental?.aiguard?.maxMessagesLength)
|
|
1107
924
|
this.#optsUnprocessed['experimental.aiguard.maxMessagesLength'] = options.experimental?.aiguard?.maxMessagesLength
|
|
1108
925
|
opts['experimental.aiguard.maxContentSize'] = maybeInt(options.experimental?.aiguard?.maxContentSize)
|
|
1109
926
|
this.#optsUnprocessed['experimental.aiguard.maxContentSize'] = options.experimental?.aiguard?.maxContentSize
|
|
1110
927
|
opts['experimental.aiguard.timeout'] = maybeInt(options.experimental?.aiguard?.timeout)
|
|
1111
928
|
this.#optsUnprocessed['experimental.aiguard.timeout'] = options.experimental?.aiguard?.timeout
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
929
|
+
setBoolean(opts, 'experimental.enableGetRumData', options.experimental?.enableGetRumData)
|
|
930
|
+
setString(opts, 'experimental.exporter', options.experimental?.exporter)
|
|
931
|
+
setBoolean(opts, 'experimental.flaggingProvider.enabled', options.experimental?.flaggingProvider?.enabled)
|
|
932
|
+
opts['experimental.flaggingProvider.initializationTimeoutMs'] = maybeInt(
|
|
933
|
+
options.experimental?.flaggingProvider?.initializationTimeoutMs
|
|
934
|
+
)
|
|
935
|
+
this.#optsUnprocessed['experimental.flaggingProvider.initializationTimeoutMs'] =
|
|
936
|
+
options.experimental?.flaggingProvider?.initializationTimeoutMs
|
|
1115
937
|
opts.flushInterval = maybeInt(options.flushInterval)
|
|
1116
938
|
this.#optsUnprocessed.flushInterval = options.flushInterval
|
|
1117
939
|
opts.flushMinSpans = maybeInt(options.flushMinSpans)
|
|
1118
940
|
this.#optsUnprocessed.flushMinSpans = options.flushMinSpans
|
|
1119
|
-
|
|
1120
|
-
|
|
941
|
+
setArray(opts, 'headerTags', options.headerTags)
|
|
942
|
+
setString(opts, 'hostname', options.hostname)
|
|
1121
943
|
opts['iast.dbRowsToTaint'] = maybeInt(options.iast?.dbRowsToTaint)
|
|
1122
|
-
|
|
1123
|
-
|
|
944
|
+
setBoolean(opts, 'iast.deduplicationEnabled', options.iast && options.iast.deduplicationEnabled)
|
|
945
|
+
setBoolean(opts, 'iast.enabled',
|
|
1124
946
|
options.iast && (options.iast === true || options.iast.enabled === true))
|
|
1125
947
|
opts['iast.maxConcurrentRequests'] = maybeInt(options.iast?.maxConcurrentRequests)
|
|
1126
948
|
this.#optsUnprocessed['iast.maxConcurrentRequests'] = options.iast?.maxConcurrentRequests
|
|
1127
949
|
opts['iast.maxContextOperations'] = maybeInt(options.iast?.maxContextOperations)
|
|
1128
950
|
this.#optsUnprocessed['iast.maxContextOperations'] = options.iast?.maxContextOperations
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
951
|
+
setBoolean(opts, 'iast.redactionEnabled', options.iast?.redactionEnabled)
|
|
952
|
+
setString(opts, 'iast.redactionNamePattern', options.iast?.redactionNamePattern)
|
|
953
|
+
setString(opts, 'iast.redactionValuePattern', options.iast?.redactionValuePattern)
|
|
1132
954
|
const iastRequestSampling = maybeInt(options.iast?.requestSampling)
|
|
1133
955
|
if (iastRequestSampling !== undefined && iastRequestSampling > -1 && iastRequestSampling < 101) {
|
|
1134
956
|
opts['iast.requestSampling'] = iastRequestSampling
|
|
@@ -1137,60 +959,60 @@ class Config {
|
|
|
1137
959
|
if (DD_MAJOR < 6) {
|
|
1138
960
|
opts['iast.securityControlsConfiguration'] = options.iast?.securityControlsConfiguration
|
|
1139
961
|
}
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
962
|
+
setBoolean(opts, 'iast.stackTrace.enabled', options.iast?.stackTrace?.enabled)
|
|
963
|
+
setString(opts, 'iast.telemetryVerbosity', options.iast && options.iast.telemetryVerbosity)
|
|
964
|
+
setBoolean(opts, 'isCiVisibility', options.isCiVisibility)
|
|
965
|
+
setBoolean(opts, 'legacyBaggageEnabled', options.legacyBaggageEnabled)
|
|
966
|
+
setBoolean(opts, 'llmobs.agentlessEnabled', options.llmobs?.agentlessEnabled)
|
|
967
|
+
setString(opts, 'llmobs.mlApp', options.llmobs?.mlApp)
|
|
968
|
+
setBoolean(opts, 'logInjection', options.logInjection)
|
|
1147
969
|
opts.lookup = options.lookup
|
|
1148
|
-
|
|
1149
|
-
|
|
970
|
+
setBoolean(opts, 'middlewareTracingEnabled', options.middlewareTracingEnabled)
|
|
971
|
+
setBoolean(opts, 'openAiLogsEnabled', options.openAiLogsEnabled)
|
|
1150
972
|
opts.peerServiceMapping = options.peerServiceMapping
|
|
1151
|
-
|
|
1152
|
-
|
|
973
|
+
setBoolean(opts, 'plugins', options.plugins)
|
|
974
|
+
setString(opts, 'port', options.port)
|
|
1153
975
|
const strProfiling = String(options.profiling)
|
|
1154
976
|
if (['true', 'false', 'auto'].includes(strProfiling)) {
|
|
1155
|
-
|
|
977
|
+
setString(opts, 'profiling.enabled', strProfiling)
|
|
1156
978
|
}
|
|
1157
|
-
|
|
979
|
+
setString(opts, 'protocolVersion', options.protocolVersion)
|
|
1158
980
|
if (options.remoteConfig) {
|
|
1159
981
|
opts['remoteConfig.pollInterval'] = maybeFloat(options.remoteConfig.pollInterval)
|
|
1160
982
|
this.#optsUnprocessed['remoteConfig.pollInterval'] = options.remoteConfig.pollInterval
|
|
1161
983
|
}
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
|
|
984
|
+
setBoolean(opts, 'reportHostname', options.reportHostname)
|
|
985
|
+
setBoolean(opts, 'runtimeMetrics.enabled', options.runtimeMetrics?.enabled)
|
|
986
|
+
setBoolean(opts, 'runtimeMetrics.eventLoop', options.runtimeMetrics?.eventLoop)
|
|
987
|
+
setBoolean(opts, 'runtimeMetrics.gc', options.runtimeMetrics?.gc)
|
|
988
|
+
setBoolean(opts, 'runtimeMetricsRuntimeId', options.runtimeMetricsRuntimeId)
|
|
989
|
+
setArray(opts, 'sampler.spanSamplingRules', reformatSpanSamplingRules(options.spanSamplingRules))
|
|
990
|
+
setUnit(opts, 'sampleRate', options.sampleRate ?? options.ingestion.sampleRate)
|
|
1169
991
|
opts['sampler.rateLimit'] = maybeInt(options.rateLimit ?? options.ingestion.rateLimit)
|
|
1170
|
-
|
|
1171
|
-
|
|
992
|
+
setSamplingRule(opts, 'sampler.rules', options.samplingRules)
|
|
993
|
+
setString(opts, 'service', options.service || tags.service)
|
|
1172
994
|
opts.serviceMapping = options.serviceMapping
|
|
1173
|
-
|
|
995
|
+
setString(opts, 'site', options.site)
|
|
1174
996
|
if (options.spanAttributeSchema) {
|
|
1175
|
-
|
|
997
|
+
setString(opts, 'spanAttributeSchema', validateNamingVersion(options.spanAttributeSchema))
|
|
1176
998
|
this.#optsUnprocessed.spanAttributeSchema = options.spanAttributeSchema
|
|
1177
999
|
}
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1000
|
+
setBoolean(opts, 'spanRemoveIntegrationFromService', options.spanRemoveIntegrationFromService)
|
|
1001
|
+
setBoolean(opts, 'startupLogs', options.startupLogs)
|
|
1002
|
+
setTags(opts, 'tags', tags)
|
|
1003
|
+
setBoolean(opts, 'traceId128BitGenerationEnabled', options.traceId128BitGenerationEnabled)
|
|
1004
|
+
setBoolean(opts, 'traceId128BitLoggingEnabled', options.traceId128BitLoggingEnabled)
|
|
1005
|
+
setBoolean(opts, 'traceWebsocketMessagesEnabled', options.traceWebsocketMessagesEnabled)
|
|
1006
|
+
setBoolean(opts, 'traceWebsocketMessagesInheritSampling', options.traceWebsocketMessagesInheritSampling)
|
|
1007
|
+
setBoolean(opts, 'traceWebsocketMessagesSeparateTraces', options.traceWebsocketMessagesSeparateTraces)
|
|
1008
|
+
setString(opts, 'version', options.version || tags.version)
|
|
1009
|
+
setBoolean(opts, 'inferredProxyServicesEnabled', options.inferredProxyServicesEnabled)
|
|
1010
|
+
setBoolean(opts, 'graphqlErrorExtensions', options.graphqlErrorExtensions)
|
|
1011
|
+
setBoolean(opts, 'trace.nativeSpanEvents', options.trace?.nativeSpanEvents)
|
|
1190
1012
|
if (options.tracePropagationStyle) {
|
|
1191
|
-
|
|
1013
|
+
setArray(opts, 'tracePropagationStyle.inject',
|
|
1192
1014
|
normalizePropagationStyle(options.tracePropagationStyle.inject ?? options.tracePropagationStyle))
|
|
1193
|
-
|
|
1015
|
+
setArray(opts, 'tracePropagationStyle.extract',
|
|
1194
1016
|
normalizePropagationStyle(options.tracePropagationStyle.extract ?? options.tracePropagationStyle))
|
|
1195
1017
|
}
|
|
1196
1018
|
|
|
@@ -1199,7 +1021,7 @@ class Config {
|
|
|
1199
1021
|
// This is to make sure the origins of each value are tracked appropriately for telemetry.
|
|
1200
1022
|
// We'll only set `llmobs.enabled` on the opts when it's not set on the environment, and options.llmobs is provided.
|
|
1201
1023
|
if (this.#env['llmobs.enabled'] == null && options.llmobs) {
|
|
1202
|
-
|
|
1024
|
+
setBoolean(opts, 'llmobs.enabled', true)
|
|
1203
1025
|
}
|
|
1204
1026
|
}
|
|
1205
1027
|
|
|
@@ -1207,15 +1029,11 @@ class Config {
|
|
|
1207
1029
|
return this.#optionsArg.isCiVisibility ?? this.#defaults.isCiVisibility
|
|
1208
1030
|
}
|
|
1209
1031
|
|
|
1210
|
-
#isCiVisibilityItrEnabled () {
|
|
1211
|
-
return getEnv('DD_CIVISIBILITY_ITR_ENABLED') ?? true
|
|
1212
|
-
}
|
|
1213
|
-
|
|
1214
1032
|
#getHostname () {
|
|
1215
1033
|
const DD_CIVISIBILITY_AGENTLESS_URL = getEnv('DD_CIVISIBILITY_AGENTLESS_URL')
|
|
1216
1034
|
const url = DD_CIVISIBILITY_AGENTLESS_URL
|
|
1217
1035
|
? new URL(DD_CIVISIBILITY_AGENTLESS_URL)
|
|
1218
|
-
: getAgentUrl(this
|
|
1036
|
+
: getAgentUrl(this.#getTraceAgentUrl(), this.#optionsArg)
|
|
1219
1037
|
const DD_AGENT_HOST = this.#optionsArg.hostname ??
|
|
1220
1038
|
getEnv('DD_AGENT_HOST') ??
|
|
1221
1039
|
defaults.hostname
|
|
@@ -1257,7 +1075,7 @@ class Config {
|
|
|
1257
1075
|
)
|
|
1258
1076
|
}
|
|
1259
1077
|
|
|
1260
|
-
|
|
1078
|
+
#getTraceAgentUrl () {
|
|
1261
1079
|
return this.#optionsArg.url ??
|
|
1262
1080
|
getEnv('DD_TRACE_AGENT_URL') ??
|
|
1263
1081
|
null
|
|
@@ -1271,31 +1089,31 @@ class Config {
|
|
|
1271
1089
|
|
|
1272
1090
|
calc.url = DD_CIVISIBILITY_AGENTLESS_URL
|
|
1273
1091
|
? new URL(DD_CIVISIBILITY_AGENTLESS_URL)
|
|
1274
|
-
: getAgentUrl(this
|
|
1092
|
+
: getAgentUrl(this.#getTraceAgentUrl(), this.#optionsArg)
|
|
1275
1093
|
|
|
1276
1094
|
if (this.#isCiVisibility()) {
|
|
1277
|
-
|
|
1095
|
+
setBoolean(calc, 'isEarlyFlakeDetectionEnabled',
|
|
1278
1096
|
getEnv('DD_CIVISIBILITY_EARLY_FLAKE_DETECTION_ENABLED') ?? true)
|
|
1279
|
-
|
|
1097
|
+
setBoolean(calc, 'isFlakyTestRetriesEnabled', getEnv('DD_CIVISIBILITY_FLAKY_RETRY_ENABLED') ?? true)
|
|
1280
1098
|
calc.flakyTestRetriesCount = maybeInt(getEnv('DD_CIVISIBILITY_FLAKY_RETRY_COUNT')) ?? 5
|
|
1281
|
-
|
|
1282
|
-
|
|
1283
|
-
|
|
1284
|
-
|
|
1099
|
+
setBoolean(calc, 'isIntelligentTestRunnerEnabled', isTrue(isCiVisibilityItrEnabled()))
|
|
1100
|
+
setBoolean(calc, 'isManualApiEnabled', !isFalse(getEnv('DD_CIVISIBILITY_MANUAL_API_ENABLED')))
|
|
1101
|
+
setString(calc, 'ciVisibilityTestSessionName', getEnv('DD_TEST_SESSION_NAME'))
|
|
1102
|
+
setBoolean(calc, 'ciVisAgentlessLogSubmissionEnabled',
|
|
1285
1103
|
isTrue(getEnv('DD_AGENTLESS_LOG_SUBMISSION_ENABLED')))
|
|
1286
|
-
|
|
1104
|
+
setBoolean(calc, 'isTestDynamicInstrumentationEnabled',
|
|
1287
1105
|
!isFalse(getEnv('DD_TEST_FAILED_TEST_REPLAY_ENABLED')))
|
|
1288
|
-
|
|
1289
|
-
|
|
1106
|
+
setBoolean(calc, 'isServiceUserProvided', !!this.#env.service)
|
|
1107
|
+
setBoolean(calc, 'isTestManagementEnabled', !isFalse(getEnv('DD_TEST_MANAGEMENT_ENABLED')))
|
|
1290
1108
|
calc.testManagementAttemptToFixRetries = maybeInt(getEnv('DD_TEST_MANAGEMENT_ATTEMPT_TO_FIX_RETRIES')) ?? 20
|
|
1291
|
-
|
|
1109
|
+
setBoolean(calc, 'isImpactedTestsEnabled',
|
|
1292
1110
|
!isFalse(getEnv('DD_CIVISIBILITY_IMPACTED_TESTS_DETECTION_ENABLED')))
|
|
1293
1111
|
}
|
|
1294
1112
|
|
|
1295
1113
|
// Disable log injection when OTEL logs are enabled
|
|
1296
1114
|
// OTEL logs and DD log injection are mutually exclusive
|
|
1297
1115
|
if (this.#env.otelLogsEnabled) {
|
|
1298
|
-
|
|
1116
|
+
setBoolean(calc, 'logInjection', false)
|
|
1299
1117
|
}
|
|
1300
1118
|
|
|
1301
1119
|
calc['dogstatsd.hostname'] = this.#getHostname()
|
|
@@ -1306,7 +1124,7 @@ class Config {
|
|
|
1306
1124
|
calc.otelMetricsUrl = `http://${agentHostname}:${DEFAULT_OTLP_PORT}/v1/metrics`
|
|
1307
1125
|
calc.otelUrl = `http://${agentHostname}:${DEFAULT_OTLP_PORT}`
|
|
1308
1126
|
|
|
1309
|
-
|
|
1127
|
+
setBoolean(calc, 'isGitUploadEnabled',
|
|
1310
1128
|
calc.isIntelligentTestRunnerEnabled && !isFalse(getEnv('DD_CIVISIBILITY_GIT_UPLOAD_ENABLED')))
|
|
1311
1129
|
|
|
1312
1130
|
// Enable resourceRenamingEnabled when appsec is enabled and only
|
|
@@ -1314,13 +1132,13 @@ class Config {
|
|
|
1314
1132
|
if (this.#env.resourceRenamingEnabled === undefined) {
|
|
1315
1133
|
const appsecEnabled = this.#options['appsec.enabled'] ?? this.#env['appsec.enabled']
|
|
1316
1134
|
if (appsecEnabled) {
|
|
1317
|
-
|
|
1135
|
+
setBoolean(calc, 'resourceRenamingEnabled', true)
|
|
1318
1136
|
}
|
|
1319
1137
|
}
|
|
1320
1138
|
|
|
1321
|
-
|
|
1322
|
-
|
|
1323
|
-
const defaultPropagationStyle =
|
|
1139
|
+
setBoolean(calc, 'spanComputePeerService', this.#getSpanComputePeerService())
|
|
1140
|
+
setBoolean(calc, 'stats.enabled', this.#isTraceStatsComputationEnabled())
|
|
1141
|
+
const defaultPropagationStyle = getDefaultPropagationStyle(this.#optionsArg)
|
|
1324
1142
|
if (defaultPropagationStyle.length > 2) {
|
|
1325
1143
|
// b3 was added, so update defaults to include it
|
|
1326
1144
|
// This will only be used if no other source (options, env, stable config) set the value
|
|
@@ -1337,13 +1155,13 @@ class Config {
|
|
|
1337
1155
|
#applyRemoteConfig (options) {
|
|
1338
1156
|
const opts = this.#remote
|
|
1339
1157
|
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1158
|
+
setBoolean(opts, 'dynamicInstrumentation.enabled', options.dynamic_instrumentation_enabled)
|
|
1159
|
+
setBoolean(opts, 'codeOriginForSpans.enabled', options.code_origin_enabled)
|
|
1160
|
+
setUnit(opts, 'sampleRate', options.tracing_sampling_rate)
|
|
1161
|
+
setBoolean(opts, 'logInjection', options.log_injection_enabled)
|
|
1162
|
+
setBoolean(opts, 'tracing', options.tracing_enabled)
|
|
1345
1163
|
this.#remoteUnprocessed['sampler.rules'] = options.tracing_sampling_rules
|
|
1346
|
-
|
|
1164
|
+
setSamplingRule(opts, 'sampler.rules', reformatTagsFromRC(options.tracing_sampling_rules))
|
|
1347
1165
|
|
|
1348
1166
|
opts.headerTags = options.tracing_header_tags?.map(tag => {
|
|
1349
1167
|
return tag.tag_name ? `${tag.header}:${tag.tag_name}` : tag.header
|
|
@@ -1351,148 +1169,40 @@ class Config {
|
|
|
1351
1169
|
|
|
1352
1170
|
const tags = {}
|
|
1353
1171
|
tagger.add(tags, options.tracing_tags)
|
|
1354
|
-
if (Object.keys(tags).length)
|
|
1355
|
-
|
|
1356
|
-
}
|
|
1357
|
-
|
|
1358
|
-
#reformatTagsFromRC (samplingRules) {
|
|
1359
|
-
for (const rule of (samplingRules || [])) {
|
|
1360
|
-
if (rule.tags) {
|
|
1361
|
-
const reformattedTags = {}
|
|
1362
|
-
for (const tag of rule.tags) {
|
|
1363
|
-
reformattedTags[tag.key] = tag.value_glob
|
|
1364
|
-
}
|
|
1365
|
-
rule.tags = reformattedTags
|
|
1366
|
-
}
|
|
1367
|
-
}
|
|
1368
|
-
return samplingRules
|
|
1369
|
-
}
|
|
1370
|
-
|
|
1371
|
-
#setBoolean (obj, name, value) {
|
|
1372
|
-
if (value === undefined || value === null) {
|
|
1373
|
-
obj[name] = value
|
|
1374
|
-
} else if (isTrue(value)) {
|
|
1375
|
-
obj[name] = true
|
|
1376
|
-
} else if (isFalse(value)) {
|
|
1377
|
-
obj[name] = false
|
|
1172
|
+
if (Object.keys(tags).length) {
|
|
1173
|
+
tags['runtime-id'] = RUNTIME_ID
|
|
1378
1174
|
}
|
|
1175
|
+
setTags(opts, 'tags', tags)
|
|
1379
1176
|
}
|
|
1380
1177
|
|
|
1381
|
-
#
|
|
1382
|
-
|
|
1383
|
-
obj[name] = value
|
|
1384
|
-
return
|
|
1385
|
-
}
|
|
1386
|
-
|
|
1387
|
-
value = Number.parseFloat(value)
|
|
1178
|
+
#setAndTrackChange ({ name, value, origin, unprocessedValue, changes }) {
|
|
1179
|
+
set(this, name, value)
|
|
1388
1180
|
|
|
1389
|
-
if (!
|
|
1390
|
-
|
|
1391
|
-
obj[name] = Math.min(Math.max(value, 0), 1)
|
|
1181
|
+
if (!changeTracker[name]) {
|
|
1182
|
+
changeTracker[name] = {}
|
|
1392
1183
|
}
|
|
1393
|
-
}
|
|
1394
1184
|
|
|
1395
|
-
|
|
1396
|
-
|
|
1397
|
-
obj[name] = null
|
|
1398
|
-
return
|
|
1399
|
-
}
|
|
1185
|
+
const originExists = origin in changeTracker[name]
|
|
1186
|
+
const oldValue = changeTracker[name][origin]
|
|
1400
1187
|
|
|
1401
|
-
if (
|
|
1402
|
-
|
|
1403
|
-
|
|
1404
|
-
|
|
1405
|
-
|
|
1188
|
+
if (!originExists || oldValue !== value) {
|
|
1189
|
+
changeTracker[name][origin] = value
|
|
1190
|
+
changes.push({
|
|
1191
|
+
name,
|
|
1192
|
+
value: unprocessedValue || value,
|
|
1193
|
+
origin,
|
|
1406
1194
|
})
|
|
1407
1195
|
}
|
|
1408
|
-
|
|
1409
|
-
if (Array.isArray(value)) {
|
|
1410
|
-
obj[name] = value
|
|
1411
|
-
}
|
|
1412
1196
|
}
|
|
1413
1197
|
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
|
-
|
|
1417
|
-
|
|
1418
|
-
|
|
1419
|
-
|
|
1420
|
-
const
|
|
1421
|
-
|
|
1422
|
-
value.forEach(val => {
|
|
1423
|
-
if (val.includes('-')) {
|
|
1424
|
-
const [start, end] = val.split('-').map(Number)
|
|
1425
|
-
for (let i = start; i <= end; i++) {
|
|
1426
|
-
result.push(i)
|
|
1427
|
-
}
|
|
1428
|
-
} else {
|
|
1429
|
-
result.push(Number(val))
|
|
1430
|
-
}
|
|
1431
|
-
})
|
|
1432
|
-
obj[name] = result
|
|
1433
|
-
}
|
|
1434
|
-
|
|
1435
|
-
#setSamplingRule (obj, name, value) {
|
|
1436
|
-
if (value == null) {
|
|
1437
|
-
obj[name] = null
|
|
1438
|
-
return
|
|
1439
|
-
}
|
|
1440
|
-
|
|
1441
|
-
if (typeof value === 'string') {
|
|
1442
|
-
value = value.split(',')
|
|
1443
|
-
}
|
|
1444
|
-
|
|
1445
|
-
if (Array.isArray(value)) {
|
|
1446
|
-
value = value.map(rule => {
|
|
1447
|
-
return remapify(rule, {
|
|
1448
|
-
sample_rate: 'sampleRate'
|
|
1449
|
-
})
|
|
1450
|
-
})
|
|
1451
|
-
obj[name] = value
|
|
1452
|
-
}
|
|
1453
|
-
}
|
|
1454
|
-
|
|
1455
|
-
#setString (obj, name, value) {
|
|
1456
|
-
obj[name] = value ? String(value) : undefined // unset for empty strings
|
|
1457
|
-
}
|
|
1458
|
-
|
|
1459
|
-
#setTags (obj, name, value) {
|
|
1460
|
-
if (!value || Object.keys(value).length === 0) {
|
|
1461
|
-
obj[name] = null
|
|
1462
|
-
return
|
|
1463
|
-
}
|
|
1464
|
-
|
|
1465
|
-
obj[name] = value
|
|
1466
|
-
}
|
|
1467
|
-
|
|
1468
|
-
#setAndTrackChange ({ name, value, origin, unprocessedValue, changes }) {
|
|
1469
|
-
set(this, name, value)
|
|
1470
|
-
|
|
1471
|
-
if (!changeTracker[name]) {
|
|
1472
|
-
changeTracker[name] = {}
|
|
1473
|
-
}
|
|
1474
|
-
|
|
1475
|
-
const originExists = origin in changeTracker[name]
|
|
1476
|
-
const oldValue = changeTracker[name][origin]
|
|
1477
|
-
|
|
1478
|
-
if (!originExists || oldValue !== value) {
|
|
1479
|
-
changeTracker[name][origin] = value
|
|
1480
|
-
changes.push({
|
|
1481
|
-
name,
|
|
1482
|
-
value: unprocessedValue || value,
|
|
1483
|
-
origin
|
|
1484
|
-
})
|
|
1485
|
-
}
|
|
1486
|
-
}
|
|
1487
|
-
|
|
1488
|
-
// TODO: Report origin changes and errors to telemetry.
|
|
1489
|
-
// TODO: Deeply merge configurations.
|
|
1490
|
-
// TODO: Move change tracking to telemetry.
|
|
1491
|
-
// for telemetry reporting, `name`s in `containers` need to be keys from:
|
|
1492
|
-
// https://github.com/DataDog/dd-go/blob/prod/trace/apps/tracer-telemetry-intake/telemetry-payload/static/config_norm_rules.json
|
|
1493
|
-
#merge () {
|
|
1494
|
-
const changes = []
|
|
1495
|
-
const sources = this.#getSourcesInOrder()
|
|
1198
|
+
// TODO: Report origin changes and errors to telemetry.
|
|
1199
|
+
// TODO: Deeply merge configurations.
|
|
1200
|
+
// TODO: Move change tracking to telemetry.
|
|
1201
|
+
// for telemetry reporting, `name`s in `containers` need to be keys from:
|
|
1202
|
+
// https://github.com/DataDog/dd-go/blob/prod/trace/apps/tracer-telemetry-intake/telemetry-payload/static/config_norm_rules.json
|
|
1203
|
+
#merge () {
|
|
1204
|
+
const changes = []
|
|
1205
|
+
const sources = this.#getSourcesInOrder()
|
|
1496
1206
|
|
|
1497
1207
|
for (const name of Object.keys(this.#defaults)) {
|
|
1498
1208
|
// Use reverse order for merge (lowest priority first)
|
|
@@ -1505,7 +1215,7 @@ class Config {
|
|
|
1505
1215
|
value,
|
|
1506
1216
|
origin,
|
|
1507
1217
|
unprocessedValue: unprocessed?.[name],
|
|
1508
|
-
changes
|
|
1218
|
+
changes,
|
|
1509
1219
|
})
|
|
1510
1220
|
}
|
|
1511
1221
|
}
|
|
@@ -1514,15 +1224,6 @@ class Config {
|
|
|
1514
1224
|
updateConfig(changes, this)
|
|
1515
1225
|
}
|
|
1516
1226
|
|
|
1517
|
-
getOrigin (name) {
|
|
1518
|
-
for (const { container, origin } of this.#getSourcesInOrder()) {
|
|
1519
|
-
const value = container[name]
|
|
1520
|
-
if (value != null || container === this.#defaults) {
|
|
1521
|
-
return origin
|
|
1522
|
-
}
|
|
1523
|
-
}
|
|
1524
|
-
}
|
|
1525
|
-
|
|
1526
1227
|
#loadGitMetadata () {
|
|
1527
1228
|
// try to read Git metadata from the environment variables
|
|
1528
1229
|
this.repositoryUrl = removeUserSensitiveInfo(
|
|
@@ -1579,6 +1280,312 @@ class Config {
|
|
|
1579
1280
|
}
|
|
1580
1281
|
}
|
|
1581
1282
|
|
|
1283
|
+
function getCounter (event, ddVar, otelVar) {
|
|
1284
|
+
const counters = TELEMETRY_COUNTERS.get(event)
|
|
1285
|
+
const tags = []
|
|
1286
|
+
const ddVarPrefix = 'config_datadog:'
|
|
1287
|
+
const otelVarPrefix = 'config_opentelemetry:'
|
|
1288
|
+
if (ddVar) {
|
|
1289
|
+
ddVar = ddVarPrefix + ddVar.toLowerCase()
|
|
1290
|
+
tags.push(ddVar)
|
|
1291
|
+
}
|
|
1292
|
+
if (otelVar) {
|
|
1293
|
+
otelVar = otelVarPrefix + otelVar.toLowerCase()
|
|
1294
|
+
tags.push(otelVar)
|
|
1295
|
+
}
|
|
1296
|
+
|
|
1297
|
+
if (!(otelVar in counters)) counters[otelVar] = {}
|
|
1298
|
+
|
|
1299
|
+
const counter = tracerMetrics.count(event, tags)
|
|
1300
|
+
counters[otelVar][ddVar] = counter
|
|
1301
|
+
return counter
|
|
1302
|
+
}
|
|
1303
|
+
|
|
1304
|
+
function getFromOtelSamplerMap (otelTracesSampler, otelTracesSamplerArg) {
|
|
1305
|
+
const OTEL_TRACES_SAMPLER_MAPPING = {
|
|
1306
|
+
always_on: '1.0',
|
|
1307
|
+
always_off: '0.0',
|
|
1308
|
+
traceidratio: otelTracesSamplerArg,
|
|
1309
|
+
parentbased_always_on: '1.0',
|
|
1310
|
+
parentbased_always_off: '0.0',
|
|
1311
|
+
parentbased_traceidratio: otelTracesSamplerArg,
|
|
1312
|
+
}
|
|
1313
|
+
return OTEL_TRACES_SAMPLER_MAPPING[otelTracesSampler]
|
|
1314
|
+
}
|
|
1315
|
+
|
|
1316
|
+
/**
|
|
1317
|
+
* Validate the type of an environment variable
|
|
1318
|
+
* @param {string} envVar - The name of the environment variable
|
|
1319
|
+
* @param {string} [value] - The value of the environment variable
|
|
1320
|
+
* @returns {boolean} - True if the value is valid, false otherwise
|
|
1321
|
+
*/
|
|
1322
|
+
function isInvalidOtelEnvironmentVariable (envVar, value) {
|
|
1323
|
+
// Skip validation if the value is undefined (it was not set as environment variable)
|
|
1324
|
+
if (value === undefined) return false
|
|
1325
|
+
|
|
1326
|
+
switch (envVar) {
|
|
1327
|
+
case 'OTEL_LOG_LEVEL':
|
|
1328
|
+
return !VALID_LOG_LEVELS.has(value)
|
|
1329
|
+
case 'OTEL_PROPAGATORS':
|
|
1330
|
+
case 'OTEL_RESOURCE_ATTRIBUTES':
|
|
1331
|
+
case 'OTEL_SERVICE_NAME':
|
|
1332
|
+
return typeof value !== 'string'
|
|
1333
|
+
case 'OTEL_TRACES_SAMPLER':
|
|
1334
|
+
return getFromOtelSamplerMap(value, getEnv('OTEL_TRACES_SAMPLER_ARG')) === undefined
|
|
1335
|
+
case 'OTEL_TRACES_SAMPLER_ARG':
|
|
1336
|
+
return Number.isNaN(Number.parseFloat(value))
|
|
1337
|
+
case 'OTEL_SDK_DISABLED':
|
|
1338
|
+
return value.toLowerCase() !== 'true' && value.toLowerCase() !== 'false'
|
|
1339
|
+
case 'OTEL_TRACES_EXPORTER':
|
|
1340
|
+
case 'OTEL_METRICS_EXPORTER':
|
|
1341
|
+
case 'OTEL_LOGS_EXPORTER':
|
|
1342
|
+
return value.toLowerCase() !== 'none'
|
|
1343
|
+
default:
|
|
1344
|
+
return true
|
|
1345
|
+
}
|
|
1346
|
+
}
|
|
1347
|
+
|
|
1348
|
+
function checkIfBothOtelAndDdEnvVarSet () {
|
|
1349
|
+
for (const [otelEnvVar, ddEnvVar] of OTEL_DD_ENV_MAPPING) {
|
|
1350
|
+
const otelValue = getEnv(otelEnvVar)
|
|
1351
|
+
|
|
1352
|
+
if (ddEnvVar && getEnv(ddEnvVar) && otelValue) {
|
|
1353
|
+
log.warn('both %s and %s environment variables are set', ddEnvVar, otelEnvVar)
|
|
1354
|
+
getCounter('otel.env.hiding', ddEnvVar, otelEnvVar).inc()
|
|
1355
|
+
}
|
|
1356
|
+
|
|
1357
|
+
if (isInvalidOtelEnvironmentVariable(otelEnvVar, otelValue)) {
|
|
1358
|
+
log.warn('unexpected value %s for %s environment variable', otelValue, otelEnvVar)
|
|
1359
|
+
getCounter('otel.env.invalid', ddEnvVar, otelEnvVar).inc()
|
|
1360
|
+
}
|
|
1361
|
+
}
|
|
1362
|
+
}
|
|
1363
|
+
|
|
1364
|
+
function maybeFile (filepath) {
|
|
1365
|
+
if (!filepath) return
|
|
1366
|
+
try {
|
|
1367
|
+
return fs.readFileSync(filepath, 'utf8')
|
|
1368
|
+
} catch (e) {
|
|
1369
|
+
log.error('Error reading file %s', filepath, e)
|
|
1370
|
+
}
|
|
1371
|
+
}
|
|
1372
|
+
|
|
1373
|
+
function maybeJsonFile (filepath) {
|
|
1374
|
+
const file = maybeFile(filepath)
|
|
1375
|
+
if (!file) return
|
|
1376
|
+
try {
|
|
1377
|
+
return JSON.parse(file)
|
|
1378
|
+
} catch (e) {
|
|
1379
|
+
log.error('Error parsing JSON file %s', filepath, e)
|
|
1380
|
+
}
|
|
1381
|
+
}
|
|
1382
|
+
|
|
1383
|
+
function safeJsonParse (input) {
|
|
1384
|
+
try {
|
|
1385
|
+
return JSON.parse(input)
|
|
1386
|
+
} catch {}
|
|
1387
|
+
}
|
|
1388
|
+
|
|
1389
|
+
function validateNamingVersion (versionString) {
|
|
1390
|
+
if (!versionString) {
|
|
1391
|
+
return DEFAULT_NAMING_VERSION
|
|
1392
|
+
}
|
|
1393
|
+
if (!NAMING_VERSIONS.has(versionString)) {
|
|
1394
|
+
log.warn('Unexpected input for config.spanAttributeSchema, picked default', DEFAULT_NAMING_VERSION)
|
|
1395
|
+
return DEFAULT_NAMING_VERSION
|
|
1396
|
+
}
|
|
1397
|
+
return versionString
|
|
1398
|
+
}
|
|
1399
|
+
|
|
1400
|
+
/**
|
|
1401
|
+
* Given a string of comma-separated paths, return the array of paths.
|
|
1402
|
+
* If a blank path is provided a null is returned to signal that the feature is disabled.
|
|
1403
|
+
* An empty array means the feature is enabled but that no rules need to be applied.
|
|
1404
|
+
*
|
|
1405
|
+
* @param {string | string[]} input
|
|
1406
|
+
*/
|
|
1407
|
+
function splitJSONPathRules (input) {
|
|
1408
|
+
if (!input || input === '$') return
|
|
1409
|
+
if (Array.isArray(input)) return input
|
|
1410
|
+
if (input === 'all') return []
|
|
1411
|
+
return input.split(',')
|
|
1412
|
+
}
|
|
1413
|
+
|
|
1414
|
+
// Shallow clone with property name remapping
|
|
1415
|
+
function remapify (input, mappings) {
|
|
1416
|
+
if (!input) return
|
|
1417
|
+
const output = {}
|
|
1418
|
+
for (const [key, value] of Object.entries(input)) {
|
|
1419
|
+
output[key in mappings ? mappings[key] : key] = value
|
|
1420
|
+
}
|
|
1421
|
+
return output
|
|
1422
|
+
}
|
|
1423
|
+
|
|
1424
|
+
/**
|
|
1425
|
+
* Normalizes propagation style values to a lowercase array.
|
|
1426
|
+
* Handles both string (comma-separated) and array inputs.
|
|
1427
|
+
*/
|
|
1428
|
+
function normalizePropagationStyle (value) {
|
|
1429
|
+
if (Array.isArray(value)) {
|
|
1430
|
+
return value.map(v => v.toLowerCase())
|
|
1431
|
+
}
|
|
1432
|
+
if (typeof value === 'string') {
|
|
1433
|
+
return value.split(',')
|
|
1434
|
+
.filter(v => v !== '')
|
|
1435
|
+
.map(v => v.trim().toLowerCase())
|
|
1436
|
+
}
|
|
1437
|
+
if (value !== undefined) {
|
|
1438
|
+
log.warn('Unexpected input for config.tracePropagationStyle')
|
|
1439
|
+
}
|
|
1440
|
+
}
|
|
1441
|
+
|
|
1442
|
+
/**
|
|
1443
|
+
* Warns if both DD_TRACE_PROPAGATION_STYLE and specific inject/extract vars are set.
|
|
1444
|
+
*/
|
|
1445
|
+
function warnIfPropagationStyleConflict (general, inject, extract) {
|
|
1446
|
+
if (general && (inject || extract)) {
|
|
1447
|
+
log.warn(
|
|
1448
|
+
// eslint-disable-next-line @stylistic/max-len
|
|
1449
|
+
'Use either the DD_TRACE_PROPAGATION_STYLE environment variable or separate DD_TRACE_PROPAGATION_STYLE_INJECT and DD_TRACE_PROPAGATION_STYLE_EXTRACT environment variables'
|
|
1450
|
+
)
|
|
1451
|
+
}
|
|
1452
|
+
}
|
|
1453
|
+
|
|
1454
|
+
function reformatSpanSamplingRules (rules) {
|
|
1455
|
+
if (!rules) return rules
|
|
1456
|
+
return rules.map(rule => {
|
|
1457
|
+
return remapify(rule, {
|
|
1458
|
+
sample_rate: 'sampleRate',
|
|
1459
|
+
max_per_second: 'maxPerSecond',
|
|
1460
|
+
})
|
|
1461
|
+
})
|
|
1462
|
+
}
|
|
1463
|
+
|
|
1464
|
+
function getDefaultPropagationStyle (options) {
|
|
1465
|
+
// TODO: Remove the experimental env vars as a major?
|
|
1466
|
+
const DD_TRACE_B3_ENABLED = options.experimental?.b3 ??
|
|
1467
|
+
getEnv('DD_TRACE_EXPERIMENTAL_B3_ENABLED')
|
|
1468
|
+
const defaultPropagationStyle = ['datadog', 'tracecontext']
|
|
1469
|
+
if (isTrue(DD_TRACE_B3_ENABLED)) {
|
|
1470
|
+
defaultPropagationStyle.push('b3', 'b3 single header')
|
|
1471
|
+
}
|
|
1472
|
+
return defaultPropagationStyle
|
|
1473
|
+
}
|
|
1474
|
+
|
|
1475
|
+
function isCiVisibilityItrEnabled () {
|
|
1476
|
+
return getEnv('DD_CIVISIBILITY_ITR_ENABLED') ?? true
|
|
1477
|
+
}
|
|
1478
|
+
|
|
1479
|
+
function reformatTagsFromRC (samplingRules) {
|
|
1480
|
+
for (const rule of (samplingRules || [])) {
|
|
1481
|
+
if (rule.tags) {
|
|
1482
|
+
const reformattedTags = {}
|
|
1483
|
+
for (const tag of rule.tags) {
|
|
1484
|
+
reformattedTags[tag.key] = tag.value_glob
|
|
1485
|
+
}
|
|
1486
|
+
rule.tags = reformattedTags
|
|
1487
|
+
}
|
|
1488
|
+
}
|
|
1489
|
+
return samplingRules
|
|
1490
|
+
}
|
|
1491
|
+
|
|
1492
|
+
function setBoolean (obj, name, value) {
|
|
1493
|
+
if (value === undefined || value === null) {
|
|
1494
|
+
obj[name] = value
|
|
1495
|
+
} else if (isTrue(value)) {
|
|
1496
|
+
obj[name] = true
|
|
1497
|
+
} else if (isFalse(value)) {
|
|
1498
|
+
obj[name] = false
|
|
1499
|
+
}
|
|
1500
|
+
}
|
|
1501
|
+
|
|
1502
|
+
function setUnit (obj, name, value) {
|
|
1503
|
+
if (value === null || value === undefined) {
|
|
1504
|
+
obj[name] = value
|
|
1505
|
+
return
|
|
1506
|
+
}
|
|
1507
|
+
|
|
1508
|
+
value = Number.parseFloat(value)
|
|
1509
|
+
|
|
1510
|
+
if (!Number.isNaN(value)) {
|
|
1511
|
+
// TODO: Ignore out of range values instead of normalizing them.
|
|
1512
|
+
obj[name] = Math.min(Math.max(value, 0), 1)
|
|
1513
|
+
}
|
|
1514
|
+
}
|
|
1515
|
+
|
|
1516
|
+
function setArray (obj, name, value) {
|
|
1517
|
+
if (value == null) {
|
|
1518
|
+
obj[name] = null
|
|
1519
|
+
return
|
|
1520
|
+
}
|
|
1521
|
+
|
|
1522
|
+
if (typeof value === 'string') {
|
|
1523
|
+
value = value.split(',').map(item => {
|
|
1524
|
+
// Trim each item and remove whitespace around the colon
|
|
1525
|
+
const [key, val] = item.split(':').map(part => part.trim())
|
|
1526
|
+
return val === undefined ? key : `${key}:${val}`
|
|
1527
|
+
})
|
|
1528
|
+
}
|
|
1529
|
+
|
|
1530
|
+
if (Array.isArray(value)) {
|
|
1531
|
+
obj[name] = value
|
|
1532
|
+
}
|
|
1533
|
+
}
|
|
1534
|
+
|
|
1535
|
+
function setIntegerRangeSet (obj, name, value) {
|
|
1536
|
+
if (value == null) {
|
|
1537
|
+
obj[name] = null
|
|
1538
|
+
return
|
|
1539
|
+
}
|
|
1540
|
+
value = value.split(',')
|
|
1541
|
+
const result = []
|
|
1542
|
+
|
|
1543
|
+
for (const val of value) {
|
|
1544
|
+
if (val.includes('-')) {
|
|
1545
|
+
const [start, end] = val.split('-').map(Number)
|
|
1546
|
+
for (let i = start; i <= end; i++) {
|
|
1547
|
+
result.push(i)
|
|
1548
|
+
}
|
|
1549
|
+
} else {
|
|
1550
|
+
result.push(Number(val))
|
|
1551
|
+
}
|
|
1552
|
+
}
|
|
1553
|
+
obj[name] = result
|
|
1554
|
+
}
|
|
1555
|
+
|
|
1556
|
+
function setSamplingRule (obj, name, value) {
|
|
1557
|
+
if (value == null) {
|
|
1558
|
+
obj[name] = null
|
|
1559
|
+
return
|
|
1560
|
+
}
|
|
1561
|
+
|
|
1562
|
+
if (typeof value === 'string') {
|
|
1563
|
+
value = value.split(',')
|
|
1564
|
+
}
|
|
1565
|
+
|
|
1566
|
+
if (Array.isArray(value)) {
|
|
1567
|
+
value = value.map(rule => {
|
|
1568
|
+
return remapify(rule, {
|
|
1569
|
+
sample_rate: 'sampleRate',
|
|
1570
|
+
})
|
|
1571
|
+
})
|
|
1572
|
+
obj[name] = value
|
|
1573
|
+
}
|
|
1574
|
+
}
|
|
1575
|
+
|
|
1576
|
+
function setString (obj, name, value) {
|
|
1577
|
+
obj[name] = value ? String(value) : undefined // unset for empty strings
|
|
1578
|
+
}
|
|
1579
|
+
|
|
1580
|
+
function setTags (obj, name, value) {
|
|
1581
|
+
if (!value || Object.keys(value).length === 0) {
|
|
1582
|
+
obj[name] = null
|
|
1583
|
+
return
|
|
1584
|
+
}
|
|
1585
|
+
|
|
1586
|
+
obj[name] = value
|
|
1587
|
+
}
|
|
1588
|
+
|
|
1582
1589
|
function handleOtel (tagString) {
|
|
1583
1590
|
return tagString
|
|
1584
1591
|
?.replace(/(^|,)deployment\.environment=/, '$1env:')
|
|
@@ -1608,7 +1615,7 @@ function nonNegInt (value, envVarName, allowZero = true) {
|
|
|
1608
1615
|
if (value === undefined) return
|
|
1609
1616
|
const parsed = Number.parseInt(value)
|
|
1610
1617
|
if (Number.isNaN(parsed) || parsed < 0 || (parsed === 0 && !allowZero)) {
|
|
1611
|
-
log.warn(
|
|
1618
|
+
log.warn('Invalid value %d for %s. Using default value.', parsed, envVarName)
|
|
1612
1619
|
return
|
|
1613
1620
|
}
|
|
1614
1621
|
return parsed
|
|
@@ -1630,12 +1637,9 @@ function getAgentUrl (url, options) {
|
|
|
1630
1637
|
}
|
|
1631
1638
|
}
|
|
1632
1639
|
|
|
1633
|
-
let configInstance = null
|
|
1634
1640
|
function getConfig (options) {
|
|
1635
1641
|
if (!configInstance) {
|
|
1636
1642
|
configInstance = new Config(options)
|
|
1637
1643
|
}
|
|
1638
1644
|
return configInstance
|
|
1639
1645
|
}
|
|
1640
|
-
|
|
1641
|
-
module.exports = getConfig
|