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