dd-trace 5.52.0 → 5.54.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/README.md +5 -0
- package/index.d.ts +87 -22
- package/initialize.mjs +3 -4
- package/package.json +36 -34
- 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 +57 -37
- 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 +5 -4
- package/packages/datadog-instrumentations/src/child_process.js +3 -3
- package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +92 -62
- package/packages/datadog-instrumentations/src/couchbase.js +5 -4
- package/packages/datadog-instrumentations/src/cucumber.js +126 -84
- package/packages/datadog-instrumentations/src/cypress.js +2 -1
- package/packages/datadog-instrumentations/src/dns.js +1 -1
- package/packages/datadog-instrumentations/src/express.js +2 -6
- package/packages/datadog-instrumentations/src/fs.js +7 -6
- package/packages/datadog-instrumentations/src/google-cloud-pubsub.js +28 -34
- 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/helpers/extract-package-and-module-path.js +16 -10
- package/packages/datadog-instrumentations/src/helpers/hook.js +1 -1
- package/packages/datadog-instrumentations/src/helpers/hooks.js +1 -1
- package/packages/datadog-instrumentations/src/helpers/instrument.js +1 -41
- package/packages/datadog-instrumentations/src/helpers/register.js +21 -18
- package/packages/datadog-instrumentations/src/http/client.js +16 -21
- package/packages/datadog-instrumentations/src/iovalkey.js +51 -0
- package/packages/datadog-instrumentations/src/jest.js +184 -87
- package/packages/datadog-instrumentations/src/kafkajs.js +65 -44
- package/packages/datadog-instrumentations/src/knex.js +4 -4
- package/packages/datadog-instrumentations/src/ldapjs.js +3 -4
- package/packages/datadog-instrumentations/src/mariadb.js +38 -61
- package/packages/datadog-instrumentations/src/mocha/main.js +85 -59
- package/packages/datadog-instrumentations/src/mocha/utils.js +103 -82
- package/packages/datadog-instrumentations/src/mocha/worker.js +6 -0
- package/packages/datadog-instrumentations/src/mongodb-core.js +1 -1
- package/packages/datadog-instrumentations/src/mysql.js +20 -36
- package/packages/datadog-instrumentations/src/mysql2.js +55 -47
- package/packages/datadog-instrumentations/src/net.js +4 -2
- package/packages/datadog-instrumentations/src/next.js +7 -14
- package/packages/datadog-instrumentations/src/nyc.js +1 -1
- package/packages/datadog-instrumentations/src/openai.js +21 -23
- package/packages/datadog-instrumentations/src/oracledb.js +1 -1
- package/packages/datadog-instrumentations/src/pg.js +6 -13
- package/packages/datadog-instrumentations/src/playwright.js +170 -136
- package/packages/datadog-instrumentations/src/redis.js +3 -3
- package/packages/datadog-instrumentations/src/restify.js +2 -2
- package/packages/datadog-instrumentations/src/rhea.js +42 -54
- package/packages/datadog-instrumentations/src/router.js +22 -25
- package/packages/datadog-instrumentations/src/tedious.js +1 -1
- package/packages/datadog-instrumentations/src/url.js +9 -17
- package/packages/datadog-instrumentations/src/vitest.js +126 -97
- 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-aws-sdk/src/base.js +3 -2
- 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/dynamodb.js +24 -31
- package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +2 -2
- package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +6 -6
- package/packages/datadog-plugin-aws-sdk/src/services/lambda.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/services/sns.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +4 -5
- 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 +86 -20
- package/packages/datadog-plugin-cypress/src/cypress-plugin.js +97 -27
- package/packages/datadog-plugin-cypress/src/plugin.js +11 -1
- package/packages/datadog-plugin-cypress/src/support.js +24 -5
- 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 +26 -9
- package/packages/datadog-plugin-graphql/src/execute.js +2 -2
- package/packages/datadog-plugin-graphql/src/index.js +7 -6
- package/packages/datadog-plugin-graphql/src/resolve.js +2 -2
- 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 +18 -7
- package/packages/datadog-plugin-http2/src/client.js +20 -20
- package/packages/datadog-plugin-iovalkey/src/index.js +18 -0
- package/packages/datadog-plugin-jest/src/index.js +36 -28
- 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 +15 -7
- 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 +88 -48
- package/packages/datadog-plugin-mongodb-core/src/index.js +1 -1
- package/packages/datadog-plugin-mysql/src/index.js +11 -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 +6 -5
- package/packages/datadog-plugin-openai/src/services.js +6 -10
- package/packages/datadog-plugin-openai/src/tracing.js +10 -14
- package/packages/datadog-plugin-oracledb/src/index.js +1 -1
- package/packages/datadog-plugin-playwright/src/index.js +48 -22
- package/packages/datadog-plugin-redis/src/index.js +9 -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 +99 -72
- package/packages/datadog-shimmer/src/shimmer.js +163 -36
- 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/graphql.js +2 -2
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-password-rules.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secret-rules.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secrets-rules.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/header-injection-analyzer.js +4 -6
- 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 +4 -6
- 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 +6 -13
- 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 +1 -7
- 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 +5 -7
- 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 +6 -6
- package/packages/dd-trace/src/appsec/iast/telemetry/verbosity.js +1 -1
- 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 -24
- 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/vulnerability-reporter.js +9 -11
- package/packages/dd-trace/src/appsec/index.js +15 -12
- package/packages/dd-trace/src/appsec/rasp/index.js +19 -17
- package/packages/dd-trace/src/appsec/rasp/lfi.js +2 -1
- package/packages/dd-trace/src/appsec/rasp/utils.js +11 -6
- package/packages/dd-trace/src/appsec/reporter.js +233 -40
- package/packages/dd-trace/src/appsec/rule_manager.js +2 -2
- package/packages/dd-trace/src/appsec/sdk/user_blocking.js +2 -2
- package/packages/dd-trace/src/appsec/stack_trace.js +2 -4
- package/packages/dd-trace/src/appsec/telemetry/index.js +1 -2
- package/packages/dd-trace/src/appsec/telemetry/rasp.js +3 -14
- 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 -8
- package/packages/dd-trace/src/azure_metadata.js +2 -7
- package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/index.js +1 -1
- 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 +1 -1
- 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 +1 -1
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +1 -1
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +1 -1
- 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 +2 -2
- 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 +1 -1
- package/packages/dd-trace/src/ci-visibility/log-submission/log-submission-plugin.js +1 -1
- package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +8 -5
- 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 +1 -1
- package/packages/dd-trace/src/config.js +82 -51
- package/packages/dd-trace/src/config_stable.js +3 -3
- package/packages/dd-trace/src/datastreams/encoding.js +9 -9
- package/packages/dd-trace/src/datastreams/fnv.js +1 -1
- 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 +1 -1
- 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 +131 -72
- package/packages/dd-trace/src/debugger/devtools_client/condition.js +6 -8
- package/packages/dd-trace/src/debugger/devtools_client/defaults.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/index.js +17 -27
- package/packages/dd-trace/src/debugger/devtools_client/remote_config.js +18 -38
- package/packages/dd-trace/src/debugger/devtools_client/send.js +8 -7
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/index.js +16 -8
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/processor.js +8 -10
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/redaction.js +3 -3
- package/packages/dd-trace/src/debugger/devtools_client/source-maps.js +2 -10
- package/packages/dd-trace/src/debugger/devtools_client/state.js +31 -4
- package/packages/dd-trace/src/dogstatsd.js +7 -4
- package/packages/dd-trace/src/encode/0.4.js +9 -9
- package/packages/dd-trace/src/encode/0.5.js +1 -1
- package/packages/dd-trace/src/encode/agentless-ci-visibility.js +3 -3
- 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 +6 -6
- package/packages/dd-trace/src/exporters/agent/writer.js +1 -5
- package/packages/dd-trace/src/exporters/common/docker.js +1 -1
- package/packages/dd-trace/src/exporters/common/form-data.js +6 -4
- package/packages/dd-trace/src/exporters/common/request.js +1 -1
- package/packages/dd-trace/src/exporters/common/util.js +1 -1
- 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 +12 -6
- package/packages/dd-trace/src/iitm.js +10 -22
- package/packages/dd-trace/src/lambda/handler.js +6 -6
- package/packages/dd-trace/src/lambda/runtime/patch.js +4 -4
- package/packages/dd-trace/src/lambda/runtime/ritm.js +1 -1
- 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/index.js +6 -6
- package/packages/dd-trace/src/llmobs/plugins/openai.js +1 -1
- package/packages/dd-trace/src/llmobs/sdk.js +2 -2
- package/packages/dd-trace/src/llmobs/tagger.js +113 -99
- 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 +4 -4
- package/packages/dd-trace/src/log/log.js +1 -1
- package/packages/dd-trace/src/log/writer.js +2 -2
- package/packages/dd-trace/src/msgpack/chunk.js +3 -3
- package/packages/dd-trace/src/msgpack/encoder.js +28 -28
- package/packages/dd-trace/src/noop/dogstatsd.js +6 -6
- package/packages/dd-trace/src/noop/span.js +3 -5
- 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 +6 -5
- package/packages/dd-trace/src/opentracing/propagation/log.js +6 -8
- package/packages/dd-trace/src/opentracing/propagation/text_map.js +27 -23
- package/packages/dd-trace/src/opentracing/propagation/tracestate.js +8 -4
- package/packages/dd-trace/src/opentracing/span.js +9 -14
- package/packages/dd-trace/src/opentracing/tracer.js +9 -6
- 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/plugins/ci_plugin.js +62 -10
- 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 +1 -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 +23 -15
- package/packages/dd-trace/src/plugins/util/git.js +165 -11
- 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 +1 -1
- package/packages/dd-trace/src/plugins/util/test.js +311 -48
- 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 +12 -3
- package/packages/dd-trace/src/plugins/util/web.js +5 -4
- package/packages/dd-trace/src/priority_sampler.js +22 -22
- package/packages/dd-trace/src/profiling/config.js +44 -8
- package/packages/dd-trace/src/profiling/exporters/event_serializer.js +5 -5
- package/packages/dd-trace/src/profiling/exporters/file.js +2 -1
- package/packages/dd-trace/src/profiling/profiler.js +37 -2
- 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/tagger.js +3 -5
- package/packages/dd-trace/src/profiling/webspan-utils.js +1 -1
- package/packages/dd-trace/src/proxy.js +7 -13
- 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 +4 -4
- package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +2 -2
- package/packages/dd-trace/src/sampler.js +33 -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 +0 -48
- package/packages/dd-trace/src/service-naming/schemas/util.js +1 -1
- package/packages/dd-trace/src/service-naming/schemas/v0/storage.js +8 -0
- package/packages/dd-trace/src/service-naming/schemas/v0/web.js +2 -3
- package/packages/dd-trace/src/service-naming/schemas/v1/storage.js +4 -0
- package/packages/dd-trace/src/span_processor.js +3 -3
- package/packages/dd-trace/src/span_sampler.js +4 -1
- package/packages/dd-trace/src/standalone/tracesource.js +1 -1
- package/packages/dd-trace/src/startup-log.js +2 -2
- package/packages/dd-trace/src/telemetry/dependencies.js +4 -4
- 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 +1 -1
- package/packages/dd-trace/src/telemetry/telemetry.js +23 -24
- package/packages/dd-trace/src/util.js +1 -1
- 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
|
@@ -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,7 +156,7 @@ 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
|
}
|
|
@@ -167,7 +167,7 @@ class MsgpackEncoder {
|
|
|
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,16 +201,16 @@ 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
|
|
@@ -220,7 +220,7 @@ class MsgpackEncoder {
|
|
|
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,21 +235,21 @@ 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
|
|
@@ -259,7 +259,7 @@ class MsgpackEncoder {
|
|
|
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
39
|
baggageItems: Object.assign({}, 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
|
|
|
@@ -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)
|
|
@@ -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
|
}
|
|
@@ -240,7 +240,7 @@ class TextMapPropagator {
|
|
|
240
240
|
if (typeof origin === 'string') {
|
|
241
241
|
const originValue = origin
|
|
242
242
|
.replace(tracestateOriginFilter, '_')
|
|
243
|
-
.replace(/[\
|
|
243
|
+
.replace(/[\x3D]/g, '~')
|
|
244
244
|
|
|
245
245
|
state.set('o', originValue)
|
|
246
246
|
}
|
|
@@ -254,7 +254,7 @@ class TextMapPropagator {
|
|
|
254
254
|
const tagValue = tags[key]
|
|
255
255
|
.toString()
|
|
256
256
|
.replace(tracestateTagValueFilter, '_')
|
|
257
|
-
.replace(/[\
|
|
257
|
+
.replace(/[\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.replace(/[\
|
|
511
|
+
const transformedValue = value.replace(/[\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') {
|
|
@@ -590,7 +588,7 @@ class TextMapPropagator {
|
|
|
590
588
|
}
|
|
591
589
|
|
|
592
590
|
if (parts[2]) {
|
|
593
|
-
b3[b3SampledKey] = parts[2]
|
|
591
|
+
b3[b3SampledKey] = parts[2] === '0' ? '0' : '1'
|
|
594
592
|
|
|
595
593
|
if (parts[2] === 'd') {
|
|
596
594
|
b3[b3FlagsKey] = '1'
|
|
@@ -633,6 +631,9 @@ class TextMapPropagator {
|
|
|
633
631
|
if (!carrier || !carrier.baggage) return
|
|
634
632
|
if (!spanContext) removeAllBaggageItems()
|
|
635
633
|
const baggages = carrier.baggage.split(',')
|
|
634
|
+
const keysToSpanTag = this._config.baggageTagKeys === '*'
|
|
635
|
+
? undefined
|
|
636
|
+
: new Set(this._config.baggageTagKeys.split(','))
|
|
636
637
|
for (const keyValue of baggages) {
|
|
637
638
|
if (!keyValue.includes('=')) {
|
|
638
639
|
if (spanContext) spanContext._baggageItems = {}
|
|
@@ -647,8 +648,11 @@ class TextMapPropagator {
|
|
|
647
648
|
}
|
|
648
649
|
// the current code assumes precedence of ot-baggage- (legacy opentracing baggage) over baggage
|
|
649
650
|
if (spanContext) {
|
|
650
|
-
if (
|
|
651
|
+
if (Object.hasOwn(spanContext._baggageItems, key)) continue
|
|
651
652
|
spanContext._baggageItems[key] = value
|
|
653
|
+
if (this._config.baggageTagKeys === '*' || keysToSpanTag.has(key)) {
|
|
654
|
+
spanContext._trace.tags['baggage.' + key] = value
|
|
655
|
+
}
|
|
652
656
|
} else {
|
|
653
657
|
setBaggageItem(key, value)
|
|
654
658
|
}
|
|
@@ -656,7 +660,7 @@ class TextMapPropagator {
|
|
|
656
660
|
}
|
|
657
661
|
|
|
658
662
|
_extractSamplingPriority (carrier, spanContext) {
|
|
659
|
-
const priority = parseInt(carrier[samplingKey], 10)
|
|
663
|
+
const priority = Number.parseInt(carrier[samplingKey], 10)
|
|
660
664
|
|
|
661
665
|
if (Number.isInteger(priority)) {
|
|
662
666
|
spanContext._sampling.priority = priority
|
|
@@ -703,7 +707,7 @@ class TextMapPropagator {
|
|
|
703
707
|
|
|
704
708
|
if (buffer.length !== 16) return
|
|
705
709
|
|
|
706
|
-
const tid = traceId.
|
|
710
|
+
const tid = traceId.slice(0, 16)
|
|
707
711
|
|
|
708
712
|
if (tid === zeroTraceId) return
|
|
709
713
|
|
|
@@ -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')
|
|
@@ -26,7 +25,7 @@ const unfinishedRegistry = createRegistry('unfinished')
|
|
|
26
25
|
const finishedRegistry = createRegistry('finished')
|
|
27
26
|
|
|
28
27
|
const OTEL_ENABLED = !!process.env.DD_TRACE_OTEL_ENABLED
|
|
29
|
-
const ALLOWED = ['string', 'number', 'boolean']
|
|
28
|
+
const ALLOWED = new Set(['string', 'number', 'boolean'])
|
|
30
29
|
|
|
31
30
|
const integrationCounters = {
|
|
32
31
|
spans_created: {},
|
|
@@ -129,7 +128,7 @@ class DatadogSpan {
|
|
|
129
128
|
const spanContext = this.context()
|
|
130
129
|
const resourceName = spanContext._tags['resource.name'] || ''
|
|
131
130
|
const resource = resourceName.length > 100
|
|
132
|
-
? `${resourceName.
|
|
131
|
+
? `${resourceName.slice(0, 97)}...`
|
|
133
132
|
: resourceName
|
|
134
133
|
const json = JSON.stringify({
|
|
135
134
|
traceId: spanContext._traceId,
|
|
@@ -198,7 +197,7 @@ class DatadogSpan {
|
|
|
198
197
|
|
|
199
198
|
addLink (context, attributes) {
|
|
200
199
|
this._links.push({
|
|
201
|
-
context: context._ddContext
|
|
200
|
+
context: context._ddContext ?? context,
|
|
202
201
|
attributes: this._sanitizeAttributes(attributes)
|
|
203
202
|
})
|
|
204
203
|
}
|
|
@@ -235,10 +234,8 @@ class DatadogSpan {
|
|
|
235
234
|
return
|
|
236
235
|
}
|
|
237
236
|
|
|
238
|
-
if (DD_TRACE_EXPERIMENTAL_STATE_TRACKING === 'true') {
|
|
239
|
-
|
|
240
|
-
log.error('Finishing invalid span: %s', this)
|
|
241
|
-
}
|
|
237
|
+
if (DD_TRACE_EXPERIMENTAL_STATE_TRACKING === 'true' && !this._spanContext._tags['service.name']) {
|
|
238
|
+
log.error('Finishing invalid span: %s', this)
|
|
242
239
|
}
|
|
243
240
|
|
|
244
241
|
getIntegrationCounter('spans_finished', this._integrationName).inc()
|
|
@@ -256,7 +253,7 @@ class DatadogSpan {
|
|
|
256
253
|
finishedRegistry.register(this, this._name)
|
|
257
254
|
}
|
|
258
255
|
|
|
259
|
-
finishTime = parseFloat(finishTime) || this._getTime()
|
|
256
|
+
finishTime = Number.parseFloat(finishTime) || this._getTime()
|
|
260
257
|
|
|
261
258
|
this._duration = finishTime - this._startTime
|
|
262
259
|
this._spanContext._trace.finished.push(this)
|
|
@@ -275,7 +272,7 @@ class DatadogSpan {
|
|
|
275
272
|
}
|
|
276
273
|
} else {
|
|
277
274
|
const maybeScalar = maybeArray
|
|
278
|
-
if (ALLOWED.
|
|
275
|
+
if (ALLOWED.has(typeof maybeScalar)) {
|
|
279
276
|
// Wrap the value as a string if it's not already a string
|
|
280
277
|
sanitizedAttributes[key] = typeof maybeScalar === 'string' ? maybeScalar : String(maybeScalar)
|
|
281
278
|
} else {
|
|
@@ -299,14 +296,14 @@ class DatadogSpan {
|
|
|
299
296
|
if (Array.isArray(value)) {
|
|
300
297
|
const newArray = []
|
|
301
298
|
for (const subkey in value) {
|
|
302
|
-
if (ALLOWED.
|
|
299
|
+
if (ALLOWED.has(typeof value[subkey])) {
|
|
303
300
|
newArray.push(value[subkey])
|
|
304
301
|
} else {
|
|
305
302
|
log.warn('Dropping span event attribute. It is not of an allowed type')
|
|
306
303
|
}
|
|
307
304
|
}
|
|
308
305
|
sanitizedAttributes[key] = newArray
|
|
309
|
-
} else if (ALLOWED.
|
|
306
|
+
} else if (ALLOWED.has(typeof value)) {
|
|
310
307
|
sanitizedAttributes[key] = value
|
|
311
308
|
} else {
|
|
312
309
|
log.warn('Dropping span event attribute. It is not of an allowed type')
|
|
@@ -388,8 +385,6 @@ class DatadogSpan {
|
|
|
388
385
|
}
|
|
389
386
|
|
|
390
387
|
function createRegistry (type) {
|
|
391
|
-
if (!satisfies(process.version, '>=14.6')) return
|
|
392
|
-
|
|
393
388
|
return new global.FinalizationRegistry(name => {
|
|
394
389
|
runtimeMetrics.decrement(`runtime.node.spans.${type}`)
|
|
395
390
|
runtimeMetrics.decrement(`runtime.node.spans.${type}.by.name`, [`span_name:${name}`])
|
|
@@ -107,6 +107,12 @@ class DatadogTracer {
|
|
|
107
107
|
}
|
|
108
108
|
}
|
|
109
109
|
|
|
110
|
+
/**
|
|
111
|
+
* Get the span context from a span or a span context.
|
|
112
|
+
*
|
|
113
|
+
* @param {Span|SpanContext} spanContext
|
|
114
|
+
* @returns {SpanContext}
|
|
115
|
+
*/
|
|
110
116
|
function getContext (spanContext) {
|
|
111
117
|
if (spanContext instanceof Span) {
|
|
112
118
|
spanContext = spanContext.context()
|
|
@@ -122,17 +128,14 @@ function getContext (spanContext) {
|
|
|
122
128
|
function getParent (references = []) {
|
|
123
129
|
let parent = null
|
|
124
130
|
|
|
125
|
-
for (
|
|
126
|
-
const ref = references[i]
|
|
131
|
+
for (const ref of references) {
|
|
127
132
|
const type = ref.type()
|
|
128
133
|
|
|
129
134
|
if (type === REFERENCE_CHILD_OF) {
|
|
130
135
|
parent = ref.referencedContext()
|
|
131
136
|
break
|
|
132
|
-
} else if (type === REFERENCE_FOLLOWS_FROM) {
|
|
133
|
-
|
|
134
|
-
parent = ref.referencedContext()
|
|
135
|
-
}
|
|
137
|
+
} else if (type === REFERENCE_FOLLOWS_FROM && !parent) {
|
|
138
|
+
parent = ref.referencedContext()
|
|
136
139
|
}
|
|
137
140
|
}
|
|
138
141
|
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
const { PAYLOAD_TAGGING_MAX_TAGS } = require('../constants')
|
|
2
2
|
|
|
3
|
-
const redactedKeys = [
|
|
3
|
+
const redactedKeys = new Set([
|
|
4
4
|
'authorization', 'x-authorization', 'password', 'token'
|
|
5
|
-
]
|
|
5
|
+
])
|
|
6
6
|
const truncated = 'truncated'
|
|
7
7
|
const redacted = 'redacted'
|
|
8
8
|
|
|
9
9
|
function escapeKey (key) {
|
|
10
|
-
return key.replaceAll('.',
|
|
10
|
+
return key.replaceAll('.', String.raw`\.`)
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
/**
|
|
@@ -56,18 +56,18 @@ function tagsFromObject (object, opts) {
|
|
|
56
56
|
|
|
57
57
|
if (['number', 'boolean'].includes(typeof object) || Buffer.isBuffer(object)) {
|
|
58
58
|
tagCount += 1
|
|
59
|
-
result[prefix] = object.toString().
|
|
59
|
+
result[prefix] = object.toString().slice(0, 5000)
|
|
60
60
|
return
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
if (typeof object === 'string') {
|
|
64
64
|
tagCount += 1
|
|
65
|
-
result[prefix] = object.
|
|
65
|
+
result[prefix] = object.slice(0, 5000)
|
|
66
66
|
}
|
|
67
67
|
|
|
68
68
|
if (typeof object === 'object') {
|
|
69
69
|
for (const [key, value] of Object.entries(object)) {
|
|
70
|
-
if (redactedKeys.
|
|
70
|
+
if (redactedKeys.has(key.toLowerCase())) {
|
|
71
71
|
tagCount += 1
|
|
72
72
|
result[`${prefix}.${escapeKey(key)}`] = redacted
|
|
73
73
|
} else {
|