dd-trace 5.84.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/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 +76 -23
- package/initialize.mjs +47 -31
- package/loader-hook.mjs +35 -22
- package/package.json +34 -31
- 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/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 +1 -1
- 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 +162 -57
- 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 +59 -59
- 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 +14 -14
- 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 +19 -19
- 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 +3 -3
- package/packages/dd-trace/index.js +2 -2
- package/packages/dd-trace/src/agent/info.js +2 -2
- package/packages/dd-trace/src/agent/url.js +1 -1
- 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 +20 -22
- 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 +8 -7
- 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 +5 -3
- 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 +37 -11
- 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 +2 -2
- 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 +612 -622
- package/packages/dd-trace/src/config/remote_config.js +1 -1
- package/packages/dd-trace/src/config/stable.js +2 -2
- package/packages/dd-trace/src/config/supported-configurations.json +1 -0
- package/packages/dd-trace/src/constants.js +3 -3
- package/packages/dd-trace/src/crashtracking/crashtracker.js +6 -6
- 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 +3 -3
- 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 +4 -5
- 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/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 +14 -9
- 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 +1 -1
- package/packages/dd-trace/src/exporters/agent/writer.js +2 -2
- package/packages/dd-trace/src/exporters/common/agents.js +1 -1
- package/packages/dd-trace/src/exporters/common/buffering-exporter.js +2 -2
- 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 +1 -1
- 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 +9 -9
- 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 +1 -1
- package/packages/dd-trace/src/log/channels.js +2 -2
- package/packages/dd-trace/src/log/index.js +2 -2
- package/packages/dd-trace/src/log/log.js +1 -1
- package/packages/dd-trace/src/log/writer.js +1 -1
- 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 +12 -12
- package/packages/dd-trace/src/openfeature/writers/exposures.js +10 -10
- package/packages/dd-trace/src/openfeature/writers/util.js +1 -1
- 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 +8 -8
- 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/index.js +15 -15
- 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 +2 -2
- 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
|
|
|
@@ -619,7 +428,7 @@ class Config {
|
|
|
619
428
|
OTEL_BSP_MAX_EXPORT_BATCH_SIZE,
|
|
620
429
|
OTEL_BSP_MAX_QUEUE_SIZE,
|
|
621
430
|
OTEL_METRIC_EXPORT_INTERVAL,
|
|
622
|
-
NX_TASK_TARGET_PROJECT
|
|
431
|
+
NX_TASK_TARGET_PROJECT,
|
|
623
432
|
} = source
|
|
624
433
|
|
|
625
434
|
const tags = {}
|
|
@@ -632,20 +441,20 @@ class Config {
|
|
|
632
441
|
tagger.add(tags, DD_TRACE_TAGS)
|
|
633
442
|
tagger.add(tags, DD_TRACE_GLOBAL_TAGS)
|
|
634
443
|
|
|
635
|
-
|
|
636
|
-
|
|
444
|
+
setString(target, 'apiKey', DD_API_KEY)
|
|
445
|
+
setBoolean(target, 'otelLogsEnabled', DD_LOGS_OTEL_ENABLED)
|
|
637
446
|
// Set OpenTelemetry logs configuration with specific _LOGS_ vars taking precedence over generic _EXPORTERS_ vars
|
|
638
447
|
if (OTEL_EXPORTER_OTLP_ENDPOINT) {
|
|
639
448
|
// Only set if there's a custom URL, otherwise let calc phase handle the default
|
|
640
|
-
|
|
449
|
+
setString(target, 'otelUrl', OTEL_EXPORTER_OTLP_ENDPOINT)
|
|
641
450
|
}
|
|
642
451
|
if (OTEL_EXPORTER_OTLP_ENDPOINT || OTEL_EXPORTER_OTLP_LOGS_ENDPOINT) {
|
|
643
|
-
|
|
452
|
+
setString(target, 'otelLogsUrl', OTEL_EXPORTER_OTLP_LOGS_ENDPOINT || target.otelUrl)
|
|
644
453
|
}
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
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)
|
|
649
458
|
const otelTimeout = nonNegInt(OTEL_EXPORTER_OTLP_TIMEOUT, 'OTEL_EXPORTER_OTLP_TIMEOUT')
|
|
650
459
|
if (otelTimeout !== undefined) {
|
|
651
460
|
target.otelTimeout = otelTimeout
|
|
@@ -660,7 +469,7 @@ class Config {
|
|
|
660
469
|
target.otelMaxQueueSize = nonNegInt(OTEL_BSP_MAX_QUEUE_SIZE, 'OTEL_BSP_MAX_QUEUE_SIZE', false)
|
|
661
470
|
|
|
662
471
|
const otelMetricsExporterEnabled = OTEL_METRICS_EXPORTER?.toLowerCase() !== 'none'
|
|
663
|
-
|
|
472
|
+
setBoolean(
|
|
664
473
|
target,
|
|
665
474
|
'otelMetricsEnabled',
|
|
666
475
|
DD_METRICS_OTEL_ENABLED && isTrue(DD_METRICS_OTEL_ENABLED) && otelMetricsExporterEnabled
|
|
@@ -668,10 +477,10 @@ class Config {
|
|
|
668
477
|
// Set OpenTelemetry metrics configuration with specific _METRICS_ vars
|
|
669
478
|
// taking precedence over generic _EXPORTERS_ vars
|
|
670
479
|
if (OTEL_EXPORTER_OTLP_ENDPOINT || OTEL_EXPORTER_OTLP_METRICS_ENDPOINT) {
|
|
671
|
-
|
|
480
|
+
setString(target, 'otelMetricsUrl', OTEL_EXPORTER_OTLP_METRICS_ENDPOINT || target.otelUrl)
|
|
672
481
|
}
|
|
673
|
-
|
|
674
|
-
|
|
482
|
+
setString(target, 'otelMetricsHeaders', OTEL_EXPORTER_OTLP_METRICS_HEADERS || target.otelHeaders)
|
|
483
|
+
setString(target, 'otelMetricsProtocol', OTEL_EXPORTER_OTLP_METRICS_PROTOCOL || target.otelProtocol)
|
|
675
484
|
const otelMetricsTimeout = nonNegInt(OTEL_EXPORTER_OTLP_METRICS_TIMEOUT, 'OTEL_EXPORTER_OTLP_METRICS_TIMEOUT')
|
|
676
485
|
target.otelMetricsTimeout = otelMetricsTimeout === undefined ? target.otelTimeout : otelMetricsTimeout
|
|
677
486
|
target.otelMetricsExportTimeout = nonNegInt(OTEL_METRIC_EXPORT_TIMEOUT, 'OTEL_METRIC_EXPORT_TIMEOUT')
|
|
@@ -681,20 +490,20 @@ class Config {
|
|
|
681
490
|
if (OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE) {
|
|
682
491
|
const temporalityPref = OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE.toUpperCase()
|
|
683
492
|
if (['DELTA', 'CUMULATIVE', 'LOWMEMORY'].includes(temporalityPref)) {
|
|
684
|
-
|
|
493
|
+
setString(target, 'otelMetricsTemporalityPreference', temporalityPref)
|
|
685
494
|
}
|
|
686
495
|
}
|
|
687
|
-
|
|
496
|
+
setBoolean(
|
|
688
497
|
target,
|
|
689
498
|
'apmTracingEnabled',
|
|
690
499
|
DD_APM_TRACING_ENABLED ??
|
|
691
500
|
(DD_EXPERIMENTAL_APPSEC_STANDALONE_ENABLED && isFalse(DD_EXPERIMENTAL_APPSEC_STANDALONE_ENABLED))
|
|
692
501
|
)
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
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))
|
|
696
505
|
target['appsec.apiSecurity.sampleDelay'] = maybeFloat(DD_API_SECURITY_SAMPLE_DELAY)
|
|
697
|
-
|
|
506
|
+
setBoolean(target, 'appsec.apiSecurity.endpointCollectionEnabled',
|
|
698
507
|
DD_API_SECURITY_ENDPOINT_COLLECTION_ENABLED)
|
|
699
508
|
target['appsec.apiSecurity.endpointCollectionMessageLimit'] =
|
|
700
509
|
maybeInt(DD_API_SECURITY_ENDPOINT_COLLECTION_MESSAGE_LIMIT)
|
|
@@ -703,28 +512,28 @@ class Config {
|
|
|
703
512
|
unprocessedTarget['appsec.blockedTemplateHtml'] = DD_APPSEC_HTTP_BLOCKED_TEMPLATE_HTML
|
|
704
513
|
target['appsec.blockedTemplateJson'] = maybeFile(DD_APPSEC_HTTP_BLOCKED_TEMPLATE_JSON)
|
|
705
514
|
unprocessedTarget['appsec.blockedTemplateJson'] = DD_APPSEC_HTTP_BLOCKED_TEMPLATE_JSON
|
|
706
|
-
|
|
707
|
-
|
|
515
|
+
setBoolean(target, 'appsec.enabled', DD_APPSEC_ENABLED)
|
|
516
|
+
setString(target, 'appsec.eventTracking.mode', DD_APPSEC_AUTO_USER_INSTRUMENTATION_MODE)
|
|
708
517
|
// TODO appsec.extendedHeadersCollection are deprecated, to delete in a major
|
|
709
|
-
|
|
710
|
-
|
|
518
|
+
setBoolean(target, 'appsec.extendedHeadersCollection.enabled', DD_APPSEC_COLLECT_ALL_HEADERS)
|
|
519
|
+
setBoolean(
|
|
711
520
|
target,
|
|
712
521
|
'appsec.extendedHeadersCollection.redaction',
|
|
713
522
|
DD_APPSEC_HEADER_COLLECTION_REDACTION_ENABLED
|
|
714
523
|
)
|
|
715
524
|
target['appsec.extendedHeadersCollection.maxHeaders'] = maybeInt(DD_APPSEC_MAX_COLLECTED_HEADERS)
|
|
716
525
|
unprocessedTarget['appsec.extendedHeadersCollection.maxHeaders'] = DD_APPSEC_MAX_COLLECTED_HEADERS
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
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)
|
|
720
529
|
// TODO Deprecated, to delete in a major
|
|
721
|
-
|
|
530
|
+
setBoolean(target, 'appsec.rasp.bodyCollection', DD_APPSEC_RASP_COLLECT_REQUEST_BODY)
|
|
722
531
|
target['appsec.rateLimit'] = maybeInt(DD_APPSEC_TRACE_RATE_LIMIT)
|
|
723
532
|
unprocessedTarget['appsec.rateLimit'] = DD_APPSEC_TRACE_RATE_LIMIT
|
|
724
|
-
|
|
533
|
+
setString(target, 'appsec.rules', DD_APPSEC_RULES)
|
|
725
534
|
// DD_APPSEC_SCA_ENABLED is never used locally, but only sent to the backend
|
|
726
|
-
|
|
727
|
-
|
|
535
|
+
setBoolean(target, 'appsec.sca.enabled', DD_APPSEC_SCA_ENABLED)
|
|
536
|
+
setBoolean(target, 'appsec.stackTrace.enabled', DD_APPSEC_STACK_TRACE_ENABLED)
|
|
728
537
|
target['appsec.stackTrace.maxDepth'] = maybeInt(DD_APPSEC_MAX_STACK_TRACE_DEPTH)
|
|
729
538
|
unprocessedTarget['appsec.stackTrace.maxDepth'] = DD_APPSEC_MAX_STACK_TRACE_DEPTH
|
|
730
539
|
target['appsec.stackTrace.maxStackTraces'] = maybeInt(DD_APPSEC_MAX_STACK_TRACES)
|
|
@@ -734,14 +543,14 @@ class Config {
|
|
|
734
543
|
target.baggageMaxBytes = DD_TRACE_BAGGAGE_MAX_BYTES
|
|
735
544
|
target.baggageMaxItems = DD_TRACE_BAGGAGE_MAX_ITEMS
|
|
736
545
|
target.baggageTagKeys = DD_TRACE_BAGGAGE_TAG_KEYS
|
|
737
|
-
|
|
738
|
-
|
|
546
|
+
setBoolean(target, 'clientIpEnabled', DD_TRACE_CLIENT_IP_ENABLED)
|
|
547
|
+
setString(target, 'clientIpHeader', DD_TRACE_CLIENT_IP_HEADER?.toLowerCase())
|
|
739
548
|
if (DD_TRACE_CLOUD_REQUEST_PAYLOAD_TAGGING || DD_TRACE_CLOUD_RESPONSE_PAYLOAD_TAGGING) {
|
|
740
549
|
if (DD_TRACE_CLOUD_REQUEST_PAYLOAD_TAGGING) {
|
|
741
|
-
|
|
550
|
+
setBoolean(target, 'cloudPayloadTagging.requestsEnabled', true)
|
|
742
551
|
}
|
|
743
552
|
if (DD_TRACE_CLOUD_RESPONSE_PAYLOAD_TAGGING) {
|
|
744
|
-
|
|
553
|
+
setBoolean(target, 'cloudPayloadTagging.responsesEnabled', true)
|
|
745
554
|
}
|
|
746
555
|
target['cloudPayloadTagging.rules'] = appendRules(
|
|
747
556
|
splitJSONPathRules(DD_TRACE_CLOUD_REQUEST_PAYLOAD_TAGGING),
|
|
@@ -751,24 +560,24 @@ class Config {
|
|
|
751
560
|
if (DD_TRACE_CLOUD_PAYLOAD_TAGGING_MAX_DEPTH) {
|
|
752
561
|
target['cloudPayloadTagging.maxDepth'] = maybeInt(DD_TRACE_CLOUD_PAYLOAD_TAGGING_MAX_DEPTH)
|
|
753
562
|
}
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
563
|
+
setBoolean(target, 'crashtracking.enabled', DD_CRASHTRACKING_ENABLED)
|
|
564
|
+
setBoolean(target, 'codeOriginForSpans.enabled', DD_CODE_ORIGIN_FOR_SPANS_ENABLED)
|
|
565
|
+
setBoolean(
|
|
757
566
|
target,
|
|
758
567
|
'codeOriginForSpans.experimental.exit_spans.enabled',
|
|
759
568
|
DD_CODE_ORIGIN_FOR_SPANS_EXPERIMENTAL_EXIT_SPANS_ENABLED
|
|
760
569
|
)
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
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)
|
|
765
574
|
target['dynamicInstrumentation.captureTimeoutMs'] = maybeInt(DD_DYNAMIC_INSTRUMENTATION_CAPTURE_TIMEOUT_MS)
|
|
766
575
|
unprocessedTarget['dynamicInstrumentation.captureTimeoutMs'] = DD_DYNAMIC_INSTRUMENTATION_CAPTURE_TIMEOUT_MS
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
576
|
+
setBoolean(target, 'dynamicInstrumentation.enabled', DD_DYNAMIC_INSTRUMENTATION_ENABLED)
|
|
577
|
+
setString(target, 'dynamicInstrumentation.probeFile', DD_DYNAMIC_INSTRUMENTATION_PROBE_FILE)
|
|
578
|
+
setArray(target, 'dynamicInstrumentation.redactedIdentifiers',
|
|
770
579
|
DD_DYNAMIC_INSTRUMENTATION_REDACTED_IDENTIFIERS)
|
|
771
|
-
|
|
580
|
+
setArray(
|
|
772
581
|
target,
|
|
773
582
|
'dynamicInstrumentation.redactionExcludedIdentifiers',
|
|
774
583
|
DD_DYNAMIC_INSTRUMENTATION_REDACTION_EXCLUDED_IDENTIFIERS
|
|
@@ -776,8 +585,8 @@ class Config {
|
|
|
776
585
|
target['dynamicInstrumentation.uploadIntervalSeconds'] =
|
|
777
586
|
maybeFloat(DD_DYNAMIC_INSTRUMENTATION_UPLOAD_INTERVAL_SECONDS)
|
|
778
587
|
unprocessedTarget['dynamicInstrumentation.uploadInterval'] = DD_DYNAMIC_INSTRUMENTATION_UPLOAD_INTERVAL_SECONDS
|
|
779
|
-
|
|
780
|
-
|
|
588
|
+
setString(target, 'env', DD_ENV || tags.env)
|
|
589
|
+
setBoolean(
|
|
781
590
|
target,
|
|
782
591
|
'experimental.flaggingProvider.enabled',
|
|
783
592
|
DD_EXPERIMENTAL_FLAGGING_PROVIDER_ENABLED
|
|
@@ -786,17 +595,17 @@ class Config {
|
|
|
786
595
|
target['experimental.flaggingProvider.initializationTimeoutMs'] =
|
|
787
596
|
maybeInt(DD_EXPERIMENTAL_FLAGGING_PROVIDER_INITIALIZATION_TIMEOUT_MS)
|
|
788
597
|
}
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
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)
|
|
792
601
|
target['experimental.aiguard.maxContentSize'] = maybeInt(DD_AI_GUARD_MAX_CONTENT_SIZE)
|
|
793
602
|
unprocessedTarget['experimental.aiguard.maxContentSize'] = DD_AI_GUARD_MAX_CONTENT_SIZE
|
|
794
603
|
target['experimental.aiguard.maxMessagesLength'] = maybeInt(DD_AI_GUARD_MAX_MESSAGES_LENGTH)
|
|
795
604
|
unprocessedTarget['experimental.aiguard.maxMessagesLength'] = DD_AI_GUARD_MAX_MESSAGES_LENGTH
|
|
796
605
|
target['experimental.aiguard.timeout'] = maybeInt(DD_AI_GUARD_TIMEOUT)
|
|
797
606
|
unprocessedTarget['experimental.aiguard.timeout'] = DD_AI_GUARD_TIMEOUT
|
|
798
|
-
|
|
799
|
-
|
|
607
|
+
setBoolean(target, 'experimental.enableGetRumData', DD_TRACE_EXPERIMENTAL_GET_RUM_DATA_ENABLED)
|
|
608
|
+
setString(target, 'experimental.exporter', DD_TRACE_EXPERIMENTAL_EXPORTER)
|
|
800
609
|
if (AWS_LAMBDA_FUNCTION_NAME) {
|
|
801
610
|
target.flushInterval = 0
|
|
802
611
|
} else if (DD_TRACE_FLUSH_INTERVAL) {
|
|
@@ -804,54 +613,54 @@ class Config {
|
|
|
804
613
|
}
|
|
805
614
|
target.flushMinSpans = maybeInt(DD_TRACE_PARTIAL_FLUSH_MIN_SPANS)
|
|
806
615
|
unprocessedTarget.flushMinSpans = DD_TRACE_PARTIAL_FLUSH_MIN_SPANS
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
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)
|
|
811
620
|
target['heapSnapshot.count'] = maybeInt(DD_HEAP_SNAPSHOT_COUNT)
|
|
812
|
-
|
|
621
|
+
setString(target, 'heapSnapshot.destination', DD_HEAP_SNAPSHOT_DESTINATION)
|
|
813
622
|
target['heapSnapshot.interval'] = maybeInt(DD_HEAP_SNAPSHOT_INTERVAL)
|
|
814
|
-
|
|
623
|
+
setString(target, 'hostname', DD_AGENT_HOST)
|
|
815
624
|
target['iast.dbRowsToTaint'] = maybeInt(DD_IAST_DB_ROWS_TO_TAINT)
|
|
816
|
-
|
|
817
|
-
|
|
625
|
+
setBoolean(target, 'iast.deduplicationEnabled', DD_IAST_DEDUPLICATION_ENABLED)
|
|
626
|
+
setBoolean(target, 'iast.enabled', DD_IAST_ENABLED)
|
|
818
627
|
target['iast.maxConcurrentRequests'] = maybeInt(DD_IAST_MAX_CONCURRENT_REQUESTS)
|
|
819
628
|
unprocessedTarget['iast.maxConcurrentRequests'] = DD_IAST_MAX_CONCURRENT_REQUESTS
|
|
820
629
|
target['iast.maxContextOperations'] = maybeInt(DD_IAST_MAX_CONTEXT_OPERATIONS)
|
|
821
630
|
unprocessedTarget['iast.maxContextOperations'] = DD_IAST_MAX_CONTEXT_OPERATIONS
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
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)
|
|
825
634
|
const iastRequestSampling = maybeInt(DD_IAST_REQUEST_SAMPLING)
|
|
826
635
|
if (iastRequestSampling !== undefined && iastRequestSampling > -1 && iastRequestSampling < 101) {
|
|
827
636
|
target['iast.requestSampling'] = iastRequestSampling
|
|
828
637
|
}
|
|
829
638
|
unprocessedTarget['iast.requestSampling'] = DD_IAST_REQUEST_SAMPLING
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
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)
|
|
837
646
|
if (DD_INJECTION_ENABLED !== undefined) {
|
|
838
|
-
|
|
647
|
+
setString(target, 'instrumentationSource', DD_INJECTION_ENABLED ? 'ssi' : 'manual')
|
|
839
648
|
}
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
649
|
+
setBoolean(target, 'injectForce', DD_INJECT_FORCE)
|
|
650
|
+
setBoolean(target, 'isAzureFunction', getIsAzureFunction())
|
|
651
|
+
setBoolean(target, 'isGCPFunction', getIsGCPFunction())
|
|
652
|
+
setBoolean(target, 'gcpPubSubPushSubscriptionEnabled', enableGCPPubSubPushSubscription())
|
|
844
653
|
target['langchain.spanCharLimit'] = maybeInt(DD_LANGCHAIN_SPAN_CHAR_LIMIT)
|
|
845
654
|
target['langchain.spanPromptCompletionSampleRate'] = maybeFloat(DD_LANGCHAIN_SPAN_PROMPT_COMPLETION_SAMPLE_RATE)
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
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)
|
|
851
660
|
// Requires an accompanying DD_APM_OBFUSCATION_MEMCACHED_KEEP_COMMAND=true in the agent
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
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)
|
|
855
664
|
target['openai.spanCharLimit'] = maybeInt(DD_OPENAI_SPAN_CHAR_LIMIT)
|
|
856
665
|
unprocessedTarget.openaiSpanCharLimit = DD_OPENAI_SPAN_CHAR_LIMIT
|
|
857
666
|
if (DD_TRACE_PEER_SERVICE_MAPPING) {
|
|
@@ -860,44 +669,44 @@ class Config {
|
|
|
860
669
|
)
|
|
861
670
|
unprocessedTarget.peerServiceMapping = DD_TRACE_PEER_SERVICE_MAPPING
|
|
862
671
|
}
|
|
863
|
-
|
|
672
|
+
setString(target, 'port', DD_TRACE_AGENT_PORT)
|
|
864
673
|
const profilingEnabled = normalizeProfilingEnabledValue(DD_PROFILING_ENABLED)
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
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))
|
|
868
677
|
if (DD_INTERNAL_PROFILING_LONG_LIVED_THRESHOLD) {
|
|
869
678
|
// This is only used in testing to not have to wait 30s
|
|
870
679
|
target['profiling.longLivedThreshold'] = Number(DD_INTERNAL_PROFILING_LONG_LIVED_THRESHOLD)
|
|
871
680
|
}
|
|
872
681
|
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
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)
|
|
876
685
|
target['remoteConfig.pollInterval'] = maybeFloat(DD_REMOTE_CONFIG_POLL_INTERVAL_SECONDS)
|
|
877
686
|
unprocessedTarget['remoteConfig.pollInterval'] = DD_REMOTE_CONFIG_POLL_INTERVAL_SECONDS
|
|
878
|
-
|
|
687
|
+
setBoolean(target, 'reportHostname', DD_TRACE_REPORT_HOSTNAME)
|
|
879
688
|
if (DD_TRACE_RESOURCE_RENAMING_ENABLED !== undefined) {
|
|
880
|
-
|
|
689
|
+
setBoolean(target, 'resourceRenamingEnabled', DD_TRACE_RESOURCE_RENAMING_ENABLED)
|
|
881
690
|
}
|
|
882
691
|
// only used to explicitly set runtimeMetrics to false
|
|
883
692
|
const otelSetRuntimeMetrics = String(OTEL_METRICS_EXPORTER).toLowerCase() === 'none'
|
|
884
693
|
? false
|
|
885
694
|
: undefined
|
|
886
|
-
|
|
695
|
+
setBoolean(target, 'runtimeMetrics.enabled', DD_RUNTIME_METRICS_ENABLED ||
|
|
887
696
|
otelSetRuntimeMetrics)
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
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(
|
|
892
701
|
maybeJsonFile(DD_SPAN_SAMPLING_RULES_FILE) ??
|
|
893
702
|
safeJsonParse(DD_SPAN_SAMPLING_RULES)
|
|
894
703
|
))
|
|
895
|
-
|
|
704
|
+
setUnit(target, 'sampleRate', DD_TRACE_SAMPLE_RATE ||
|
|
896
705
|
getFromOtelSamplerMap(OTEL_TRACES_SAMPLER, OTEL_TRACES_SAMPLER_ARG))
|
|
897
706
|
target['sampler.rateLimit'] = DD_TRACE_RATE_LIMIT
|
|
898
|
-
|
|
707
|
+
setSamplingRule(target, 'sampler.rules', safeJsonParse(DD_TRACE_SAMPLING_RULES))
|
|
899
708
|
unprocessedTarget['sampler.rules'] = DD_TRACE_SAMPLING_RULES
|
|
900
|
-
|
|
709
|
+
setString(target, 'scope', DD_TRACE_SCOPE)
|
|
901
710
|
// Priority:
|
|
902
711
|
// DD_SERVICE > tags.service > OTEL_SERVICE_NAME > NX_TASK_TARGET_PROJECT (if DD_ENABLE_NX_SERVICE_NAME) > default
|
|
903
712
|
let serviceName = DD_SERVICE || tags.service || OTEL_SERVICE_NAME
|
|
@@ -907,57 +716,56 @@ class Config {
|
|
|
907
716
|
} else if (DD_MAJOR < 6) {
|
|
908
717
|
// Warn about v6 behavior change for Nx projects
|
|
909
718
|
log.warn(
|
|
910
|
-
|
|
911
|
-
'In v6, NX_TASK_TARGET_PROJECT will be used as the default service name. '
|
|
912
|
-
'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.'
|
|
913
721
|
)
|
|
914
722
|
}
|
|
915
723
|
}
|
|
916
|
-
|
|
724
|
+
setString(target, 'service', serviceName)
|
|
917
725
|
if (DD_SERVICE_MAPPING) {
|
|
918
726
|
target.serviceMapping = Object.fromEntries(
|
|
919
727
|
DD_SERVICE_MAPPING.split(',').map(x => x.trim().split(':'))
|
|
920
728
|
)
|
|
921
729
|
}
|
|
922
|
-
|
|
730
|
+
setString(target, 'site', DD_SITE)
|
|
923
731
|
if (DD_TRACE_SPAN_ATTRIBUTE_SCHEMA) {
|
|
924
|
-
|
|
732
|
+
setString(target, 'spanAttributeSchema', validateNamingVersion(DD_TRACE_SPAN_ATTRIBUTE_SCHEMA))
|
|
925
733
|
unprocessedTarget.spanAttributeSchema = DD_TRACE_SPAN_ATTRIBUTE_SCHEMA
|
|
926
734
|
}
|
|
927
735
|
// 0: disabled, 1: logging, 2: garbage collection + logging
|
|
928
736
|
target.spanLeakDebug = maybeInt(DD_TRACE_SPAN_LEAK_DEBUG)
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
737
|
+
setBoolean(target, 'spanRemoveIntegrationFromService', DD_TRACE_REMOVE_INTEGRATION_SERVICE_NAMES_ENABLED)
|
|
738
|
+
setBoolean(target, 'startupLogs', DD_TRACE_STARTUP_LOGS)
|
|
739
|
+
setTags(target, 'tags', tags)
|
|
932
740
|
target.tagsHeaderMaxLength = DD_TRACE_X_DATADOG_TAGS_MAX_LENGTH
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
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)
|
|
937
745
|
target['telemetry.heartbeatInterval'] = maybeInt(Math.floor(DD_TELEMETRY_HEARTBEAT_INTERVAL * 1000))
|
|
938
746
|
unprocessedTarget['telemetry.heartbeatInterval'] = DD_TELEMETRY_HEARTBEAT_INTERVAL * 1000
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
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)
|
|
943
751
|
warnIfPropagationStyleConflict(
|
|
944
752
|
DD_TRACE_PROPAGATION_STYLE,
|
|
945
753
|
DD_TRACE_PROPAGATION_STYLE_INJECT,
|
|
946
754
|
DD_TRACE_PROPAGATION_STYLE_EXTRACT
|
|
947
755
|
)
|
|
948
756
|
if (DD_TRACE_PROPAGATION_STYLE !== undefined) {
|
|
949
|
-
|
|
950
|
-
|
|
757
|
+
setArray(target, 'tracePropagationStyle.inject', normalizePropagationStyle(DD_TRACE_PROPAGATION_STYLE))
|
|
758
|
+
setArray(target, 'tracePropagationStyle.extract', normalizePropagationStyle(DD_TRACE_PROPAGATION_STYLE))
|
|
951
759
|
}
|
|
952
760
|
if (DD_TRACE_PROPAGATION_STYLE_INJECT !== undefined) {
|
|
953
|
-
|
|
761
|
+
setArray(target, 'tracePropagationStyle.inject',
|
|
954
762
|
normalizePropagationStyle(DD_TRACE_PROPAGATION_STYLE_INJECT))
|
|
955
763
|
}
|
|
956
764
|
if (DD_TRACE_PROPAGATION_STYLE_EXTRACT !== undefined) {
|
|
957
|
-
|
|
765
|
+
setArray(target, 'tracePropagationStyle.extract',
|
|
958
766
|
normalizePropagationStyle(DD_TRACE_PROPAGATION_STYLE_EXTRACT))
|
|
959
767
|
}
|
|
960
|
-
|
|
768
|
+
setBoolean(target, 'tracePropagationExtractFirst', DD_TRACE_PROPAGATION_EXTRACT_FIRST)
|
|
961
769
|
if (DD_TRACE_PROPAGATION_BEHAVIOR_EXTRACT !== undefined) {
|
|
962
770
|
const stringPropagationBehaviorExtract = String(DD_TRACE_PROPAGATION_BEHAVIOR_EXTRACT)
|
|
963
771
|
target.tracePropagationBehaviorExtract =
|
|
@@ -973,7 +781,7 @@ class Config {
|
|
|
973
781
|
const useDdStyle = DD_TRACE_PROPAGATION_STYLE ||
|
|
974
782
|
DD_TRACE_PROPAGATION_STYLE_INJECT ||
|
|
975
783
|
DD_TRACE_PROPAGATION_STYLE_EXTRACT
|
|
976
|
-
|
|
784
|
+
setBoolean(target, 'tracePropagationStyle.otelPropagators',
|
|
977
785
|
useDdStyle ? false : !!OTEL_PROPAGATORS)
|
|
978
786
|
|
|
979
787
|
// Use OTEL_PROPAGATORS if no DD-specific vars are set
|
|
@@ -988,21 +796,21 @@ class Config {
|
|
|
988
796
|
}
|
|
989
797
|
// Set inject/extract from OTEL_PROPAGATORS
|
|
990
798
|
if (otelStyles) {
|
|
991
|
-
|
|
992
|
-
|
|
799
|
+
setArray(target, 'tracePropagationStyle.inject', otelStyles)
|
|
800
|
+
setArray(target, 'tracePropagationStyle.extract', otelStyles)
|
|
993
801
|
}
|
|
994
802
|
}
|
|
995
803
|
}
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
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)
|
|
1006
814
|
target['vertexai.spanPromptCompletionSampleRate'] = maybeFloat(DD_VERTEXAI_SPAN_PROMPT_COMPLETION_SAMPLE_RATE)
|
|
1007
815
|
target['vertexai.spanCharLimit'] = maybeInt(DD_VERTEXAI_SPAN_CHAR_LIMIT)
|
|
1008
816
|
}
|
|
@@ -1015,11 +823,11 @@ class Config {
|
|
|
1015
823
|
|
|
1016
824
|
tagger.add(tags, options.tags)
|
|
1017
825
|
|
|
1018
|
-
|
|
826
|
+
setBoolean(opts, 'apmTracingEnabled', options.apmTracingEnabled ??
|
|
1019
827
|
(options.experimental?.appsec?.standalone && !options.experimental.appsec.standalone.enabled)
|
|
1020
828
|
)
|
|
1021
|
-
|
|
1022
|
-
|
|
829
|
+
setBoolean(opts, 'appsec.apiSecurity.enabled', options.appsec?.apiSecurity?.enabled)
|
|
830
|
+
setBoolean(opts, 'appsec.apiSecurity.endpointCollectionEnabled',
|
|
1023
831
|
options.appsec?.apiSecurity?.endpointCollectionEnabled)
|
|
1024
832
|
opts['appsec.apiSecurity.endpointCollectionMessageLimit'] =
|
|
1025
833
|
maybeInt(options.appsec?.apiSecurity?.endpointCollectionMessageLimit)
|
|
@@ -1028,41 +836,41 @@ class Config {
|
|
|
1028
836
|
this.#optsUnprocessed['appsec.blockedTemplateHtml'] = options.appsec?.blockedTemplateHtml
|
|
1029
837
|
opts['appsec.blockedTemplateJson'] = maybeFile(options.appsec?.blockedTemplateJson)
|
|
1030
838
|
this.#optsUnprocessed['appsec.blockedTemplateJson'] = options.appsec?.blockedTemplateJson
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
839
|
+
setBoolean(opts, 'appsec.enabled', options.appsec?.enabled)
|
|
840
|
+
setString(opts, 'appsec.eventTracking.mode', options.appsec?.eventTracking?.mode)
|
|
841
|
+
setBoolean(
|
|
1034
842
|
opts,
|
|
1035
843
|
'appsec.extendedHeadersCollection.enabled',
|
|
1036
844
|
options.appsec?.extendedHeadersCollection?.enabled
|
|
1037
845
|
)
|
|
1038
|
-
|
|
846
|
+
setBoolean(
|
|
1039
847
|
opts,
|
|
1040
848
|
'appsec.extendedHeadersCollection.redaction',
|
|
1041
849
|
options.appsec?.extendedHeadersCollection?.redaction
|
|
1042
850
|
)
|
|
1043
851
|
opts['appsec.extendedHeadersCollection.maxHeaders'] = options.appsec?.extendedHeadersCollection?.maxHeaders
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
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)
|
|
1048
856
|
opts['appsec.rateLimit'] = maybeInt(options.appsec?.rateLimit)
|
|
1049
857
|
this.#optsUnprocessed['appsec.rateLimit'] = options.appsec?.rateLimit
|
|
1050
|
-
|
|
1051
|
-
|
|
858
|
+
setString(opts, 'appsec.rules', options.appsec?.rules)
|
|
859
|
+
setBoolean(opts, 'appsec.stackTrace.enabled', options.appsec?.stackTrace?.enabled)
|
|
1052
860
|
opts['appsec.stackTrace.maxDepth'] = maybeInt(options.appsec?.stackTrace?.maxDepth)
|
|
1053
861
|
this.#optsUnprocessed['appsec.stackTrace.maxDepth'] = options.appsec?.stackTrace?.maxDepth
|
|
1054
862
|
opts['appsec.stackTrace.maxStackTraces'] = maybeInt(options.appsec?.stackTrace?.maxStackTraces)
|
|
1055
863
|
this.#optsUnprocessed['appsec.stackTrace.maxStackTraces'] = options.appsec?.stackTrace?.maxStackTraces
|
|
1056
864
|
opts['appsec.wafTimeout'] = maybeInt(options.appsec?.wafTimeout)
|
|
1057
865
|
this.#optsUnprocessed['appsec.wafTimeout'] = options.appsec?.wafTimeout
|
|
1058
|
-
|
|
1059
|
-
|
|
866
|
+
setBoolean(opts, 'clientIpEnabled', options.clientIpEnabled)
|
|
867
|
+
setString(opts, 'clientIpHeader', options.clientIpHeader?.toLowerCase())
|
|
1060
868
|
if (options.cloudPayloadTagging?.request || options.cloudPayloadTagging?.response) {
|
|
1061
869
|
if (options.cloudPayloadTagging.request) {
|
|
1062
|
-
|
|
870
|
+
setBoolean(opts, 'cloudPayloadTagging.requestsEnabled', true)
|
|
1063
871
|
}
|
|
1064
872
|
if (options.cloudPayloadTagging.response) {
|
|
1065
|
-
|
|
873
|
+
setBoolean(opts, 'cloudPayloadTagging.responsesEnabled', true)
|
|
1066
874
|
}
|
|
1067
875
|
opts['cloudPayloadTagging.rules'] = appendRules(
|
|
1068
876
|
splitJSONPathRules(options.cloudPayloadTagging.request),
|
|
@@ -1070,37 +878,37 @@ class Config {
|
|
|
1070
878
|
)
|
|
1071
879
|
}
|
|
1072
880
|
if (options.cloudPayloadTagging?.requestsEnabled !== undefined) {
|
|
1073
|
-
|
|
881
|
+
setBoolean(opts, 'cloudPayloadTagging.requestsEnabled', options.cloudPayloadTagging.requestsEnabled)
|
|
1074
882
|
}
|
|
1075
883
|
if (options.cloudPayloadTagging?.responsesEnabled !== undefined) {
|
|
1076
|
-
|
|
884
|
+
setBoolean(opts, 'cloudPayloadTagging.responsesEnabled', options.cloudPayloadTagging.responsesEnabled)
|
|
1077
885
|
}
|
|
1078
886
|
opts['cloudPayloadTagging.maxDepth'] = maybeInt(options.cloudPayloadTagging?.maxDepth)
|
|
1079
887
|
opts.baggageMaxBytes = options.baggageMaxBytes
|
|
1080
888
|
opts.baggageMaxItems = options.baggageMaxItems
|
|
1081
889
|
opts.baggageTagKeys = options.baggageTagKeys
|
|
1082
|
-
|
|
1083
|
-
|
|
890
|
+
setBoolean(opts, 'codeOriginForSpans.enabled', options.codeOriginForSpans?.enabled)
|
|
891
|
+
setBoolean(
|
|
1084
892
|
opts,
|
|
1085
893
|
'codeOriginForSpans.experimental.exit_spans.enabled',
|
|
1086
894
|
options.codeOriginForSpans?.experimental?.exit_spans?.enabled
|
|
1087
895
|
)
|
|
1088
|
-
|
|
896
|
+
setString(opts, 'dbmPropagationMode', options.dbmPropagationMode)
|
|
1089
897
|
if (options.dogstatsd) {
|
|
1090
|
-
|
|
1091
|
-
|
|
898
|
+
setString(opts, 'dogstatsd.hostname', options.dogstatsd.hostname)
|
|
899
|
+
setString(opts, 'dogstatsd.port', options.dogstatsd.port)
|
|
1092
900
|
}
|
|
1093
|
-
|
|
901
|
+
setBoolean(opts, 'dsmEnabled', options.dsmEnabled)
|
|
1094
902
|
opts['dynamicInstrumentation.captureTimeoutMs'] = maybeInt(options.dynamicInstrumentation?.captureTimeoutMs)
|
|
1095
903
|
this.#optsUnprocessed['dynamicInstrumentation.captureTimeoutMs'] = options.dynamicInstrumentation?.captureTimeoutMs
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
904
|
+
setBoolean(opts, 'dynamicInstrumentation.enabled', options.dynamicInstrumentation?.enabled)
|
|
905
|
+
setString(opts, 'dynamicInstrumentation.probeFile', options.dynamicInstrumentation?.probeFile)
|
|
906
|
+
setArray(
|
|
1099
907
|
opts,
|
|
1100
908
|
'dynamicInstrumentation.redactedIdentifiers',
|
|
1101
909
|
options.dynamicInstrumentation?.redactedIdentifiers
|
|
1102
910
|
)
|
|
1103
|
-
|
|
911
|
+
setArray(
|
|
1104
912
|
opts,
|
|
1105
913
|
'dynamicInstrumentation.redactionExcludedIdentifiers',
|
|
1106
914
|
options.dynamicInstrumentation?.redactionExcludedIdentifiers
|
|
@@ -1109,18 +917,18 @@ class Config {
|
|
|
1109
917
|
maybeFloat(options.dynamicInstrumentation?.uploadIntervalSeconds)
|
|
1110
918
|
this.#optsUnprocessed['dynamicInstrumentation.uploadIntervalSeconds'] =
|
|
1111
919
|
options.dynamicInstrumentation?.uploadIntervalSeconds
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
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)
|
|
1115
923
|
opts['experimental.aiguard.maxMessagesLength'] = maybeInt(options.experimental?.aiguard?.maxMessagesLength)
|
|
1116
924
|
this.#optsUnprocessed['experimental.aiguard.maxMessagesLength'] = options.experimental?.aiguard?.maxMessagesLength
|
|
1117
925
|
opts['experimental.aiguard.maxContentSize'] = maybeInt(options.experimental?.aiguard?.maxContentSize)
|
|
1118
926
|
this.#optsUnprocessed['experimental.aiguard.maxContentSize'] = options.experimental?.aiguard?.maxContentSize
|
|
1119
927
|
opts['experimental.aiguard.timeout'] = maybeInt(options.experimental?.aiguard?.timeout)
|
|
1120
928
|
this.#optsUnprocessed['experimental.aiguard.timeout'] = options.experimental?.aiguard?.timeout
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
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)
|
|
1124
932
|
opts['experimental.flaggingProvider.initializationTimeoutMs'] = maybeInt(
|
|
1125
933
|
options.experimental?.flaggingProvider?.initializationTimeoutMs
|
|
1126
934
|
)
|
|
@@ -1130,19 +938,19 @@ class Config {
|
|
|
1130
938
|
this.#optsUnprocessed.flushInterval = options.flushInterval
|
|
1131
939
|
opts.flushMinSpans = maybeInt(options.flushMinSpans)
|
|
1132
940
|
this.#optsUnprocessed.flushMinSpans = options.flushMinSpans
|
|
1133
|
-
|
|
1134
|
-
|
|
941
|
+
setArray(opts, 'headerTags', options.headerTags)
|
|
942
|
+
setString(opts, 'hostname', options.hostname)
|
|
1135
943
|
opts['iast.dbRowsToTaint'] = maybeInt(options.iast?.dbRowsToTaint)
|
|
1136
|
-
|
|
1137
|
-
|
|
944
|
+
setBoolean(opts, 'iast.deduplicationEnabled', options.iast && options.iast.deduplicationEnabled)
|
|
945
|
+
setBoolean(opts, 'iast.enabled',
|
|
1138
946
|
options.iast && (options.iast === true || options.iast.enabled === true))
|
|
1139
947
|
opts['iast.maxConcurrentRequests'] = maybeInt(options.iast?.maxConcurrentRequests)
|
|
1140
948
|
this.#optsUnprocessed['iast.maxConcurrentRequests'] = options.iast?.maxConcurrentRequests
|
|
1141
949
|
opts['iast.maxContextOperations'] = maybeInt(options.iast?.maxContextOperations)
|
|
1142
950
|
this.#optsUnprocessed['iast.maxContextOperations'] = options.iast?.maxContextOperations
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
951
|
+
setBoolean(opts, 'iast.redactionEnabled', options.iast?.redactionEnabled)
|
|
952
|
+
setString(opts, 'iast.redactionNamePattern', options.iast?.redactionNamePattern)
|
|
953
|
+
setString(opts, 'iast.redactionValuePattern', options.iast?.redactionValuePattern)
|
|
1146
954
|
const iastRequestSampling = maybeInt(options.iast?.requestSampling)
|
|
1147
955
|
if (iastRequestSampling !== undefined && iastRequestSampling > -1 && iastRequestSampling < 101) {
|
|
1148
956
|
opts['iast.requestSampling'] = iastRequestSampling
|
|
@@ -1151,60 +959,60 @@ class Config {
|
|
|
1151
959
|
if (DD_MAJOR < 6) {
|
|
1152
960
|
opts['iast.securityControlsConfiguration'] = options.iast?.securityControlsConfiguration
|
|
1153
961
|
}
|
|
1154
|
-
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
|
|
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)
|
|
1161
969
|
opts.lookup = options.lookup
|
|
1162
|
-
|
|
1163
|
-
|
|
970
|
+
setBoolean(opts, 'middlewareTracingEnabled', options.middlewareTracingEnabled)
|
|
971
|
+
setBoolean(opts, 'openAiLogsEnabled', options.openAiLogsEnabled)
|
|
1164
972
|
opts.peerServiceMapping = options.peerServiceMapping
|
|
1165
|
-
|
|
1166
|
-
|
|
973
|
+
setBoolean(opts, 'plugins', options.plugins)
|
|
974
|
+
setString(opts, 'port', options.port)
|
|
1167
975
|
const strProfiling = String(options.profiling)
|
|
1168
976
|
if (['true', 'false', 'auto'].includes(strProfiling)) {
|
|
1169
|
-
|
|
977
|
+
setString(opts, 'profiling.enabled', strProfiling)
|
|
1170
978
|
}
|
|
1171
|
-
|
|
979
|
+
setString(opts, 'protocolVersion', options.protocolVersion)
|
|
1172
980
|
if (options.remoteConfig) {
|
|
1173
981
|
opts['remoteConfig.pollInterval'] = maybeFloat(options.remoteConfig.pollInterval)
|
|
1174
982
|
this.#optsUnprocessed['remoteConfig.pollInterval'] = options.remoteConfig.pollInterval
|
|
1175
983
|
}
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
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)
|
|
1183
991
|
opts['sampler.rateLimit'] = maybeInt(options.rateLimit ?? options.ingestion.rateLimit)
|
|
1184
|
-
|
|
1185
|
-
|
|
992
|
+
setSamplingRule(opts, 'sampler.rules', options.samplingRules)
|
|
993
|
+
setString(opts, 'service', options.service || tags.service)
|
|
1186
994
|
opts.serviceMapping = options.serviceMapping
|
|
1187
|
-
|
|
995
|
+
setString(opts, 'site', options.site)
|
|
1188
996
|
if (options.spanAttributeSchema) {
|
|
1189
|
-
|
|
997
|
+
setString(opts, 'spanAttributeSchema', validateNamingVersion(options.spanAttributeSchema))
|
|
1190
998
|
this.#optsUnprocessed.spanAttributeSchema = options.spanAttributeSchema
|
|
1191
999
|
}
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
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)
|
|
1204
1012
|
if (options.tracePropagationStyle) {
|
|
1205
|
-
|
|
1013
|
+
setArray(opts, 'tracePropagationStyle.inject',
|
|
1206
1014
|
normalizePropagationStyle(options.tracePropagationStyle.inject ?? options.tracePropagationStyle))
|
|
1207
|
-
|
|
1015
|
+
setArray(opts, 'tracePropagationStyle.extract',
|
|
1208
1016
|
normalizePropagationStyle(options.tracePropagationStyle.extract ?? options.tracePropagationStyle))
|
|
1209
1017
|
}
|
|
1210
1018
|
|
|
@@ -1213,7 +1021,7 @@ class Config {
|
|
|
1213
1021
|
// This is to make sure the origins of each value are tracked appropriately for telemetry.
|
|
1214
1022
|
// We'll only set `llmobs.enabled` on the opts when it's not set on the environment, and options.llmobs is provided.
|
|
1215
1023
|
if (this.#env['llmobs.enabled'] == null && options.llmobs) {
|
|
1216
|
-
|
|
1024
|
+
setBoolean(opts, 'llmobs.enabled', true)
|
|
1217
1025
|
}
|
|
1218
1026
|
}
|
|
1219
1027
|
|
|
@@ -1221,15 +1029,11 @@ class Config {
|
|
|
1221
1029
|
return this.#optionsArg.isCiVisibility ?? this.#defaults.isCiVisibility
|
|
1222
1030
|
}
|
|
1223
1031
|
|
|
1224
|
-
#isCiVisibilityItrEnabled () {
|
|
1225
|
-
return getEnv('DD_CIVISIBILITY_ITR_ENABLED') ?? true
|
|
1226
|
-
}
|
|
1227
|
-
|
|
1228
1032
|
#getHostname () {
|
|
1229
1033
|
const DD_CIVISIBILITY_AGENTLESS_URL = getEnv('DD_CIVISIBILITY_AGENTLESS_URL')
|
|
1230
1034
|
const url = DD_CIVISIBILITY_AGENTLESS_URL
|
|
1231
1035
|
? new URL(DD_CIVISIBILITY_AGENTLESS_URL)
|
|
1232
|
-
: getAgentUrl(this
|
|
1036
|
+
: getAgentUrl(this.#getTraceAgentUrl(), this.#optionsArg)
|
|
1233
1037
|
const DD_AGENT_HOST = this.#optionsArg.hostname ??
|
|
1234
1038
|
getEnv('DD_AGENT_HOST') ??
|
|
1235
1039
|
defaults.hostname
|
|
@@ -1271,7 +1075,7 @@ class Config {
|
|
|
1271
1075
|
)
|
|
1272
1076
|
}
|
|
1273
1077
|
|
|
1274
|
-
|
|
1078
|
+
#getTraceAgentUrl () {
|
|
1275
1079
|
return this.#optionsArg.url ??
|
|
1276
1080
|
getEnv('DD_TRACE_AGENT_URL') ??
|
|
1277
1081
|
null
|
|
@@ -1285,31 +1089,31 @@ class Config {
|
|
|
1285
1089
|
|
|
1286
1090
|
calc.url = DD_CIVISIBILITY_AGENTLESS_URL
|
|
1287
1091
|
? new URL(DD_CIVISIBILITY_AGENTLESS_URL)
|
|
1288
|
-
: getAgentUrl(this
|
|
1092
|
+
: getAgentUrl(this.#getTraceAgentUrl(), this.#optionsArg)
|
|
1289
1093
|
|
|
1290
1094
|
if (this.#isCiVisibility()) {
|
|
1291
|
-
|
|
1095
|
+
setBoolean(calc, 'isEarlyFlakeDetectionEnabled',
|
|
1292
1096
|
getEnv('DD_CIVISIBILITY_EARLY_FLAKE_DETECTION_ENABLED') ?? true)
|
|
1293
|
-
|
|
1097
|
+
setBoolean(calc, 'isFlakyTestRetriesEnabled', getEnv('DD_CIVISIBILITY_FLAKY_RETRY_ENABLED') ?? true)
|
|
1294
1098
|
calc.flakyTestRetriesCount = maybeInt(getEnv('DD_CIVISIBILITY_FLAKY_RETRY_COUNT')) ?? 5
|
|
1295
|
-
|
|
1296
|
-
|
|
1297
|
-
|
|
1298
|
-
|
|
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',
|
|
1299
1103
|
isTrue(getEnv('DD_AGENTLESS_LOG_SUBMISSION_ENABLED')))
|
|
1300
|
-
|
|
1104
|
+
setBoolean(calc, 'isTestDynamicInstrumentationEnabled',
|
|
1301
1105
|
!isFalse(getEnv('DD_TEST_FAILED_TEST_REPLAY_ENABLED')))
|
|
1302
|
-
|
|
1303
|
-
|
|
1106
|
+
setBoolean(calc, 'isServiceUserProvided', !!this.#env.service)
|
|
1107
|
+
setBoolean(calc, 'isTestManagementEnabled', !isFalse(getEnv('DD_TEST_MANAGEMENT_ENABLED')))
|
|
1304
1108
|
calc.testManagementAttemptToFixRetries = maybeInt(getEnv('DD_TEST_MANAGEMENT_ATTEMPT_TO_FIX_RETRIES')) ?? 20
|
|
1305
|
-
|
|
1109
|
+
setBoolean(calc, 'isImpactedTestsEnabled',
|
|
1306
1110
|
!isFalse(getEnv('DD_CIVISIBILITY_IMPACTED_TESTS_DETECTION_ENABLED')))
|
|
1307
1111
|
}
|
|
1308
1112
|
|
|
1309
1113
|
// Disable log injection when OTEL logs are enabled
|
|
1310
1114
|
// OTEL logs and DD log injection are mutually exclusive
|
|
1311
1115
|
if (this.#env.otelLogsEnabled) {
|
|
1312
|
-
|
|
1116
|
+
setBoolean(calc, 'logInjection', false)
|
|
1313
1117
|
}
|
|
1314
1118
|
|
|
1315
1119
|
calc['dogstatsd.hostname'] = this.#getHostname()
|
|
@@ -1320,7 +1124,7 @@ class Config {
|
|
|
1320
1124
|
calc.otelMetricsUrl = `http://${agentHostname}:${DEFAULT_OTLP_PORT}/v1/metrics`
|
|
1321
1125
|
calc.otelUrl = `http://${agentHostname}:${DEFAULT_OTLP_PORT}`
|
|
1322
1126
|
|
|
1323
|
-
|
|
1127
|
+
setBoolean(calc, 'isGitUploadEnabled',
|
|
1324
1128
|
calc.isIntelligentTestRunnerEnabled && !isFalse(getEnv('DD_CIVISIBILITY_GIT_UPLOAD_ENABLED')))
|
|
1325
1129
|
|
|
1326
1130
|
// Enable resourceRenamingEnabled when appsec is enabled and only
|
|
@@ -1328,13 +1132,13 @@ class Config {
|
|
|
1328
1132
|
if (this.#env.resourceRenamingEnabled === undefined) {
|
|
1329
1133
|
const appsecEnabled = this.#options['appsec.enabled'] ?? this.#env['appsec.enabled']
|
|
1330
1134
|
if (appsecEnabled) {
|
|
1331
|
-
|
|
1135
|
+
setBoolean(calc, 'resourceRenamingEnabled', true)
|
|
1332
1136
|
}
|
|
1333
1137
|
}
|
|
1334
1138
|
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
const defaultPropagationStyle =
|
|
1139
|
+
setBoolean(calc, 'spanComputePeerService', this.#getSpanComputePeerService())
|
|
1140
|
+
setBoolean(calc, 'stats.enabled', this.#isTraceStatsComputationEnabled())
|
|
1141
|
+
const defaultPropagationStyle = getDefaultPropagationStyle(this.#optionsArg)
|
|
1338
1142
|
if (defaultPropagationStyle.length > 2) {
|
|
1339
1143
|
// b3 was added, so update defaults to include it
|
|
1340
1144
|
// This will only be used if no other source (options, env, stable config) set the value
|
|
@@ -1351,13 +1155,13 @@ class Config {
|
|
|
1351
1155
|
#applyRemoteConfig (options) {
|
|
1352
1156
|
const opts = this.#remote
|
|
1353
1157
|
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
-
|
|
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)
|
|
1359
1163
|
this.#remoteUnprocessed['sampler.rules'] = options.tracing_sampling_rules
|
|
1360
|
-
|
|
1164
|
+
setSamplingRule(opts, 'sampler.rules', reformatTagsFromRC(options.tracing_sampling_rules))
|
|
1361
1165
|
|
|
1362
1166
|
opts.headerTags = options.tracing_header_tags?.map(tag => {
|
|
1363
1167
|
return tag.tag_name ? `${tag.header}:${tag.tag_name}` : tag.header
|
|
@@ -1365,118 +1169,10 @@ class Config {
|
|
|
1365
1169
|
|
|
1366
1170
|
const tags = {}
|
|
1367
1171
|
tagger.add(tags, options.tracing_tags)
|
|
1368
|
-
if (Object.keys(tags).length)
|
|
1369
|
-
|
|
1370
|
-
}
|
|
1371
|
-
|
|
1372
|
-
#reformatTagsFromRC (samplingRules) {
|
|
1373
|
-
for (const rule of (samplingRules || [])) {
|
|
1374
|
-
if (rule.tags) {
|
|
1375
|
-
const reformattedTags = {}
|
|
1376
|
-
for (const tag of rule.tags) {
|
|
1377
|
-
reformattedTags[tag.key] = tag.value_glob
|
|
1378
|
-
}
|
|
1379
|
-
rule.tags = reformattedTags
|
|
1380
|
-
}
|
|
1381
|
-
}
|
|
1382
|
-
return samplingRules
|
|
1383
|
-
}
|
|
1384
|
-
|
|
1385
|
-
#setBoolean (obj, name, value) {
|
|
1386
|
-
if (value === undefined || value === null) {
|
|
1387
|
-
obj[name] = value
|
|
1388
|
-
} else if (isTrue(value)) {
|
|
1389
|
-
obj[name] = true
|
|
1390
|
-
} else if (isFalse(value)) {
|
|
1391
|
-
obj[name] = false
|
|
1172
|
+
if (Object.keys(tags).length) {
|
|
1173
|
+
tags['runtime-id'] = RUNTIME_ID
|
|
1392
1174
|
}
|
|
1393
|
-
|
|
1394
|
-
|
|
1395
|
-
#setUnit (obj, name, value) {
|
|
1396
|
-
if (value === null || value === undefined) {
|
|
1397
|
-
obj[name] = value
|
|
1398
|
-
return
|
|
1399
|
-
}
|
|
1400
|
-
|
|
1401
|
-
value = Number.parseFloat(value)
|
|
1402
|
-
|
|
1403
|
-
if (!Number.isNaN(value)) {
|
|
1404
|
-
// TODO: Ignore out of range values instead of normalizing them.
|
|
1405
|
-
obj[name] = Math.min(Math.max(value, 0), 1)
|
|
1406
|
-
}
|
|
1407
|
-
}
|
|
1408
|
-
|
|
1409
|
-
#setArray (obj, name, value) {
|
|
1410
|
-
if (value == null) {
|
|
1411
|
-
obj[name] = null
|
|
1412
|
-
return
|
|
1413
|
-
}
|
|
1414
|
-
|
|
1415
|
-
if (typeof value === 'string') {
|
|
1416
|
-
value = value.split(',').map(item => {
|
|
1417
|
-
// Trim each item and remove whitespace around the colon
|
|
1418
|
-
const [key, val] = item.split(':').map(part => part.trim())
|
|
1419
|
-
return val === undefined ? key : `${key}:${val}`
|
|
1420
|
-
})
|
|
1421
|
-
}
|
|
1422
|
-
|
|
1423
|
-
if (Array.isArray(value)) {
|
|
1424
|
-
obj[name] = value
|
|
1425
|
-
}
|
|
1426
|
-
}
|
|
1427
|
-
|
|
1428
|
-
#setIntegerRangeSet (obj, name, value) {
|
|
1429
|
-
if (value == null) {
|
|
1430
|
-
obj[name] = null
|
|
1431
|
-
return
|
|
1432
|
-
}
|
|
1433
|
-
value = value.split(',')
|
|
1434
|
-
const result = []
|
|
1435
|
-
|
|
1436
|
-
value.forEach(val => {
|
|
1437
|
-
if (val.includes('-')) {
|
|
1438
|
-
const [start, end] = val.split('-').map(Number)
|
|
1439
|
-
for (let i = start; i <= end; i++) {
|
|
1440
|
-
result.push(i)
|
|
1441
|
-
}
|
|
1442
|
-
} else {
|
|
1443
|
-
result.push(Number(val))
|
|
1444
|
-
}
|
|
1445
|
-
})
|
|
1446
|
-
obj[name] = result
|
|
1447
|
-
}
|
|
1448
|
-
|
|
1449
|
-
#setSamplingRule (obj, name, value) {
|
|
1450
|
-
if (value == null) {
|
|
1451
|
-
obj[name] = null
|
|
1452
|
-
return
|
|
1453
|
-
}
|
|
1454
|
-
|
|
1455
|
-
if (typeof value === 'string') {
|
|
1456
|
-
value = value.split(',')
|
|
1457
|
-
}
|
|
1458
|
-
|
|
1459
|
-
if (Array.isArray(value)) {
|
|
1460
|
-
value = value.map(rule => {
|
|
1461
|
-
return remapify(rule, {
|
|
1462
|
-
sample_rate: 'sampleRate'
|
|
1463
|
-
})
|
|
1464
|
-
})
|
|
1465
|
-
obj[name] = value
|
|
1466
|
-
}
|
|
1467
|
-
}
|
|
1468
|
-
|
|
1469
|
-
#setString (obj, name, value) {
|
|
1470
|
-
obj[name] = value ? String(value) : undefined // unset for empty strings
|
|
1471
|
-
}
|
|
1472
|
-
|
|
1473
|
-
#setTags (obj, name, value) {
|
|
1474
|
-
if (!value || Object.keys(value).length === 0) {
|
|
1475
|
-
obj[name] = null
|
|
1476
|
-
return
|
|
1477
|
-
}
|
|
1478
|
-
|
|
1479
|
-
obj[name] = value
|
|
1175
|
+
setTags(opts, 'tags', tags)
|
|
1480
1176
|
}
|
|
1481
1177
|
|
|
1482
1178
|
#setAndTrackChange ({ name, value, origin, unprocessedValue, changes }) {
|
|
@@ -1494,7 +1190,7 @@ class Config {
|
|
|
1494
1190
|
changes.push({
|
|
1495
1191
|
name,
|
|
1496
1192
|
value: unprocessedValue || value,
|
|
1497
|
-
origin
|
|
1193
|
+
origin,
|
|
1498
1194
|
})
|
|
1499
1195
|
}
|
|
1500
1196
|
}
|
|
@@ -1519,7 +1215,7 @@ class Config {
|
|
|
1519
1215
|
value,
|
|
1520
1216
|
origin,
|
|
1521
1217
|
unprocessedValue: unprocessed?.[name],
|
|
1522
|
-
changes
|
|
1218
|
+
changes,
|
|
1523
1219
|
})
|
|
1524
1220
|
}
|
|
1525
1221
|
}
|
|
@@ -1528,15 +1224,6 @@ class Config {
|
|
|
1528
1224
|
updateConfig(changes, this)
|
|
1529
1225
|
}
|
|
1530
1226
|
|
|
1531
|
-
getOrigin (name) {
|
|
1532
|
-
for (const { container, origin } of this.#getSourcesInOrder()) {
|
|
1533
|
-
const value = container[name]
|
|
1534
|
-
if (value != null || container === this.#defaults) {
|
|
1535
|
-
return origin
|
|
1536
|
-
}
|
|
1537
|
-
}
|
|
1538
|
-
}
|
|
1539
|
-
|
|
1540
1227
|
#loadGitMetadata () {
|
|
1541
1228
|
// try to read Git metadata from the environment variables
|
|
1542
1229
|
this.repositoryUrl = removeUserSensitiveInfo(
|
|
@@ -1593,6 +1280,312 @@ class Config {
|
|
|
1593
1280
|
}
|
|
1594
1281
|
}
|
|
1595
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
|
+
|
|
1596
1589
|
function handleOtel (tagString) {
|
|
1597
1590
|
return tagString
|
|
1598
1591
|
?.replace(/(^|,)deployment\.environment=/, '$1env:')
|
|
@@ -1622,7 +1615,7 @@ function nonNegInt (value, envVarName, allowZero = true) {
|
|
|
1622
1615
|
if (value === undefined) return
|
|
1623
1616
|
const parsed = Number.parseInt(value)
|
|
1624
1617
|
if (Number.isNaN(parsed) || parsed < 0 || (parsed === 0 && !allowZero)) {
|
|
1625
|
-
log.warn(
|
|
1618
|
+
log.warn('Invalid value %d for %s. Using default value.', parsed, envVarName)
|
|
1626
1619
|
return
|
|
1627
1620
|
}
|
|
1628
1621
|
return parsed
|
|
@@ -1644,12 +1637,9 @@ function getAgentUrl (url, options) {
|
|
|
1644
1637
|
}
|
|
1645
1638
|
}
|
|
1646
1639
|
|
|
1647
|
-
let configInstance = null
|
|
1648
1640
|
function getConfig (options) {
|
|
1649
1641
|
if (!configInstance) {
|
|
1650
1642
|
configInstance = new Config(options)
|
|
1651
1643
|
}
|
|
1652
1644
|
return configInstance
|
|
1653
1645
|
}
|
|
1654
|
-
|
|
1655
|
-
module.exports = getConfig
|