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
|
@@ -12,6 +12,7 @@ const isNewTestCh = channel('ci:vitest:test:is-new')
|
|
|
12
12
|
const isAttemptToFixCh = channel('ci:vitest:test:is-attempt-to-fix')
|
|
13
13
|
const isDisabledCh = channel('ci:vitest:test:is-disabled')
|
|
14
14
|
const isQuarantinedCh = channel('ci:vitest:test:is-quarantined')
|
|
15
|
+
const isModifiedCh = channel('ci:vitest:test:is-modified')
|
|
15
16
|
|
|
16
17
|
// test suite hooks
|
|
17
18
|
const testSuiteStartCh = channel('ci:vitest:test-suite:start')
|
|
@@ -25,13 +26,15 @@ const libraryConfigurationCh = channel('ci:vitest:library-configuration')
|
|
|
25
26
|
const knownTestsCh = channel('ci:vitest:known-tests')
|
|
26
27
|
const isEarlyFlakeDetectionFaultyCh = channel('ci:vitest:is-early-flake-detection-faulty')
|
|
27
28
|
const testManagementTestsCh = channel('ci:vitest:test-management-tests')
|
|
29
|
+
const impactedTestsCh = channel('ci:vitest:modified-tests')
|
|
28
30
|
|
|
29
|
-
const
|
|
31
|
+
const taskToCtx = new WeakMap()
|
|
30
32
|
const taskToStatuses = new WeakMap()
|
|
31
33
|
const newTasks = new WeakSet()
|
|
32
34
|
const disabledTasks = new WeakSet()
|
|
33
35
|
const quarantinedTasks = new WeakSet()
|
|
34
36
|
const attemptToFixTasks = new WeakSet()
|
|
37
|
+
const modifiedTasks = new WeakSet()
|
|
35
38
|
let isRetryReasonEfd = false
|
|
36
39
|
let isRetryReasonAttemptToFix = false
|
|
37
40
|
const switchedStatuses = new WeakSet()
|
|
@@ -58,7 +61,9 @@ function getProvidedContext () {
|
|
|
58
61
|
_ddIsTestManagementTestsEnabled: isTestManagementTestsEnabled,
|
|
59
62
|
_ddTestManagementAttemptToFixRetries: testManagementAttemptToFixRetries,
|
|
60
63
|
_ddTestManagementTests: testManagementTests,
|
|
61
|
-
_ddIsFlakyTestRetriesEnabled: isFlakyTestRetriesEnabled
|
|
64
|
+
_ddIsFlakyTestRetriesEnabled: isFlakyTestRetriesEnabled,
|
|
65
|
+
_ddIsImpactedTestsEnabled: isImpactedTestsEnabled,
|
|
66
|
+
_ddModifiedTests: modifiedTests
|
|
62
67
|
} = globalThis.__vitest_worker__.providedContext
|
|
63
68
|
|
|
64
69
|
return {
|
|
@@ -70,9 +75,11 @@ function getProvidedContext () {
|
|
|
70
75
|
isTestManagementTestsEnabled,
|
|
71
76
|
testManagementAttemptToFixRetries,
|
|
72
77
|
testManagementTests,
|
|
73
|
-
isFlakyTestRetriesEnabled
|
|
78
|
+
isFlakyTestRetriesEnabled,
|
|
79
|
+
isImpactedTestsEnabled,
|
|
80
|
+
modifiedTests
|
|
74
81
|
}
|
|
75
|
-
} catch
|
|
82
|
+
} catch {
|
|
76
83
|
log.error('Vitest workers could not parse provided context, so some features will not work.')
|
|
77
84
|
return {
|
|
78
85
|
isDiEnabled: false,
|
|
@@ -83,7 +90,9 @@ function getProvidedContext () {
|
|
|
83
90
|
isTestManagementTestsEnabled: false,
|
|
84
91
|
testManagementAttemptToFixRetries: 0,
|
|
85
92
|
testManagementTests: {},
|
|
86
|
-
isFlakyTestRetriesEnabled: false
|
|
93
|
+
isFlakyTestRetriesEnabled: false,
|
|
94
|
+
isImpactedTestsEnabled: false,
|
|
95
|
+
modifiedTests: {}
|
|
87
96
|
}
|
|
88
97
|
}
|
|
89
98
|
}
|
|
@@ -123,7 +132,6 @@ function getSessionStatus (state) {
|
|
|
123
132
|
return 'pass'
|
|
124
133
|
}
|
|
125
134
|
|
|
126
|
-
// eslint-disable-next-line
|
|
127
135
|
// From https://github.com/vitest-dev/vitest/blob/51c04e2f44d91322b334f8ccbcdb368facc3f8ec/packages/runner/src/run.ts#L243-L250
|
|
128
136
|
function getVitestTestStatus (test, retryCount) {
|
|
129
137
|
if (test.result.state !== 'fail') {
|
|
@@ -183,10 +191,12 @@ function getSortWrapper (sort) {
|
|
|
183
191
|
let isEarlyFlakeDetectionFaulty = false
|
|
184
192
|
let isKnownTestsEnabled = false
|
|
185
193
|
let isTestManagementTestsEnabled = false
|
|
194
|
+
let isImpactedTestsEnabled = false
|
|
186
195
|
let testManagementAttemptToFixRetries = 0
|
|
187
196
|
let isDiEnabled = false
|
|
188
197
|
let knownTests = {}
|
|
189
198
|
let testManagementTests = {}
|
|
199
|
+
let modifiedTests = {}
|
|
190
200
|
|
|
191
201
|
try {
|
|
192
202
|
const { err, libraryConfig } = await getChannelPromise(libraryConfigurationCh)
|
|
@@ -199,12 +209,14 @@ function getSortWrapper (sort) {
|
|
|
199
209
|
isKnownTestsEnabled = libraryConfig.isKnownTestsEnabled
|
|
200
210
|
isTestManagementTestsEnabled = libraryConfig.isTestManagementEnabled
|
|
201
211
|
testManagementAttemptToFixRetries = libraryConfig.testManagementAttemptToFixRetries
|
|
212
|
+
isImpactedTestsEnabled = libraryConfig.isImpactedTestsEnabled
|
|
202
213
|
}
|
|
203
|
-
} catch
|
|
214
|
+
} catch {
|
|
204
215
|
isFlakyTestRetriesEnabled = false
|
|
205
216
|
isEarlyFlakeDetectionEnabled = false
|
|
206
217
|
isDiEnabled = false
|
|
207
218
|
isKnownTestsEnabled = false
|
|
219
|
+
isImpactedTestsEnabled = false
|
|
208
220
|
}
|
|
209
221
|
|
|
210
222
|
if (isFlakyTestRetriesEnabled && !this.ctx.config.retry && flakyTestRetriesCount > 0) {
|
|
@@ -212,14 +224,17 @@ function getSortWrapper (sort) {
|
|
|
212
224
|
try {
|
|
213
225
|
const workspaceProject = this.ctx.getCoreWorkspaceProject()
|
|
214
226
|
workspaceProject._provided._ddIsFlakyTestRetriesEnabled = isFlakyTestRetriesEnabled
|
|
215
|
-
} catch
|
|
227
|
+
} catch {
|
|
216
228
|
log.warn('Could not send library configuration to workers.')
|
|
217
229
|
}
|
|
218
230
|
}
|
|
219
231
|
|
|
220
232
|
if (isKnownTestsEnabled) {
|
|
221
233
|
const knownTestsResponse = await getChannelPromise(knownTestsCh)
|
|
222
|
-
if (
|
|
234
|
+
if (knownTestsResponse.err) {
|
|
235
|
+
isEarlyFlakeDetectionEnabled = false
|
|
236
|
+
isKnownTestsEnabled = false
|
|
237
|
+
} else {
|
|
223
238
|
knownTests = knownTestsResponse.knownTests
|
|
224
239
|
const getFilePaths = this.ctx.getTestFilepaths || this.ctx._globTestFilepaths
|
|
225
240
|
|
|
@@ -245,13 +260,10 @@ function getSortWrapper (sort) {
|
|
|
245
260
|
workspaceProject._provided._ddKnownTests = knownTests.vitest || {}
|
|
246
261
|
workspaceProject._provided._ddIsEarlyFlakeDetectionEnabled = isEarlyFlakeDetectionEnabled
|
|
247
262
|
workspaceProject._provided._ddEarlyFlakeDetectionNumRetries = earlyFlakeDetectionNumRetries
|
|
248
|
-
} catch
|
|
263
|
+
} catch {
|
|
249
264
|
log.warn('Could not send known tests to workers so Early Flake Detection will not work.')
|
|
250
265
|
}
|
|
251
266
|
}
|
|
252
|
-
} else {
|
|
253
|
-
isEarlyFlakeDetectionEnabled = false
|
|
254
|
-
isKnownTestsEnabled = false
|
|
255
267
|
}
|
|
256
268
|
}
|
|
257
269
|
|
|
@@ -259,26 +271,43 @@ function getSortWrapper (sort) {
|
|
|
259
271
|
try {
|
|
260
272
|
const workspaceProject = this.ctx.getCoreWorkspaceProject()
|
|
261
273
|
workspaceProject._provided._ddIsDiEnabled = isDiEnabled
|
|
262
|
-
} catch
|
|
274
|
+
} catch {
|
|
263
275
|
log.warn('Could not send Dynamic Instrumentation configuration to workers.')
|
|
264
276
|
}
|
|
265
277
|
}
|
|
266
278
|
|
|
267
279
|
if (isTestManagementTestsEnabled) {
|
|
268
280
|
const { err, testManagementTests: receivedTestManagementTests } = await getChannelPromise(testManagementTestsCh)
|
|
269
|
-
if (
|
|
281
|
+
if (err) {
|
|
282
|
+
isTestManagementTestsEnabled = false
|
|
283
|
+
log.error('Could not get test management tests.')
|
|
284
|
+
} else {
|
|
270
285
|
testManagementTests = receivedTestManagementTests
|
|
271
286
|
try {
|
|
272
287
|
const workspaceProject = this.ctx.getCoreWorkspaceProject()
|
|
273
288
|
workspaceProject._provided._ddIsTestManagementTestsEnabled = isTestManagementTestsEnabled
|
|
274
289
|
workspaceProject._provided._ddTestManagementAttemptToFixRetries = testManagementAttemptToFixRetries
|
|
275
290
|
workspaceProject._provided._ddTestManagementTests = testManagementTests
|
|
276
|
-
} catch
|
|
291
|
+
} catch {
|
|
277
292
|
log.warn('Could not send test management tests to workers so Test Management will not work.')
|
|
278
293
|
}
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
if (isImpactedTestsEnabled) {
|
|
298
|
+
const { err, modifiedTests: receivedModifiedTests } = await getChannelPromise(impactedTestsCh)
|
|
299
|
+
if (err) {
|
|
300
|
+
isImpactedTestsEnabled = false
|
|
301
|
+
log.error('Could not get modified tests.')
|
|
279
302
|
} else {
|
|
280
|
-
|
|
281
|
-
|
|
303
|
+
modifiedTests = receivedModifiedTests
|
|
304
|
+
try {
|
|
305
|
+
const workspaceProject = this.ctx.getCoreWorkspaceProject()
|
|
306
|
+
workspaceProject._provided._ddIsImpactedTestsEnabled = isImpactedTestsEnabled
|
|
307
|
+
workspaceProject._provided._ddModifiedTests = modifiedTests
|
|
308
|
+
} catch {
|
|
309
|
+
log.warn('Could not send modified tests to workers so Impacted Tests will not work.')
|
|
310
|
+
}
|
|
282
311
|
}
|
|
283
312
|
}
|
|
284
313
|
|
|
@@ -290,7 +319,7 @@ function getSortWrapper (sort) {
|
|
|
290
319
|
|
|
291
320
|
try {
|
|
292
321
|
testCodeCoverageLinesTotal = totalCodeCoverage.getCoverageSummary().lines.pct
|
|
293
|
-
} catch
|
|
322
|
+
} catch {
|
|
294
323
|
// ignore errors
|
|
295
324
|
}
|
|
296
325
|
return totalCodeCoverage
|
|
@@ -364,7 +393,9 @@ addHook({
|
|
|
364
393
|
numRepeats,
|
|
365
394
|
isTestManagementTestsEnabled,
|
|
366
395
|
testManagementAttemptToFixRetries,
|
|
367
|
-
testManagementTests
|
|
396
|
+
testManagementTests,
|
|
397
|
+
isImpactedTestsEnabled,
|
|
398
|
+
modifiedTests
|
|
368
399
|
} = getProvidedContext()
|
|
369
400
|
|
|
370
401
|
if (isTestManagementTestsEnabled) {
|
|
@@ -397,6 +428,23 @@ addHook({
|
|
|
397
428
|
})
|
|
398
429
|
}
|
|
399
430
|
|
|
431
|
+
if (isImpactedTestsEnabled) {
|
|
432
|
+
isModifiedCh.publish({
|
|
433
|
+
modifiedTests,
|
|
434
|
+
testSuiteAbsolutePath: task.file.filepath,
|
|
435
|
+
onDone: (isImpacted) => {
|
|
436
|
+
if (isImpacted) {
|
|
437
|
+
if (isEarlyFlakeDetectionEnabled) {
|
|
438
|
+
isRetryReasonEfd = task.repeats !== numRepeats
|
|
439
|
+
task.repeats = numRepeats
|
|
440
|
+
}
|
|
441
|
+
modifiedTasks.add(task)
|
|
442
|
+
taskToStatuses.set(task, [])
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
})
|
|
446
|
+
}
|
|
447
|
+
|
|
400
448
|
if (isKnownTestsEnabled) {
|
|
401
449
|
isNewTestCh.publish({
|
|
402
450
|
knownTests,
|
|
@@ -404,7 +452,7 @@ addHook({
|
|
|
404
452
|
testName,
|
|
405
453
|
onDone: (isNew) => {
|
|
406
454
|
if (isNew && !attemptToFixTasks.has(task)) {
|
|
407
|
-
if (isEarlyFlakeDetectionEnabled) {
|
|
455
|
+
if (isEarlyFlakeDetectionEnabled && !modifiedTasks.has(task)) {
|
|
408
456
|
isRetryReasonEfd = task.repeats !== numRepeats
|
|
409
457
|
task.repeats = numRepeats
|
|
410
458
|
}
|
|
@@ -455,7 +503,7 @@ addHook({
|
|
|
455
503
|
// test start (only tests that are not marked as skip or todo)
|
|
456
504
|
// `onBeforeTryTask` is run for every repetition and attempt of the test
|
|
457
505
|
shimmer.wrap(VitestTestRunner.prototype, 'onBeforeTryTask', onBeforeTryTask => async function (task, retryInfo) {
|
|
458
|
-
if (!
|
|
506
|
+
if (!testPassCh.hasSubscribers && !testErrorCh.hasSubscribers && !testSkipCh.hasSubscribers) {
|
|
459
507
|
return onBeforeTryTask.apply(this, arguments)
|
|
460
508
|
}
|
|
461
509
|
const testName = getTestName(task)
|
|
@@ -500,15 +548,14 @@ addHook({
|
|
|
500
548
|
|
|
501
549
|
const promises = {}
|
|
502
550
|
const shouldSetProbe = isDiEnabled && numAttempt === 1
|
|
503
|
-
const
|
|
551
|
+
const ctx = taskToCtx.get(task)
|
|
504
552
|
const testError = task.result?.errors?.[0]
|
|
505
|
-
if (
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
})
|
|
553
|
+
if (ctx) {
|
|
554
|
+
testErrorCh.publish({
|
|
555
|
+
error: testError,
|
|
556
|
+
shouldSetProbe,
|
|
557
|
+
promises,
|
|
558
|
+
...ctx.currentStore
|
|
512
559
|
})
|
|
513
560
|
// We wait for the probe to be set
|
|
514
561
|
if (promises.setProbePromise) {
|
|
@@ -528,17 +575,13 @@ addHook({
|
|
|
528
575
|
// as long as it's not the _last_ iteration (which will be finished normally)
|
|
529
576
|
|
|
530
577
|
// TODO: check test duration (not to repeat if it's too slow)
|
|
531
|
-
const
|
|
532
|
-
if (
|
|
578
|
+
const ctx = taskToCtx.get(task)
|
|
579
|
+
if (ctx) {
|
|
533
580
|
if (lastExecutionStatus === 'fail') {
|
|
534
581
|
const testError = task.result?.errors?.[0]
|
|
535
|
-
|
|
536
|
-
testErrorCh.publish({ error: testError })
|
|
537
|
-
})
|
|
582
|
+
testErrorCh.publish({ error: testError, ...ctx.currentStore })
|
|
538
583
|
} else {
|
|
539
|
-
|
|
540
|
-
testPassCh.publish({ task })
|
|
541
|
-
})
|
|
584
|
+
testPassCh.publish({ task, ...ctx.currentStore })
|
|
542
585
|
}
|
|
543
586
|
if (shouldFlipStatus) {
|
|
544
587
|
statuses.push(lastExecutionStatus)
|
|
@@ -555,16 +598,12 @@ addHook({
|
|
|
555
598
|
statuses.push(lastExecutionStatus)
|
|
556
599
|
}
|
|
557
600
|
|
|
558
|
-
const
|
|
601
|
+
const ctx = taskToCtx.get(task)
|
|
559
602
|
if (lastExecutionStatus === 'fail') {
|
|
560
603
|
const testError = task.result?.errors?.[0]
|
|
561
|
-
|
|
562
|
-
testErrorCh.publish({ error: testError })
|
|
563
|
-
})
|
|
604
|
+
testErrorCh.publish({ error: testError, ...ctx.currentStore })
|
|
564
605
|
} else {
|
|
565
|
-
|
|
566
|
-
testPassCh.publish({ task })
|
|
567
|
-
})
|
|
606
|
+
testPassCh.publish({ task, ...ctx.currentStore })
|
|
568
607
|
}
|
|
569
608
|
}
|
|
570
609
|
|
|
@@ -573,31 +612,30 @@ addHook({
|
|
|
573
612
|
!isRetryReasonAttemptToFix &&
|
|
574
613
|
!isRetryReasonEfd
|
|
575
614
|
|
|
576
|
-
const
|
|
577
|
-
|
|
615
|
+
const ctx = {
|
|
616
|
+
testName,
|
|
617
|
+
testSuiteAbsolutePath: task.file.filepath,
|
|
618
|
+
isRetry: numAttempt > 0 || numRepetition > 0,
|
|
619
|
+
isRetryReasonEfd,
|
|
620
|
+
isRetryReasonAttemptToFix: isRetryReasonAttemptToFix && numRepetition > 0,
|
|
621
|
+
isNew,
|
|
622
|
+
mightHitProbe: isDiEnabled && numAttempt > 0,
|
|
623
|
+
isAttemptToFix: attemptToFixTasks.has(task),
|
|
624
|
+
isDisabled: disabledTasks.has(task),
|
|
625
|
+
isQuarantined,
|
|
626
|
+
isRetryReasonAtr,
|
|
627
|
+
isModified: modifiedTasks.has(task)
|
|
628
|
+
}
|
|
629
|
+
taskToCtx.set(task, ctx)
|
|
578
630
|
|
|
579
|
-
|
|
580
|
-
testStartCh.publish({
|
|
581
|
-
testName,
|
|
582
|
-
testSuiteAbsolutePath: task.file.filepath,
|
|
583
|
-
isRetry: numAttempt > 0 || numRepetition > 0,
|
|
584
|
-
isRetryReasonEfd,
|
|
585
|
-
isRetryReasonAttemptToFix: isRetryReasonAttemptToFix && numRepetition > 0,
|
|
586
|
-
isNew,
|
|
587
|
-
mightHitProbe: isDiEnabled && numAttempt > 0,
|
|
588
|
-
isAttemptToFix: attemptToFixTasks.has(task),
|
|
589
|
-
isDisabled: disabledTasks.has(task),
|
|
590
|
-
isQuarantined,
|
|
591
|
-
isRetryReasonAtr
|
|
592
|
-
})
|
|
593
|
-
})
|
|
631
|
+
testStartCh.runStores(ctx, () => {})
|
|
594
632
|
return onBeforeTryTask.apply(this, arguments)
|
|
595
633
|
})
|
|
596
634
|
|
|
597
635
|
// test finish (only passed tests)
|
|
598
636
|
shimmer.wrap(VitestTestRunner.prototype, 'onAfterTryTask', onAfterTryTask =>
|
|
599
637
|
async function (task, { retry: retryCount }) {
|
|
600
|
-
if (!
|
|
638
|
+
if (!testPassCh.hasSubscribers && !testErrorCh.hasSubscribers && !testSkipCh.hasSubscribers) {
|
|
601
639
|
return onAfterTryTask.apply(this, arguments)
|
|
602
640
|
}
|
|
603
641
|
const result = await onAfterTryTask.apply(this, arguments)
|
|
@@ -605,7 +643,7 @@ addHook({
|
|
|
605
643
|
const { testManagementAttemptToFixRetries } = getProvidedContext()
|
|
606
644
|
|
|
607
645
|
const status = getVitestTestStatus(task, retryCount)
|
|
608
|
-
const
|
|
646
|
+
const ctx = taskToCtx.get(task)
|
|
609
647
|
|
|
610
648
|
const { isDiEnabled } = getProvidedContext()
|
|
611
649
|
|
|
@@ -620,17 +658,19 @@ addHook({
|
|
|
620
658
|
if (statuses.length === testManagementAttemptToFixRetries) {
|
|
621
659
|
if (statuses.every(status => status === 'pass')) {
|
|
622
660
|
attemptToFixPassed = true
|
|
623
|
-
} else if (statuses.
|
|
661
|
+
} else if (statuses.includes('fail')) {
|
|
624
662
|
attemptToFixFailed = true
|
|
625
663
|
}
|
|
626
664
|
}
|
|
627
665
|
}
|
|
628
666
|
|
|
629
|
-
if (
|
|
667
|
+
if (ctx) {
|
|
630
668
|
// We don't finish here because the test might fail in a later hook (afterEach)
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
669
|
+
ctx.status = status
|
|
670
|
+
ctx.task = task
|
|
671
|
+
ctx.attemptToFixPassed = attemptToFixPassed
|
|
672
|
+
ctx.attemptToFixFailed = attemptToFixFailed
|
|
673
|
+
testFinishTimeCh.runStores(ctx, () => {})
|
|
634
674
|
}
|
|
635
675
|
|
|
636
676
|
return result
|
|
@@ -728,19 +768,14 @@ addHook({
|
|
|
728
768
|
}, (vitestPackage, frameworkVersion) => {
|
|
729
769
|
shimmer.wrap(vitestPackage, 'startTests', startTests => async function (testPaths) {
|
|
730
770
|
let testSuiteError = null
|
|
731
|
-
if (!
|
|
771
|
+
if (!testSuiteFinishCh.hasSubscribers) {
|
|
732
772
|
return startTests.apply(this, arguments)
|
|
733
773
|
}
|
|
734
774
|
// From >=3.0.1, the first arguments changes from a string to an object containing the filepath
|
|
735
775
|
const testSuiteAbsolutePath = testPaths[0]?.filepath || testPaths[0]
|
|
736
776
|
|
|
737
|
-
const
|
|
738
|
-
|
|
739
|
-
testSuiteStartCh.publish({
|
|
740
|
-
testSuiteAbsolutePath,
|
|
741
|
-
frameworkVersion
|
|
742
|
-
})
|
|
743
|
-
})
|
|
777
|
+
const testSuiteCtx = { testSuiteAbsolutePath, frameworkVersion }
|
|
778
|
+
testSuiteStartCh.runStores(testSuiteCtx, () => {})
|
|
744
779
|
const startTestsResponse = await startTests.apply(this, arguments)
|
|
745
780
|
|
|
746
781
|
let onFinish = null
|
|
@@ -752,7 +787,7 @@ addHook({
|
|
|
752
787
|
|
|
753
788
|
// Only one test task per test, even if there are retries
|
|
754
789
|
testTasks.forEach(task => {
|
|
755
|
-
const
|
|
790
|
+
const testCtx = taskToCtx.get(task)
|
|
756
791
|
const { result } = task
|
|
757
792
|
// We have to trick vitest into thinking that the test has passed
|
|
758
793
|
// but we want to report it as failed if it did fail
|
|
@@ -768,10 +803,8 @@ addHook({
|
|
|
768
803
|
isDisabled: disabledTasks.has(task)
|
|
769
804
|
})
|
|
770
805
|
} else if (state === 'pass' && !isSwitchedStatus) {
|
|
771
|
-
if (
|
|
772
|
-
|
|
773
|
-
testPassCh.publish({ task })
|
|
774
|
-
})
|
|
806
|
+
if (testCtx) {
|
|
807
|
+
testPassCh.publish({ task, ...testCtx.currentStore })
|
|
775
808
|
}
|
|
776
809
|
} else if (state === 'fail' || isSwitchedStatus) {
|
|
777
810
|
let testError
|
|
@@ -784,7 +817,7 @@ addHook({
|
|
|
784
817
|
let attemptToFixFailed = false
|
|
785
818
|
if (attemptToFixTasks.has(task)) {
|
|
786
819
|
const statuses = taskToStatuses.get(task)
|
|
787
|
-
if (statuses.
|
|
820
|
+
if (statuses.includes('fail')) {
|
|
788
821
|
attemptToFixFailed = true
|
|
789
822
|
}
|
|
790
823
|
if (statuses.every(status => status === 'fail')) {
|
|
@@ -792,16 +825,15 @@ addHook({
|
|
|
792
825
|
}
|
|
793
826
|
}
|
|
794
827
|
|
|
795
|
-
if (
|
|
828
|
+
if (testCtx) {
|
|
796
829
|
const isRetry = task.result?.retryCount > 0
|
|
797
830
|
// `duration` is the duration of all the retries, so it can't be used if there are retries
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
})
|
|
831
|
+
testErrorCh.publish({
|
|
832
|
+
duration: isRetry ? undefined : duration,
|
|
833
|
+
error: testError,
|
|
834
|
+
hasFailedAllRetries,
|
|
835
|
+
attemptToFixFailed,
|
|
836
|
+
...testCtx.currentStore
|
|
805
837
|
})
|
|
806
838
|
}
|
|
807
839
|
if (errors?.length) {
|
|
@@ -831,14 +863,11 @@ addHook({
|
|
|
831
863
|
}
|
|
832
864
|
|
|
833
865
|
if (testSuiteError) {
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
})
|
|
866
|
+
testSuiteCtx.error = testSuiteError
|
|
867
|
+
testSuiteErrorCh.runStores(testSuiteCtx, () => {})
|
|
837
868
|
}
|
|
838
869
|
|
|
839
|
-
|
|
840
|
-
testSuiteFinishCh.publish({ status: testSuiteResult.state, onFinish })
|
|
841
|
-
})
|
|
870
|
+
testSuiteFinishCh.publish({ status: testSuiteResult.state, onFinish, ...testSuiteCtx.currentStore })
|
|
842
871
|
|
|
843
872
|
// TODO: fix too frequent flushes
|
|
844
873
|
await onFinishPromise
|
|
@@ -7,12 +7,14 @@ class Amqp10ConsumerPlugin extends ConsumerPlugin {
|
|
|
7
7
|
static get id () { return 'amqp10' }
|
|
8
8
|
static get system () { return 'amqp' }
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
bindStart (ctx) {
|
|
11
|
+
const { link } = ctx
|
|
12
|
+
|
|
11
13
|
const source = getShortName(link)
|
|
12
14
|
const address = getAddress(link)
|
|
13
15
|
|
|
14
16
|
this.startSpan({
|
|
15
|
-
resource: ['receive', source].filter(
|
|
17
|
+
resource: ['receive', source].filter(Boolean).join(' '),
|
|
16
18
|
type: 'worker',
|
|
17
19
|
meta: {
|
|
18
20
|
'amqp.link.source.address': source,
|
|
@@ -23,7 +25,9 @@ class Amqp10ConsumerPlugin extends ConsumerPlugin {
|
|
|
23
25
|
'amqp.connection.port': address.port,
|
|
24
26
|
'amqp.connection.user': address.user
|
|
25
27
|
}
|
|
26
|
-
})
|
|
28
|
+
}, ctx)
|
|
29
|
+
|
|
30
|
+
return ctx.currentStore
|
|
27
31
|
}
|
|
28
32
|
}
|
|
29
33
|
|
|
@@ -9,12 +9,14 @@ class Amqp10ProducerPlugin extends ProducerPlugin {
|
|
|
9
9
|
static get operation () { return 'send' }
|
|
10
10
|
static get system () { return 'amqp' }
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
bindStart (ctx) {
|
|
13
|
+
const { link } = ctx
|
|
14
|
+
|
|
13
15
|
const address = getAddress(link)
|
|
14
16
|
const target = getShortName(link)
|
|
15
17
|
|
|
16
18
|
this.startSpan({
|
|
17
|
-
resource: ['send', target].filter(
|
|
19
|
+
resource: ['send', target].filter(Boolean).join(' '),
|
|
18
20
|
meta: {
|
|
19
21
|
'amqp.link.target.address': target,
|
|
20
22
|
'amqp.link.role': 'sender',
|
|
@@ -26,7 +28,9 @@ class Amqp10ProducerPlugin extends ProducerPlugin {
|
|
|
26
28
|
'amqp.connection.port': address.port,
|
|
27
29
|
'amqp.connection.user': address.user
|
|
28
30
|
}
|
|
29
|
-
})
|
|
31
|
+
}, ctx)
|
|
32
|
+
|
|
33
|
+
return ctx.currentStore
|
|
30
34
|
}
|
|
31
35
|
}
|
|
32
36
|
|
|
@@ -10,7 +10,9 @@ class AmqplibClientPlugin extends ClientPlugin {
|
|
|
10
10
|
static get type () { return 'messaging' }
|
|
11
11
|
static get operation () { return 'command' }
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
bindStart (ctx) {
|
|
14
|
+
const { channel = {}, method, fields } = ctx
|
|
15
|
+
|
|
14
16
|
if (method === 'basic.deliver' || method === 'basic.get') return
|
|
15
17
|
if (method === 'basic.publish') return
|
|
16
18
|
|
|
@@ -29,11 +31,13 @@ class AmqplibClientPlugin extends ClientPlugin {
|
|
|
29
31
|
'amqp.source': fields.source,
|
|
30
32
|
'amqp.destination': fields.destination
|
|
31
33
|
}
|
|
32
|
-
})
|
|
34
|
+
}, ctx)
|
|
33
35
|
|
|
34
36
|
fields.headers = fields.headers || {}
|
|
35
37
|
|
|
36
38
|
this.tracer.inject(span, TEXT_MAP, fields.headers)
|
|
39
|
+
|
|
40
|
+
return ctx.currentStore
|
|
37
41
|
}
|
|
38
42
|
}
|
|
39
43
|
|
|
@@ -7,9 +7,11 @@ const { getResourceName } = require('./util')
|
|
|
7
7
|
|
|
8
8
|
class AmqplibConsumerPlugin extends ConsumerPlugin {
|
|
9
9
|
static get id () { return 'amqplib' }
|
|
10
|
-
static get operation () { return '
|
|
10
|
+
static get operation () { return 'consume' }
|
|
11
|
+
|
|
12
|
+
bindStart (ctx) {
|
|
13
|
+
const { method, fields, message, queue } = ctx
|
|
11
14
|
|
|
12
|
-
start ({ method, fields, message, queue }) {
|
|
13
15
|
if (method !== 'basic.deliver' && method !== 'basic.get') return
|
|
14
16
|
|
|
15
17
|
const childOf = extract(this.tracer, message)
|
|
@@ -27,7 +29,7 @@ class AmqplibConsumerPlugin extends ConsumerPlugin {
|
|
|
27
29
|
'amqp.source': fields.source,
|
|
28
30
|
'amqp.destination': fields.destination
|
|
29
31
|
}
|
|
30
|
-
})
|
|
32
|
+
}, ctx)
|
|
31
33
|
|
|
32
34
|
if (
|
|
33
35
|
this.config.dsmEnabled && message?.properties?.headers
|
|
@@ -37,6 +39,8 @@ class AmqplibConsumerPlugin extends ConsumerPlugin {
|
|
|
37
39
|
this.tracer
|
|
38
40
|
.setCheckpoint(['direction:in', `topic:${queueName}`, 'type:rabbitmq'], span, payloadSize)
|
|
39
41
|
}
|
|
42
|
+
|
|
43
|
+
return ctx.currentStore
|
|
40
44
|
}
|
|
41
45
|
}
|
|
42
46
|
|
|
@@ -8,9 +8,11 @@ const { getResourceName } = require('./util')
|
|
|
8
8
|
|
|
9
9
|
class AmqplibProducerPlugin extends ProducerPlugin {
|
|
10
10
|
static get id () { return 'amqplib' }
|
|
11
|
-
static get operation () { return '
|
|
11
|
+
static get operation () { return 'publish' }
|
|
12
|
+
|
|
13
|
+
bindStart (ctx) {
|
|
14
|
+
const { channel = {}, method, fields, message } = ctx
|
|
12
15
|
|
|
13
|
-
start ({ channel = {}, method, fields, message }) {
|
|
14
16
|
if (method !== 'basic.publish') return
|
|
15
17
|
|
|
16
18
|
const stream = (channel.connection && channel.connection.stream) || {}
|
|
@@ -26,7 +28,7 @@ class AmqplibProducerPlugin extends ProducerPlugin {
|
|
|
26
28
|
'amqp.source': fields.source,
|
|
27
29
|
'amqp.destination': fields.destination
|
|
28
30
|
}
|
|
29
|
-
})
|
|
31
|
+
}, ctx)
|
|
30
32
|
|
|
31
33
|
fields.headers = fields.headers || {}
|
|
32
34
|
|
|
@@ -49,6 +51,8 @@ class AmqplibProducerPlugin extends ProducerPlugin {
|
|
|
49
51
|
, span, payloadSize)
|
|
50
52
|
DsmPathwayCodec.encode(dataStreamsContext, fields.headers)
|
|
51
53
|
}
|
|
54
|
+
|
|
55
|
+
return ctx.currentStore
|
|
52
56
|
}
|
|
53
57
|
}
|
|
54
58
|
|
|
@@ -58,9 +58,8 @@ class ApolloGatewayRequestPlugin extends ApolloBasePlugin {
|
|
|
58
58
|
const errors = ctx?.result?.errors
|
|
59
59
|
// apollo gateway catches certain errors and returns them in the result object
|
|
60
60
|
// we want to capture these errors as spans
|
|
61
|
-
if (errors
|
|
62
|
-
|
|
63
|
-
ctx.currentStore.span.setTag('error', errors[errors.length - 1])
|
|
61
|
+
if (Array.isArray(errors) && errors.at(-1)?.stack && errors.at(-1).message) {
|
|
62
|
+
ctx.currentStore.span.setTag('error', errors.at(-1))
|
|
64
63
|
}
|
|
65
64
|
ctx.currentStore.span.finish()
|
|
66
65
|
return ctx.parentStore
|
|
@@ -91,7 +90,7 @@ function buildOperationContext (schema, operationDocument, operationName) {
|
|
|
91
90
|
break
|
|
92
91
|
}
|
|
93
92
|
})
|
|
94
|
-
} catch
|
|
93
|
+
} catch {
|
|
95
94
|
// safety net
|
|
96
95
|
}
|
|
97
96
|
|
|
@@ -113,12 +112,12 @@ function getSignature (document, operationName, operationType, calculate) {
|
|
|
113
112
|
}
|
|
114
113
|
|
|
115
114
|
return tools.defaultEngineReportingSignature(document, operationName)
|
|
116
|
-
} catch
|
|
115
|
+
} catch {
|
|
117
116
|
// safety net
|
|
118
117
|
}
|
|
119
118
|
}
|
|
120
119
|
|
|
121
|
-
return [operationType, operationName].filter(
|
|
120
|
+
return [operationType, operationName].filter(Boolean).join(' ')
|
|
122
121
|
}
|
|
123
122
|
|
|
124
123
|
module.exports = ApolloGatewayRequestPlugin
|