dd-trace 5.53.0 → 5.55.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/ci/cypress/plugin.js +8 -0
- package/ci/cypress/polyfills.js +23 -0
- package/ci/init.js +8 -7
- package/index.d.ts +33 -16
- package/initialize.mjs +5 -6
- package/package.json +40 -38
- package/packages/datadog-code-origin/index.js +22 -4
- 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 +10 -10
- package/packages/datadog-instrumentations/src/child_process.js +1 -2
- package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +89 -75
- package/packages/datadog-instrumentations/src/cookie-parser.js +1 -1
- package/packages/datadog-instrumentations/src/couchbase.js +6 -9
- package/packages/datadog-instrumentations/src/cucumber.js +108 -68
- package/packages/datadog-instrumentations/src/cypress.js +2 -1
- package/packages/datadog-instrumentations/src/dns.js +5 -5
- package/packages/datadog-instrumentations/src/elasticsearch.js +9 -10
- package/packages/datadog-instrumentations/src/fastify.js +7 -9
- package/packages/datadog-instrumentations/src/fs.js +1 -1
- package/packages/datadog-instrumentations/src/google-cloud-pubsub.js +35 -43
- 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/hapi.js +10 -11
- package/packages/datadog-instrumentations/src/helpers/extract-package-and-module-path.js +16 -10
- package/packages/datadog-instrumentations/src/helpers/fetch.js +4 -5
- package/packages/datadog-instrumentations/src/helpers/hook.js +2 -3
- 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 +11 -12
- package/packages/datadog-instrumentations/src/http/client.js +14 -20
- package/packages/datadog-instrumentations/src/jest.js +201 -143
- package/packages/datadog-instrumentations/src/kafkajs.js +52 -44
- package/packages/datadog-instrumentations/src/knex.js +4 -4
- package/packages/datadog-instrumentations/src/koa.js +2 -3
- package/packages/datadog-instrumentations/src/ldapjs.js +3 -4
- package/packages/datadog-instrumentations/src/mariadb.js +49 -65
- package/packages/datadog-instrumentations/src/mocha/main.js +116 -73
- 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/mocha.js +3 -1
- package/packages/datadog-instrumentations/src/mongodb-core.js +1 -1
- package/packages/datadog-instrumentations/src/mysql.js +30 -37
- 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 +3 -2
- package/packages/datadog-instrumentations/src/openai.js +22 -24
- package/packages/datadog-instrumentations/src/oracledb.js +1 -1
- package/packages/datadog-instrumentations/src/otel-sdk-trace.js +4 -3
- package/packages/datadog-instrumentations/src/pg.js +3 -5
- package/packages/datadog-instrumentations/src/playwright.js +123 -83
- package/packages/datadog-instrumentations/src/protobufjs.js +3 -4
- package/packages/datadog-instrumentations/src/redis.js +4 -4
- package/packages/datadog-instrumentations/src/restify.js +9 -13
- package/packages/datadog-instrumentations/src/rhea.js +42 -54
- package/packages/datadog-instrumentations/src/router.js +30 -32
- package/packages/datadog-instrumentations/src/tedious.js +2 -3
- package/packages/datadog-instrumentations/src/vitest.js +87 -52
- 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-avsc/src/schema_iterator.js +12 -12
- package/packages/datadog-plugin-aws-sdk/src/base.js +15 -10
- 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/cloudwatchlogs.js +3 -5
- package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +28 -43
- package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +2 -2
- package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +10 -11
- package/packages/datadog-plugin-aws-sdk/src/services/lambda.js +4 -6
- package/packages/datadog-plugin-aws-sdk/src/services/redshift.js +3 -5
- package/packages/datadog-plugin-aws-sdk/src/services/s3.js +3 -5
- package/packages/datadog-plugin-aws-sdk/src/services/sns.js +2 -3
- package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +11 -15
- 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 +60 -4
- package/packages/datadog-plugin-cypress/src/cypress-plugin.js +99 -28
- package/packages/datadog-plugin-cypress/src/plugin.js +11 -1
- package/packages/datadog-plugin-cypress/src/support.js +24 -5
- package/packages/datadog-plugin-dd-trace-api/src/index.js +2 -1
- package/packages/datadog-plugin-elasticsearch/src/index.js +1 -1
- 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 +27 -10
- package/packages/datadog-plugin-graphql/src/execute.js +2 -2
- package/packages/datadog-plugin-graphql/src/index.js +10 -8
- package/packages/datadog-plugin-graphql/src/resolve.js +19 -12
- 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 +23 -13
- package/packages/datadog-plugin-http2/src/client.js +24 -25
- package/packages/datadog-plugin-jest/src/index.js +26 -23
- 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 +39 -14
- package/packages/datadog-plugin-mongodb-core/src/index.js +3 -2
- package/packages/datadog-plugin-mysql/src/index.js +22 -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 +7 -6
- package/packages/datadog-plugin-openai/src/services.js +6 -10
- package/packages/datadog-plugin-openai/src/tracing.js +12 -18
- package/packages/datadog-plugin-oracledb/src/index.js +1 -1
- package/packages/datadog-plugin-playwright/src/index.js +25 -4
- package/packages/datadog-plugin-protobufjs/src/schema_iterator.js +8 -9
- package/packages/datadog-plugin-redis/src/index.js +2 -4
- package/packages/datadog-plugin-rhea/src/consumer.js +8 -6
- package/packages/datadog-plugin-rhea/src/producer.js +5 -2
- package/packages/datadog-plugin-router/src/index.js +1 -1
- package/packages/datadog-plugin-selenium/src/index.js +1 -6
- package/packages/datadog-plugin-vitest/src/index.js +52 -35
- 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/analyzers.js +0 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-password-rules.js +0 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secret-rules.js +0 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secrets-rules.js +0 -1
- 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 +5 -8
- 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 +16 -24
- 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 +2 -8
- 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 +7 -8
- 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 +7 -7
- package/packages/dd-trace/src/appsec/iast/telemetry/verbosity.js +2 -3
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/range-utils.js +10 -11
- 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 -28
- 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/vulnerabilities.js +0 -1
- package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +9 -11
- package/packages/dd-trace/src/appsec/index.js +5 -5
- 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 +232 -41
- package/packages/dd-trace/src/appsec/rule_manager.js +2 -2
- package/packages/dd-trace/src/appsec/sdk/set_user.js +2 -2
- package/packages/dd-trace/src/appsec/sdk/track_event.js +3 -3
- package/packages/dd-trace/src/appsec/stack_trace.js +2 -4
- package/packages/dd-trace/src/appsec/telemetry/index.js +31 -1
- 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 +8 -4
- package/packages/dd-trace/src/azure_metadata.js +9 -9
- package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/index.js +9 -8
- 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 +3 -2
- 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 +3 -2
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +3 -2
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +3 -2
- 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 +6 -5
- package/packages/dd-trace/src/ci-visibility/exporters/test-worker/index.js +7 -6
- 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 +3 -2
- package/packages/dd-trace/src/ci-visibility/log-submission/log-submission-plugin.js +5 -4
- package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +12 -8
- 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 +3 -2
- package/packages/dd-trace/src/config-helper.js +89 -0
- package/packages/dd-trace/src/config.js +159 -129
- package/packages/dd-trace/src/config_stable.js +10 -7
- package/packages/dd-trace/src/datastreams/encoding.js +9 -9
- package/packages/dd-trace/src/datastreams/fnv.js +2 -2
- 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 +7 -7
- 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 +75 -69
- package/packages/dd-trace/src/debugger/devtools_client/condition.js +7 -10
- package/packages/dd-trace/src/debugger/devtools_client/defaults.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/index.js +9 -2
- package/packages/dd-trace/src/debugger/devtools_client/remote_config.js +18 -38
- package/packages/dd-trace/src/debugger/devtools_client/send.js +3 -2
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/collector.js +1 -2
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/index.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/processor.js +11 -14
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/redaction.js +4 -4
- 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/debugger/index.js +1 -0
- package/packages/dd-trace/src/dogstatsd.js +7 -6
- package/packages/dd-trace/src/encode/0.4.js +14 -11
- package/packages/dd-trace/src/encode/0.5.js +4 -6
- package/packages/dd-trace/src/encode/agentless-ci-visibility.js +8 -8
- 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 +7 -6
- package/packages/dd-trace/src/exporters/agent/writer.js +1 -5
- package/packages/dd-trace/src/exporters/common/docker.js +4 -3
- package/packages/dd-trace/src/exporters/common/form-data.js +6 -4
- package/packages/dd-trace/src/exporters/common/request.js +5 -2
- package/packages/dd-trace/src/exporters/common/util.js +4 -2
- 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 +15 -9
- package/packages/dd-trace/src/iitm.js +10 -22
- package/packages/dd-trace/src/index.js +4 -3
- package/packages/dd-trace/src/lambda/handler.js +7 -6
- package/packages/dd-trace/src/lambda/index.js +2 -1
- package/packages/dd-trace/src/lambda/runtime/patch.js +7 -6
- package/packages/dd-trace/src/lambda/runtime/ritm.js +4 -3
- package/packages/dd-trace/src/llmobs/constants/tags.js +1 -0
- package/packages/dd-trace/src/llmobs/index.js +21 -5
- package/packages/dd-trace/src/llmobs/noop.js +18 -20
- 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/handlers/index.js +11 -13
- package/packages/dd-trace/src/llmobs/plugins/langchain/index.js +6 -6
- package/packages/dd-trace/src/llmobs/plugins/openai.js +2 -3
- package/packages/dd-trace/src/llmobs/sdk.js +4 -3
- package/packages/dd-trace/src/llmobs/span_processor.js +1 -1
- package/packages/dd-trace/src/llmobs/tagger.js +129 -102
- 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 +9 -8
- package/packages/dd-trace/src/log/log.js +1 -1
- package/packages/dd-trace/src/log/writer.js +3 -4
- package/packages/dd-trace/src/msgpack/chunk.js +3 -3
- package/packages/dd-trace/src/msgpack/encoder.js +31 -31
- package/packages/dd-trace/src/noop/dogstatsd.js +6 -6
- package/packages/dd-trace/src/noop/span.js +4 -6
- 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 +7 -6
- package/packages/dd-trace/src/opentracing/propagation/log.js +10 -13
- package/packages/dd-trace/src/opentracing/propagation/text_map.js +40 -37
- package/packages/dd-trace/src/opentracing/propagation/tracestate.js +8 -4
- package/packages/dd-trace/src/opentracing/span.js +16 -20
- package/packages/dd-trace/src/opentracing/tracer.js +9 -6
- package/packages/dd-trace/src/payload-tagging/config/index.js +17 -21
- 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/plugin_manager.js +4 -3
- package/packages/dd-trace/src/plugins/ci_plugin.js +87 -11
- 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 +28 -20
- package/packages/dd-trace/src/plugins/util/git.js +166 -12
- 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 +9 -2
- package/packages/dd-trace/src/plugins/util/test.js +315 -51
- 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 +14 -4
- package/packages/dd-trace/src/plugins/util/web.js +8 -8
- package/packages/dd-trace/src/priority_sampler.js +64 -53
- package/packages/dd-trace/src/profiling/config.js +51 -35
- package/packages/dd-trace/src/profiling/exporter_cli.js +20 -20
- package/packages/dd-trace/src/profiling/exporters/agent.js +1 -1
- package/packages/dd-trace/src/profiling/exporters/event_serializer.js +7 -6
- package/packages/dd-trace/src/profiling/exporters/file.js +2 -1
- package/packages/dd-trace/src/profiling/index.js +2 -1
- package/packages/dd-trace/src/profiling/profiler.js +44 -6
- 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/ssi-telemetry-mock-profiler.js +3 -1
- package/packages/dd-trace/src/profiling/tagger.js +21 -13
- package/packages/dd-trace/src/profiling/webspan-utils.js +1 -1
- package/packages/dd-trace/src/proxy.js +9 -10
- 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 +8 -8
- package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +5 -4
- package/packages/dd-trace/src/sampler.js +41 -4
- package/packages/dd-trace/src/sampling_rule.js +12 -3
- package/packages/dd-trace/src/scope.js +1 -1
- package/packages/dd-trace/src/serverless.js +11 -4
- 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 +5 -4
- package/packages/dd-trace/src/span_sampler.js +4 -1
- package/packages/dd-trace/src/standalone/tracesource.js +2 -3
- package/packages/dd-trace/src/standalone/tracesource_priority_sampler.js +1 -2
- package/packages/dd-trace/src/startup-log.js +6 -18
- package/packages/dd-trace/src/supported-configurations.json +439 -0
- package/packages/dd-trace/src/telemetry/dependencies.js +64 -59
- 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 +8 -7
- package/packages/dd-trace/src/telemetry/telemetry.js +31 -45
- package/packages/dd-trace/src/tracer.js +3 -7
- package/packages/dd-trace/src/util.js +1 -6
- 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
- package/packages/dd-trace/src/appsec/iast/analyzers/header-injection-analyzer.js +0 -122
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/header-sensitive-analyzer.js +0 -20
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
const CiPlugin = require('../../dd-trace/src/plugins/ci_plugin')
|
|
4
4
|
const { storage } = require('../../datadog-core')
|
|
5
|
+
const { getEnvironmentVariable } = require('../../dd-trace/src/config-helper')
|
|
5
6
|
|
|
6
7
|
const {
|
|
7
8
|
TEST_SKIP_REASON,
|
|
@@ -34,7 +35,10 @@ const {
|
|
|
34
35
|
TEST_MANAGEMENT_IS_ATTEMPT_TO_FIX,
|
|
35
36
|
TEST_HAS_FAILED_ALL_RETRIES,
|
|
36
37
|
TEST_MANAGEMENT_ATTEMPT_TO_FIX_PASSED,
|
|
37
|
-
TEST_RETRY_REASON_TYPES
|
|
38
|
+
TEST_RETRY_REASON_TYPES,
|
|
39
|
+
TEST_IS_MODIFIED,
|
|
40
|
+
isModifiedTest,
|
|
41
|
+
getTestEndLine
|
|
38
42
|
} = require('../../dd-trace/src/plugins/util/test')
|
|
39
43
|
const { RESOURCE_NAME } = require('../../../ext/tags')
|
|
40
44
|
const { COMPONENT, ERROR_MESSAGE } = require('../../dd-trace/src/constants')
|
|
@@ -55,7 +59,7 @@ const id = require('../../dd-trace/src/id')
|
|
|
55
59
|
|
|
56
60
|
const BREAKPOINT_HIT_GRACE_PERIOD_MS = 200
|
|
57
61
|
const BREAKPOINT_SET_GRACE_PERIOD_MS = 200
|
|
58
|
-
const isCucumberWorker = !!
|
|
62
|
+
const isCucumberWorker = !!getEnvironmentVariable('CUCUMBER_WORKER_ID')
|
|
59
63
|
|
|
60
64
|
function getTestSuiteTags (testSuiteSpan) {
|
|
61
65
|
const suiteTags = {
|
|
@@ -131,7 +135,7 @@ class CucumberPlugin extends CiPlugin {
|
|
|
131
135
|
finishAllTraceSpans(this.testSessionSpan)
|
|
132
136
|
this.telemetry.count(TELEMETRY_TEST_SESSION, {
|
|
133
137
|
provider: this.ciProviderName,
|
|
134
|
-
autoInjected: !!
|
|
138
|
+
autoInjected: !!getEnvironmentVariable('DD_CIVISIBILITY_AUTO_INSTRUMENTATION_PROVIDER')
|
|
135
139
|
})
|
|
136
140
|
|
|
137
141
|
this.libraryConfig = null
|
|
@@ -345,7 +349,8 @@ class CucumberPlugin extends CiPlugin {
|
|
|
345
349
|
hasPassedAllRetries,
|
|
346
350
|
hasFailedAttemptToFix,
|
|
347
351
|
isDisabled,
|
|
348
|
-
isQuarantined
|
|
352
|
+
isQuarantined,
|
|
353
|
+
isModified
|
|
349
354
|
}) => {
|
|
350
355
|
const statusTag = isStep ? 'step.status' : TEST_STATUS
|
|
351
356
|
|
|
@@ -400,6 +405,14 @@ class CucumberPlugin extends CiPlugin {
|
|
|
400
405
|
span.setTag(TEST_MANAGEMENT_IS_QUARANTINED, 'true')
|
|
401
406
|
}
|
|
402
407
|
|
|
408
|
+
if (isModified) {
|
|
409
|
+
span.setTag(TEST_IS_MODIFIED, 'true')
|
|
410
|
+
if (isEfdRetry) {
|
|
411
|
+
span.setTag(TEST_IS_RETRY, 'true')
|
|
412
|
+
span.setTag(TEST_RETRY_REASON, TEST_RETRY_REASON_TYPES.efd)
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
|
|
403
416
|
span.finish()
|
|
404
417
|
if (!isStep) {
|
|
405
418
|
const spanTags = span.context()._tags
|
|
@@ -442,6 +455,49 @@ class CucumberPlugin extends CiPlugin {
|
|
|
442
455
|
this.addBind('ci:cucumber:test:fn', (ctx) => {
|
|
443
456
|
return ctx.currentStore
|
|
444
457
|
})
|
|
458
|
+
|
|
459
|
+
this.addSub('ci:cucumber:is-modified-test', ({
|
|
460
|
+
scenarios,
|
|
461
|
+
testFileAbsolutePath,
|
|
462
|
+
modifiedTests,
|
|
463
|
+
stepIds,
|
|
464
|
+
stepDefinitions,
|
|
465
|
+
setIsModified
|
|
466
|
+
}) => {
|
|
467
|
+
const testScenarioPath = getTestSuitePath(testFileAbsolutePath, this.repositoryRoot || process.cwd())
|
|
468
|
+
for (const scenario of scenarios) {
|
|
469
|
+
const isModified = isModifiedTest(
|
|
470
|
+
testScenarioPath,
|
|
471
|
+
scenario.location.line,
|
|
472
|
+
scenario.steps[scenario.steps.length - 1].location.line,
|
|
473
|
+
modifiedTests,
|
|
474
|
+
'cucumber'
|
|
475
|
+
)
|
|
476
|
+
if (isModified) {
|
|
477
|
+
setIsModified(true)
|
|
478
|
+
return
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
for (const stepDefinition of stepDefinitions) {
|
|
482
|
+
if (!stepIds?.includes(stepDefinition.id)) {
|
|
483
|
+
continue
|
|
484
|
+
}
|
|
485
|
+
const testStartLineStep = stepDefinition.line
|
|
486
|
+
const testEndLineStep = getTestEndLine(stepDefinition.code, testStartLineStep)
|
|
487
|
+
const isModified = isModifiedTest(
|
|
488
|
+
stepDefinition.uri,
|
|
489
|
+
testStartLineStep,
|
|
490
|
+
testEndLineStep,
|
|
491
|
+
modifiedTests,
|
|
492
|
+
'cucumber'
|
|
493
|
+
)
|
|
494
|
+
if (isModified) {
|
|
495
|
+
setIsModified(true)
|
|
496
|
+
return
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
setIsModified(false)
|
|
500
|
+
})
|
|
445
501
|
}
|
|
446
502
|
|
|
447
503
|
startTestSpan (testName, testSuite, extraTags) {
|
|
@@ -41,10 +41,15 @@ const {
|
|
|
41
41
|
TEST_MANAGEMENT_ATTEMPT_TO_FIX_PASSED,
|
|
42
42
|
TEST_HAS_FAILED_ALL_RETRIES,
|
|
43
43
|
getLibraryCapabilitiesTags,
|
|
44
|
-
TEST_RETRY_REASON_TYPES
|
|
44
|
+
TEST_RETRY_REASON_TYPES,
|
|
45
|
+
getPullRequestDiff,
|
|
46
|
+
getModifiedTestsFromDiff,
|
|
47
|
+
TEST_IS_MODIFIED,
|
|
48
|
+
getPullRequestBaseBranch
|
|
45
49
|
} = require('../../dd-trace/src/plugins/util/test')
|
|
46
50
|
const { isMarkedAsUnskippable } = require('../../datadog-plugin-jest/src/util')
|
|
47
51
|
const { ORIGIN_KEY, COMPONENT } = require('../../dd-trace/src/constants')
|
|
52
|
+
const { getEnvironmentVariable } = require('../../dd-trace/src/config-helper')
|
|
48
53
|
const { appClosing: appClosingTelemetry } = require('../../dd-trace/src/telemetry')
|
|
49
54
|
const log = require('../../dd-trace/src/log')
|
|
50
55
|
|
|
@@ -67,7 +72,11 @@ const {
|
|
|
67
72
|
GIT_BRANCH,
|
|
68
73
|
CI_PROVIDER_NAME,
|
|
69
74
|
CI_WORKSPACE_PATH,
|
|
70
|
-
GIT_COMMIT_MESSAGE
|
|
75
|
+
GIT_COMMIT_MESSAGE,
|
|
76
|
+
GIT_TAG,
|
|
77
|
+
GIT_PULL_REQUEST_BASE_BRANCH_SHA,
|
|
78
|
+
GIT_COMMIT_HEAD_SHA,
|
|
79
|
+
GIT_PULL_REQUEST_BASE_BRANCH
|
|
71
80
|
} = require('../../dd-trace/src/plugins/util/tags')
|
|
72
81
|
const {
|
|
73
82
|
OS_VERSION,
|
|
@@ -76,6 +85,7 @@ const {
|
|
|
76
85
|
RUNTIME_NAME,
|
|
77
86
|
RUNTIME_VERSION
|
|
78
87
|
} = require('../../dd-trace/src/plugins/util/env')
|
|
88
|
+
const { DD_MAJOR } = require('../../../version')
|
|
79
89
|
|
|
80
90
|
const TEST_FRAMEWORK_NAME = 'cypress'
|
|
81
91
|
|
|
@@ -175,6 +185,26 @@ function getTestManagementTests (tracer, testConfiguration) {
|
|
|
175
185
|
})
|
|
176
186
|
}
|
|
177
187
|
|
|
188
|
+
function getModifiedTests (testEnvironmentMetadata) {
|
|
189
|
+
const {
|
|
190
|
+
[GIT_PULL_REQUEST_BASE_BRANCH]: pullRequestBaseBranch,
|
|
191
|
+
[GIT_PULL_REQUEST_BASE_BRANCH_SHA]: pullRequestBaseBranchSha,
|
|
192
|
+
[GIT_COMMIT_HEAD_SHA]: commitHeadSha
|
|
193
|
+
} = testEnvironmentMetadata
|
|
194
|
+
|
|
195
|
+
const baseBranchSha = pullRequestBaseBranchSha || getPullRequestBaseBranch(pullRequestBaseBranch)
|
|
196
|
+
|
|
197
|
+
if (baseBranchSha) {
|
|
198
|
+
const diff = getPullRequestDiff(baseBranchSha, commitHeadSha)
|
|
199
|
+
const modifiedTests = getModifiedTestsFromDiff(diff)
|
|
200
|
+
if (modifiedTests) {
|
|
201
|
+
return modifiedTests
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
throw new Error('Modified tests could not be retrieved')
|
|
206
|
+
}
|
|
207
|
+
|
|
178
208
|
function getSuiteStatus (suiteStats) {
|
|
179
209
|
if (!suiteStats) {
|
|
180
210
|
return 'skip'
|
|
@@ -205,10 +235,13 @@ class CypressPlugin {
|
|
|
205
235
|
[GIT_BRANCH]: branch,
|
|
206
236
|
[CI_PROVIDER_NAME]: ciProviderName,
|
|
207
237
|
[CI_WORKSPACE_PATH]: repositoryRoot,
|
|
208
|
-
[GIT_COMMIT_MESSAGE]: commitMessage
|
|
238
|
+
[GIT_COMMIT_MESSAGE]: commitMessage,
|
|
239
|
+
[GIT_TAG]: tag,
|
|
240
|
+
[GIT_PULL_REQUEST_BASE_BRANCH_SHA]: pullRequestBaseSha,
|
|
241
|
+
[GIT_COMMIT_HEAD_SHA]: commitHeadSha
|
|
209
242
|
} = this.testEnvironmentMetadata
|
|
210
243
|
|
|
211
|
-
this.repositoryRoot = repositoryRoot
|
|
244
|
+
this.repositoryRoot = repositoryRoot || process.cwd()
|
|
212
245
|
this.ciProviderName = ciProviderName
|
|
213
246
|
this.codeOwnersEntries = getCodeOwnersFileEntries(repositoryRoot)
|
|
214
247
|
|
|
@@ -222,7 +255,10 @@ class CypressPlugin {
|
|
|
222
255
|
runtimeVersion,
|
|
223
256
|
branch,
|
|
224
257
|
testLevel: 'test',
|
|
225
|
-
commitMessage
|
|
258
|
+
commitMessage,
|
|
259
|
+
tag,
|
|
260
|
+
pullRequestBaseSha,
|
|
261
|
+
commitHeadSha
|
|
226
262
|
}
|
|
227
263
|
this.finishedTestsByFile = {}
|
|
228
264
|
this.testStatuses = {}
|
|
@@ -242,6 +278,8 @@ class CypressPlugin {
|
|
|
242
278
|
this.knownTests = []
|
|
243
279
|
this.isTestManagementTestsEnabled = false
|
|
244
280
|
this.testManagementAttemptToFixRetries = 0
|
|
281
|
+
this.isImpactedTestsEnabled = false
|
|
282
|
+
this.modifiedTests = []
|
|
245
283
|
}
|
|
246
284
|
|
|
247
285
|
// Init function returns a promise that resolves with the Cypress configuration
|
|
@@ -271,7 +309,8 @@ class CypressPlugin {
|
|
|
271
309
|
flakyTestRetriesCount,
|
|
272
310
|
isKnownTestsEnabled,
|
|
273
311
|
isTestManagementEnabled,
|
|
274
|
-
testManagementAttemptToFixRetries
|
|
312
|
+
testManagementAttemptToFixRetries,
|
|
313
|
+
isImpactedTestsEnabled
|
|
275
314
|
}
|
|
276
315
|
} = libraryConfigurationResponse
|
|
277
316
|
this.isSuitesSkippingEnabled = isSuitesSkippingEnabled
|
|
@@ -285,12 +324,25 @@ class CypressPlugin {
|
|
|
285
324
|
}
|
|
286
325
|
this.isTestManagementTestsEnabled = isTestManagementEnabled
|
|
287
326
|
this.testManagementAttemptToFixRetries = testManagementAttemptToFixRetries
|
|
327
|
+
this.isImpactedTestsEnabled = isImpactedTestsEnabled
|
|
288
328
|
}
|
|
289
329
|
return this.cypressConfig
|
|
290
330
|
})
|
|
291
331
|
return this.libraryConfigurationPromise
|
|
292
332
|
}
|
|
293
333
|
|
|
334
|
+
getIsTestModified (testSuiteAbsolutePath) {
|
|
335
|
+
const relativeTestSuitePath = getTestSuitePath(testSuiteAbsolutePath, this.repositoryRoot)
|
|
336
|
+
if (!this.modifiedTests) {
|
|
337
|
+
return false
|
|
338
|
+
}
|
|
339
|
+
const lines = this.modifiedTests[relativeTestSuitePath]
|
|
340
|
+
if (!lines) {
|
|
341
|
+
return false
|
|
342
|
+
}
|
|
343
|
+
return lines.length > 0
|
|
344
|
+
}
|
|
345
|
+
|
|
294
346
|
getTestSuiteProperties (testSuite) {
|
|
295
347
|
return this.testManagementTests?.cypress?.suites?.[testSuite]?.tests || {}
|
|
296
348
|
}
|
|
@@ -455,6 +507,15 @@ class CypressPlugin {
|
|
|
455
507
|
}
|
|
456
508
|
}
|
|
457
509
|
|
|
510
|
+
if (this.isImpactedTestsEnabled) {
|
|
511
|
+
try {
|
|
512
|
+
this.modifiedTests = getModifiedTests(this.testEnvironmentMetadata)
|
|
513
|
+
} catch (error) {
|
|
514
|
+
log.error(error)
|
|
515
|
+
this.isImpactedTestsEnabled = false
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
|
|
458
519
|
// `details.specs` are test files
|
|
459
520
|
details.specs?.forEach(({ absolute, relative }) => {
|
|
460
521
|
const isUnskippableSuite = isMarkedAsUnskippable({ path: absolute })
|
|
@@ -474,7 +535,13 @@ class CypressPlugin {
|
|
|
474
535
|
testSessionSpanMetadata[TEST_EARLY_FLAKE_ENABLED] = 'true'
|
|
475
536
|
}
|
|
476
537
|
|
|
477
|
-
const
|
|
538
|
+
const trimmedCommand = DD_MAJOR < 6 ? this.command : 'cypress run'
|
|
539
|
+
|
|
540
|
+
const testSessionName = getTestSessionName(
|
|
541
|
+
this.tracer._tracer._config,
|
|
542
|
+
trimmedCommand,
|
|
543
|
+
this.testEnvironmentMetadata
|
|
544
|
+
)
|
|
478
545
|
|
|
479
546
|
if (this.tracer._tracer._exporter?.addMetadataTags) {
|
|
480
547
|
const metadataTags = {}
|
|
@@ -549,7 +616,7 @@ class CypressPlugin {
|
|
|
549
616
|
this.ciVisEvent(TELEMETRY_EVENT_FINISHED, 'session')
|
|
550
617
|
incrementCountMetric(TELEMETRY_TEST_SESSION, {
|
|
551
618
|
provider: this.ciProviderName,
|
|
552
|
-
autoInjected: !!
|
|
619
|
+
autoInjected: !!getEnvironmentVariable('DD_CIVISIBILITY_AUTO_INSTRUMENTATION_PROVIDER')
|
|
553
620
|
})
|
|
554
621
|
|
|
555
622
|
finishAllTraceSpans(this.testSessionSpan)
|
|
@@ -601,13 +668,9 @@ class CypressPlugin {
|
|
|
601
668
|
const isSkippedByItr = this.testsToSkip.find(test =>
|
|
602
669
|
cypressTestName === test.name && spec.relative === test.suite
|
|
603
670
|
)
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
testSourceFile = getTestSuitePath(spec.absolute, this.repositoryRoot)
|
|
608
|
-
} else {
|
|
609
|
-
testSourceFile = spec.relative
|
|
610
|
-
}
|
|
671
|
+
const testSourceFile = spec.absolute && this.repositoryRoot
|
|
672
|
+
? getTestSuitePath(spec.absolute, this.repositoryRoot)
|
|
673
|
+
: spec.relative
|
|
611
674
|
|
|
612
675
|
const skippedTestSpan = this.getTestSpan({ testName: cypressTestName, testSuite: spec.relative, testSourceFile })
|
|
613
676
|
|
|
@@ -683,12 +746,9 @@ class CypressPlugin {
|
|
|
683
746
|
if (this.itrCorrelationId) {
|
|
684
747
|
finishedTest.testSpan.setTag(ITR_CORRELATION_ID, this.itrCorrelationId)
|
|
685
748
|
}
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
} else {
|
|
690
|
-
testSourceFile = spec.relative
|
|
691
|
-
}
|
|
749
|
+
const testSourceFile = spec.absolute && this.repositoryRoot
|
|
750
|
+
? getTestSuitePath(spec.absolute, this.repositoryRoot)
|
|
751
|
+
: spec.relative
|
|
692
752
|
if (testSourceFile) {
|
|
693
753
|
finishedTest.testSpan.setTag(TEST_SOURCE_FILE, testSourceFile)
|
|
694
754
|
}
|
|
@@ -725,7 +785,10 @@ class CypressPlugin {
|
|
|
725
785
|
isKnownTestsEnabled: this.isKnownTestsEnabled,
|
|
726
786
|
isTestManagementEnabled: this.isTestManagementTestsEnabled,
|
|
727
787
|
testManagementAttemptToFixRetries: this.testManagementAttemptToFixRetries,
|
|
728
|
-
testManagementTests: this.getTestSuiteProperties(testSuite)
|
|
788
|
+
testManagementTests: this.getTestSuiteProperties(testSuite),
|
|
789
|
+
isImpactedTestsEnabled: this.isImpactedTestsEnabled,
|
|
790
|
+
isModifiedTest: this.getIsTestModified(testSuiteAbsolutePath),
|
|
791
|
+
repositoryRoot: this.repositoryRoot
|
|
729
792
|
}
|
|
730
793
|
|
|
731
794
|
if (this.testSuiteSpan) {
|
|
@@ -736,7 +799,7 @@ class CypressPlugin {
|
|
|
736
799
|
},
|
|
737
800
|
'dd:beforeEach': (test) => {
|
|
738
801
|
const { testName, testSuite } = test
|
|
739
|
-
const shouldSkip =
|
|
802
|
+
const shouldSkip = this.testsToSkip.some(test => {
|
|
740
803
|
return testName === test.name && testSuite === test.suite
|
|
741
804
|
})
|
|
742
805
|
const isUnskippable = this.unskippableSuites.includes(testSuite)
|
|
@@ -783,7 +846,8 @@ class CypressPlugin {
|
|
|
783
846
|
testName,
|
|
784
847
|
isNew,
|
|
785
848
|
isEfdRetry,
|
|
786
|
-
isAttemptToFix
|
|
849
|
+
isAttemptToFix,
|
|
850
|
+
isModified
|
|
787
851
|
} = test
|
|
788
852
|
if (coverage && this.isCodeCoverageEnabled && this.tracer._tracer._exporter?.exportCoverage) {
|
|
789
853
|
const coverageFiles = getCoveredFilenamesFromCoverage(coverage)
|
|
@@ -807,10 +871,10 @@ class CypressPlugin {
|
|
|
807
871
|
this.activeTestSpan.setTag(TEST_STATUS, testStatus)
|
|
808
872
|
|
|
809
873
|
// Save the test status to know if it has passed all retries
|
|
810
|
-
if (
|
|
811
|
-
this.testStatuses[testName] = [testStatus]
|
|
812
|
-
} else {
|
|
874
|
+
if (this.testStatuses[testName]) {
|
|
813
875
|
this.testStatuses[testName].push(testStatus)
|
|
876
|
+
} else {
|
|
877
|
+
this.testStatuses[testName] = [testStatus]
|
|
814
878
|
}
|
|
815
879
|
const testStatuses = this.testStatuses[testName]
|
|
816
880
|
|
|
@@ -830,6 +894,13 @@ class CypressPlugin {
|
|
|
830
894
|
this.activeTestSpan.setTag(TEST_RETRY_REASON, TEST_RETRY_REASON_TYPES.efd)
|
|
831
895
|
}
|
|
832
896
|
}
|
|
897
|
+
if (isModified) {
|
|
898
|
+
this.activeTestSpan.setTag(TEST_IS_MODIFIED, 'true')
|
|
899
|
+
if (isEfdRetry) {
|
|
900
|
+
this.activeTestSpan.setTag(TEST_IS_RETRY, 'true')
|
|
901
|
+
this.activeTestSpan.setTag(TEST_RETRY_REASON, TEST_RETRY_REASON_TYPES.efd)
|
|
902
|
+
}
|
|
903
|
+
}
|
|
833
904
|
if (isAttemptToFix) {
|
|
834
905
|
this.activeTestSpan.setTag(TEST_MANAGEMENT_IS_ATTEMPT_TO_FIX, 'true')
|
|
835
906
|
if (testStatuses.length > 1) {
|
|
@@ -838,7 +909,7 @@ class CypressPlugin {
|
|
|
838
909
|
}
|
|
839
910
|
const isLastAttempt = testStatuses.length === this.testManagementAttemptToFixRetries + 1
|
|
840
911
|
if (isLastAttempt) {
|
|
841
|
-
if (testStatuses.
|
|
912
|
+
if (testStatuses.includes('fail')) {
|
|
842
913
|
this.activeTestSpan.setTag(TEST_MANAGEMENT_ATTEMPT_TO_FIX_PASSED, 'false')
|
|
843
914
|
}
|
|
844
915
|
if (testStatuses.every(status => status === 'fail')) {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
const NoopTracer = require('../../dd-trace/src/noop/tracer')
|
|
2
2
|
const cypressPlugin = require('./cypress-plugin')
|
|
3
3
|
const satisfies = require('semifies')
|
|
4
|
+
const { DD_MAJOR } = require('../../../version')
|
|
4
5
|
|
|
5
6
|
const noopTask = {
|
|
6
7
|
'dd:testSuiteStart': () => {
|
|
@@ -17,10 +18,19 @@ const noopTask = {
|
|
|
17
18
|
}
|
|
18
19
|
}
|
|
19
20
|
|
|
20
|
-
module.exports = (on, config)
|
|
21
|
+
module.exports = function CypressPlugin (on, config) {
|
|
21
22
|
const tracer = require('../../dd-trace')
|
|
22
23
|
|
|
23
24
|
if (satisfies(config.version, '<10.2.0')) {
|
|
25
|
+
if (DD_MAJOR >= 6) {
|
|
26
|
+
// eslint-disable-next-line no-console
|
|
27
|
+
console.error(
|
|
28
|
+
'ERROR: dd-trace v6 has deleted support for Cypress<10.2.0.'
|
|
29
|
+
)
|
|
30
|
+
on('task', noopTask)
|
|
31
|
+
return config
|
|
32
|
+
}
|
|
33
|
+
|
|
24
34
|
// console.warn does not seem to work in cypress, so using console.log instead
|
|
25
35
|
// eslint-disable-next-line no-console
|
|
26
36
|
console.log(
|
|
@@ -1,12 +1,15 @@
|
|
|
1
|
+
/* eslint-disable unicorn/no-abusive-eslint-disable */
|
|
1
2
|
/* eslint-disable */
|
|
2
3
|
let isEarlyFlakeDetectionEnabled = false
|
|
3
4
|
let isKnownTestsEnabled = false
|
|
4
5
|
let knownTestsForSuite = []
|
|
5
|
-
let suiteTests = []
|
|
6
6
|
let earlyFlakeDetectionNumRetries = 0
|
|
7
7
|
let isTestManagementEnabled = false
|
|
8
8
|
let testManagementAttemptToFixRetries = 0
|
|
9
9
|
let testManagementTests = {}
|
|
10
|
+
let isImpactedTestsEnabled = false
|
|
11
|
+
let isModifiedTest = false
|
|
12
|
+
|
|
10
13
|
// We need to grab the original window as soon as possible,
|
|
11
14
|
// in case the test changes the origin. If the test does change the origin,
|
|
12
15
|
// any call to `cy.window()` will result in a cross origin error.
|
|
@@ -48,10 +51,9 @@ function retryTest (test, suiteTests, numRetries, tags) {
|
|
|
48
51
|
}
|
|
49
52
|
}
|
|
50
53
|
|
|
51
|
-
|
|
52
54
|
const oldRunTests = Cypress.mocha.getRunner().runTests
|
|
53
55
|
Cypress.mocha.getRunner().runTests = function (suite, fn) {
|
|
54
|
-
if (!isKnownTestsEnabled && !isTestManagementEnabled) {
|
|
56
|
+
if (!isKnownTestsEnabled && !isTestManagementEnabled && !isImpactedTestsEnabled) {
|
|
55
57
|
return oldRunTests.apply(this, arguments)
|
|
56
58
|
}
|
|
57
59
|
// We copy the new tests at the beginning of the suite run (runTests), so that they're run
|
|
@@ -67,10 +69,24 @@ Cypress.mocha.getRunner().runTests = function (suite, fn) {
|
|
|
67
69
|
retryTest(test, suite.tests, testManagementAttemptToFixRetries, ['_ddIsAttemptToFix'])
|
|
68
70
|
}
|
|
69
71
|
}
|
|
72
|
+
if (isImpactedTestsEnabled && isModifiedTest) {
|
|
73
|
+
test._ddIsModified = true
|
|
74
|
+
if (isEarlyFlakeDetectionEnabled && !isAttemptToFix) {
|
|
75
|
+
retryTest(
|
|
76
|
+
test,
|
|
77
|
+
suite.tests,
|
|
78
|
+
earlyFlakeDetectionNumRetries,
|
|
79
|
+
['_ddIsModified', '_ddIsEfdRetry', isKnownTestsEnabled && isNewTest(test) && '_ddIsNew']
|
|
80
|
+
)
|
|
81
|
+
}
|
|
82
|
+
}
|
|
70
83
|
if (isKnownTestsEnabled) {
|
|
71
84
|
if (!test._ddIsNew && !test.isPending() && isNewTest(test)) {
|
|
72
85
|
test._ddIsNew = true
|
|
73
|
-
if (
|
|
86
|
+
if (isImpactedTestsEnabled && isModifiedTest) {
|
|
87
|
+
test._ddIsModified = true
|
|
88
|
+
}
|
|
89
|
+
if (isEarlyFlakeDetectionEnabled && !isAttemptToFix && !isModifiedTest) {
|
|
74
90
|
retryTest(test, suite.tests, earlyFlakeDetectionNumRetries, ['_ddIsNew', '_ddIsEfdRetry'])
|
|
75
91
|
}
|
|
76
92
|
}
|
|
@@ -108,6 +124,8 @@ before(function () {
|
|
|
108
124
|
isTestManagementEnabled = suiteConfig.isTestManagementEnabled
|
|
109
125
|
testManagementAttemptToFixRetries = suiteConfig.testManagementAttemptToFixRetries
|
|
110
126
|
testManagementTests = suiteConfig.testManagementTests
|
|
127
|
+
isImpactedTestsEnabled = suiteConfig.isImpactedTestsEnabled
|
|
128
|
+
isModifiedTest = suiteConfig.isModifiedTest
|
|
111
129
|
}
|
|
112
130
|
})
|
|
113
131
|
})
|
|
@@ -133,7 +151,8 @@ afterEach(function () {
|
|
|
133
151
|
error: currentTest.err,
|
|
134
152
|
isNew: currentTest._ddIsNew,
|
|
135
153
|
isEfdRetry: currentTest._ddIsEfdRetry,
|
|
136
|
-
isAttemptToFix: currentTest._ddIsAttemptToFix
|
|
154
|
+
isAttemptToFix: currentTest._ddIsAttemptToFix,
|
|
155
|
+
isModified: currentTest._ddIsModified
|
|
137
156
|
}
|
|
138
157
|
try {
|
|
139
158
|
testInfo.testSourceLine = Cypress.mocha.getRunner().currentRunnable.invocationDetails.line
|
|
@@ -3,12 +3,13 @@
|
|
|
3
3
|
const Plugin = require('../../dd-trace/src/plugins/plugin')
|
|
4
4
|
const telemetryMetrics = require('../../dd-trace/src/telemetry/metrics')
|
|
5
5
|
const apiMetrics = telemetryMetrics.manager.namespace('tracers')
|
|
6
|
+
const { getEnvironmentVariable } = require('../../dd-trace/src/config-helper')
|
|
6
7
|
|
|
7
8
|
// api ==> here
|
|
8
9
|
const objectMap = new WeakMap()
|
|
9
10
|
|
|
10
11
|
const injectionEnabledTag =
|
|
11
|
-
`injection_enabled:${
|
|
12
|
+
`injection_enabled:${getEnvironmentVariable('DD_INJECTION_ENABLED') ? 'yes' : 'no'}`
|
|
12
13
|
|
|
13
14
|
module.exports = class DdTraceApiPlugin extends Plugin {
|
|
14
15
|
static get id () {
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const { entryTags } = require('../../datadog-code-origin')
|
|
4
|
+
const Plugin = require('../../dd-trace/src/plugins/plugin')
|
|
5
|
+
const web = require('../../dd-trace/src/plugins/util/web')
|
|
6
|
+
|
|
7
|
+
class ExpressCodeOriginForSpansPlugin extends Plugin {
|
|
8
|
+
static get id () {
|
|
9
|
+
return 'express'
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
constructor (...args) {
|
|
13
|
+
super(...args)
|
|
14
|
+
|
|
15
|
+
const layerTags = new WeakMap()
|
|
16
|
+
|
|
17
|
+
this.addSub('apm:express:middleware:enter', ({ req, layer }) => {
|
|
18
|
+
const tags = layerTags.get(layer)
|
|
19
|
+
if (!tags) return
|
|
20
|
+
web.getContext(req).span?.addTags(tags)
|
|
21
|
+
})
|
|
22
|
+
|
|
23
|
+
this.addSub('apm:express:route:added', ({ topOfStackFunc, layer }) => {
|
|
24
|
+
if (layerTags.has(layer)) return
|
|
25
|
+
layerTags.set(layer, entryTags(topOfStackFunc))
|
|
26
|
+
})
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
module.exports = ExpressCodeOriginForSpansPlugin
|
|
@@ -1,18 +1,16 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const
|
|
3
|
+
const ExpressTracingPlugin = require('./tracing')
|
|
4
|
+
const ExpressCodeOriginForSpansPlugin = require('./code_origin')
|
|
5
|
+
const CompositePlugin = require('../../dd-trace/src/plugins/composite')
|
|
4
6
|
|
|
5
|
-
class ExpressPlugin extends
|
|
6
|
-
static get id () {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
this.addSub('apm:express:request:handle', ({ req }) => {
|
|
14
|
-
this.setFramework(req, 'express', this.config)
|
|
15
|
-
})
|
|
7
|
+
class ExpressPlugin extends CompositePlugin {
|
|
8
|
+
static get id () { return 'express' }
|
|
9
|
+
static get plugins () {
|
|
10
|
+
return {
|
|
11
|
+
tracing: ExpressTracingPlugin,
|
|
12
|
+
codeOriginForSpans: ExpressCodeOriginForSpansPlugin
|
|
13
|
+
}
|
|
16
14
|
}
|
|
17
15
|
}
|
|
18
16
|
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const RouterPlugin = require('../../datadog-plugin-router/src')
|
|
4
|
+
|
|
5
|
+
class ExpressTracingPlugin extends RouterPlugin {
|
|
6
|
+
static get id () {
|
|
7
|
+
return 'express'
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
constructor (...args) {
|
|
11
|
+
super(...args)
|
|
12
|
+
|
|
13
|
+
this.addSub('apm:express:request:handle', ({ req }) => {
|
|
14
|
+
this.setFramework(req, 'express', this.config)
|
|
15
|
+
})
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
module.exports = ExpressTracingPlugin
|
|
@@ -7,18 +7,22 @@ class GoogleCloudPubsubClientPlugin extends ClientPlugin {
|
|
|
7
7
|
static get type () { return 'messaging' }
|
|
8
8
|
static get operation () { return 'request' }
|
|
9
9
|
|
|
10
|
-
start (
|
|
10
|
+
start (ctx) {
|
|
11
|
+
const { request, api, projectId } = ctx
|
|
12
|
+
|
|
11
13
|
if (api === 'publish') return
|
|
12
14
|
|
|
13
15
|
this.startSpan(this.operationName(), {
|
|
14
16
|
service: this.config.service || this.serviceName(),
|
|
15
|
-
resource: [api, request.name].filter(
|
|
17
|
+
resource: [api, request.name].filter(Boolean).join(' '),
|
|
16
18
|
kind: this.constructor.kind,
|
|
17
19
|
meta: {
|
|
18
20
|
'pubsub.method': api,
|
|
19
21
|
'gcloud.project_id': projectId
|
|
20
22
|
}
|
|
21
|
-
})
|
|
23
|
+
}, ctx)
|
|
24
|
+
|
|
25
|
+
return ctx.currentStore
|
|
22
26
|
}
|
|
23
27
|
}
|
|
24
28
|
|
|
@@ -7,7 +7,8 @@ class GoogleCloudPubsubConsumerPlugin extends ConsumerPlugin {
|
|
|
7
7
|
static get id () { return 'google-cloud-pubsub' }
|
|
8
8
|
static get operation () { return 'receive' }
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
bindStart (ctx) {
|
|
11
|
+
const { message } = ctx
|
|
11
12
|
const subscription = message._subscriber._subscription
|
|
12
13
|
const topic = subscription.metadata && subscription.metadata.topic
|
|
13
14
|
const childOf = this.tracer.extract('text_map', message.attributes) || null
|
|
@@ -23,25 +24,29 @@ class GoogleCloudPubsubConsumerPlugin extends ConsumerPlugin {
|
|
|
23
24
|
metrics: {
|
|
24
25
|
'pubsub.ack': 0
|
|
25
26
|
}
|
|
26
|
-
})
|
|
27
|
+
}, ctx)
|
|
28
|
+
|
|
27
29
|
if (this.config.dsmEnabled && message?.attributes) {
|
|
28
30
|
const payloadSize = getMessageSize(message)
|
|
29
31
|
this.tracer.decodeDataStreamsContext(message.attributes)
|
|
30
32
|
this.tracer
|
|
31
33
|
.setCheckpoint(['direction:in', `topic:${topic}`, 'type:google-pubsub'], span, payloadSize)
|
|
32
34
|
}
|
|
33
|
-
}
|
|
34
35
|
|
|
35
|
-
|
|
36
|
-
|
|
36
|
+
return ctx.currentStore
|
|
37
|
+
}
|
|
37
38
|
|
|
38
|
-
|
|
39
|
+
bindFinish (ctx) {
|
|
40
|
+
const { message } = ctx
|
|
41
|
+
const span = ctx.currentStore.span
|
|
39
42
|
|
|
40
|
-
if (message
|
|
43
|
+
if (message?._handled) {
|
|
41
44
|
span.setTag('pubsub.ack', 1)
|
|
42
45
|
}
|
|
43
46
|
|
|
44
47
|
super.finish()
|
|
48
|
+
|
|
49
|
+
return ctx.parentStore
|
|
45
50
|
}
|
|
46
51
|
}
|
|
47
52
|
|