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
|
@@ -37,7 +37,9 @@ const {
|
|
|
37
37
|
TEST_MANAGEMENT_IS_ATTEMPT_TO_FIX,
|
|
38
38
|
TEST_HAS_FAILED_ALL_RETRIES,
|
|
39
39
|
TEST_MANAGEMENT_ATTEMPT_TO_FIX_PASSED,
|
|
40
|
-
TEST_RETRY_REASON_TYPES
|
|
40
|
+
TEST_RETRY_REASON_TYPES,
|
|
41
|
+
TEST_IS_MODIFIED,
|
|
42
|
+
isModifiedTest
|
|
41
43
|
} = require('../../dd-trace/src/plugins/util/test')
|
|
42
44
|
const { COMPONENT } = require('../../dd-trace/src/constants')
|
|
43
45
|
const {
|
|
@@ -131,11 +133,9 @@ class MochaPlugin extends CiPlugin {
|
|
|
131
133
|
testSuiteMetadata[TEST_ITR_FORCED_RUN] = 'true'
|
|
132
134
|
this.telemetry.count(TELEMETRY_ITR_FORCED_TO_RUN, { testLevel: 'suite' })
|
|
133
135
|
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
testSuiteMetadata[TEST_SOURCE_FILE] = testSuite
|
|
138
|
-
}
|
|
136
|
+
testSuiteMetadata[TEST_SOURCE_FILE] = this.repositoryRoot !== this.sourceRoot && !!this.repositoryRoot
|
|
137
|
+
? getTestSuitePath(testSuiteAbsolutePath, this.repositoryRoot)
|
|
138
|
+
: testSuite
|
|
139
139
|
if (testSuiteMetadata[TEST_SOURCE_FILE]) {
|
|
140
140
|
testSuiteMetadata[TEST_SOURCE_START] = 1
|
|
141
141
|
}
|
|
@@ -192,6 +192,19 @@ class MochaPlugin extends CiPlugin {
|
|
|
192
192
|
return ctx.currentStore
|
|
193
193
|
})
|
|
194
194
|
|
|
195
|
+
this.addSub('ci:mocha:test:is-modified', ({ modifiedTests, file, onDone }) => {
|
|
196
|
+
const testPath = getTestSuitePath(file, this.repositoryRoot)
|
|
197
|
+
const isModified = isModifiedTest(
|
|
198
|
+
testPath,
|
|
199
|
+
null,
|
|
200
|
+
null,
|
|
201
|
+
modifiedTests,
|
|
202
|
+
this.constructor.id
|
|
203
|
+
)
|
|
204
|
+
|
|
205
|
+
onDone(isModified)
|
|
206
|
+
})
|
|
207
|
+
|
|
195
208
|
this.addBind('ci:mocha:test:fn', (ctx) => {
|
|
196
209
|
return ctx.currentStore
|
|
197
210
|
})
|
|
@@ -466,7 +479,8 @@ class MochaPlugin extends CiPlugin {
|
|
|
466
479
|
isParallel,
|
|
467
480
|
isAttemptToFix,
|
|
468
481
|
isDisabled,
|
|
469
|
-
isQuarantined
|
|
482
|
+
isQuarantined,
|
|
483
|
+
isModified
|
|
470
484
|
} = testInfo
|
|
471
485
|
|
|
472
486
|
const extraTags = {}
|
|
@@ -495,20 +509,26 @@ class MochaPlugin extends CiPlugin {
|
|
|
495
509
|
extraTags[TEST_MANAGEMENT_IS_QUARANTINED] = 'true'
|
|
496
510
|
}
|
|
497
511
|
|
|
512
|
+
if (isModified) {
|
|
513
|
+
extraTags[TEST_IS_MODIFIED] = 'true'
|
|
514
|
+
if (isEfdRetry) {
|
|
515
|
+
extraTags[TEST_IS_RETRY] = 'true'
|
|
516
|
+
extraTags[TEST_RETRY_REASON] = TEST_RETRY_REASON_TYPES.efd
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
|
|
498
520
|
const testSuite = getTestSuitePath(testSuiteAbsolutePath, this.sourceRoot)
|
|
499
521
|
const testSuiteSpan = this._testSuites.get(testSuite)
|
|
500
522
|
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
extraTags[TEST_SOURCE_FILE] = testSuite
|
|
505
|
-
}
|
|
523
|
+
extraTags[TEST_SOURCE_FILE] = this.repositoryRoot !== this.sourceRoot && !!this.repositoryRoot
|
|
524
|
+
? getTestSuitePath(testSuiteAbsolutePath, this.repositoryRoot)
|
|
525
|
+
: testSuite
|
|
506
526
|
|
|
507
527
|
if (isNew) {
|
|
508
528
|
extraTags[TEST_IS_NEW] = 'true'
|
|
509
529
|
if (isEfdRetry) {
|
|
510
530
|
extraTags[TEST_IS_RETRY] = 'true'
|
|
511
|
-
extraTags[TEST_RETRY_REASON] =
|
|
531
|
+
extraTags[TEST_RETRY_REASON] = TEST_RETRY_REASON_TYPES.efd
|
|
512
532
|
}
|
|
513
533
|
}
|
|
514
534
|
|
|
@@ -103,7 +103,7 @@ function getResource (plugin, ns, query, operationName) {
|
|
|
103
103
|
}
|
|
104
104
|
|
|
105
105
|
function truncate (input) {
|
|
106
|
-
return input.slice(0, Math.min(input.length,
|
|
106
|
+
return input.slice(0, Math.min(input.length, 10_000))
|
|
107
107
|
}
|
|
108
108
|
|
|
109
109
|
function shouldSimplify (input) {
|
|
@@ -7,22 +7,24 @@ class MySQLPlugin extends DatabasePlugin {
|
|
|
7
7
|
static get id () { return 'mysql' }
|
|
8
8
|
static get system () { return 'mysql' }
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
const service = this.serviceName({ pluginConfig: this.config, dbConfig:
|
|
10
|
+
bindStart (ctx) {
|
|
11
|
+
const service = this.serviceName({ pluginConfig: this.config, dbConfig: ctx.conf, system: this.system })
|
|
12
12
|
const span = this.startSpan(this.operationName(), {
|
|
13
13
|
service,
|
|
14
|
-
resource:
|
|
14
|
+
resource: ctx.sql,
|
|
15
15
|
type: 'sql',
|
|
16
16
|
kind: 'client',
|
|
17
17
|
meta: {
|
|
18
18
|
'db.type': this.system,
|
|
19
|
-
'db.user':
|
|
20
|
-
'db.name':
|
|
21
|
-
'out.host':
|
|
22
|
-
[CLIENT_PORT_KEY]:
|
|
19
|
+
'db.user': ctx.conf.user,
|
|
20
|
+
'db.name': ctx.conf.database,
|
|
21
|
+
'out.host': ctx.conf.host,
|
|
22
|
+
[CLIENT_PORT_KEY]: ctx.conf.port
|
|
23
23
|
}
|
|
24
|
-
})
|
|
25
|
-
|
|
24
|
+
}, ctx)
|
|
25
|
+
ctx.sql = this.injectDbmQuery(span, ctx.sql, service)
|
|
26
|
+
|
|
27
|
+
return ctx.currentStore
|
|
26
28
|
}
|
|
27
29
|
}
|
|
28
30
|
|
|
@@ -1,9 +1,25 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
+
const { storage } = require('../../datadog-core')
|
|
3
4
|
const MySQLPlugin = require('../../datadog-plugin-mysql/src')
|
|
4
5
|
|
|
5
6
|
class MySQL2Plugin extends MySQLPlugin {
|
|
6
7
|
static get id () { return 'mysql2' }
|
|
8
|
+
|
|
9
|
+
constructor () {
|
|
10
|
+
super(...arguments)
|
|
11
|
+
|
|
12
|
+
this.addSub(`apm:${this.component}:command:add`, ctx => {
|
|
13
|
+
ctx.parentStore = storage('legacy').getStore()
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
this.addBind(`apm:${this.component}:command:start`, ctx => ctx.parentStore)
|
|
17
|
+
this.addBind(`apm:${this.component}:command:finish`, ctx => ctx.parentStore)
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
bindStart (ctx) {
|
|
21
|
+
return storage('legacy').run(ctx.parentStore, () => super.bindStart(ctx))
|
|
22
|
+
}
|
|
7
23
|
}
|
|
8
24
|
|
|
9
25
|
module.exports = MySQL2Plugin
|
|
@@ -31,7 +31,7 @@ class NetTCPPlugin extends ClientPlugin {
|
|
|
31
31
|
|
|
32
32
|
this.startSpan('tcp.connect', {
|
|
33
33
|
service: this.config.service,
|
|
34
|
-
resource: [host, port].filter(
|
|
34
|
+
resource: [host, port].filter(Boolean).join(':'),
|
|
35
35
|
kind: 'client',
|
|
36
36
|
meta: {
|
|
37
37
|
'tcp.remote.host': host,
|
|
@@ -6,7 +6,7 @@ const analyticsSampler = require('../../dd-trace/src/analytics_sampler')
|
|
|
6
6
|
const { COMPONENT } = require('../../dd-trace/src/constants')
|
|
7
7
|
const web = require('../../dd-trace/src/plugins/util/web')
|
|
8
8
|
|
|
9
|
-
const errorPages = ['/404', '/500', '/_error', '/_not-found', '/_not-found/page']
|
|
9
|
+
const errorPages = new Set(['/404', '/500', '/_error', '/_not-found', '/_not-found/page'])
|
|
10
10
|
|
|
11
11
|
class NextPlugin extends ServerPlugin {
|
|
12
12
|
static get id () {
|
|
@@ -97,7 +97,7 @@ class NextPlugin extends ServerPlugin {
|
|
|
97
97
|
|
|
98
98
|
// Only use error page names if there's not already a name
|
|
99
99
|
const current = span.context()._tags['next.page']
|
|
100
|
-
const isErrorPage = errorPages.
|
|
100
|
+
const isErrorPage = errorPages.has(page)
|
|
101
101
|
|
|
102
102
|
if (current && isErrorPage) {
|
|
103
103
|
return
|
|
@@ -106,7 +106,7 @@ class NextPlugin extends ServerPlugin {
|
|
|
106
106
|
// remove ending /route or /page for appDir projects
|
|
107
107
|
// need to check if not an error page too, as those are marked as app directory
|
|
108
108
|
// in newer versions
|
|
109
|
-
if (isAppPath && !isErrorPage) page = page.
|
|
109
|
+
if (isAppPath && !isErrorPage) page = page.slice(0, Math.max(0, page.lastIndexOf('/')))
|
|
110
110
|
|
|
111
111
|
// handle static resource
|
|
112
112
|
if (isStatic) {
|
|
@@ -137,9 +137,10 @@ function normalizeConfig (config) {
|
|
|
137
137
|
return Object.assign({}, config, { hooks, validateStatus })
|
|
138
138
|
}
|
|
139
139
|
|
|
140
|
+
const noop = () => {}
|
|
141
|
+
|
|
140
142
|
function getHooks (config) {
|
|
141
|
-
const
|
|
142
|
-
const request = (config.hooks && config.hooks.request) || noop
|
|
143
|
+
const request = config.hooks?.request ?? noop
|
|
143
144
|
|
|
144
145
|
return { request }
|
|
145
146
|
}
|
|
@@ -11,8 +11,8 @@ let logger = null
|
|
|
11
11
|
let interval = null
|
|
12
12
|
|
|
13
13
|
module.exports.init = function (tracerConfig) {
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
metrics = tracerConfig && tracerConfig.dogstatsd
|
|
15
|
+
? new DogStatsDClient({
|
|
16
16
|
host: tracerConfig.dogstatsd.hostname,
|
|
17
17
|
port: tracerConfig.dogstatsd.port,
|
|
18
18
|
tags: [
|
|
@@ -21,21 +21,17 @@ module.exports.init = function (tracerConfig) {
|
|
|
21
21
|
`version:${tracerConfig.tags.version}`
|
|
22
22
|
]
|
|
23
23
|
})
|
|
24
|
-
|
|
25
|
-
metrics = new NoopDogStatsDClient()
|
|
26
|
-
}
|
|
24
|
+
: new NoopDogStatsDClient()
|
|
27
25
|
|
|
28
|
-
|
|
29
|
-
|
|
26
|
+
logger = tracerConfig && tracerConfig.apiKey
|
|
27
|
+
? new ExternalLogger({
|
|
30
28
|
ddsource: 'openai',
|
|
31
29
|
hostname: tracerConfig.hostname,
|
|
32
30
|
service: tracerConfig.service,
|
|
33
31
|
apiKey: tracerConfig.apiKey,
|
|
34
32
|
interval: FLUSH_INTERVAL
|
|
35
33
|
})
|
|
36
|
-
|
|
37
|
-
logger = new NoopExternalLogger()
|
|
38
|
-
}
|
|
34
|
+
: new NoopExternalLogger()
|
|
39
35
|
|
|
40
36
|
interval = setInterval(() => {
|
|
41
37
|
metrics.flush()
|
|
@@ -261,9 +261,11 @@ class OpenAiTracingPlugin extends TracingPlugin {
|
|
|
261
261
|
if (error) {
|
|
262
262
|
this.metrics.increment('openai.request.error', 1, tags)
|
|
263
263
|
} else {
|
|
264
|
-
tags.push(
|
|
265
|
-
|
|
266
|
-
|
|
264
|
+
tags.push(
|
|
265
|
+
`org:${headers['openai-organization']}`,
|
|
266
|
+
`endpoint:${endpoint}`,
|
|
267
|
+
`model:${headers['openai-model'] || body.model}`
|
|
268
|
+
)
|
|
267
269
|
}
|
|
268
270
|
|
|
269
271
|
this.metrics.distribution('openai.request.duration', duration * 1000, tags)
|
|
@@ -329,7 +331,7 @@ class OpenAiTracingPlugin extends TracingPlugin {
|
|
|
329
331
|
sendLog (methodName, span, tags, openaiStore, error) {
|
|
330
332
|
if (!openaiStore) return
|
|
331
333
|
if (!Object.keys(openaiStore).length) return
|
|
332
|
-
if (!this.sampler.isSampled()) return
|
|
334
|
+
if (!this.sampler.isSampled(span)) return
|
|
333
335
|
|
|
334
336
|
const log = {
|
|
335
337
|
status: error ? 'error' : 'info',
|
|
@@ -725,7 +727,7 @@ function commonCreateResponseExtraction (tags, body, openaiStore, methodName) {
|
|
|
725
727
|
const choice = body.choices[choiceIdx]
|
|
726
728
|
|
|
727
729
|
// logprobs can be null and we still want to tag it as 'returned' even when set to 'null'
|
|
728
|
-
const specifiesLogProb = Object.keys(choice).
|
|
730
|
+
const specifiesLogProb = Object.keys(choice).includes('logprobs')
|
|
729
731
|
|
|
730
732
|
tags[`openai.response.choices.${choiceIdx}.finish_reason`] = choice.finish_reason
|
|
731
733
|
tags[`openai.response.choices.${choiceIdx}.logprobs`] = specifiesLogProb ? 'returned' : undefined
|
|
@@ -790,7 +792,7 @@ function usageExtraction (tags, body, methodName, openaiStore) {
|
|
|
790
792
|
}
|
|
791
793
|
|
|
792
794
|
function truncateApiKey (apiKey) {
|
|
793
|
-
return apiKey && `sk-...${apiKey.
|
|
795
|
+
return apiKey && `sk-...${apiKey.slice(-4)}`
|
|
794
796
|
}
|
|
795
797
|
|
|
796
798
|
function tagChatCompletionRequestContent (contents, messageIdx, tags) {
|
|
@@ -989,15 +991,9 @@ function normalizeStringOrTokenArray (input, truncate) {
|
|
|
989
991
|
|
|
990
992
|
function defensiveArrayLength (maybeArray) {
|
|
991
993
|
if (maybeArray) {
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
} else {
|
|
995
|
-
// case of a singular item (ie body.training_file vs body.training_files)
|
|
996
|
-
return 1
|
|
997
|
-
}
|
|
994
|
+
// Detect singular item (ie body.training_file vs body.training_files)
|
|
995
|
+
return Array.isArray(maybeArray) ? maybeArray.length : 1
|
|
998
996
|
}
|
|
999
|
-
|
|
1000
|
-
return undefined
|
|
1001
997
|
}
|
|
1002
998
|
|
|
1003
999
|
module.exports = OpenAiTracingPlugin
|
|
@@ -20,7 +20,7 @@ class OracledbPlugin extends DatabasePlugin {
|
|
|
20
20
|
kind: 'client',
|
|
21
21
|
meta: {
|
|
22
22
|
'db.user': this.config.user,
|
|
23
|
-
'db.instance': url.pathname && url.pathname.
|
|
23
|
+
'db.instance': url.pathname && url.pathname.slice(1),
|
|
24
24
|
'db.hostname': url.hostname,
|
|
25
25
|
[CLIENT_PORT_KEY]: url.port
|
|
26
26
|
}
|
|
@@ -34,7 +34,9 @@ const {
|
|
|
34
34
|
TEST_NAME,
|
|
35
35
|
TEST_IS_RUM_ACTIVE,
|
|
36
36
|
TEST_BROWSER_VERSION,
|
|
37
|
-
TEST_RETRY_REASON_TYPES
|
|
37
|
+
TEST_RETRY_REASON_TYPES,
|
|
38
|
+
TEST_IS_MODIFIED,
|
|
39
|
+
isModifiedTest
|
|
38
40
|
} = require('../../dd-trace/src/plugins/util/test')
|
|
39
41
|
const { RESOURCE_NAME } = require('../../../ext/tags')
|
|
40
42
|
const { COMPONENT } = require('../../dd-trace/src/constants')
|
|
@@ -56,6 +58,16 @@ class PlaywrightPlugin extends CiPlugin {
|
|
|
56
58
|
this.numFailedTests = 0
|
|
57
59
|
this.numFailedSuites = 0
|
|
58
60
|
|
|
61
|
+
this.addSub('ci:playwright:test:is-modified', ({
|
|
62
|
+
filePath,
|
|
63
|
+
modifiedTests,
|
|
64
|
+
onDone
|
|
65
|
+
}) => {
|
|
66
|
+
const testSuite = getTestSuitePath(filePath, this.repositoryRoot)
|
|
67
|
+
const isModified = isModifiedTest(testSuite, 0, 0, modifiedTests, this.constructor.id)
|
|
68
|
+
onDone({ isModified })
|
|
69
|
+
})
|
|
70
|
+
|
|
59
71
|
this.addSub('ci:playwright:session:finish', ({
|
|
60
72
|
status,
|
|
61
73
|
isEarlyFlakeDetectionEnabled,
|
|
@@ -277,6 +289,7 @@ class PlaywrightPlugin extends CiPlugin {
|
|
|
277
289
|
hasPassedAttemptToFixRetries,
|
|
278
290
|
hasFailedAttemptToFixRetries,
|
|
279
291
|
isAtrRetry,
|
|
292
|
+
isModified,
|
|
280
293
|
onDone
|
|
281
294
|
}) => {
|
|
282
295
|
if (!span) return
|
|
@@ -327,6 +340,13 @@ class PlaywrightPlugin extends CiPlugin {
|
|
|
327
340
|
if (isQuarantined) {
|
|
328
341
|
span.setTag(TEST_MANAGEMENT_IS_QUARANTINED, 'true')
|
|
329
342
|
}
|
|
343
|
+
if (isModified) {
|
|
344
|
+
span.setTag(TEST_IS_MODIFIED, 'true')
|
|
345
|
+
if (isEfdRetry) {
|
|
346
|
+
span.setTag(TEST_IS_RETRY, 'true')
|
|
347
|
+
span.setTag(TEST_RETRY_REASON, TEST_RETRY_REASON_TYPES.efd)
|
|
348
|
+
}
|
|
349
|
+
}
|
|
330
350
|
steps.forEach(step => {
|
|
331
351
|
const stepStartTime = step.startTime.getTime()
|
|
332
352
|
const stepSpan = this.tracer.startSpan('playwright.step', {
|
|
@@ -342,7 +362,7 @@ class PlaywrightPlugin extends CiPlugin {
|
|
|
342
362
|
stepSpan.setTag('error', step.error)
|
|
343
363
|
}
|
|
344
364
|
let stepDuration = step.duration
|
|
345
|
-
if (stepDuration <= 0 || isNaN(stepDuration)) {
|
|
365
|
+
if (stepDuration <= 0 || Number.isNaN(stepDuration)) {
|
|
346
366
|
stepDuration = 0
|
|
347
367
|
}
|
|
348
368
|
stepSpan.finish(stepStartTime + stepDuration)
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
3
|
const ConsumerPlugin = require('../../dd-trace/src/plugins/consumer')
|
|
4
|
-
const { storage } = require('../../datadog-core')
|
|
5
4
|
const { getAmqpMessageSize } = require('../../dd-trace/src/datastreams')
|
|
6
5
|
|
|
7
6
|
class RheaConsumerPlugin extends ConsumerPlugin {
|
|
@@ -10,13 +9,14 @@ class RheaConsumerPlugin extends ConsumerPlugin {
|
|
|
10
9
|
constructor (...args) {
|
|
11
10
|
super(...args)
|
|
12
11
|
|
|
13
|
-
this.addTraceSub('dispatch', (
|
|
14
|
-
const span =
|
|
15
|
-
span.setTag('amqp.delivery.state', state)
|
|
12
|
+
this.addTraceSub('dispatch', (ctx) => {
|
|
13
|
+
const span = ctx.currentStore.span
|
|
14
|
+
span.setTag('amqp.delivery.state', ctx.state)
|
|
16
15
|
})
|
|
17
16
|
}
|
|
18
17
|
|
|
19
|
-
|
|
18
|
+
bindStart (ctx) {
|
|
19
|
+
const { msgObj } = ctx
|
|
20
20
|
const name = getResourceNameFromMessage(msgObj)
|
|
21
21
|
const childOf = extractTextMap(msgObj, this.tracer)
|
|
22
22
|
|
|
@@ -29,7 +29,7 @@ class RheaConsumerPlugin extends ConsumerPlugin {
|
|
|
29
29
|
'amqp.link.source.address': name,
|
|
30
30
|
'amqp.link.role': 'receiver'
|
|
31
31
|
}
|
|
32
|
-
})
|
|
32
|
+
}, ctx)
|
|
33
33
|
|
|
34
34
|
if (
|
|
35
35
|
this.config.dsmEnabled &&
|
|
@@ -42,6 +42,8 @@ class RheaConsumerPlugin extends ConsumerPlugin {
|
|
|
42
42
|
this.tracer
|
|
43
43
|
.setCheckpoint(['direction:in', `topic:${name}`, 'type:rabbitmq'], span, payloadSize)
|
|
44
44
|
}
|
|
45
|
+
|
|
46
|
+
return ctx.currentStore
|
|
45
47
|
}
|
|
46
48
|
}
|
|
47
49
|
|
|
@@ -13,7 +13,8 @@ class RheaProducerPlugin extends ProducerPlugin {
|
|
|
13
13
|
this.addTraceSub('encode', this.encode.bind(this))
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
bindStart (ctx) {
|
|
17
|
+
const { targetAddress, host, port } = ctx
|
|
17
18
|
const name = targetAddress || 'amq.topic'
|
|
18
19
|
this.startSpan({
|
|
19
20
|
resource: name,
|
|
@@ -24,7 +25,9 @@ class RheaProducerPlugin extends ProducerPlugin {
|
|
|
24
25
|
'out.host': host,
|
|
25
26
|
[CLIENT_PORT_KEY]: port
|
|
26
27
|
}
|
|
27
|
-
})
|
|
28
|
+
}, ctx)
|
|
29
|
+
|
|
30
|
+
return ctx.currentStore
|
|
28
31
|
}
|
|
29
32
|
|
|
30
33
|
encode (msg) {
|
|
@@ -44,12 +44,7 @@ class SeleniumPlugin extends CiPlugin {
|
|
|
44
44
|
if (!span) {
|
|
45
45
|
return
|
|
46
46
|
}
|
|
47
|
-
|
|
48
|
-
if (isTestSpan(span)) {
|
|
49
|
-
testSpan = span
|
|
50
|
-
} else {
|
|
51
|
-
testSpan = getTestSpanFromTrace(span.context()._trace)
|
|
52
|
-
}
|
|
47
|
+
const testSpan = isTestSpan(span) ? span : getTestSpanFromTrace(span.context()._trace)
|
|
53
48
|
if (!testSpan) {
|
|
54
49
|
return
|
|
55
50
|
}
|
|
@@ -26,7 +26,9 @@ const {
|
|
|
26
26
|
TEST_MANAGEMENT_ATTEMPT_TO_FIX_PASSED,
|
|
27
27
|
TEST_HAS_FAILED_ALL_RETRIES,
|
|
28
28
|
getLibraryCapabilitiesTags,
|
|
29
|
-
TEST_RETRY_REASON_TYPES
|
|
29
|
+
TEST_RETRY_REASON_TYPES,
|
|
30
|
+
isModifiedTest,
|
|
31
|
+
TEST_IS_MODIFIED
|
|
30
32
|
} = require('../../dd-trace/src/plugins/util/test')
|
|
31
33
|
const { COMPONENT } = require('../../dd-trace/src/constants')
|
|
32
34
|
const {
|
|
@@ -34,6 +36,7 @@ const {
|
|
|
34
36
|
TELEMETRY_EVENT_FINISHED,
|
|
35
37
|
TELEMETRY_TEST_SESSION
|
|
36
38
|
} = require('../../dd-trace/src/ci-visibility/telemetry')
|
|
39
|
+
const { DD_MAJOR } = require('../../../version')
|
|
37
40
|
|
|
38
41
|
// Milliseconds that we subtract from the error test duration
|
|
39
42
|
// so that they do not overlap with the following test
|
|
@@ -82,6 +85,13 @@ class VitestPlugin extends CiPlugin {
|
|
|
82
85
|
onDone(isQuarantined)
|
|
83
86
|
})
|
|
84
87
|
|
|
88
|
+
this.addSub('ci:vitest:test:is-modified', ({ modifiedTests, testSuiteAbsolutePath, onDone }) => {
|
|
89
|
+
const testSuite = getTestSuitePath(testSuiteAbsolutePath, this.repositoryRoot)
|
|
90
|
+
const isModified = isModifiedTest(testSuite, 0, 0, modifiedTests, this.constructor.id)
|
|
91
|
+
|
|
92
|
+
onDone(isModified)
|
|
93
|
+
})
|
|
94
|
+
|
|
85
95
|
this.addSub('ci:vitest:is-early-flake-detection-faulty', ({
|
|
86
96
|
knownTests,
|
|
87
97
|
testFilepaths,
|
|
@@ -107,7 +117,8 @@ class VitestPlugin extends CiPlugin {
|
|
|
107
117
|
mightHitProbe,
|
|
108
118
|
isRetryReasonEfd,
|
|
109
119
|
isRetryReasonAttemptToFix,
|
|
110
|
-
isRetryReasonAtr
|
|
120
|
+
isRetryReasonAtr,
|
|
121
|
+
isModified
|
|
111
122
|
} = ctx
|
|
112
123
|
|
|
113
124
|
const testSuite = getTestSuitePath(testSuiteAbsolutePath, this.repositoryRoot)
|
|
@@ -140,6 +151,9 @@ class VitestPlugin extends CiPlugin {
|
|
|
140
151
|
if (isDisabled) {
|
|
141
152
|
extraTags[TEST_MANAGEMENT_IS_DISABLED] = 'true'
|
|
142
153
|
}
|
|
154
|
+
if (isModified) {
|
|
155
|
+
extraTags[TEST_IS_MODIFIED] = 'true'
|
|
156
|
+
}
|
|
143
157
|
|
|
144
158
|
const span = this.startTestSpan(
|
|
145
159
|
testName,
|
|
@@ -204,37 +218,38 @@ class VitestPlugin extends CiPlugin {
|
|
|
204
218
|
hasFailedAllRetries,
|
|
205
219
|
attemptToFixFailed
|
|
206
220
|
}) => {
|
|
207
|
-
if (span) {
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
221
|
+
if (!span) {
|
|
222
|
+
return
|
|
223
|
+
}
|
|
224
|
+
if (shouldSetProbe && this.di && error?.stack) {
|
|
225
|
+
const probeInformation = this.addDiProbe(error)
|
|
226
|
+
if (probeInformation) {
|
|
227
|
+
const { file, line, stackIndex, setProbePromise } = probeInformation
|
|
228
|
+
this.runningTestProbe = { file, line }
|
|
229
|
+
this.testErrorStackIndex = stackIndex
|
|
230
|
+
promises.setProbePromise = setProbePromise
|
|
216
231
|
}
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
232
|
+
}
|
|
233
|
+
this.telemetry.ciVisEvent(TELEMETRY_EVENT_FINISHED, 'test', {
|
|
234
|
+
hasCodeowners: !!span.context()._tags[TEST_CODE_OWNERS]
|
|
235
|
+
})
|
|
236
|
+
span.setTag(TEST_STATUS, 'fail')
|
|
221
237
|
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
}
|
|
236
|
-
finishAllTraceSpans(span)
|
|
238
|
+
if (error) {
|
|
239
|
+
span.setTag('error', error)
|
|
240
|
+
}
|
|
241
|
+
if (hasFailedAllRetries) {
|
|
242
|
+
span.setTag(TEST_HAS_FAILED_ALL_RETRIES, 'true')
|
|
243
|
+
}
|
|
244
|
+
if (attemptToFixFailed) {
|
|
245
|
+
span.setTag(TEST_MANAGEMENT_ATTEMPT_TO_FIX_PASSED, 'false')
|
|
246
|
+
}
|
|
247
|
+
if (duration) {
|
|
248
|
+
span.finish(span._startTime + duration - MILLISECONDS_TO_SUBTRACT_FROM_FAILED_TEST_DURATION) // milliseconds
|
|
249
|
+
} else {
|
|
250
|
+
span.finish() // `duration` is empty for retries, so we'll use clock time
|
|
237
251
|
}
|
|
252
|
+
finishAllTraceSpans(span)
|
|
238
253
|
})
|
|
239
254
|
|
|
240
255
|
this.addSub('ci:vitest:test:skip', ({ testName, testSuiteAbsolutePath, isNew, isDisabled }) => {
|
|
@@ -267,8 +282,9 @@ class VitestPlugin extends CiPlugin {
|
|
|
267
282
|
'x-datadog-parent-id': process.env.DD_CIVISIBILITY_TEST_MODULE_ID
|
|
268
283
|
})
|
|
269
284
|
|
|
285
|
+
const trimmedCommand = DD_MAJOR < 6 ? this.command : 'vitest run'
|
|
270
286
|
// test suites run in a different process, so they also need to init the metadata dictionary
|
|
271
|
-
const testSessionName = getTestSessionName(this.config,
|
|
287
|
+
const testSessionName = getTestSessionName(this.config, trimmedCommand, this.testEnvironmentMetadata)
|
|
272
288
|
const metadataTags = {}
|
|
273
289
|
for (const testLevel of TEST_LEVEL_EVENT_TYPES) {
|
|
274
290
|
metadataTags[testLevel] = {
|
|
@@ -100,7 +100,7 @@ function wrapFunction (original, wrapper) {
|
|
|
100
100
|
*/
|
|
101
101
|
function wrap (target, name, wrapper, options) {
|
|
102
102
|
if (typeof wrapper !== 'function') {
|
|
103
|
-
throw new
|
|
103
|
+
throw new TypeError(wrapper ? 'Target is not a function' : 'No function provided')
|
|
104
104
|
}
|
|
105
105
|
|
|
106
106
|
// No descriptor means original was on the prototype. This is not totally
|
|
@@ -141,11 +141,7 @@ function wrap (target, name, wrapper, options) {
|
|
|
141
141
|
} else {
|
|
142
142
|
if (descriptor.get) {
|
|
143
143
|
// `replaceGetter` may only be used when the getter has no side effect.
|
|
144
|
-
|
|
145
|
-
descriptor.get = () => wrapped
|
|
146
|
-
} else {
|
|
147
|
-
descriptor.get = wrapped
|
|
148
|
-
}
|
|
144
|
+
descriptor.get = options?.replaceGetter ? () => wrapped : wrapped
|
|
149
145
|
} else {
|
|
150
146
|
descriptor.value = wrapped
|
|
151
147
|
}
|
|
@@ -252,7 +248,7 @@ function assertMethod (target, name, method) {
|
|
|
252
248
|
}
|
|
253
249
|
}
|
|
254
250
|
|
|
255
|
-
throw new
|
|
251
|
+
throw new TypeError(message)
|
|
256
252
|
}
|
|
257
253
|
}
|
|
258
254
|
|
|
@@ -264,7 +260,7 @@ function assertMethod (target, name, method) {
|
|
|
264
260
|
*/
|
|
265
261
|
function assertNotClass (target) {
|
|
266
262
|
if (Function.prototype.toString.call(target).startsWith('class')) {
|
|
267
|
-
throw new
|
|
263
|
+
throw new TypeError('Target is a native class constructor and cannot be wrapped.')
|
|
268
264
|
}
|
|
269
265
|
}
|
|
270
266
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/* eslint-disable @stylistic/
|
|
1
|
+
/* eslint-disable @stylistic/max-len */
|
|
2
2
|
'use strict'
|
|
3
3
|
|
|
4
4
|
const html = '<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>You\'ve been blocked</title><style>a,body,div,html,span{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline}body{background:-webkit-radial-gradient(26% 19%,circle,#fff,#f4f7f9);background:radial-gradient(circle at 26% 19%,#fff,#f4f7f9);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-line-pack:center;align-content:center;width:100%;min-height:100vh;line-height:1;flex-direction:column}p{display:block}main{text-align:center;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-line-pack:center;align-content:center;flex-direction:column}p{font-size:18px;line-height:normal;color:#646464;font-family:sans-serif;font-weight:400}a{color:#4842b7}footer{width:100%;text-align:center}footer p{font-size:16px}</style></head><body><main><p>Sorry, you cannot access this page. Please contact the customer service team.</p></main><footer><p>Security provided by <a href="https://www.datadoghq.com/product/security-platform/application-security-monitoring/" target="_blank">Datadog</a></p></footer></body></html>'
|