dd-trace 5.53.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/index.d.ts +33 -16
- 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 +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 +5 -4
- package/packages/datadog-instrumentations/src/child_process.js +1 -2
- package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +88 -73
- package/packages/datadog-instrumentations/src/couchbase.js +3 -3
- package/packages/datadog-instrumentations/src/cucumber.js +87 -40
- package/packages/datadog-instrumentations/src/cypress.js +2 -1
- package/packages/datadog-instrumentations/src/dns.js +1 -1
- package/packages/datadog-instrumentations/src/fs.js +1 -1
- 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 +0 -1
- package/packages/datadog-instrumentations/src/helpers/instrument.js +1 -41
- package/packages/datadog-instrumentations/src/helpers/register.js +5 -7
- package/packages/datadog-instrumentations/src/http/client.js +14 -20
- package/packages/datadog-instrumentations/src/jest.js +137 -48
- package/packages/datadog-instrumentations/src/kafkajs.js +52 -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 +63 -24
- 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/mongodb-core.js +1 -1
- package/packages/datadog-instrumentations/src/mysql.js +20 -36
- 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 +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 +1 -2
- package/packages/datadog-instrumentations/src/playwright.js +112 -69
- 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/vitest.js +77 -28
- 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 +57 -2
- 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-jest/src/index.js +23 -21
- 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 +33 -13
- 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 +22 -2
- package/packages/datadog-plugin-redis/src/index.js +1 -1
- 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 +47 -31
- 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/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 +1 -1
- 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 +233 -40
- package/packages/dd-trace/src/appsec/rule_manager.js +2 -2
- package/packages/dd-trace/src/appsec/stack_trace.js +2 -4
- 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 +2 -2
- 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 +74 -67
- 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 +7 -1
- package/packages/dd-trace/src/debugger/devtools_client/remote_config.js +18 -38
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/index.js +1 -1
- 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 +10 -3
- package/packages/dd-trace/src/dogstatsd.js +5 -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 +110 -96
- 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 +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 +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 -9
- 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/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 +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
|
@@ -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 {
|
|
@@ -28,7 +28,10 @@ const {
|
|
|
28
28
|
DI_DEBUG_ERROR_SNAPSHOT_ID_SUFFIX,
|
|
29
29
|
DI_DEBUG_ERROR_FILE_SUFFIX,
|
|
30
30
|
DI_DEBUG_ERROR_LINE_SUFFIX,
|
|
31
|
-
getLibraryCapabilitiesTags
|
|
31
|
+
getLibraryCapabilitiesTags,
|
|
32
|
+
getPullRequestDiff,
|
|
33
|
+
getModifiedTestsFromDiff,
|
|
34
|
+
getPullRequestBaseBranch
|
|
32
35
|
} = require('./util/test')
|
|
33
36
|
const Plugin = require('./plugin')
|
|
34
37
|
const { COMPONENT } = require('../constants')
|
|
@@ -45,10 +48,23 @@ const {
|
|
|
45
48
|
GIT_COMMIT_SHA,
|
|
46
49
|
GIT_BRANCH,
|
|
47
50
|
CI_WORKSPACE_PATH,
|
|
48
|
-
GIT_COMMIT_MESSAGE
|
|
51
|
+
GIT_COMMIT_MESSAGE,
|
|
52
|
+
GIT_TAG,
|
|
53
|
+
GIT_PULL_REQUEST_BASE_BRANCH_SHA,
|
|
54
|
+
GIT_COMMIT_HEAD_SHA,
|
|
55
|
+
GIT_PULL_REQUEST_BASE_BRANCH
|
|
49
56
|
} = require('./util/tags')
|
|
50
57
|
const { OS_VERSION, OS_PLATFORM, OS_ARCHITECTURE, RUNTIME_NAME, RUNTIME_VERSION } = require('./util/env')
|
|
51
58
|
const getDiClient = require('../ci-visibility/dynamic-instrumentation')
|
|
59
|
+
const { DD_MAJOR } = require('../../../../version')
|
|
60
|
+
|
|
61
|
+
const FRAMEWORK_TO_TRIMMED_COMMAND = {
|
|
62
|
+
vitest: 'vitest run',
|
|
63
|
+
mocha: 'mocha',
|
|
64
|
+
cucumber: 'cucumber-js',
|
|
65
|
+
playwright: 'playwright test',
|
|
66
|
+
jest: 'jest'
|
|
67
|
+
}
|
|
52
68
|
|
|
53
69
|
module.exports = class CiPlugin extends Plugin {
|
|
54
70
|
constructor (...args) {
|
|
@@ -103,7 +119,11 @@ module.exports = class CiPlugin extends Plugin {
|
|
|
103
119
|
// only for playwright
|
|
104
120
|
this.rootDir = rootDir
|
|
105
121
|
|
|
106
|
-
const testSessionName = getTestSessionName(
|
|
122
|
+
const testSessionName = getTestSessionName(
|
|
123
|
+
this.config,
|
|
124
|
+
DD_MAJOR < 6 ? this.command : FRAMEWORK_TO_TRIMMED_COMMAND[this.constructor.id],
|
|
125
|
+
this.testEnvironmentMetadata
|
|
126
|
+
)
|
|
107
127
|
|
|
108
128
|
const metadataTags = {}
|
|
109
129
|
for (const testLevel of TEST_LEVEL_EVENT_TYPES) {
|
|
@@ -194,6 +214,27 @@ module.exports = class CiPlugin extends Plugin {
|
|
|
194
214
|
onDone({ err, testManagementTests })
|
|
195
215
|
})
|
|
196
216
|
})
|
|
217
|
+
|
|
218
|
+
this.addSub(`ci:${this.constructor.id}:modified-tests`, ({ onDone }) => {
|
|
219
|
+
const {
|
|
220
|
+
[GIT_PULL_REQUEST_BASE_BRANCH]: pullRequestBaseBranch,
|
|
221
|
+
[GIT_PULL_REQUEST_BASE_BRANCH_SHA]: pullRequestBaseBranchSha,
|
|
222
|
+
[GIT_COMMIT_HEAD_SHA]: commitHeadSha
|
|
223
|
+
} = this.testEnvironmentMetadata
|
|
224
|
+
|
|
225
|
+
const baseBranchSha = pullRequestBaseBranchSha || getPullRequestBaseBranch(pullRequestBaseBranch)
|
|
226
|
+
|
|
227
|
+
if (baseBranchSha) {
|
|
228
|
+
const diff = getPullRequestDiff(baseBranchSha, commitHeadSha)
|
|
229
|
+
const modifiedTests = getModifiedTestsFromDiff(diff)
|
|
230
|
+
if (modifiedTests) {
|
|
231
|
+
return onDone({ err: null, modifiedTests })
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
// TODO: Add telemetry for this type of error
|
|
236
|
+
return onDone({ err: new Error('No modified tests could have been retrieved') })
|
|
237
|
+
})
|
|
197
238
|
}
|
|
198
239
|
|
|
199
240
|
get telemetry () {
|
|
@@ -240,7 +281,10 @@ module.exports = class CiPlugin extends Plugin {
|
|
|
240
281
|
[GIT_BRANCH]: branch,
|
|
241
282
|
[CI_PROVIDER_NAME]: ciProviderName,
|
|
242
283
|
[CI_WORKSPACE_PATH]: repositoryRoot,
|
|
243
|
-
[GIT_COMMIT_MESSAGE]: commitMessage
|
|
284
|
+
[GIT_COMMIT_MESSAGE]: commitMessage,
|
|
285
|
+
[GIT_TAG]: tag,
|
|
286
|
+
[GIT_PULL_REQUEST_BASE_BRANCH_SHA]: pullRequestBaseSha,
|
|
287
|
+
[GIT_COMMIT_HEAD_SHA]: commitHeadSha
|
|
244
288
|
} = this.testEnvironmentMetadata
|
|
245
289
|
|
|
246
290
|
this.repositoryRoot = repositoryRoot || process.cwd()
|
|
@@ -259,7 +303,10 @@ module.exports = class CiPlugin extends Plugin {
|
|
|
259
303
|
runtimeVersion,
|
|
260
304
|
branch,
|
|
261
305
|
testLevel: 'suite',
|
|
262
|
-
commitMessage
|
|
306
|
+
commitMessage,
|
|
307
|
+
tag,
|
|
308
|
+
pullRequestBaseSha,
|
|
309
|
+
commitHeadSha
|
|
263
310
|
}
|
|
264
311
|
}
|
|
265
312
|
|
|
@@ -372,11 +419,12 @@ module.exports = class CiPlugin extends Plugin {
|
|
|
372
419
|
return Promise.resolve()
|
|
373
420
|
}
|
|
374
421
|
log.debug('Removing all Dynamic Instrumentation probes')
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
422
|
+
const promises = []
|
|
423
|
+
for (const fileLine of this.fileLineToProbeId.keys()) {
|
|
424
|
+
const [file, line] = fileLine.split(':')
|
|
425
|
+
promises.push(this.removeDiProbe({ file, line }))
|
|
426
|
+
}
|
|
427
|
+
return Promise.all(promises)
|
|
380
428
|
}
|
|
381
429
|
|
|
382
430
|
removeDiProbe ({ file, line }) {
|
|
@@ -387,6 +435,10 @@ module.exports = class CiPlugin extends Plugin {
|
|
|
387
435
|
}
|
|
388
436
|
|
|
389
437
|
addDiProbe (err) {
|
|
438
|
+
if (!err?.stack) {
|
|
439
|
+
log.warn('Can not add breakpoint if the test error does not have a stack')
|
|
440
|
+
return
|
|
441
|
+
}
|
|
390
442
|
const [file, line, stackIndex] = getFileAndLineNumberFromError(err, this.repositoryRoot)
|
|
391
443
|
|
|
392
444
|
if (!file || !Number.isInteger(line)) {
|
|
@@ -7,14 +7,14 @@ class ConsumerPlugin extends InboundPlugin {
|
|
|
7
7
|
static get kind () { return 'consumer' }
|
|
8
8
|
static get type () { return 'messaging' }
|
|
9
9
|
|
|
10
|
-
startSpan (options) {
|
|
10
|
+
startSpan (options, enterOrCtx) {
|
|
11
11
|
if (!options.service) {
|
|
12
12
|
options.service = this.config.service || this.serviceName()
|
|
13
13
|
}
|
|
14
14
|
if (!options.kind) {
|
|
15
15
|
options.kind = this.constructor.kind
|
|
16
16
|
}
|
|
17
|
-
return super.startSpan(this.operationName(), options)
|
|
17
|
+
return super.startSpan(this.operationName(), options, enterOrCtx)
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
20
|
|
|
@@ -84,7 +84,6 @@ module.exports = {
|
|
|
84
84
|
get nyc () { return require('../../../datadog-plugin-nyc/src') },
|
|
85
85
|
get oracledb () { return require('../../../datadog-plugin-oracledb/src') },
|
|
86
86
|
get openai () { return require('../../../datadog-plugin-openai/src') },
|
|
87
|
-
get paperplane () { return require('../../../datadog-plugin-paperplane/src') },
|
|
88
87
|
get pg () { return require('../../../datadog-plugin-pg/src') },
|
|
89
88
|
get pino () { return require('../../../datadog-plugin-pino/src') },
|
|
90
89
|
get 'pino-pretty' () { return require('../../../datadog-plugin-pino/src') },
|
|
@@ -26,6 +26,10 @@ class OutboundPlugin extends TracingPlugin {
|
|
|
26
26
|
})
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
+
bindFinish (ctx) {
|
|
30
|
+
return ctx.parentStore
|
|
31
|
+
}
|
|
32
|
+
|
|
29
33
|
startSpan (...args) {
|
|
30
34
|
const span = super.startSpan(...args)
|
|
31
35
|
if (
|
|
@@ -67,7 +71,6 @@ class OutboundPlugin extends TracingPlugin {
|
|
|
67
71
|
}
|
|
68
72
|
}
|
|
69
73
|
}
|
|
70
|
-
return undefined
|
|
71
74
|
}
|
|
72
75
|
|
|
73
76
|
getPeerServiceRemap (peerData) {
|
|
@@ -87,10 +90,6 @@ class OutboundPlugin extends TracingPlugin {
|
|
|
87
90
|
return peerData
|
|
88
91
|
}
|
|
89
92
|
|
|
90
|
-
bindFinish (ctx) {
|
|
91
|
-
return ctx.parentStore
|
|
92
|
-
}
|
|
93
|
-
|
|
94
93
|
finish (ctx) {
|
|
95
94
|
const span = ctx?.currentStore?.span || this.activeSpan
|
|
96
95
|
this.tagPeerService(span)
|
|
@@ -7,7 +7,7 @@ class ProducerPlugin extends OutboundPlugin {
|
|
|
7
7
|
static get kind () { return 'producer' }
|
|
8
8
|
static get type () { return 'messaging' }
|
|
9
9
|
|
|
10
|
-
startSpan (options) {
|
|
10
|
+
startSpan (options, enterOrCtx) {
|
|
11
11
|
const spanDefaults = {
|
|
12
12
|
kind: this.constructor.kind
|
|
13
13
|
}
|
|
@@ -19,7 +19,7 @@ class ProducerPlugin extends OutboundPlugin {
|
|
|
19
19
|
if (!options[key]) options[key] = spanDefaults[key]
|
|
20
20
|
}
|
|
21
21
|
)
|
|
22
|
-
return super.startSpan(this.operationName(), options)
|
|
22
|
+
return super.startSpan(this.operationName(), options, enterOrCtx)
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
25
|
|
|
@@ -11,12 +11,12 @@ class StoragePlugin extends ClientPlugin {
|
|
|
11
11
|
this.system = this.constructor.system || this.component
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
startSpan (name, options) {
|
|
14
|
+
startSpan (name, options, ctx) {
|
|
15
15
|
if (!options.service && this.system) {
|
|
16
16
|
options.service = `${this.tracer._service}-${this.system}`
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
return super.startSpan(name, options)
|
|
19
|
+
return super.startSpan(name, options, ctx)
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
22
|
|