dd-trace 5.53.0 → 5.55.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE-3rdparty.csv +2 -1
- package/ci/cypress/plugin.js +8 -0
- package/ci/cypress/polyfills.js +23 -0
- package/ci/init.js +8 -7
- package/index.d.ts +33 -16
- package/initialize.mjs +5 -6
- package/package.json +40 -38
- package/packages/datadog-code-origin/index.js +22 -4
- package/packages/datadog-core/src/utils/src/get.js +1 -1
- package/packages/datadog-core/src/utils/src/has.js +1 -1
- package/packages/datadog-core/src/utils/src/kebabcase.js +4 -6
- package/packages/datadog-core/src/utils/src/parse-tags.js +1 -1
- package/packages/datadog-core/src/utils/src/pick.js +2 -2
- package/packages/datadog-core/src/utils/src/set.js +1 -1
- package/packages/datadog-core/src/utils/src/uniq.js +1 -1
- package/packages/datadog-instrumentations/src/amqp10.js +19 -17
- package/packages/datadog-instrumentations/src/amqplib.js +52 -35
- package/packages/datadog-instrumentations/src/apollo.js +2 -2
- package/packages/datadog-instrumentations/src/aws-sdk.js +1 -1
- package/packages/datadog-instrumentations/src/cassandra-driver.js +10 -10
- package/packages/datadog-instrumentations/src/child_process.js +1 -2
- package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +89 -75
- package/packages/datadog-instrumentations/src/cookie-parser.js +1 -1
- package/packages/datadog-instrumentations/src/couchbase.js +6 -9
- package/packages/datadog-instrumentations/src/cucumber.js +108 -68
- package/packages/datadog-instrumentations/src/cypress.js +2 -1
- package/packages/datadog-instrumentations/src/dns.js +5 -5
- package/packages/datadog-instrumentations/src/elasticsearch.js +9 -10
- package/packages/datadog-instrumentations/src/fastify.js +7 -9
- package/packages/datadog-instrumentations/src/fs.js +1 -1
- package/packages/datadog-instrumentations/src/google-cloud-pubsub.js +35 -43
- package/packages/datadog-instrumentations/src/graphql.js +7 -10
- package/packages/datadog-instrumentations/src/grpc/client.js +11 -23
- package/packages/datadog-instrumentations/src/grpc/server.js +7 -20
- package/packages/datadog-instrumentations/src/hapi.js +10 -11
- package/packages/datadog-instrumentations/src/helpers/extract-package-and-module-path.js +16 -10
- package/packages/datadog-instrumentations/src/helpers/fetch.js +4 -5
- package/packages/datadog-instrumentations/src/helpers/hook.js +2 -3
- package/packages/datadog-instrumentations/src/helpers/hooks.js +0 -1
- package/packages/datadog-instrumentations/src/helpers/instrument.js +1 -41
- package/packages/datadog-instrumentations/src/helpers/register.js +11 -12
- package/packages/datadog-instrumentations/src/http/client.js +14 -20
- package/packages/datadog-instrumentations/src/jest.js +201 -143
- package/packages/datadog-instrumentations/src/kafkajs.js +52 -44
- package/packages/datadog-instrumentations/src/knex.js +4 -4
- package/packages/datadog-instrumentations/src/koa.js +2 -3
- package/packages/datadog-instrumentations/src/ldapjs.js +3 -4
- package/packages/datadog-instrumentations/src/mariadb.js +49 -65
- package/packages/datadog-instrumentations/src/mocha/main.js +116 -73
- package/packages/datadog-instrumentations/src/mocha/utils.js +36 -12
- package/packages/datadog-instrumentations/src/mocha/worker.js +6 -0
- package/packages/datadog-instrumentations/src/mocha.js +3 -1
- package/packages/datadog-instrumentations/src/mongodb-core.js +1 -1
- package/packages/datadog-instrumentations/src/mysql.js +30 -37
- package/packages/datadog-instrumentations/src/mysql2.js +53 -47
- package/packages/datadog-instrumentations/src/net.js +1 -1
- package/packages/datadog-instrumentations/src/next.js +1 -0
- package/packages/datadog-instrumentations/src/nyc.js +3 -2
- package/packages/datadog-instrumentations/src/openai.js +22 -24
- package/packages/datadog-instrumentations/src/oracledb.js +1 -1
- package/packages/datadog-instrumentations/src/otel-sdk-trace.js +4 -3
- package/packages/datadog-instrumentations/src/pg.js +3 -5
- package/packages/datadog-instrumentations/src/playwright.js +123 -83
- package/packages/datadog-instrumentations/src/protobufjs.js +3 -4
- package/packages/datadog-instrumentations/src/redis.js +4 -4
- package/packages/datadog-instrumentations/src/restify.js +9 -13
- package/packages/datadog-instrumentations/src/rhea.js +42 -54
- package/packages/datadog-instrumentations/src/router.js +30 -32
- package/packages/datadog-instrumentations/src/tedious.js +2 -3
- package/packages/datadog-instrumentations/src/vitest.js +87 -52
- package/packages/datadog-plugin-amqp10/src/consumer.js +7 -3
- package/packages/datadog-plugin-amqp10/src/producer.js +7 -3
- package/packages/datadog-plugin-amqplib/src/client.js +6 -2
- package/packages/datadog-plugin-amqplib/src/consumer.js +7 -3
- package/packages/datadog-plugin-amqplib/src/producer.js +7 -3
- package/packages/datadog-plugin-amqplib/src/util.js +1 -1
- package/packages/datadog-plugin-apollo/src/gateway/request.js +5 -6
- package/packages/datadog-plugin-apollo/src/gateway/validate.js +2 -3
- package/packages/datadog-plugin-avsc/src/schema_iterator.js +12 -12
- package/packages/datadog-plugin-aws-sdk/src/base.js +15 -10
- package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/tracing.js +2 -2
- package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/utils.js +13 -13
- package/packages/datadog-plugin-aws-sdk/src/services/cloudwatchlogs.js +3 -5
- package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +28 -43
- package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +2 -2
- package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +10 -11
- package/packages/datadog-plugin-aws-sdk/src/services/lambda.js +4 -6
- package/packages/datadog-plugin-aws-sdk/src/services/redshift.js +3 -5
- package/packages/datadog-plugin-aws-sdk/src/services/s3.js +3 -5
- package/packages/datadog-plugin-aws-sdk/src/services/sns.js +2 -3
- package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +11 -15
- package/packages/datadog-plugin-aws-sdk/src/services/stepfunctions.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/util.js +5 -6
- package/packages/datadog-plugin-cassandra-driver/src/index.js +1 -1
- package/packages/datadog-plugin-child_process/src/index.js +4 -4
- package/packages/datadog-plugin-child_process/src/scrub-cmd-params.js +23 -23
- package/packages/datadog-plugin-cucumber/src/index.js +60 -4
- package/packages/datadog-plugin-cypress/src/cypress-plugin.js +99 -28
- package/packages/datadog-plugin-cypress/src/plugin.js +11 -1
- package/packages/datadog-plugin-cypress/src/support.js +24 -5
- package/packages/datadog-plugin-dd-trace-api/src/index.js +2 -1
- package/packages/datadog-plugin-elasticsearch/src/index.js +1 -1
- package/packages/datadog-plugin-express/src/code_origin.js +30 -0
- package/packages/datadog-plugin-express/src/index.js +10 -12
- package/packages/datadog-plugin-express/src/tracing.js +19 -0
- package/packages/datadog-plugin-google-cloud-pubsub/src/client.js +7 -3
- package/packages/datadog-plugin-google-cloud-pubsub/src/consumer.js +12 -7
- package/packages/datadog-plugin-google-cloud-pubsub/src/producer.js +6 -2
- package/packages/datadog-plugin-google-cloud-vertexai/src/tracing.js +27 -10
- package/packages/datadog-plugin-graphql/src/execute.js +2 -2
- package/packages/datadog-plugin-graphql/src/index.js +10 -8
- package/packages/datadog-plugin-graphql/src/resolve.js +19 -12
- package/packages/datadog-plugin-graphql/src/tools/index.js +1 -0
- package/packages/datadog-plugin-graphql/src/tools/signature.js +1 -0
- package/packages/datadog-plugin-graphql/src/tools/transforms.js +1 -0
- package/packages/datadog-plugin-grpc/src/client.js +2 -2
- package/packages/datadog-plugin-grpc/src/util.js +2 -2
- package/packages/datadog-plugin-http/src/client.js +23 -13
- package/packages/datadog-plugin-http2/src/client.js +24 -25
- package/packages/datadog-plugin-jest/src/index.js +26 -23
- package/packages/datadog-plugin-jest/src/util.js +8 -8
- package/packages/datadog-plugin-kafkajs/src/batch-consumer.js +3 -1
- package/packages/datadog-plugin-kafkajs/src/consumer.js +9 -5
- package/packages/datadog-plugin-kafkajs/src/producer.js +8 -3
- package/packages/datadog-plugin-kafkajs/src/utils.js +1 -1
- package/packages/datadog-plugin-langchain/src/handlers/chain.js +7 -7
- package/packages/datadog-plugin-langchain/src/handlers/embedding.js +2 -2
- package/packages/datadog-plugin-langchain/src/handlers/language_models/chat_model.js +6 -4
- package/packages/datadog-plugin-langchain/src/handlers/language_models/llm.js +5 -4
- package/packages/datadog-plugin-langchain/src/tracing.js +11 -10
- package/packages/datadog-plugin-mariadb/src/index.js +3 -9
- package/packages/datadog-plugin-mocha/src/index.js +39 -14
- package/packages/datadog-plugin-mongodb-core/src/index.js +3 -2
- package/packages/datadog-plugin-mysql/src/index.js +22 -9
- package/packages/datadog-plugin-mysql2/src/index.js +16 -0
- package/packages/datadog-plugin-net/src/tcp.js +1 -1
- package/packages/datadog-plugin-next/src/index.js +7 -6
- package/packages/datadog-plugin-openai/src/services.js +6 -10
- package/packages/datadog-plugin-openai/src/tracing.js +12 -18
- package/packages/datadog-plugin-oracledb/src/index.js +1 -1
- package/packages/datadog-plugin-playwright/src/index.js +25 -4
- package/packages/datadog-plugin-protobufjs/src/schema_iterator.js +8 -9
- package/packages/datadog-plugin-redis/src/index.js +2 -4
- package/packages/datadog-plugin-rhea/src/consumer.js +8 -6
- package/packages/datadog-plugin-rhea/src/producer.js +5 -2
- package/packages/datadog-plugin-router/src/index.js +1 -1
- package/packages/datadog-plugin-selenium/src/index.js +1 -6
- package/packages/datadog-plugin-vitest/src/index.js +52 -35
- package/packages/datadog-shimmer/src/shimmer.js +4 -8
- package/packages/dd-trace/src/appsec/api_security_sampler.js +2 -2
- package/packages/dd-trace/src/appsec/blocked_templates.js +1 -1
- package/packages/dd-trace/src/appsec/blocking.js +6 -20
- package/packages/dd-trace/src/appsec/iast/analyzers/analyzers.js +0 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-password-rules.js +0 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secret-rules.js +0 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secrets-rules.js +0 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hsts-header-missing-analyzer.js +7 -12
- package/packages/dd-trace/src/appsec/iast/analyzers/missing-header-analyzer.js +5 -8
- package/packages/dd-trace/src/appsec/iast/analyzers/nosql-injection-mongodb-analyzer.js +4 -0
- package/packages/dd-trace/src/appsec/iast/analyzers/path-traversal-analyzer.js +9 -12
- package/packages/dd-trace/src/appsec/iast/analyzers/vulnerability-analyzer.js +5 -4
- package/packages/dd-trace/src/appsec/iast/context/context-plugin.js +2 -3
- package/packages/dd-trace/src/appsec/iast/iast-plugin.js +3 -3
- package/packages/dd-trace/src/appsec/iast/index.js +1 -0
- package/packages/dd-trace/src/appsec/iast/overhead-controller.js +102 -7
- package/packages/dd-trace/src/appsec/iast/path-line.js +7 -8
- package/packages/dd-trace/src/appsec/iast/security-controls/index.js +16 -24
- package/packages/dd-trace/src/appsec/iast/security-controls/parser.js +6 -6
- package/packages/dd-trace/src/appsec/iast/taint-tracking/filter.js +2 -2
- package/packages/dd-trace/src/appsec/iast/taint-tracking/operations-taint-object.js +3 -3
- package/packages/dd-trace/src/appsec/iast/taint-tracking/operations.js +4 -28
- package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +2 -8
- package/packages/dd-trace/src/appsec/iast/taint-tracking/plugins/kafka.js +3 -4
- package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter-esm.mjs +1 -1
- package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +7 -8
- package/packages/dd-trace/src/appsec/iast/taint-tracking/taint-tracking-impl.js +2 -2
- package/packages/dd-trace/src/appsec/iast/telemetry/span-tags.js +7 -7
- package/packages/dd-trace/src/appsec/iast/telemetry/verbosity.js +2 -3
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/range-utils.js +10 -11
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/command-sensitive-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/ldap-sensitive-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/sql-sensitive-analyzer.js +7 -7
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-handler.js +23 -28
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-regex.js +3 -3
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/index.js +4 -4
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/utils.js +6 -11
- package/packages/dd-trace/src/appsec/iast/vulnerabilities.js +0 -1
- package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +9 -11
- package/packages/dd-trace/src/appsec/index.js +5 -5
- package/packages/dd-trace/src/appsec/rasp/index.js +15 -15
- package/packages/dd-trace/src/appsec/rasp/lfi.js +2 -1
- package/packages/dd-trace/src/appsec/reporter.js +232 -41
- package/packages/dd-trace/src/appsec/rule_manager.js +2 -2
- package/packages/dd-trace/src/appsec/sdk/set_user.js +2 -2
- package/packages/dd-trace/src/appsec/sdk/track_event.js +3 -3
- package/packages/dd-trace/src/appsec/stack_trace.js +2 -4
- package/packages/dd-trace/src/appsec/telemetry/index.js +31 -1
- package/packages/dd-trace/src/appsec/telemetry/rasp.js +3 -5
- package/packages/dd-trace/src/appsec/telemetry/waf.js +3 -5
- package/packages/dd-trace/src/appsec/user_tracking.js +3 -5
- package/packages/dd-trace/src/appsec/waf/waf_context_wrapper.js +8 -4
- package/packages/dd-trace/src/azure_metadata.js +9 -9
- package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/index.js +9 -8
- package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/worker/index.js +2 -2
- package/packages/dd-trace/src/ci-visibility/early-flake-detection/get-known-tests.js +3 -2
- package/packages/dd-trace/src/ci-visibility/exporters/agent-proxy/index.js +3 -3
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/coverage-writer.js +3 -2
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +3 -2
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +3 -2
- package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +6 -4
- package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +6 -5
- package/packages/dd-trace/src/ci-visibility/exporters/test-worker/index.js +7 -6
- package/packages/dd-trace/src/ci-visibility/exporters/test-worker/writer.js +0 -2
- package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +3 -2
- package/packages/dd-trace/src/ci-visibility/log-submission/log-submission-plugin.js +5 -4
- package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +12 -8
- package/packages/dd-trace/src/ci-visibility/telemetry.js +4 -0
- package/packages/dd-trace/src/ci-visibility/test-management/get-test-management-tests.js +3 -2
- package/packages/dd-trace/src/config-helper.js +89 -0
- package/packages/dd-trace/src/config.js +159 -129
- package/packages/dd-trace/src/config_stable.js +10 -7
- package/packages/dd-trace/src/datastreams/encoding.js +9 -9
- package/packages/dd-trace/src/datastreams/fnv.js +2 -2
- package/packages/dd-trace/src/datastreams/pathway.js +4 -4
- package/packages/dd-trace/src/datastreams/processor.js +5 -7
- package/packages/dd-trace/src/datastreams/schemas/schema_builder.js +7 -7
- package/packages/dd-trace/src/datastreams/schemas/schema_sampler.js +4 -6
- package/packages/dd-trace/src/datastreams/size.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/breakpoints.js +75 -69
- package/packages/dd-trace/src/debugger/devtools_client/condition.js +7 -10
- package/packages/dd-trace/src/debugger/devtools_client/defaults.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/index.js +9 -2
- package/packages/dd-trace/src/debugger/devtools_client/remote_config.js +18 -38
- package/packages/dd-trace/src/debugger/devtools_client/send.js +3 -2
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/collector.js +1 -2
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/index.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/processor.js +11 -14
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/redaction.js +4 -4
- package/packages/dd-trace/src/debugger/devtools_client/source-maps.js +2 -10
- package/packages/dd-trace/src/debugger/devtools_client/state.js +10 -3
- package/packages/dd-trace/src/debugger/index.js +1 -0
- package/packages/dd-trace/src/dogstatsd.js +7 -6
- package/packages/dd-trace/src/encode/0.4.js +14 -11
- package/packages/dd-trace/src/encode/0.5.js +4 -6
- package/packages/dd-trace/src/encode/agentless-ci-visibility.js +8 -8
- package/packages/dd-trace/src/encode/coverage-ci-visibility.js +1 -1
- package/packages/dd-trace/src/encode/tags-processors.js +1 -1
- package/packages/dd-trace/src/exporter.js +7 -6
- package/packages/dd-trace/src/exporters/agent/writer.js +1 -5
- package/packages/dd-trace/src/exporters/common/docker.js +4 -3
- package/packages/dd-trace/src/exporters/common/form-data.js +6 -4
- package/packages/dd-trace/src/exporters/common/request.js +5 -2
- package/packages/dd-trace/src/exporters/common/util.js +4 -2
- package/packages/dd-trace/src/external-logger/src/index.js +5 -5
- package/packages/dd-trace/src/flare/file.js +1 -5
- package/packages/dd-trace/src/format.js +1 -1
- package/packages/dd-trace/src/git_properties.js +1 -1
- package/packages/dd-trace/src/id.js +15 -9
- package/packages/dd-trace/src/iitm.js +10 -22
- package/packages/dd-trace/src/index.js +4 -3
- package/packages/dd-trace/src/lambda/handler.js +7 -6
- package/packages/dd-trace/src/lambda/index.js +2 -1
- package/packages/dd-trace/src/lambda/runtime/patch.js +7 -6
- package/packages/dd-trace/src/lambda/runtime/ritm.js +4 -3
- package/packages/dd-trace/src/llmobs/constants/tags.js +1 -0
- package/packages/dd-trace/src/llmobs/index.js +21 -5
- package/packages/dd-trace/src/llmobs/noop.js +18 -20
- package/packages/dd-trace/src/llmobs/plugins/bedrockruntime.js +6 -6
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chain.js +2 -6
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chat_model.js +3 -3
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/index.js +11 -13
- package/packages/dd-trace/src/llmobs/plugins/langchain/index.js +6 -6
- package/packages/dd-trace/src/llmobs/plugins/openai.js +2 -3
- package/packages/dd-trace/src/llmobs/sdk.js +4 -3
- package/packages/dd-trace/src/llmobs/span_processor.js +1 -1
- package/packages/dd-trace/src/llmobs/tagger.js +129 -102
- package/packages/dd-trace/src/llmobs/util.js +9 -9
- package/packages/dd-trace/src/llmobs/writers/base.js +1 -1
- package/packages/dd-trace/src/llmobs/writers/util.js +1 -1
- package/packages/dd-trace/src/log/index.js +9 -8
- package/packages/dd-trace/src/log/log.js +1 -1
- package/packages/dd-trace/src/log/writer.js +3 -4
- package/packages/dd-trace/src/msgpack/chunk.js +3 -3
- package/packages/dd-trace/src/msgpack/encoder.js +31 -31
- package/packages/dd-trace/src/noop/dogstatsd.js +6 -6
- package/packages/dd-trace/src/noop/span.js +4 -6
- package/packages/dd-trace/src/noop/tracer.js +1 -2
- package/packages/dd-trace/src/opentelemetry/span_processor.js +2 -2
- package/packages/dd-trace/src/opentelemetry/tracer.js +7 -6
- package/packages/dd-trace/src/opentracing/propagation/log.js +10 -13
- package/packages/dd-trace/src/opentracing/propagation/text_map.js +40 -37
- package/packages/dd-trace/src/opentracing/propagation/tracestate.js +8 -4
- package/packages/dd-trace/src/opentracing/span.js +16 -20
- package/packages/dd-trace/src/opentracing/tracer.js +9 -6
- package/packages/dd-trace/src/payload-tagging/config/index.js +17 -21
- package/packages/dd-trace/src/payload-tagging/index.js +1 -1
- package/packages/dd-trace/src/payload-tagging/tagging.js +6 -6
- package/packages/dd-trace/src/pkg.js +1 -1
- package/packages/dd-trace/src/plugin_manager.js +4 -3
- package/packages/dd-trace/src/plugins/ci_plugin.js +87 -11
- package/packages/dd-trace/src/plugins/consumer.js +2 -2
- package/packages/dd-trace/src/plugins/inbound.js +5 -1
- package/packages/dd-trace/src/plugins/index.js +0 -1
- package/packages/dd-trace/src/plugins/outbound.js +4 -5
- package/packages/dd-trace/src/plugins/plugin.js +1 -1
- package/packages/dd-trace/src/plugins/producer.js +2 -2
- package/packages/dd-trace/src/plugins/storage.js +2 -2
- package/packages/dd-trace/src/plugins/util/ci.js +28 -20
- package/packages/dd-trace/src/plugins/util/git.js +166 -12
- package/packages/dd-trace/src/plugins/util/inferred_proxy.js +1 -1
- package/packages/dd-trace/src/plugins/util/ip_extractor.js +1 -1
- package/packages/dd-trace/src/plugins/util/llm.js +27 -10
- package/packages/dd-trace/src/plugins/util/stacktrace.js +9 -2
- package/packages/dd-trace/src/plugins/util/test.js +315 -51
- package/packages/dd-trace/src/plugins/util/url.js +1 -1
- package/packages/dd-trace/src/plugins/util/urlfilter.js +13 -17
- package/packages/dd-trace/src/plugins/util/user-provided-git.js +14 -4
- package/packages/dd-trace/src/plugins/util/web.js +8 -8
- package/packages/dd-trace/src/priority_sampler.js +64 -53
- package/packages/dd-trace/src/profiling/config.js +51 -35
- package/packages/dd-trace/src/profiling/exporter_cli.js +20 -20
- package/packages/dd-trace/src/profiling/exporters/agent.js +1 -1
- package/packages/dd-trace/src/profiling/exporters/event_serializer.js +7 -6
- package/packages/dd-trace/src/profiling/exporters/file.js +2 -1
- package/packages/dd-trace/src/profiling/index.js +2 -1
- package/packages/dd-trace/src/profiling/profiler.js +44 -6
- package/packages/dd-trace/src/profiling/profilers/events.js +14 -17
- package/packages/dd-trace/src/profiling/profilers/shared.js +6 -1
- package/packages/dd-trace/src/profiling/profilers/space.js +3 -3
- package/packages/dd-trace/src/profiling/profilers/wall.js +6 -7
- package/packages/dd-trace/src/profiling/ssi-heuristics.js +3 -5
- package/packages/dd-trace/src/profiling/ssi-telemetry-mock-profiler.js +3 -1
- package/packages/dd-trace/src/profiling/tagger.js +21 -13
- package/packages/dd-trace/src/profiling/webspan-utils.js +1 -1
- package/packages/dd-trace/src/proxy.js +9 -10
- package/packages/dd-trace/src/random_sampler.js +40 -0
- package/packages/dd-trace/src/rate_limiter.js +4 -4
- package/packages/dd-trace/src/remote_config/index.js +3 -7
- package/packages/dd-trace/src/remote_config/manager.js +25 -13
- package/packages/dd-trace/src/require-package-json.js +1 -1
- package/packages/dd-trace/src/ritm.js +8 -8
- package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +5 -4
- package/packages/dd-trace/src/sampler.js +41 -4
- package/packages/dd-trace/src/sampling_rule.js +12 -3
- package/packages/dd-trace/src/scope.js +1 -1
- package/packages/dd-trace/src/serverless.js +11 -4
- package/packages/dd-trace/src/service-naming/schemas/util.js +1 -1
- package/packages/dd-trace/src/service-naming/schemas/v0/web.js +2 -3
- package/packages/dd-trace/src/span_processor.js +5 -4
- package/packages/dd-trace/src/span_sampler.js +4 -1
- package/packages/dd-trace/src/standalone/tracesource.js +2 -3
- package/packages/dd-trace/src/standalone/tracesource_priority_sampler.js +1 -2
- package/packages/dd-trace/src/startup-log.js +6 -18
- package/packages/dd-trace/src/supported-configurations.json +439 -0
- package/packages/dd-trace/src/telemetry/dependencies.js +64 -59
- package/packages/dd-trace/src/telemetry/logs/log-collector.js +9 -10
- package/packages/dd-trace/src/telemetry/metrics.js +10 -5
- package/packages/dd-trace/src/telemetry/send-data.js +8 -7
- package/packages/dd-trace/src/telemetry/telemetry.js +31 -45
- package/packages/dd-trace/src/tracer.js +3 -7
- package/packages/dd-trace/src/util.js +1 -6
- package/version.js +1 -0
- package/packages/datadog-instrumentations/src/paperplane.js +0 -77
- package/packages/datadog-plugin-paperplane/src/index.js +0 -25
- package/packages/datadog-plugin-paperplane/src/logger.js +0 -11
- package/packages/datadog-plugin-paperplane/src/server.js +0 -24
- package/packages/dd-trace/src/appsec/iast/analyzers/header-injection-analyzer.js +0 -122
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/header-sensitive-analyzer.js +0 -20
|
@@ -49,14 +49,14 @@ class MsgpackEncoder {
|
|
|
49
49
|
const offset = bytes.length
|
|
50
50
|
|
|
51
51
|
bytes.reserve(1)
|
|
52
|
-
bytes.buffer[offset] =
|
|
52
|
+
bytes.buffer[offset] = 0xC0
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
encodeBoolean (bytes, value) {
|
|
56
56
|
const offset = bytes.length
|
|
57
57
|
|
|
58
58
|
bytes.reserve(1)
|
|
59
|
-
bytes.buffer[offset] = value ?
|
|
59
|
+
bytes.buffer[offset] = value ? 0xC3 : 0xC2
|
|
60
60
|
}
|
|
61
61
|
|
|
62
62
|
encodeString (bytes, value) {
|
|
@@ -75,7 +75,7 @@ class MsgpackEncoder {
|
|
|
75
75
|
const offset = bytes.length
|
|
76
76
|
|
|
77
77
|
bytes.reserve(5)
|
|
78
|
-
bytes.buffer[offset] =
|
|
78
|
+
bytes.buffer[offset] = 0xDD
|
|
79
79
|
bytes.buffer[offset + 1] = length >> 24
|
|
80
80
|
bytes.buffer[offset + 2] = length >> 16
|
|
81
81
|
bytes.buffer[offset + 3] = length >> 8
|
|
@@ -105,7 +105,7 @@ class MsgpackEncoder {
|
|
|
105
105
|
const offset = bytes.length
|
|
106
106
|
|
|
107
107
|
bytes.reserve(5)
|
|
108
|
-
bytes.buffer[offset] =
|
|
108
|
+
bytes.buffer[offset] = 0xDF
|
|
109
109
|
bytes.buffer[offset + 1] = keysLength >> 24
|
|
110
110
|
bytes.buffer[offset + 2] = keysLength >> 16
|
|
111
111
|
bytes.buffer[offset + 3] = keysLength >> 8
|
|
@@ -122,16 +122,16 @@ class MsgpackEncoder {
|
|
|
122
122
|
|
|
123
123
|
if (value.byteLength < 256) {
|
|
124
124
|
bytes.reserve(2)
|
|
125
|
-
bytes.buffer[offset] =
|
|
125
|
+
bytes.buffer[offset] = 0xC4
|
|
126
126
|
bytes.buffer[offset + 1] = value.byteLength
|
|
127
|
-
} else if (value.byteLength <
|
|
127
|
+
} else if (value.byteLength < 65_536) {
|
|
128
128
|
bytes.reserve(3)
|
|
129
|
-
bytes.buffer[offset] =
|
|
129
|
+
bytes.buffer[offset] = 0xC5
|
|
130
130
|
bytes.buffer[offset + 1] = value.byteLength >> 8
|
|
131
131
|
bytes.buffer[offset + 2] = value.byteLength
|
|
132
132
|
} else {
|
|
133
133
|
bytes.reserve(5)
|
|
134
|
-
bytes.buffer[offset] =
|
|
134
|
+
bytes.buffer[offset] = 0xC6
|
|
135
135
|
bytes.buffer[offset + 1] = value.byteLength >> 24
|
|
136
136
|
bytes.buffer[offset + 2] = value.byteLength >> 16
|
|
137
137
|
bytes.buffer[offset + 3] = value.byteLength >> 8
|
|
@@ -145,7 +145,7 @@ class MsgpackEncoder {
|
|
|
145
145
|
const offset = bytes.length
|
|
146
146
|
|
|
147
147
|
bytes.reserve(5)
|
|
148
|
-
bytes.buffer[offset] =
|
|
148
|
+
bytes.buffer[offset] = 0xCE
|
|
149
149
|
bytes.buffer[offset + 1] = value >> 24
|
|
150
150
|
bytes.buffer[offset + 2] = value >> 16
|
|
151
151
|
bytes.buffer[offset + 3] = value >> 8
|
|
@@ -156,18 +156,18 @@ class MsgpackEncoder {
|
|
|
156
156
|
const offset = bytes.length
|
|
157
157
|
|
|
158
158
|
bytes.reserve(3)
|
|
159
|
-
bytes.buffer[offset] =
|
|
159
|
+
bytes.buffer[offset] = 0xCD
|
|
160
160
|
bytes.buffer[offset + 1] = value >> 8
|
|
161
161
|
bytes.buffer[offset + 2] = value
|
|
162
162
|
}
|
|
163
163
|
|
|
164
164
|
encodeLong (bytes, value) {
|
|
165
165
|
const offset = bytes.length
|
|
166
|
-
const hi = (value /
|
|
166
|
+
const hi = (value / 2 ** 32) >> 0
|
|
167
167
|
const lo = value >>> 0
|
|
168
168
|
|
|
169
169
|
bytes.reserve(9)
|
|
170
|
-
bytes.buffer[offset] =
|
|
170
|
+
bytes.buffer[offset] = 0xCF
|
|
171
171
|
bytes.buffer[offset + 1] = hi >> 24
|
|
172
172
|
bytes.buffer[offset + 2] = hi >> 16
|
|
173
173
|
bytes.buffer[offset + 3] = hi >> 8
|
|
@@ -201,26 +201,26 @@ class MsgpackEncoder {
|
|
|
201
201
|
bytes.buffer[offset] = value
|
|
202
202
|
} else if (value >= -0x80) {
|
|
203
203
|
bytes.reserve(2)
|
|
204
|
-
bytes.buffer[offset] =
|
|
204
|
+
bytes.buffer[offset] = 0xD0
|
|
205
205
|
bytes.buffer[offset + 1] = value
|
|
206
|
-
} else if (value >= -
|
|
206
|
+
} else if (value >= -0x80_00) {
|
|
207
207
|
bytes.reserve(3)
|
|
208
|
-
bytes.buffer[offset] =
|
|
208
|
+
bytes.buffer[offset] = 0xD1
|
|
209
209
|
bytes.buffer[offset + 1] = value >> 8
|
|
210
210
|
bytes.buffer[offset + 2] = value
|
|
211
|
-
} else if (value >= -
|
|
211
|
+
} else if (value >= -0x80_00_00_00) {
|
|
212
212
|
bytes.reserve(5)
|
|
213
|
-
bytes.buffer[offset] =
|
|
213
|
+
bytes.buffer[offset] = 0xD2
|
|
214
214
|
bytes.buffer[offset + 1] = value >> 24
|
|
215
215
|
bytes.buffer[offset + 2] = value >> 16
|
|
216
216
|
bytes.buffer[offset + 3] = value >> 8
|
|
217
217
|
bytes.buffer[offset + 4] = value
|
|
218
218
|
} else {
|
|
219
|
-
const hi = Math.floor(value /
|
|
219
|
+
const hi = Math.floor(value / 2 ** 32)
|
|
220
220
|
const lo = value >>> 0
|
|
221
221
|
|
|
222
222
|
bytes.reserve(9)
|
|
223
|
-
bytes.buffer[offset] =
|
|
223
|
+
bytes.buffer[offset] = 0xD3
|
|
224
224
|
bytes.buffer[offset + 1] = hi >> 24
|
|
225
225
|
bytes.buffer[offset + 2] = hi >> 16
|
|
226
226
|
bytes.buffer[offset + 3] = hi >> 8
|
|
@@ -235,31 +235,31 @@ class MsgpackEncoder {
|
|
|
235
235
|
encodeUnsigned (bytes, value) {
|
|
236
236
|
const offset = bytes.length
|
|
237
237
|
|
|
238
|
-
if (value <=
|
|
238
|
+
if (value <= 0x7F) {
|
|
239
239
|
bytes.reserve(1)
|
|
240
240
|
bytes.buffer[offset] = value
|
|
241
|
-
} else if (value <=
|
|
241
|
+
} else if (value <= 0xFF) {
|
|
242
242
|
bytes.reserve(2)
|
|
243
|
-
bytes.buffer[offset] =
|
|
243
|
+
bytes.buffer[offset] = 0xCC
|
|
244
244
|
bytes.buffer[offset + 1] = value
|
|
245
|
-
} else if (value <=
|
|
245
|
+
} else if (value <= 0xFF_FF) {
|
|
246
246
|
bytes.reserve(3)
|
|
247
|
-
bytes.buffer[offset] =
|
|
247
|
+
bytes.buffer[offset] = 0xCD
|
|
248
248
|
bytes.buffer[offset + 1] = value >> 8
|
|
249
249
|
bytes.buffer[offset + 2] = value
|
|
250
|
-
} else if (value <=
|
|
250
|
+
} else if (value <= 0xFF_FF_FF_FF) {
|
|
251
251
|
bytes.reserve(5)
|
|
252
|
-
bytes.buffer[offset] =
|
|
252
|
+
bytes.buffer[offset] = 0xCE
|
|
253
253
|
bytes.buffer[offset + 1] = value >> 24
|
|
254
254
|
bytes.buffer[offset + 2] = value >> 16
|
|
255
255
|
bytes.buffer[offset + 3] = value >> 8
|
|
256
256
|
bytes.buffer[offset + 4] = value
|
|
257
257
|
} else {
|
|
258
|
-
const hi = (value /
|
|
258
|
+
const hi = (value / 2 ** 32) >> 0
|
|
259
259
|
const lo = value >>> 0
|
|
260
260
|
|
|
261
261
|
bytes.reserve(9)
|
|
262
|
-
bytes.buffer[offset] =
|
|
262
|
+
bytes.buffer[offset] = 0xCF
|
|
263
263
|
bytes.buffer[offset + 1] = hi >> 24
|
|
264
264
|
bytes.buffer[offset + 2] = hi >> 16
|
|
265
265
|
bytes.buffer[offset + 3] = hi >> 8
|
|
@@ -278,10 +278,10 @@ class MsgpackEncoder {
|
|
|
278
278
|
bytes.reserve(9)
|
|
279
279
|
|
|
280
280
|
if (value >= 0n) {
|
|
281
|
-
bytes.buffer[offset] =
|
|
281
|
+
bytes.buffer[offset] = 0xCF
|
|
282
282
|
bytes.view.setBigUint64(offset + 1, value)
|
|
283
283
|
} else {
|
|
284
|
-
bytes.buffer[offset] =
|
|
284
|
+
bytes.buffer[offset] = 0xD3
|
|
285
285
|
bytes.view.setBigInt64(offset + 1, value)
|
|
286
286
|
}
|
|
287
287
|
}
|
|
@@ -301,7 +301,7 @@ class MsgpackEncoder {
|
|
|
301
301
|
const offset = bytes.length
|
|
302
302
|
|
|
303
303
|
bytes.reserve(9)
|
|
304
|
-
bytes.buffer[offset] =
|
|
304
|
+
bytes.buffer[offset] = 0xCB
|
|
305
305
|
bytes.view.setFloat64(offset + 1, value)
|
|
306
306
|
}
|
|
307
307
|
}
|
|
@@ -3,15 +3,15 @@
|
|
|
3
3
|
* @implements {DogStatsD}
|
|
4
4
|
*/
|
|
5
5
|
module.exports = class NoopDogStatsDClient {
|
|
6
|
-
increment () {
|
|
6
|
+
increment () {}
|
|
7
7
|
|
|
8
|
-
decrement () {
|
|
8
|
+
decrement () {}
|
|
9
9
|
|
|
10
|
-
gauge () {
|
|
10
|
+
gauge () {}
|
|
11
11
|
|
|
12
|
-
distribution () {
|
|
12
|
+
distribution () {}
|
|
13
13
|
|
|
14
|
-
histogram () {
|
|
14
|
+
histogram () {}
|
|
15
15
|
|
|
16
|
-
flush () {
|
|
16
|
+
flush () {}
|
|
17
17
|
}
|
|
@@ -30,21 +30,19 @@ class NoopSpan {
|
|
|
30
30
|
_createContext (parent) {
|
|
31
31
|
const spanId = id()
|
|
32
32
|
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
return parent
|
|
34
|
+
? new NoopSpanContext({
|
|
35
35
|
noop: this,
|
|
36
36
|
traceId: parent._traceId,
|
|
37
37
|
spanId,
|
|
38
38
|
parentId: parent._spanId,
|
|
39
|
-
baggageItems:
|
|
39
|
+
baggageItems: { ...parent._baggageItems }
|
|
40
40
|
})
|
|
41
|
-
|
|
42
|
-
return new NoopSpanContext({
|
|
41
|
+
: new NoopSpanContext({
|
|
43
42
|
noop: this,
|
|
44
43
|
traceId: spanId,
|
|
45
44
|
spanId
|
|
46
45
|
})
|
|
47
|
-
}
|
|
48
46
|
}
|
|
49
47
|
}
|
|
50
48
|
|
|
@@ -32,7 +32,7 @@ class Tracer {
|
|
|
32
32
|
spanId: id(),
|
|
33
33
|
parentId: parentSpanContext._spanId,
|
|
34
34
|
sampling: parentSpanContext._sampling,
|
|
35
|
-
baggageItems:
|
|
35
|
+
baggageItems: { ...parentSpanContext._baggageItems },
|
|
36
36
|
trace: parentSpanContext._trace,
|
|
37
37
|
tracestate: parentSpanContext._tracestate
|
|
38
38
|
})
|
|
@@ -71,7 +71,11 @@ class Tracer {
|
|
|
71
71
|
|
|
72
72
|
// Update meta and samplingPriority based on extracted values
|
|
73
73
|
Object.assign(meta, otherPropagatedTags)
|
|
74
|
-
samplingPriority = TextMapPropagator._getSamplingPriority(
|
|
74
|
+
samplingPriority = TextMapPropagator._getSamplingPriority(
|
|
75
|
+
traceFlag,
|
|
76
|
+
Number.parseInt(samplingPriorityTs, 10),
|
|
77
|
+
origin
|
|
78
|
+
)
|
|
75
79
|
} else {
|
|
76
80
|
log.debug(`no dd list member in tracestate from incoming request: ${ts}`)
|
|
77
81
|
}
|
|
@@ -144,10 +148,7 @@ class Tracer {
|
|
|
144
148
|
|
|
145
149
|
// Set initial span attributes. The attributes object may have been mutated
|
|
146
150
|
// by the sampler, so we sanitize the merged attributes before setting them.
|
|
147
|
-
sanitizeAttributes(
|
|
148
|
-
// Object.assign(attributes, samplingResult.attributes)
|
|
149
|
-
attributes
|
|
150
|
-
)
|
|
151
|
+
sanitizeAttributes(attributes)
|
|
151
152
|
)
|
|
152
153
|
}
|
|
153
154
|
|
|
@@ -14,12 +14,10 @@ class LogPropagator {
|
|
|
14
14
|
carrier.dd = {}
|
|
15
15
|
|
|
16
16
|
if (spanContext) {
|
|
17
|
-
|
|
18
|
-
this._config.traceId128BitLoggingEnabled && spanContext._trace.tags['_dd.p.tid']
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
carrier.dd.trace_id = spanContext.toTraceId()
|
|
22
|
-
}
|
|
17
|
+
carrier.dd.trace_id = this._config.traceId128BitGenerationEnabled &&
|
|
18
|
+
this._config.traceId128BitLoggingEnabled && spanContext._trace.tags['_dd.p.tid']
|
|
19
|
+
? spanContext.toTraceId(true)
|
|
20
|
+
: spanContext.toTraceId()
|
|
23
21
|
|
|
24
22
|
carrier.dd.span_id = spanContext.toSpanId()
|
|
25
23
|
}
|
|
@@ -35,8 +33,8 @@ class LogPropagator {
|
|
|
35
33
|
}
|
|
36
34
|
|
|
37
35
|
if (carrier.dd.trace_id.length === 32) {
|
|
38
|
-
const hi = carrier.dd.trace_id.
|
|
39
|
-
const lo = carrier.dd.trace_id.
|
|
36
|
+
const hi = carrier.dd.trace_id.slice(0, 16)
|
|
37
|
+
const lo = carrier.dd.trace_id.slice(16, 32)
|
|
40
38
|
const spanContext = new DatadogSpanContext({
|
|
41
39
|
traceId: id(lo, 16),
|
|
42
40
|
spanId: id(carrier.dd.span_id, 10)
|
|
@@ -45,12 +43,11 @@ class LogPropagator {
|
|
|
45
43
|
spanContext._trace.tags['_dd.p.tid'] = hi
|
|
46
44
|
|
|
47
45
|
return spanContext
|
|
48
|
-
} else {
|
|
49
|
-
return new DatadogSpanContext({
|
|
50
|
-
traceId: id(carrier.dd.trace_id, 10),
|
|
51
|
-
spanId: id(carrier.dd.span_id, 10)
|
|
52
|
-
})
|
|
53
46
|
}
|
|
47
|
+
return new DatadogSpanContext({
|
|
48
|
+
traceId: id(carrier.dd.trace_id, 10),
|
|
49
|
+
spanId: id(carrier.dd.span_id, 10)
|
|
50
|
+
})
|
|
54
51
|
}
|
|
55
52
|
}
|
|
56
53
|
|
|
@@ -31,21 +31,21 @@ const b3HeaderKey = 'b3'
|
|
|
31
31
|
const sqsdHeaderHey = 'x-aws-sqsd-attr-_datadog'
|
|
32
32
|
const b3HeaderExpr = /^(([0-9a-f]{16}){1,2}-[0-9a-f]{16}(-[01d](-[0-9a-f]{16})?)?|[01d])$/i
|
|
33
33
|
const baggageExpr = new RegExp(`^${baggagePrefix}(.+)$`)
|
|
34
|
-
const tagKeyExpr = /^_dd\.p\.[\x21-\
|
|
35
|
-
const tagValueExpr = /^[\x20-\
|
|
34
|
+
const tagKeyExpr = /^_dd\.p\.[\x21-\x2B\x2D-\x7E]+$/ // ASCII minus spaces and commas
|
|
35
|
+
const tagValueExpr = /^[\x20-\x2B\x2D-\x7E]*$/ // ASCII minus commas
|
|
36
36
|
const traceparentExpr = /^([a-f0-9]{2})-([a-f0-9]{32})-([a-f0-9]{16})-([a-f0-9]{2})(-.*)?$/i
|
|
37
37
|
const traceparentKey = 'traceparent'
|
|
38
38
|
const tracestateKey = 'tracestate'
|
|
39
39
|
const ddKeys = [traceKey, spanKey, samplingKey, originKey]
|
|
40
40
|
const b3Keys = [b3TraceKey, b3SpanKey, b3ParentKey, b3SampledKey, b3FlagsKey, b3HeaderKey]
|
|
41
41
|
const w3cKeys = [traceparentKey, tracestateKey]
|
|
42
|
-
const logKeys = ddKeys
|
|
42
|
+
const logKeys = [...ddKeys, ...b3Keys, ...w3cKeys]
|
|
43
43
|
// Origin value in tracestate replaces '~', ',' and ';' with '_"
|
|
44
|
-
const tracestateOriginFilter = /[^\x20-\
|
|
44
|
+
const tracestateOriginFilter = /[^\x20-\x2B\x2D-\x3A\x3C-\x7D]/g
|
|
45
45
|
// Tag keys in tracestate replace ' ', ',' and '=' with '_'
|
|
46
|
-
const tracestateTagKeyFilter = /[^\x21-\
|
|
46
|
+
const tracestateTagKeyFilter = /[^\x21-\x2B\x2D-\x3C\x3E-\x7E]/g
|
|
47
47
|
// Tag values in tracestate replace ',', '~' and ';' with '_'
|
|
48
|
-
const tracestateTagValueFilter = /[^\x20-\
|
|
48
|
+
const tracestateTagValueFilter = /[^\x20-\x2B\x2D-\x3A\x3C-\x7D]/g
|
|
49
49
|
const invalidSegment = /^0+$/
|
|
50
50
|
const zeroTraceId = '0000000000000000'
|
|
51
51
|
const hex16 = /^[0-9A-Fa-f]{16}$/
|
|
@@ -146,7 +146,7 @@ class TextMapPropagator {
|
|
|
146
146
|
baggage += item
|
|
147
147
|
}
|
|
148
148
|
|
|
149
|
-
baggage = baggage.slice(0,
|
|
149
|
+
baggage = baggage.slice(0, -1)
|
|
150
150
|
if (baggage) carrier.baggage = baggage
|
|
151
151
|
}
|
|
152
152
|
}
|
|
@@ -239,8 +239,8 @@ class TextMapPropagator {
|
|
|
239
239
|
|
|
240
240
|
if (typeof origin === 'string') {
|
|
241
241
|
const originValue = origin
|
|
242
|
-
.
|
|
243
|
-
.
|
|
242
|
+
.replaceAll(tracestateOriginFilter, '_')
|
|
243
|
+
.replaceAll(/[\x3D]/g, '~')
|
|
244
244
|
|
|
245
245
|
state.set('o', originValue)
|
|
246
246
|
}
|
|
@@ -249,12 +249,12 @@ class TextMapPropagator {
|
|
|
249
249
|
if (!tags[key] || !key.startsWith('_dd.p.')) continue
|
|
250
250
|
|
|
251
251
|
const tagKey = 't.' + key.slice(6)
|
|
252
|
-
.
|
|
252
|
+
.replaceAll(tracestateTagKeyFilter, '_')
|
|
253
253
|
|
|
254
254
|
const tagValue = tags[key]
|
|
255
255
|
.toString()
|
|
256
|
-
.
|
|
257
|
-
.
|
|
256
|
+
.replaceAll(tracestateTagValueFilter, '_')
|
|
257
|
+
.replaceAll(/[\x3D]/g, '~')
|
|
258
258
|
|
|
259
259
|
state.set(tagKey, tagValue)
|
|
260
260
|
}
|
|
@@ -316,12 +316,10 @@ class TextMapPropagator {
|
|
|
316
316
|
extractedContext = this._extractB3SingleContext(carrier)
|
|
317
317
|
break
|
|
318
318
|
case 'b3':
|
|
319
|
-
|
|
319
|
+
extractedContext = this._config.tracePropagationStyle.otelPropagators
|
|
320
320
|
// TODO: should match "b3 single header" in next major
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
extractedContext = this._extractB3MultiContext(carrier)
|
|
324
|
-
}
|
|
321
|
+
? this._extractB3SingleContext(carrier)
|
|
322
|
+
: this._extractB3MultiContext(carrier)
|
|
325
323
|
break
|
|
326
324
|
case 'b3multi':
|
|
327
325
|
extractedContext = this._extractB3MultiContext(carrier)
|
|
@@ -442,7 +440,7 @@ class TextMapPropagator {
|
|
|
442
440
|
let parsed
|
|
443
441
|
try {
|
|
444
442
|
parsed = JSON.parse(headerValue)
|
|
445
|
-
} catch
|
|
443
|
+
} catch {
|
|
446
444
|
return null
|
|
447
445
|
}
|
|
448
446
|
return this._extractDatadogContext(parsed)
|
|
@@ -471,7 +469,7 @@ class TextMapPropagator {
|
|
|
471
469
|
traceId: id(traceId, 16),
|
|
472
470
|
spanId: id(spanId, 16),
|
|
473
471
|
isRemote: true,
|
|
474
|
-
sampling: { priority: parseInt(flags, 10) & 1 ? 1 : 0 },
|
|
472
|
+
sampling: { priority: Number.parseInt(flags, 10) & 1 ? 1 : 0 },
|
|
475
473
|
traceparent,
|
|
476
474
|
tracestate
|
|
477
475
|
})
|
|
@@ -486,7 +484,7 @@ class TextMapPropagator {
|
|
|
486
484
|
break
|
|
487
485
|
}
|
|
488
486
|
case 's': {
|
|
489
|
-
const priority = parseInt(value, 10)
|
|
487
|
+
const priority = Number.parseInt(value, 10)
|
|
490
488
|
if (!Number.isInteger(priority)) continue
|
|
491
489
|
if (
|
|
492
490
|
(spanContext._sampling.priority === 1 && priority > 0) ||
|
|
@@ -500,7 +498,7 @@ class TextMapPropagator {
|
|
|
500
498
|
spanContext._trace.origin = value
|
|
501
499
|
break
|
|
502
500
|
case 't.dm': {
|
|
503
|
-
const mechanism = Math.abs(parseInt(value, 10))
|
|
501
|
+
const mechanism = Math.abs(Number.parseInt(value, 10))
|
|
504
502
|
if (Number.isInteger(mechanism)) {
|
|
505
503
|
spanContext._sampling.mechanism = mechanism
|
|
506
504
|
spanContext._trace.tags['_dd.p.dm'] = `-${mechanism}`
|
|
@@ -510,7 +508,7 @@ class TextMapPropagator {
|
|
|
510
508
|
default: {
|
|
511
509
|
if (!key.startsWith('t.')) continue
|
|
512
510
|
const subKey = key.slice(2) // e.g. t.tid -> tid
|
|
513
|
-
const transformedValue = value.
|
|
511
|
+
const transformedValue = value.replaceAll(/[\x7E]/gm, '=')
|
|
514
512
|
|
|
515
513
|
// If subkey is tid then do nothing because trace header tid should always be preserved
|
|
516
514
|
if (subKey === 'tid') {
|
|
@@ -583,22 +581,21 @@ class TextMapPropagator {
|
|
|
583
581
|
return {
|
|
584
582
|
[b3SampledKey]: parts[0]
|
|
585
583
|
}
|
|
586
|
-
}
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
584
|
+
}
|
|
585
|
+
const b3 = {
|
|
586
|
+
[b3TraceKey]: parts[0],
|
|
587
|
+
[b3SpanKey]: parts[1]
|
|
588
|
+
}
|
|
591
589
|
|
|
592
|
-
|
|
593
|
-
|
|
590
|
+
if (parts[2]) {
|
|
591
|
+
b3[b3SampledKey] = parts[2] === '0' ? '0' : '1'
|
|
594
592
|
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
}
|
|
593
|
+
if (parts[2] === 'd') {
|
|
594
|
+
b3[b3FlagsKey] = '1'
|
|
598
595
|
}
|
|
599
|
-
|
|
600
|
-
return b3
|
|
601
596
|
}
|
|
597
|
+
|
|
598
|
+
return b3
|
|
602
599
|
}
|
|
603
600
|
|
|
604
601
|
_extractOrigin (carrier, spanContext) {
|
|
@@ -633,6 +630,9 @@ class TextMapPropagator {
|
|
|
633
630
|
if (!carrier || !carrier.baggage) return
|
|
634
631
|
if (!spanContext) removeAllBaggageItems()
|
|
635
632
|
const baggages = carrier.baggage.split(',')
|
|
633
|
+
const keysToSpanTag = this._config.baggageTagKeys === '*'
|
|
634
|
+
? undefined
|
|
635
|
+
: new Set(this._config.baggageTagKeys.split(','))
|
|
636
636
|
for (const keyValue of baggages) {
|
|
637
637
|
if (!keyValue.includes('=')) {
|
|
638
638
|
if (spanContext) spanContext._baggageItems = {}
|
|
@@ -647,8 +647,11 @@ class TextMapPropagator {
|
|
|
647
647
|
}
|
|
648
648
|
// the current code assumes precedence of ot-baggage- (legacy opentracing baggage) over baggage
|
|
649
649
|
if (spanContext) {
|
|
650
|
-
if (
|
|
650
|
+
if (Object.hasOwn(spanContext._baggageItems, key)) continue
|
|
651
651
|
spanContext._baggageItems[key] = value
|
|
652
|
+
if (this._config.baggageTagKeys === '*' || keysToSpanTag.has(key)) {
|
|
653
|
+
spanContext._trace.tags['baggage.' + key] = value
|
|
654
|
+
}
|
|
652
655
|
} else {
|
|
653
656
|
setBaggageItem(key, value)
|
|
654
657
|
}
|
|
@@ -656,7 +659,7 @@ class TextMapPropagator {
|
|
|
656
659
|
}
|
|
657
660
|
|
|
658
661
|
_extractSamplingPriority (carrier, spanContext) {
|
|
659
|
-
const priority = parseInt(carrier[samplingKey], 10)
|
|
662
|
+
const priority = Number.parseInt(carrier[samplingKey], 10)
|
|
660
663
|
|
|
661
664
|
if (Number.isInteger(priority)) {
|
|
662
665
|
spanContext._sampling.priority = priority
|
|
@@ -703,7 +706,7 @@ class TextMapPropagator {
|
|
|
703
706
|
|
|
704
707
|
if (buffer.length !== 16) return
|
|
705
708
|
|
|
706
|
-
const tid = traceId.
|
|
709
|
+
const tid = traceId.slice(0, 16)
|
|
707
710
|
|
|
708
711
|
if (tid === zeroTraceId) return
|
|
709
712
|
|
|
@@ -17,10 +17,14 @@ function fromString (Type, regex, value) {
|
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
function toString (map, pairSeparator, fieldSeparator) {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
let result = ''
|
|
21
|
+
for (const [key, value] of map) {
|
|
22
|
+
if (result) {
|
|
23
|
+
result = `${fieldSeparator}${result}`
|
|
24
|
+
}
|
|
25
|
+
result = `${key}${pairSeparator}${value}${result}`
|
|
26
|
+
}
|
|
27
|
+
return result
|
|
24
28
|
}
|
|
25
29
|
|
|
26
30
|
class TraceStateData extends Map {
|
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
const { performance } = require('perf_hooks')
|
|
5
5
|
const now = performance.now.bind(performance)
|
|
6
6
|
const dateNow = Date.now
|
|
7
|
-
const satisfies = require('semifies')
|
|
8
7
|
const SpanContext = require('./span_context')
|
|
9
8
|
const id = require('../id')
|
|
10
9
|
const tagger = require('../tagger')
|
|
@@ -14,19 +13,18 @@ const { storage } = require('../../../datadog-core')
|
|
|
14
13
|
const telemetryMetrics = require('../telemetry/metrics')
|
|
15
14
|
const { channel } = require('dc-polyfill')
|
|
16
15
|
const util = require('util')
|
|
16
|
+
const { getEnvironmentVariable } = require('../config-helper')
|
|
17
17
|
|
|
18
18
|
const tracerMetrics = telemetryMetrics.manager.namespace('tracers')
|
|
19
19
|
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
DD_TRACE_EXPERIMENTAL_SPAN_COUNTS
|
|
23
|
-
} = process.env
|
|
20
|
+
const DD_TRACE_EXPERIMENTAL_STATE_TRACKING = getEnvironmentVariable('DD_TRACE_EXPERIMENTAL_STATE_TRACKING')
|
|
21
|
+
const DD_TRACE_EXPERIMENTAL_SPAN_COUNTS = getEnvironmentVariable('DD_TRACE_EXPERIMENTAL_SPAN_COUNTS')
|
|
24
22
|
|
|
25
23
|
const unfinishedRegistry = createRegistry('unfinished')
|
|
26
24
|
const finishedRegistry = createRegistry('finished')
|
|
27
25
|
|
|
28
|
-
const OTEL_ENABLED = !!
|
|
29
|
-
const ALLOWED = ['string', 'number', 'boolean']
|
|
26
|
+
const OTEL_ENABLED = !!getEnvironmentVariable('DD_TRACE_OTEL_ENABLED')
|
|
27
|
+
const ALLOWED = new Set(['string', 'number', 'boolean'])
|
|
30
28
|
|
|
31
29
|
const integrationCounters = {
|
|
32
30
|
spans_created: {},
|
|
@@ -57,6 +55,8 @@ class DatadogSpan {
|
|
|
57
55
|
constructor (tracer, processor, prioritySampler, fields, debug) {
|
|
58
56
|
const operationName = fields.operationName
|
|
59
57
|
const parent = fields.parent || null
|
|
58
|
+
// TODO(BridgeAR): Investigate why this is causing a performance regression
|
|
59
|
+
// eslint-disable-next-line prefer-object-spread
|
|
60
60
|
const tags = Object.assign({}, fields.tags)
|
|
61
61
|
const hostname = fields.hostname
|
|
62
62
|
|
|
@@ -129,7 +129,7 @@ class DatadogSpan {
|
|
|
129
129
|
const spanContext = this.context()
|
|
130
130
|
const resourceName = spanContext._tags['resource.name'] || ''
|
|
131
131
|
const resource = resourceName.length > 100
|
|
132
|
-
? `${resourceName.
|
|
132
|
+
? `${resourceName.slice(0, 97)}...`
|
|
133
133
|
: resourceName
|
|
134
134
|
const json = JSON.stringify({
|
|
135
135
|
traceId: spanContext._traceId,
|
|
@@ -198,7 +198,7 @@ class DatadogSpan {
|
|
|
198
198
|
|
|
199
199
|
addLink (context, attributes) {
|
|
200
200
|
this._links.push({
|
|
201
|
-
context: context._ddContext
|
|
201
|
+
context: context._ddContext ?? context,
|
|
202
202
|
attributes: this._sanitizeAttributes(attributes)
|
|
203
203
|
})
|
|
204
204
|
}
|
|
@@ -235,10 +235,8 @@ class DatadogSpan {
|
|
|
235
235
|
return
|
|
236
236
|
}
|
|
237
237
|
|
|
238
|
-
if (DD_TRACE_EXPERIMENTAL_STATE_TRACKING === 'true') {
|
|
239
|
-
|
|
240
|
-
log.error('Finishing invalid span: %s', this)
|
|
241
|
-
}
|
|
238
|
+
if (DD_TRACE_EXPERIMENTAL_STATE_TRACKING === 'true' && !this._spanContext._tags['service.name']) {
|
|
239
|
+
log.error('Finishing invalid span: %s', this)
|
|
242
240
|
}
|
|
243
241
|
|
|
244
242
|
getIntegrationCounter('spans_finished', this._integrationName).inc()
|
|
@@ -256,7 +254,7 @@ class DatadogSpan {
|
|
|
256
254
|
finishedRegistry.register(this, this._name)
|
|
257
255
|
}
|
|
258
256
|
|
|
259
|
-
finishTime = parseFloat(finishTime) || this._getTime()
|
|
257
|
+
finishTime = Number.parseFloat(finishTime) || this._getTime()
|
|
260
258
|
|
|
261
259
|
this._duration = finishTime - this._startTime
|
|
262
260
|
this._spanContext._trace.finished.push(this)
|
|
@@ -275,7 +273,7 @@ class DatadogSpan {
|
|
|
275
273
|
}
|
|
276
274
|
} else {
|
|
277
275
|
const maybeScalar = maybeArray
|
|
278
|
-
if (ALLOWED.
|
|
276
|
+
if (ALLOWED.has(typeof maybeScalar)) {
|
|
279
277
|
// Wrap the value as a string if it's not already a string
|
|
280
278
|
sanitizedAttributes[key] = typeof maybeScalar === 'string' ? maybeScalar : String(maybeScalar)
|
|
281
279
|
} else {
|
|
@@ -299,14 +297,14 @@ class DatadogSpan {
|
|
|
299
297
|
if (Array.isArray(value)) {
|
|
300
298
|
const newArray = []
|
|
301
299
|
for (const subkey in value) {
|
|
302
|
-
if (ALLOWED.
|
|
300
|
+
if (ALLOWED.has(typeof value[subkey])) {
|
|
303
301
|
newArray.push(value[subkey])
|
|
304
302
|
} else {
|
|
305
303
|
log.warn('Dropping span event attribute. It is not of an allowed type')
|
|
306
304
|
}
|
|
307
305
|
}
|
|
308
306
|
sanitizedAttributes[key] = newArray
|
|
309
|
-
} else if (ALLOWED.
|
|
307
|
+
} else if (ALLOWED.has(typeof value)) {
|
|
310
308
|
sanitizedAttributes[key] = value
|
|
311
309
|
} else {
|
|
312
310
|
log.warn('Dropping span event attribute. It is not of an allowed type')
|
|
@@ -336,7 +334,7 @@ class DatadogSpan {
|
|
|
336
334
|
spanId: id(),
|
|
337
335
|
parentId: parent._spanId,
|
|
338
336
|
sampling: parent._sampling,
|
|
339
|
-
baggageItems:
|
|
337
|
+
baggageItems: { ...parent._baggageItems },
|
|
340
338
|
trace: parent._trace,
|
|
341
339
|
tracestate: parent._tracestate
|
|
342
340
|
})
|
|
@@ -388,8 +386,6 @@ class DatadogSpan {
|
|
|
388
386
|
}
|
|
389
387
|
|
|
390
388
|
function createRegistry (type) {
|
|
391
|
-
if (!satisfies(process.version, '>=14.6')) return
|
|
392
|
-
|
|
393
389
|
return new global.FinalizationRegistry(name => {
|
|
394
390
|
runtimeMetrics.decrement(`runtime.node.spans.${type}`)
|
|
395
391
|
runtimeMetrics.decrement(`runtime.node.spans.${type}.by.name`, [`span_name:${name}`])
|