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
|
@@ -1,10 +1,22 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const METHODS = require('http').METHODS.map(v => v.toLowerCase())
|
|
3
|
+
const METHODS = [...require('http').METHODS.map(v => v.toLowerCase()), 'all']
|
|
4
4
|
const pathToRegExp = require('path-to-regexp')
|
|
5
5
|
const shimmer = require('../../datadog-shimmer')
|
|
6
6
|
const { addHook, channel } = require('./helpers/instrument')
|
|
7
7
|
|
|
8
|
+
function isFastStar (layer, matchers) {
|
|
9
|
+
return layer.regexp?.fast_star ?? matchers.some(matcher => matcher.path === '*')
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
function isFastSlash (layer, matchers) {
|
|
13
|
+
return layer.regexp?.fast_slash ?? matchers.some(matcher => matcher.path === '/')
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function flatten (arr) {
|
|
17
|
+
return arr.reduce((acc, val) => Array.isArray(val) ? acc.concat(flatten(val)) : acc.concat(val), [])
|
|
18
|
+
}
|
|
19
|
+
|
|
8
20
|
// TODO: Move this function to a shared file between Express and Router
|
|
9
21
|
function createWrapRouterMethod (name) {
|
|
10
22
|
const enterChannel = channel(`apm:${name}:middleware:enter`)
|
|
@@ -12,6 +24,7 @@ function createWrapRouterMethod (name) {
|
|
|
12
24
|
const finishChannel = channel(`apm:${name}:middleware:finish`)
|
|
13
25
|
const errorChannel = channel(`apm:${name}:middleware:error`)
|
|
14
26
|
const nextChannel = channel(`apm:${name}:middleware:next`)
|
|
27
|
+
const routeAddedChannel = channel(`apm:${name}:route:added`)
|
|
15
28
|
|
|
16
29
|
const layerMatchers = new WeakMap()
|
|
17
30
|
const regexpCache = Object.create(null)
|
|
@@ -36,16 +49,16 @@ function createWrapRouterMethod (name) {
|
|
|
36
49
|
|
|
37
50
|
if (matchers) {
|
|
38
51
|
// Try to guess which path actually matched
|
|
39
|
-
for (
|
|
40
|
-
if (
|
|
41
|
-
route =
|
|
52
|
+
for (const matcher of matchers) {
|
|
53
|
+
if (matcher.test(layer)) {
|
|
54
|
+
route = matcher.path
|
|
42
55
|
|
|
43
56
|
break
|
|
44
57
|
}
|
|
45
58
|
}
|
|
46
59
|
}
|
|
47
60
|
|
|
48
|
-
enterChannel.publish({ name, req, route })
|
|
61
|
+
enterChannel.publish({ name, req, route, layer })
|
|
49
62
|
|
|
50
63
|
try {
|
|
51
64
|
return original.apply(this, arguments)
|
|
@@ -114,26 +127,6 @@ function createWrapRouterMethod (name) {
|
|
|
114
127
|
}))
|
|
115
128
|
}
|
|
116
129
|
|
|
117
|
-
function isFastStar (layer, matchers) {
|
|
118
|
-
if (layer.regexp?.fast_star !== undefined) {
|
|
119
|
-
return layer.regexp.fast_star
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
return matchers.some(matcher => matcher.path === '*')
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
function isFastSlash (layer, matchers) {
|
|
126
|
-
if (layer.regexp?.fast_slash !== undefined) {
|
|
127
|
-
return layer.regexp.fast_slash
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
return matchers.some(matcher => matcher.path === '/')
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
function flatten (arr) {
|
|
134
|
-
return arr.reduce((acc, val) => Array.isArray(val) ? acc.concat(flatten(val)) : acc.concat(val), [])
|
|
135
|
-
}
|
|
136
|
-
|
|
137
130
|
function cachedPathToRegExp (pattern) {
|
|
138
131
|
const maybeCached = regexpCache[pattern]
|
|
139
132
|
if (maybeCached) {
|
|
@@ -153,6 +146,10 @@ function createWrapRouterMethod (name) {
|
|
|
153
146
|
this.stack = [{ handle: this.stack }]
|
|
154
147
|
}
|
|
155
148
|
|
|
149
|
+
if (routeAddedChannel.hasSubscribers) {
|
|
150
|
+
routeAddedChannel.publish({ topOfStackFunc: methodWithTrace, layer: this.stack[0] })
|
|
151
|
+
}
|
|
152
|
+
|
|
156
153
|
wrapStack(this.stack, offset, extractMatchers(fn))
|
|
157
154
|
|
|
158
155
|
return router
|
|
@@ -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,6 +26,7 @@ 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
31
|
const taskToCtx = new WeakMap()
|
|
30
32
|
const taskToStatuses = new WeakMap()
|
|
@@ -32,6 +34,7 @@ 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
|
}
|
|
@@ -575,11 +623,12 @@ addHook({
|
|
|
575
623
|
isAttemptToFix: attemptToFixTasks.has(task),
|
|
576
624
|
isDisabled: disabledTasks.has(task),
|
|
577
625
|
isQuarantined,
|
|
578
|
-
isRetryReasonAtr
|
|
626
|
+
isRetryReasonAtr,
|
|
627
|
+
isModified: modifiedTasks.has(task)
|
|
579
628
|
}
|
|
580
629
|
taskToCtx.set(task, ctx)
|
|
581
630
|
|
|
582
|
-
testStartCh.runStores(ctx, () => {
|
|
631
|
+
testStartCh.runStores(ctx, () => {})
|
|
583
632
|
return onBeforeTryTask.apply(this, arguments)
|
|
584
633
|
})
|
|
585
634
|
|
|
@@ -609,7 +658,7 @@ addHook({
|
|
|
609
658
|
if (statuses.length === testManagementAttemptToFixRetries) {
|
|
610
659
|
if (statuses.every(status => status === 'pass')) {
|
|
611
660
|
attemptToFixPassed = true
|
|
612
|
-
} else if (statuses.
|
|
661
|
+
} else if (statuses.includes('fail')) {
|
|
613
662
|
attemptToFixFailed = true
|
|
614
663
|
}
|
|
615
664
|
}
|
|
@@ -621,7 +670,7 @@ addHook({
|
|
|
621
670
|
ctx.task = task
|
|
622
671
|
ctx.attemptToFixPassed = attemptToFixPassed
|
|
623
672
|
ctx.attemptToFixFailed = attemptToFixFailed
|
|
624
|
-
testFinishTimeCh.runStores(ctx, () => {
|
|
673
|
+
testFinishTimeCh.runStores(ctx, () => {})
|
|
625
674
|
}
|
|
626
675
|
|
|
627
676
|
return result
|
|
@@ -726,7 +775,7 @@ addHook({
|
|
|
726
775
|
const testSuiteAbsolutePath = testPaths[0]?.filepath || testPaths[0]
|
|
727
776
|
|
|
728
777
|
const testSuiteCtx = { testSuiteAbsolutePath, frameworkVersion }
|
|
729
|
-
testSuiteStartCh.runStores(testSuiteCtx, () => {
|
|
778
|
+
testSuiteStartCh.runStores(testSuiteCtx, () => {})
|
|
730
779
|
const startTestsResponse = await startTests.apply(this, arguments)
|
|
731
780
|
|
|
732
781
|
let onFinish = null
|
|
@@ -768,7 +817,7 @@ addHook({
|
|
|
768
817
|
let attemptToFixFailed = false
|
|
769
818
|
if (attemptToFixTasks.has(task)) {
|
|
770
819
|
const statuses = taskToStatuses.get(task)
|
|
771
|
-
if (statuses.
|
|
820
|
+
if (statuses.includes('fail')) {
|
|
772
821
|
attemptToFixFailed = true
|
|
773
822
|
}
|
|
774
823
|
if (statuses.every(status => status === 'fail')) {
|
|
@@ -780,7 +829,7 @@ addHook({
|
|
|
780
829
|
const isRetry = task.result?.retryCount > 0
|
|
781
830
|
// `duration` is the duration of all the retries, so it can't be used if there are retries
|
|
782
831
|
testErrorCh.publish({
|
|
783
|
-
duration:
|
|
832
|
+
duration: isRetry ? undefined : duration,
|
|
784
833
|
error: testError,
|
|
785
834
|
hasFailedAllRetries,
|
|
786
835
|
attemptToFixFailed,
|
|
@@ -815,7 +864,7 @@ addHook({
|
|
|
815
864
|
|
|
816
865
|
if (testSuiteError) {
|
|
817
866
|
testSuiteCtx.error = testSuiteError
|
|
818
|
-
testSuiteErrorCh.runStores(testSuiteCtx, () => {
|
|
867
|
+
testSuiteErrorCh.runStores(testSuiteCtx, () => {})
|
|
819
868
|
}
|
|
820
869
|
|
|
821
870
|
testSuiteFinishCh.publish({ status: testSuiteResult.state, onFinish, ...testSuiteCtx.currentStore })
|
|
@@ -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
|
|
@@ -14,9 +14,8 @@ class ApolloGatewayValidatePlugin extends ApolloBasePlugin {
|
|
|
14
14
|
|
|
15
15
|
if (!span) return
|
|
16
16
|
|
|
17
|
-
if (result
|
|
18
|
-
|
|
19
|
-
span.setTag('error', result[result.length - 1])
|
|
17
|
+
if (Array.isArray(result) && result.at(-1)?.stack && result.at(-1).message) {
|
|
18
|
+
span.setTag('error', result.at(-1))
|
|
20
19
|
}
|
|
21
20
|
span.finish()
|
|
22
21
|
}
|
|
@@ -226,9 +226,10 @@ function normalizeConfig (config, serviceIdentifier) {
|
|
|
226
226
|
})
|
|
227
227
|
}
|
|
228
228
|
|
|
229
|
+
const noop = () => {}
|
|
230
|
+
|
|
229
231
|
function getHooks (config) {
|
|
230
|
-
const
|
|
231
|
-
const request = (config.hooks && config.hooks.request) || noop
|
|
232
|
+
const request = config.hooks?.request || noop
|
|
232
233
|
|
|
233
234
|
return { request }
|
|
234
235
|
}
|
|
@@ -3,14 +3,14 @@
|
|
|
3
3
|
const BaseAwsSdkPlugin = require('../../base')
|
|
4
4
|
const { parseModelId, extractRequestParams, extractTextAndResponseReason } = require('./utils')
|
|
5
5
|
|
|
6
|
-
const enabledOperations = ['invokeModel']
|
|
6
|
+
const enabledOperations = new Set(['invokeModel'])
|
|
7
7
|
|
|
8
8
|
class BedrockRuntime extends BaseAwsSdkPlugin {
|
|
9
9
|
static get id () { return 'bedrockruntime' }
|
|
10
10
|
|
|
11
11
|
isEnabled (request) {
|
|
12
12
|
const operation = request.operation
|
|
13
|
-
if (!enabledOperations.
|
|
13
|
+
if (!enabledOperations.has(operation)) {
|
|
14
14
|
return false
|
|
15
15
|
}
|
|
16
16
|
|