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
|
@@ -8,6 +8,7 @@ const {
|
|
|
8
8
|
PLAYWRIGHT_WORKER_TRACE_PAYLOAD_CODE
|
|
9
9
|
} = require('../../dd-trace/src/plugins/util/test')
|
|
10
10
|
const log = require('../../dd-trace/src/log')
|
|
11
|
+
const { DD_MAJOR } = require('../../../version')
|
|
11
12
|
|
|
12
13
|
const testStartCh = channel('ci:playwright:test:start')
|
|
13
14
|
const testFinishCh = channel('ci:playwright:test:finish')
|
|
@@ -18,6 +19,8 @@ const testSessionFinishCh = channel('ci:playwright:session:finish')
|
|
|
18
19
|
const libraryConfigurationCh = channel('ci:playwright:library-configuration')
|
|
19
20
|
const knownTestsCh = channel('ci:playwright:known-tests')
|
|
20
21
|
const testManagementTestsCh = channel('ci:playwright:test-management-tests')
|
|
22
|
+
const impactedTestsCh = channel('ci:playwright:modified-tests')
|
|
23
|
+
const isModifiedCh = channel('ci:playwright:test:is-modified')
|
|
21
24
|
|
|
22
25
|
const testSuiteStartCh = channel('ci:playwright:test-suite:start')
|
|
23
26
|
const testSuiteFinishCh = channel('ci:playwright:test-suite:finish')
|
|
@@ -53,9 +56,11 @@ let knownTests = {}
|
|
|
53
56
|
let isTestManagementTestsEnabled = false
|
|
54
57
|
let testManagementAttemptToFixRetries = 0
|
|
55
58
|
let testManagementTests = {}
|
|
59
|
+
let isImpactedTestsEnabled = false
|
|
60
|
+
let modifiedTests = {}
|
|
56
61
|
const quarantinedOrDisabledTestsAttemptToFix = []
|
|
57
62
|
let rootDir = ''
|
|
58
|
-
const MINIMUM_SUPPORTED_VERSION_RANGE_EFD = '>=1.38.0'
|
|
63
|
+
const MINIMUM_SUPPORTED_VERSION_RANGE_EFD = '>=1.38.0' // TODO: remove this once we drop support for v5
|
|
59
64
|
|
|
60
65
|
function getTestProperties (test) {
|
|
61
66
|
const testName = getTestFullname(test)
|
|
@@ -104,11 +109,7 @@ function deepCloneSuite (suite, filterTest, tags = []) {
|
|
|
104
109
|
|
|
105
110
|
function getTestsBySuiteFromTestGroups (testGroups) {
|
|
106
111
|
return testGroups.reduce((acc, { requireFile, tests }) => {
|
|
107
|
-
|
|
108
|
-
acc[requireFile] = acc[requireFile].concat(tests)
|
|
109
|
-
} else {
|
|
110
|
-
acc[requireFile] = tests
|
|
111
|
-
}
|
|
112
|
+
acc[requireFile] = acc[requireFile] ? acc[requireFile].concat(tests) : tests
|
|
112
113
|
return acc
|
|
113
114
|
}, {})
|
|
114
115
|
}
|
|
@@ -132,10 +133,10 @@ function getTestsBySuiteFromTestsById (testsById) {
|
|
|
132
133
|
function getPlaywrightConfig (playwrightRunner) {
|
|
133
134
|
try {
|
|
134
135
|
return playwrightRunner._configLoader.fullConfig()
|
|
135
|
-
} catch
|
|
136
|
+
} catch {
|
|
136
137
|
try {
|
|
137
138
|
return playwrightRunner._loader.fullConfig()
|
|
138
|
-
} catch
|
|
139
|
+
} catch {
|
|
139
140
|
return playwrightRunner._config || {}
|
|
140
141
|
}
|
|
141
142
|
}
|
|
@@ -235,14 +236,14 @@ function getTestByTestId (dispatcher, testId) {
|
|
|
235
236
|
}
|
|
236
237
|
}
|
|
237
238
|
|
|
238
|
-
function getChannelPromise (channelToPublishTo) {
|
|
239
|
+
function getChannelPromise (channelToPublishTo, params) {
|
|
239
240
|
return new Promise(resolve => {
|
|
240
241
|
testSessionAsyncResource.runInAsyncScope(() => {
|
|
241
|
-
channelToPublishTo.publish({ onDone: resolve })
|
|
242
|
+
channelToPublishTo.publish({ onDone: resolve, ...params })
|
|
242
243
|
})
|
|
243
244
|
})
|
|
244
245
|
}
|
|
245
|
-
|
|
246
|
+
|
|
246
247
|
// Inspired by https://github.com/microsoft/playwright/blob/2b77ed4d7aafa85a600caa0b0d101b72c8437eeb/packages/playwright/src/reporters/base.ts#L293
|
|
247
248
|
// We can't use test.outcome() directly because it's set on follow up handlers:
|
|
248
249
|
// our `testEndHandler` is called before the outcome is set.
|
|
@@ -281,7 +282,7 @@ function testBeginHandler (test, browserName, isMainProcess) {
|
|
|
281
282
|
startedSuites.push(testSuiteAbsolutePath)
|
|
282
283
|
const testSuiteCtx = { testSuiteAbsolutePath }
|
|
283
284
|
testSuiteToCtx.set(testSuiteAbsolutePath, testSuiteCtx)
|
|
284
|
-
testSuiteStartCh.runStores(testSuiteCtx, () => {
|
|
285
|
+
testSuiteStartCh.runStores(testSuiteCtx, () => {})
|
|
285
286
|
}
|
|
286
287
|
|
|
287
288
|
// We disable retries by default if attemptToFix is true
|
|
@@ -301,7 +302,7 @@ function testBeginHandler (test, browserName, isMainProcess) {
|
|
|
301
302
|
}
|
|
302
303
|
testToCtx.set(test, testCtx)
|
|
303
304
|
|
|
304
|
-
testStartCh.runStores(testCtx, () => {
|
|
305
|
+
testStartCh.runStores(testCtx, () => {})
|
|
305
306
|
}
|
|
306
307
|
}
|
|
307
308
|
|
|
@@ -333,7 +334,7 @@ function testEndHandler (test, annotations, testStatus, error, isTimeout, isMain
|
|
|
333
334
|
}
|
|
334
335
|
|
|
335
336
|
if (testStatuses.length === testManagementAttemptToFixRetries + 1) {
|
|
336
|
-
if (testStatuses.
|
|
337
|
+
if (testStatuses.includes('fail')) {
|
|
337
338
|
test._ddHasFailedAttemptToFixRetries = true
|
|
338
339
|
}
|
|
339
340
|
if (testStatuses.every(status => status === 'fail')) {
|
|
@@ -345,7 +346,7 @@ function testEndHandler (test, annotations, testStatus, error, isTimeout, isMain
|
|
|
345
346
|
|
|
346
347
|
// this handles tests that do not go through the worker process (because they're skipped)
|
|
347
348
|
if (isMainProcess) {
|
|
348
|
-
const testResult = results
|
|
349
|
+
const testResult = results.at(-1)
|
|
349
350
|
const testCtx = testToCtx.get(test)
|
|
350
351
|
const isAtrRetry = testResult?.retry > 0 &&
|
|
351
352
|
isFlakyTestRetriesEnabled &&
|
|
@@ -366,6 +367,7 @@ function testEndHandler (test, annotations, testStatus, error, isTimeout, isMain
|
|
|
366
367
|
hasPassedAttemptToFixRetries: test._ddHasPassedAttemptToFixRetries,
|
|
367
368
|
hasFailedAttemptToFixRetries: test._ddHasFailedAttemptToFixRetries,
|
|
368
369
|
isAtrRetry,
|
|
370
|
+
isModified: test._ddIsModified,
|
|
369
371
|
...testCtx.currentStore
|
|
370
372
|
})
|
|
371
373
|
}
|
|
@@ -389,7 +391,7 @@ function testEndHandler (test, annotations, testStatus, error, isTimeout, isMain
|
|
|
389
391
|
if (!remainingTestsByFile[testSuiteAbsolutePath].length) {
|
|
390
392
|
const testStatuses = testSuiteToTestStatuses.get(testSuiteAbsolutePath)
|
|
391
393
|
let testSuiteStatus = 'pass'
|
|
392
|
-
if (testStatuses.
|
|
394
|
+
if (testStatuses.includes('fail')) {
|
|
393
395
|
testSuiteStatus = 'fail'
|
|
394
396
|
} else if (testStatuses.every(status => status === 'skip')) {
|
|
395
397
|
testSuiteStatus = 'skip'
|
|
@@ -413,7 +415,7 @@ function dispatcherRunWrapperNew (run) {
|
|
|
413
415
|
if (!this._allTests) {
|
|
414
416
|
// Removed in https://github.com/microsoft/playwright/commit/1e52c37b254a441cccf332520f60225a5acc14c7
|
|
415
417
|
// Not available from >=1.44.0
|
|
416
|
-
this._ddAllTests = testGroups.
|
|
418
|
+
this._ddAllTests = testGroups.flatMap(g => g.tests)
|
|
417
419
|
}
|
|
418
420
|
remainingTestsByFile = getTestsBySuiteFromTestGroups(arguments[0])
|
|
419
421
|
return run.apply(this, arguments)
|
|
@@ -435,7 +437,7 @@ function dispatcherHook (dispatcherExport) {
|
|
|
435
437
|
const { test } = dispatcher._testById.get(params.testId)
|
|
436
438
|
|
|
437
439
|
const { results } = test
|
|
438
|
-
const testResult = results
|
|
440
|
+
const testResult = results.at(-1)
|
|
439
441
|
|
|
440
442
|
const isTimeout = testResult.status === 'timedOut'
|
|
441
443
|
testEndHandler(
|
|
@@ -471,7 +473,7 @@ function dispatcherHookNew (dispatcherExport, runWrapper) {
|
|
|
471
473
|
|
|
472
474
|
const isTimeout = status === 'timedOut'
|
|
473
475
|
testEndHandler(test, annotations, STATUS_TO_TEST_STATUS[status], errors && errors[0], isTimeout, false)
|
|
474
|
-
const testResult = test.results
|
|
476
|
+
const testResult = test.results.at(-1)
|
|
475
477
|
const isAtrRetry = testResult?.retry > 0 &&
|
|
476
478
|
isFlakyTestRetriesEnabled &&
|
|
477
479
|
!test._ddIsAttemptToFix &&
|
|
@@ -490,7 +492,8 @@ function dispatcherHookNew (dispatcherExport, runWrapper) {
|
|
|
490
492
|
_ddHasFailedAllRetries: test._ddHasFailedAllRetries,
|
|
491
493
|
_ddHasPassedAttemptToFixRetries: test._ddHasPassedAttemptToFixRetries,
|
|
492
494
|
_ddHasFailedAttemptToFixRetries: test._ddHasFailedAttemptToFixRetries,
|
|
493
|
-
_ddIsAtrRetry: isAtrRetry
|
|
495
|
+
_ddIsAtrRetry: isAtrRetry,
|
|
496
|
+
_ddIsModified: test._ddIsModified
|
|
494
497
|
}
|
|
495
498
|
})
|
|
496
499
|
})
|
|
@@ -522,22 +525,24 @@ function runnerHook (runnerExport, playwrightVersion) {
|
|
|
522
525
|
flakyTestRetriesCount = libraryConfig.flakyTestRetriesCount
|
|
523
526
|
isTestManagementTestsEnabled = libraryConfig.isTestManagementEnabled
|
|
524
527
|
testManagementAttemptToFixRetries = libraryConfig.testManagementAttemptToFixRetries
|
|
528
|
+
isImpactedTestsEnabled = libraryConfig.isImpactedTestsEnabled
|
|
525
529
|
}
|
|
526
530
|
} catch (e) {
|
|
527
531
|
isEarlyFlakeDetectionEnabled = false
|
|
528
532
|
isKnownTestsEnabled = false
|
|
529
533
|
isTestManagementTestsEnabled = false
|
|
534
|
+
isImpactedTestsEnabled = false
|
|
530
535
|
log.error('Playwright session start error', e)
|
|
531
536
|
}
|
|
532
537
|
|
|
533
538
|
if (isKnownTestsEnabled && satisfies(playwrightVersion, MINIMUM_SUPPORTED_VERSION_RANGE_EFD)) {
|
|
534
539
|
try {
|
|
535
540
|
const { err, knownTests: receivedKnownTests } = await getChannelPromise(knownTestsCh)
|
|
536
|
-
if (
|
|
537
|
-
knownTests = receivedKnownTests
|
|
538
|
-
} else {
|
|
541
|
+
if (err) {
|
|
539
542
|
isEarlyFlakeDetectionEnabled = false
|
|
540
543
|
isKnownTestsEnabled = false
|
|
544
|
+
} else {
|
|
545
|
+
knownTests = receivedKnownTests
|
|
541
546
|
}
|
|
542
547
|
} catch (err) {
|
|
543
548
|
isEarlyFlakeDetectionEnabled = false
|
|
@@ -549,10 +554,10 @@ function runnerHook (runnerExport, playwrightVersion) {
|
|
|
549
554
|
if (isTestManagementTestsEnabled && satisfies(playwrightVersion, MINIMUM_SUPPORTED_VERSION_RANGE_EFD)) {
|
|
550
555
|
try {
|
|
551
556
|
const { err, testManagementTests: receivedTestManagementTests } = await getChannelPromise(testManagementTestsCh)
|
|
552
|
-
if (
|
|
553
|
-
testManagementTests = receivedTestManagementTests
|
|
554
|
-
} else {
|
|
557
|
+
if (err) {
|
|
555
558
|
isTestManagementTestsEnabled = false
|
|
559
|
+
} else {
|
|
560
|
+
testManagementTests = receivedTestManagementTests
|
|
556
561
|
}
|
|
557
562
|
} catch (err) {
|
|
558
563
|
isTestManagementTestsEnabled = false
|
|
@@ -560,6 +565,20 @@ function runnerHook (runnerExport, playwrightVersion) {
|
|
|
560
565
|
}
|
|
561
566
|
}
|
|
562
567
|
|
|
568
|
+
if (isImpactedTestsEnabled && satisfies(playwrightVersion, MINIMUM_SUPPORTED_VERSION_RANGE_EFD)) {
|
|
569
|
+
try {
|
|
570
|
+
const { err, modifiedTests: receivedModifiedTests } = await getChannelPromise(impactedTestsCh)
|
|
571
|
+
if (err) {
|
|
572
|
+
isImpactedTestsEnabled = false
|
|
573
|
+
} else {
|
|
574
|
+
modifiedTests = receivedModifiedTests
|
|
575
|
+
}
|
|
576
|
+
} catch (err) {
|
|
577
|
+
isImpactedTestsEnabled = false
|
|
578
|
+
log.error('Playwright impacted tests error', err)
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
|
|
563
582
|
const projects = getProjectsFromRunner(this)
|
|
564
583
|
|
|
565
584
|
const shouldSetRetries = isFlakyTestRetriesEnabled &&
|
|
@@ -632,37 +651,38 @@ function runnerHook (runnerExport, playwrightVersion) {
|
|
|
632
651
|
return runnerExport
|
|
633
652
|
}
|
|
634
653
|
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
654
|
+
if (DD_MAJOR < 6) { // <1.38.0 is only supported up to version 5
|
|
655
|
+
addHook({
|
|
656
|
+
name: '@playwright/test',
|
|
657
|
+
file: 'lib/runner.js',
|
|
658
|
+
versions: ['>=1.18.0 <=1.30.0']
|
|
659
|
+
}, runnerHook)
|
|
660
|
+
|
|
661
|
+
addHook({
|
|
662
|
+
name: '@playwright/test',
|
|
663
|
+
file: 'lib/dispatcher.js',
|
|
664
|
+
versions: ['>=1.18.0 <1.30.0']
|
|
665
|
+
}, dispatcherHook)
|
|
666
|
+
|
|
667
|
+
addHook({
|
|
668
|
+
name: '@playwright/test',
|
|
669
|
+
file: 'lib/dispatcher.js',
|
|
670
|
+
versions: ['>=1.30.0 <1.31.0']
|
|
671
|
+
}, (dispatcher) => dispatcherHookNew(dispatcher, dispatcherRunWrapper))
|
|
672
|
+
|
|
673
|
+
addHook({
|
|
674
|
+
name: '@playwright/test',
|
|
675
|
+
file: 'lib/runner/dispatcher.js',
|
|
676
|
+
versions: ['>=1.31.0 <1.38.0']
|
|
677
|
+
}, (dispatcher) => dispatcherHookNew(dispatcher, dispatcherRunWrapperNew))
|
|
678
|
+
|
|
679
|
+
addHook({
|
|
680
|
+
name: '@playwright/test',
|
|
681
|
+
file: 'lib/runner/runner.js',
|
|
682
|
+
versions: ['>=1.31.0 <1.38.0']
|
|
683
|
+
}, runnerHook)
|
|
684
|
+
}
|
|
664
685
|
|
|
665
|
-
// From >=1.38.0
|
|
666
686
|
addHook({
|
|
667
687
|
name: 'playwright',
|
|
668
688
|
file: 'lib/runner/runner.js',
|
|
@@ -675,11 +695,10 @@ addHook({
|
|
|
675
695
|
versions: ['>=1.38.0']
|
|
676
696
|
}, (dispatcher) => dispatcherHookNew(dispatcher, dispatcherRunWrapperNew))
|
|
677
697
|
|
|
678
|
-
// Hook used for early flake detection. EFD only works from >=1.38.0
|
|
679
698
|
addHook({
|
|
680
699
|
name: 'playwright',
|
|
681
700
|
file: 'lib/common/suiteUtils.js',
|
|
682
|
-
versions: [
|
|
701
|
+
versions: ['>=1.38.0']
|
|
683
702
|
}, suiteUtilsPackage => {
|
|
684
703
|
// We grab `applyRepeatEachIndex` to use it later
|
|
685
704
|
// `applyRepeatEachIndex` needs to be applied to a cloned suite
|
|
@@ -687,16 +706,15 @@ addHook({
|
|
|
687
706
|
return suiteUtilsPackage
|
|
688
707
|
})
|
|
689
708
|
|
|
690
|
-
// Hook used for early flake detection. EFD only works from >=1.38.0
|
|
691
709
|
addHook({
|
|
692
710
|
name: 'playwright',
|
|
693
711
|
file: 'lib/runner/loadUtils.js',
|
|
694
|
-
versions: [
|
|
712
|
+
versions: ['>=1.38.0']
|
|
695
713
|
}, (loadUtilsPackage) => {
|
|
696
714
|
const oldCreateRootSuite = loadUtilsPackage.createRootSuite
|
|
697
715
|
|
|
698
716
|
async function newCreateRootSuite () {
|
|
699
|
-
if (!isKnownTestsEnabled && !isTestManagementTestsEnabled) {
|
|
717
|
+
if (!isKnownTestsEnabled && !isTestManagementTestsEnabled && !isImpactedTestsEnabled) {
|
|
700
718
|
return oldCreateRootSuite.apply(this, arguments)
|
|
701
719
|
}
|
|
702
720
|
const rootSuite = await oldCreateRootSuite.apply(this, arguments)
|
|
@@ -735,13 +753,41 @@ addHook({
|
|
|
735
753
|
}
|
|
736
754
|
}
|
|
737
755
|
|
|
756
|
+
if (isImpactedTestsEnabled) {
|
|
757
|
+
for (const test of allTests) {
|
|
758
|
+
const isNew = isKnownTestsEnabled && isNewTest(test)
|
|
759
|
+
const { isModified } = await getChannelPromise(isModifiedCh, {
|
|
760
|
+
filePath: test._requireFile,
|
|
761
|
+
modifiedTests
|
|
762
|
+
})
|
|
763
|
+
if (isModified) {
|
|
764
|
+
test._ddIsModified = true
|
|
765
|
+
}
|
|
766
|
+
if (isEarlyFlakeDetectionEnabled && test.expectedStatus !== 'skipped') {
|
|
767
|
+
const fileSuite = getSuiteType(test, 'file')
|
|
768
|
+
const projectSuite = getSuiteType(test, 'project')
|
|
769
|
+
// If something change in the file, all tests in the file are impacted
|
|
770
|
+
const isModifiedTest = () => isModified
|
|
771
|
+
for (let repeatEachIndex = 1; repeatEachIndex <= earlyFlakeDetectionNumRetries; repeatEachIndex++) {
|
|
772
|
+
const copyFileSuite = deepCloneSuite(fileSuite, isModifiedTest, [
|
|
773
|
+
isNew && '_ddIsNew',
|
|
774
|
+
'_ddIsModified',
|
|
775
|
+
'_ddIsEfdRetry'
|
|
776
|
+
])
|
|
777
|
+
applyRepeatEachIndex(projectSuite._fullProject, copyFileSuite, repeatEachIndex + 1)
|
|
778
|
+
projectSuite._addSuite(copyFileSuite)
|
|
779
|
+
}
|
|
780
|
+
}
|
|
781
|
+
}
|
|
782
|
+
}
|
|
783
|
+
|
|
738
784
|
if (isKnownTestsEnabled) {
|
|
739
785
|
const newTests = allTests.filter(isNewTest)
|
|
740
786
|
|
|
741
787
|
for (const newTest of newTests) {
|
|
742
788
|
// No need to filter out attempt to fix tests here because attempt to fix tests are never new
|
|
743
789
|
newTest._ddIsNew = true
|
|
744
|
-
if (isEarlyFlakeDetectionEnabled && newTest.expectedStatus !== 'skipped') {
|
|
790
|
+
if (isEarlyFlakeDetectionEnabled && newTest.expectedStatus !== 'skipped' && !newTest._ddIsModified) {
|
|
745
791
|
const fileSuite = getSuiteType(newTest, 'file')
|
|
746
792
|
const projectSuite = getSuiteType(newTest, 'project')
|
|
747
793
|
for (let repeatEachIndex = 1; repeatEachIndex <= earlyFlakeDetectionNumRetries; repeatEachIndex++) {
|
|
@@ -814,11 +860,7 @@ addHook({
|
|
|
814
860
|
try {
|
|
815
861
|
if (page) {
|
|
816
862
|
const isRumActive = await page.evaluate(() => {
|
|
817
|
-
|
|
818
|
-
return !!window.DD_RUM.getInternalContext()
|
|
819
|
-
} else {
|
|
820
|
-
return false
|
|
821
|
-
}
|
|
863
|
+
return window.DD_RUM && window.DD_RUM.getInternalContext ? !!window.DD_RUM.getInternalContext() : false
|
|
822
864
|
})
|
|
823
865
|
|
|
824
866
|
if (isRumActive) {
|
|
@@ -828,7 +870,7 @@ addHook({
|
|
|
828
870
|
})
|
|
829
871
|
}
|
|
830
872
|
}
|
|
831
|
-
} catch
|
|
873
|
+
} catch {
|
|
832
874
|
// ignore errors such as redirects, context destroyed, etc
|
|
833
875
|
}
|
|
834
876
|
|
|
@@ -916,7 +958,7 @@ addHook({
|
|
|
916
958
|
}
|
|
917
959
|
}
|
|
918
960
|
}
|
|
919
|
-
} catch
|
|
961
|
+
} catch {
|
|
920
962
|
// ignore errors
|
|
921
963
|
}
|
|
922
964
|
},
|
|
@@ -984,6 +1026,7 @@ addHook({
|
|
|
984
1026
|
hasPassedAttemptToFixRetries: test._ddHasPassedAttemptToFixRetries,
|
|
985
1027
|
hasFailedAttemptToFixRetries: test._ddHasFailedAttemptToFixRetries,
|
|
986
1028
|
isAtrRetry: test._ddIsAtrRetry,
|
|
1029
|
+
isModified: test._ddIsModified,
|
|
987
1030
|
onDone,
|
|
988
1031
|
...testCtx.currentStore
|
|
989
1032
|
})
|
|
@@ -47,7 +47,7 @@ function wrapCommandQueueClass (cls) {
|
|
|
47
47
|
if (parsed) {
|
|
48
48
|
this._url = { host: parsed.hostname, port: +parsed.port || 6379 }
|
|
49
49
|
}
|
|
50
|
-
} catch
|
|
50
|
+
} catch {
|
|
51
51
|
// ignore
|
|
52
52
|
}
|
|
53
53
|
}
|
|
@@ -130,8 +130,8 @@ addHook({ name: 'redis', versions: ['>=0.12 <2.6'] }, redis => {
|
|
|
130
130
|
if (typeof callback === 'function') {
|
|
131
131
|
const cb = callbackResource.bind(callback)
|
|
132
132
|
arguments[2] = asyncResource.bind(wrapCallback(finishCh, errorCh, cb))
|
|
133
|
-
} else if (Array.isArray(args) && typeof args
|
|
134
|
-
const cb = callbackResource.bind(args
|
|
133
|
+
} else if (Array.isArray(args) && typeof args.at(-1) === 'function') {
|
|
134
|
+
const cb = callbackResource.bind(args.at(-1))
|
|
135
135
|
args[args.length - 1] = asyncResource.bind(wrapCallback(finishCh, errorCh, cb))
|
|
136
136
|
} else {
|
|
137
137
|
arguments[2] = asyncResource.bind(wrapCallback(finishCh, errorCh))
|
|
@@ -20,8 +20,8 @@ function wrapSetupRequest (setupRequest) {
|
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
function wrapMethod (method) {
|
|
23
|
-
return function (path) {
|
|
24
|
-
const middleware = wrapMiddleware(
|
|
23
|
+
return function (path, ...rest) {
|
|
24
|
+
const middleware = wrapMiddleware(rest)
|
|
25
25
|
|
|
26
26
|
return method.apply(this, [path].concat(middleware))
|
|
27
27
|
}
|
|
@@ -2,8 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
const {
|
|
4
4
|
channel,
|
|
5
|
-
addHook
|
|
6
|
-
AsyncResource
|
|
5
|
+
addHook
|
|
7
6
|
} = require('./helpers/instrument')
|
|
8
7
|
const shimmer = require('../../datadog-shimmer')
|
|
9
8
|
|
|
@@ -49,21 +48,17 @@ addHook({ name: 'rhea', versions: ['>=1'], file: 'lib/link.js' }, obj => {
|
|
|
49
48
|
? this.options.target.address
|
|
50
49
|
: undefined
|
|
51
50
|
|
|
52
|
-
const
|
|
53
|
-
return
|
|
54
|
-
startSendCh.publish({ targetAddress, host, port, msg })
|
|
51
|
+
const ctx = { targetAddress, host, port, msg, connection: this.connection }
|
|
52
|
+
return startSendCh.runStores(ctx, () => {
|
|
55
53
|
const delivery = send.apply(this, arguments)
|
|
56
|
-
|
|
57
|
-
asyncResource,
|
|
58
|
-
connection: this.connection
|
|
59
|
-
}
|
|
60
|
-
contexts.set(delivery, context)
|
|
54
|
+
contexts.set(delivery, ctx)
|
|
61
55
|
|
|
62
56
|
addToInFlightDeliveries(this.connection, delivery)
|
|
63
57
|
try {
|
|
64
58
|
return delivery
|
|
65
59
|
} catch (err) {
|
|
66
|
-
|
|
60
|
+
ctx.error = err
|
|
61
|
+
errorSendCh.publish(ctx)
|
|
67
62
|
|
|
68
63
|
throw err
|
|
69
64
|
}
|
|
@@ -77,23 +72,18 @@ addHook({ name: 'rhea', versions: ['>=1'], file: 'lib/link.js' }, obj => {
|
|
|
77
72
|
}
|
|
78
73
|
|
|
79
74
|
if (eventName === 'message' && msgObj) {
|
|
80
|
-
const
|
|
81
|
-
return
|
|
82
|
-
startReceiveCh.publish({ msgObj, connection: this.connection })
|
|
83
|
-
|
|
75
|
+
const ctx = { msgObj, connection: this.connection }
|
|
76
|
+
return startReceiveCh.runStores(ctx, () => {
|
|
84
77
|
if (msgObj.delivery) {
|
|
85
|
-
|
|
86
|
-
asyncResource,
|
|
87
|
-
connection: this.connection
|
|
88
|
-
}
|
|
89
|
-
contexts.set(msgObj.delivery, context)
|
|
78
|
+
contexts.set(msgObj.delivery, ctx)
|
|
90
79
|
msgObj.delivery.update = wrapDeliveryUpdate(msgObj.delivery, msgObj.delivery.update)
|
|
91
80
|
addToInFlightDeliveries(this.connection, msgObj.delivery)
|
|
92
81
|
}
|
|
93
82
|
try {
|
|
94
83
|
return dispatch.apply(this, arguments)
|
|
95
84
|
} catch (err) {
|
|
96
|
-
|
|
85
|
+
ctx.error = err
|
|
86
|
+
errorReceiveCh.publish(ctx)
|
|
97
87
|
|
|
98
88
|
throw err
|
|
99
89
|
}
|
|
@@ -111,16 +101,14 @@ addHook({ name: 'rhea', versions: ['>=1'], file: 'lib/connection.js' }, Connecti
|
|
|
111
101
|
const error = obj.error || this.saved_error
|
|
112
102
|
if (this[inFlightDeliveries]) {
|
|
113
103
|
this[inFlightDeliveries].forEach(delivery => {
|
|
114
|
-
const
|
|
115
|
-
const asyncResource = context && context.asyncResource
|
|
104
|
+
const ctx = contexts.get(delivery)
|
|
116
105
|
|
|
117
|
-
if (!
|
|
106
|
+
if (!ctx) return
|
|
118
107
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
})
|
|
108
|
+
ctx.error = error
|
|
109
|
+
errorReceiveCh.publish(ctx)
|
|
110
|
+
exports.beforeFinish(delivery, null)
|
|
111
|
+
finishReceiveCh.publish(ctx)
|
|
124
112
|
})
|
|
125
113
|
}
|
|
126
114
|
}
|
|
@@ -149,15 +137,15 @@ function getHostAndPort (connection) {
|
|
|
149
137
|
}
|
|
150
138
|
|
|
151
139
|
function wrapDeliveryUpdate (obj, update) {
|
|
152
|
-
const
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
})
|
|
140
|
+
const ctx = contexts.get(obj)
|
|
141
|
+
if (obj && ctx) {
|
|
142
|
+
const cb = update
|
|
143
|
+
return shimmer.wrapFunction(cb, cb => function wrappedUpdate (settled, stateData) {
|
|
144
|
+
ctx.state = getStateFromData(stateData)
|
|
145
|
+
dispatchReceiveCh.runStores(ctx, () => {
|
|
146
|
+
return cb.apply(this, arguments)
|
|
147
|
+
})
|
|
148
|
+
})
|
|
161
149
|
}
|
|
162
150
|
return function wrappedUpdate (settled, stateData) {
|
|
163
151
|
return update.apply(this, arguments)
|
|
@@ -167,7 +155,8 @@ function wrapDeliveryUpdate (obj, update) {
|
|
|
167
155
|
function patchCircularBuffer (proto, Session) {
|
|
168
156
|
Object.defineProperty(proto, 'outgoing', {
|
|
169
157
|
configurable: true,
|
|
170
|
-
|
|
158
|
+
// eslint-disable-next-line getter-return
|
|
159
|
+
get () {},
|
|
171
160
|
set (outgoing) {
|
|
172
161
|
delete proto.outgoing // removes the setter on the prototype
|
|
173
162
|
this.outgoing = outgoing // assigns on the instance, like normal
|
|
@@ -178,27 +167,25 @@ function patchCircularBuffer (proto, Session) {
|
|
|
178
167
|
}
|
|
179
168
|
if (CircularBuffer && !patched.has(CircularBuffer.prototype)) {
|
|
180
169
|
shimmer.wrap(CircularBuffer.prototype, 'pop_if', popIf => function (fn) {
|
|
181
|
-
arguments[0] = shimmer.wrapFunction(fn, fn =>
|
|
182
|
-
const
|
|
183
|
-
const asyncResource = context && context.asyncResource
|
|
170
|
+
arguments[0] = shimmer.wrapFunction(fn, fn => function (entry) {
|
|
171
|
+
const ctx = contexts.get(entry)
|
|
184
172
|
|
|
185
|
-
if (!
|
|
173
|
+
if (!ctx) return fn(entry)
|
|
186
174
|
|
|
187
|
-
const shouldPop =
|
|
175
|
+
const shouldPop = fn(entry)
|
|
188
176
|
|
|
189
177
|
if (shouldPop) {
|
|
190
178
|
const remoteState = entry.remote_state
|
|
191
179
|
const state = remoteState && remoteState.constructor
|
|
192
180
|
? entry.remote_state.constructor.composite_type
|
|
193
181
|
: undefined
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
})
|
|
182
|
+
ctx.state = state
|
|
183
|
+
exports.beforeFinish(entry, state)
|
|
184
|
+
finishSendCh.publish(ctx)
|
|
198
185
|
}
|
|
199
186
|
|
|
200
187
|
return shouldPop
|
|
201
|
-
})
|
|
188
|
+
})
|
|
202
189
|
return popIf.apply(this, arguments)
|
|
203
190
|
})
|
|
204
191
|
patched.add(CircularBuffer.prototype)
|
|
@@ -222,13 +209,14 @@ function addToInFlightDeliveries (connection, delivery) {
|
|
|
222
209
|
}
|
|
223
210
|
|
|
224
211
|
function beforeFinish (delivery, state) {
|
|
225
|
-
const
|
|
226
|
-
if (
|
|
212
|
+
const ctx = contexts.get(delivery)
|
|
213
|
+
if (ctx) {
|
|
227
214
|
if (state) {
|
|
228
|
-
|
|
215
|
+
ctx.state = state
|
|
216
|
+
dispatchReceiveCh.publish(ctx)
|
|
229
217
|
}
|
|
230
|
-
if (
|
|
231
|
-
|
|
218
|
+
if (ctx.connection && ctx.connection[inFlightDeliveries]) {
|
|
219
|
+
ctx.connection[inFlightDeliveries].delete(delivery)
|
|
232
220
|
}
|
|
233
221
|
}
|
|
234
222
|
}
|