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
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const { addHook, channel
|
|
1
|
+
const { addHook, channel } = require('./helpers/instrument')
|
|
2
2
|
const shimmer = require('../../datadog-shimmer')
|
|
3
3
|
const log = require('../../dd-trace/src/log')
|
|
4
4
|
|
|
@@ -12,6 +12,7 @@ const isNewTestCh = channel('ci:vitest:test:is-new')
|
|
|
12
12
|
const isAttemptToFixCh = channel('ci:vitest:test:is-attempt-to-fix')
|
|
13
13
|
const isDisabledCh = channel('ci:vitest:test:is-disabled')
|
|
14
14
|
const isQuarantinedCh = channel('ci:vitest:test:is-quarantined')
|
|
15
|
+
const isModifiedCh = channel('ci:vitest:test:is-modified')
|
|
15
16
|
|
|
16
17
|
// test suite hooks
|
|
17
18
|
const testSuiteStartCh = channel('ci:vitest:test-suite:start')
|
|
@@ -25,6 +26,7 @@ const libraryConfigurationCh = channel('ci:vitest:library-configuration')
|
|
|
25
26
|
const knownTestsCh = channel('ci:vitest:known-tests')
|
|
26
27
|
const isEarlyFlakeDetectionFaultyCh = channel('ci:vitest:is-early-flake-detection-faulty')
|
|
27
28
|
const testManagementTestsCh = channel('ci:vitest:test-management-tests')
|
|
29
|
+
const impactedTestsCh = channel('ci:vitest:modified-tests')
|
|
28
30
|
|
|
29
31
|
const taskToCtx = new WeakMap()
|
|
30
32
|
const taskToStatuses = new WeakMap()
|
|
@@ -32,10 +34,10 @@ const newTasks = new WeakSet()
|
|
|
32
34
|
const disabledTasks = new WeakSet()
|
|
33
35
|
const quarantinedTasks = new WeakSet()
|
|
34
36
|
const attemptToFixTasks = new WeakSet()
|
|
37
|
+
const modifiedTasks = new WeakSet()
|
|
35
38
|
let isRetryReasonEfd = false
|
|
36
39
|
let isRetryReasonAttemptToFix = false
|
|
37
40
|
const switchedStatuses = new WeakSet()
|
|
38
|
-
const sessionAsyncResource = new AsyncResource('bound-anonymous-fn')
|
|
39
41
|
|
|
40
42
|
const BREAKPOINT_HIT_GRACE_PERIOD_MS = 400
|
|
41
43
|
|
|
@@ -58,7 +60,9 @@ function getProvidedContext () {
|
|
|
58
60
|
_ddIsTestManagementTestsEnabled: isTestManagementTestsEnabled,
|
|
59
61
|
_ddTestManagementAttemptToFixRetries: testManagementAttemptToFixRetries,
|
|
60
62
|
_ddTestManagementTests: testManagementTests,
|
|
61
|
-
_ddIsFlakyTestRetriesEnabled: isFlakyTestRetriesEnabled
|
|
63
|
+
_ddIsFlakyTestRetriesEnabled: isFlakyTestRetriesEnabled,
|
|
64
|
+
_ddIsImpactedTestsEnabled: isImpactedTestsEnabled,
|
|
65
|
+
_ddModifiedTests: modifiedTests
|
|
62
66
|
} = globalThis.__vitest_worker__.providedContext
|
|
63
67
|
|
|
64
68
|
return {
|
|
@@ -70,9 +74,11 @@ function getProvidedContext () {
|
|
|
70
74
|
isTestManagementTestsEnabled,
|
|
71
75
|
testManagementAttemptToFixRetries,
|
|
72
76
|
testManagementTests,
|
|
73
|
-
isFlakyTestRetriesEnabled
|
|
77
|
+
isFlakyTestRetriesEnabled,
|
|
78
|
+
isImpactedTestsEnabled,
|
|
79
|
+
modifiedTests
|
|
74
80
|
}
|
|
75
|
-
} catch
|
|
81
|
+
} catch {
|
|
76
82
|
log.error('Vitest workers could not parse provided context, so some features will not work.')
|
|
77
83
|
return {
|
|
78
84
|
isDiEnabled: false,
|
|
@@ -83,7 +89,9 @@ function getProvidedContext () {
|
|
|
83
89
|
isTestManagementTestsEnabled: false,
|
|
84
90
|
testManagementAttemptToFixRetries: 0,
|
|
85
91
|
testManagementTests: {},
|
|
86
|
-
isFlakyTestRetriesEnabled: false
|
|
92
|
+
isFlakyTestRetriesEnabled: false,
|
|
93
|
+
isImpactedTestsEnabled: false,
|
|
94
|
+
modifiedTests: {}
|
|
87
95
|
}
|
|
88
96
|
}
|
|
89
97
|
}
|
|
@@ -107,9 +115,7 @@ function isBaseSequencer (vitestPackage) {
|
|
|
107
115
|
|
|
108
116
|
function getChannelPromise (channelToPublishTo) {
|
|
109
117
|
return new Promise(resolve => {
|
|
110
|
-
|
|
111
|
-
channelToPublishTo.publish({ onDone: resolve })
|
|
112
|
-
})
|
|
118
|
+
channelToPublishTo.publish({ onDone: resolve })
|
|
113
119
|
})
|
|
114
120
|
}
|
|
115
121
|
|
|
@@ -123,7 +129,6 @@ function getSessionStatus (state) {
|
|
|
123
129
|
return 'pass'
|
|
124
130
|
}
|
|
125
131
|
|
|
126
|
-
// eslint-disable-next-line
|
|
127
132
|
// From https://github.com/vitest-dev/vitest/blob/51c04e2f44d91322b334f8ccbcdb368facc3f8ec/packages/runner/src/run.ts#L243-L250
|
|
128
133
|
function getVitestTestStatus (test, retryCount) {
|
|
129
134
|
if (test.result.state !== 'fail') {
|
|
@@ -183,10 +188,9 @@ function getSortWrapper (sort) {
|
|
|
183
188
|
let isEarlyFlakeDetectionFaulty = false
|
|
184
189
|
let isKnownTestsEnabled = false
|
|
185
190
|
let isTestManagementTestsEnabled = false
|
|
191
|
+
let isImpactedTestsEnabled = false
|
|
186
192
|
let testManagementAttemptToFixRetries = 0
|
|
187
193
|
let isDiEnabled = false
|
|
188
|
-
let knownTests = {}
|
|
189
|
-
let testManagementTests = {}
|
|
190
194
|
|
|
191
195
|
try {
|
|
192
196
|
const { err, libraryConfig } = await getChannelPromise(libraryConfigurationCh)
|
|
@@ -199,12 +203,14 @@ function getSortWrapper (sort) {
|
|
|
199
203
|
isKnownTestsEnabled = libraryConfig.isKnownTestsEnabled
|
|
200
204
|
isTestManagementTestsEnabled = libraryConfig.isTestManagementEnabled
|
|
201
205
|
testManagementAttemptToFixRetries = libraryConfig.testManagementAttemptToFixRetries
|
|
206
|
+
isImpactedTestsEnabled = libraryConfig.isImpactedTestsEnabled
|
|
202
207
|
}
|
|
203
|
-
} catch
|
|
208
|
+
} catch {
|
|
204
209
|
isFlakyTestRetriesEnabled = false
|
|
205
210
|
isEarlyFlakeDetectionEnabled = false
|
|
206
211
|
isDiEnabled = false
|
|
207
212
|
isKnownTestsEnabled = false
|
|
213
|
+
isImpactedTestsEnabled = false
|
|
208
214
|
}
|
|
209
215
|
|
|
210
216
|
if (isFlakyTestRetriesEnabled && !this.ctx.config.retry && flakyTestRetriesCount > 0) {
|
|
@@ -212,15 +218,17 @@ function getSortWrapper (sort) {
|
|
|
212
218
|
try {
|
|
213
219
|
const workspaceProject = this.ctx.getCoreWorkspaceProject()
|
|
214
220
|
workspaceProject._provided._ddIsFlakyTestRetriesEnabled = isFlakyTestRetriesEnabled
|
|
215
|
-
} catch
|
|
221
|
+
} catch {
|
|
216
222
|
log.warn('Could not send library configuration to workers.')
|
|
217
223
|
}
|
|
218
224
|
}
|
|
219
225
|
|
|
220
226
|
if (isKnownTestsEnabled) {
|
|
221
227
|
const knownTestsResponse = await getChannelPromise(knownTestsCh)
|
|
222
|
-
if (
|
|
223
|
-
|
|
228
|
+
if (knownTestsResponse.err) {
|
|
229
|
+
isEarlyFlakeDetectionEnabled = false
|
|
230
|
+
} else {
|
|
231
|
+
const knownTests = knownTestsResponse.knownTests
|
|
224
232
|
const getFilePaths = this.ctx.getTestFilepaths || this.ctx._globTestFilepaths
|
|
225
233
|
|
|
226
234
|
const testFilepaths = await getFilePaths.call(this.ctx)
|
|
@@ -234,7 +242,6 @@ function getSortWrapper (sort) {
|
|
|
234
242
|
})
|
|
235
243
|
if (isEarlyFlakeDetectionFaulty) {
|
|
236
244
|
isEarlyFlakeDetectionEnabled = false
|
|
237
|
-
isKnownTestsEnabled = false
|
|
238
245
|
log.warn('New test detection is disabled because the number of new tests is too high.')
|
|
239
246
|
} else {
|
|
240
247
|
// TODO: use this to pass session and module IDs to the worker, instead of polluting process.env
|
|
@@ -245,13 +252,10 @@ function getSortWrapper (sort) {
|
|
|
245
252
|
workspaceProject._provided._ddKnownTests = knownTests.vitest || {}
|
|
246
253
|
workspaceProject._provided._ddIsEarlyFlakeDetectionEnabled = isEarlyFlakeDetectionEnabled
|
|
247
254
|
workspaceProject._provided._ddEarlyFlakeDetectionNumRetries = earlyFlakeDetectionNumRetries
|
|
248
|
-
} catch
|
|
255
|
+
} catch {
|
|
249
256
|
log.warn('Could not send known tests to workers so Early Flake Detection will not work.')
|
|
250
257
|
}
|
|
251
258
|
}
|
|
252
|
-
} else {
|
|
253
|
-
isEarlyFlakeDetectionEnabled = false
|
|
254
|
-
isKnownTestsEnabled = false
|
|
255
259
|
}
|
|
256
260
|
}
|
|
257
261
|
|
|
@@ -259,26 +263,41 @@ function getSortWrapper (sort) {
|
|
|
259
263
|
try {
|
|
260
264
|
const workspaceProject = this.ctx.getCoreWorkspaceProject()
|
|
261
265
|
workspaceProject._provided._ddIsDiEnabled = isDiEnabled
|
|
262
|
-
} catch
|
|
266
|
+
} catch {
|
|
263
267
|
log.warn('Could not send Dynamic Instrumentation configuration to workers.')
|
|
264
268
|
}
|
|
265
269
|
}
|
|
266
270
|
|
|
267
271
|
if (isTestManagementTestsEnabled) {
|
|
268
272
|
const { err, testManagementTests: receivedTestManagementTests } = await getChannelPromise(testManagementTestsCh)
|
|
269
|
-
if (
|
|
270
|
-
|
|
273
|
+
if (err) {
|
|
274
|
+
isTestManagementTestsEnabled = false
|
|
275
|
+
log.error('Could not get test management tests.')
|
|
276
|
+
} else {
|
|
277
|
+
const testManagementTests = receivedTestManagementTests
|
|
271
278
|
try {
|
|
272
279
|
const workspaceProject = this.ctx.getCoreWorkspaceProject()
|
|
273
280
|
workspaceProject._provided._ddIsTestManagementTestsEnabled = isTestManagementTestsEnabled
|
|
274
281
|
workspaceProject._provided._ddTestManagementAttemptToFixRetries = testManagementAttemptToFixRetries
|
|
275
282
|
workspaceProject._provided._ddTestManagementTests = testManagementTests
|
|
276
|
-
} catch
|
|
283
|
+
} catch {
|
|
277
284
|
log.warn('Could not send test management tests to workers so Test Management will not work.')
|
|
278
285
|
}
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
if (isImpactedTestsEnabled) {
|
|
290
|
+
const { err, modifiedTests } = await getChannelPromise(impactedTestsCh)
|
|
291
|
+
if (err) {
|
|
292
|
+
log.error('Could not get modified tests.')
|
|
279
293
|
} else {
|
|
280
|
-
|
|
281
|
-
|
|
294
|
+
try {
|
|
295
|
+
const workspaceProject = this.ctx.getCoreWorkspaceProject()
|
|
296
|
+
workspaceProject._provided._ddIsImpactedTestsEnabled = isImpactedTestsEnabled
|
|
297
|
+
workspaceProject._provided._ddModifiedTests = modifiedTests
|
|
298
|
+
} catch {
|
|
299
|
+
log.warn('Could not send modified tests to workers so Impacted Tests will not work.')
|
|
300
|
+
}
|
|
282
301
|
}
|
|
283
302
|
}
|
|
284
303
|
|
|
@@ -290,7 +309,7 @@ function getSortWrapper (sort) {
|
|
|
290
309
|
|
|
291
310
|
try {
|
|
292
311
|
testCodeCoverageLinesTotal = totalCodeCoverage.getCoverageSummary().lines.pct
|
|
293
|
-
} catch
|
|
312
|
+
} catch {
|
|
294
313
|
// ignore errors
|
|
295
314
|
}
|
|
296
315
|
return totalCodeCoverage
|
|
@@ -309,16 +328,14 @@ function getSortWrapper (sort) {
|
|
|
309
328
|
error = new Error(`Test suites failed: ${failedSuites.length}.`)
|
|
310
329
|
}
|
|
311
330
|
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
onFinish
|
|
321
|
-
})
|
|
331
|
+
testSessionFinishCh.publish({
|
|
332
|
+
status: getSessionStatus(this.state),
|
|
333
|
+
testCodeCoverageLinesTotal,
|
|
334
|
+
error,
|
|
335
|
+
isEarlyFlakeDetectionEnabled,
|
|
336
|
+
isEarlyFlakeDetectionFaulty,
|
|
337
|
+
isTestManagementTestsEnabled,
|
|
338
|
+
onFinish
|
|
322
339
|
})
|
|
323
340
|
|
|
324
341
|
await flushPromise
|
|
@@ -335,10 +352,8 @@ function getCreateCliWrapper (vitestPackage, frameworkVersion) {
|
|
|
335
352
|
if (!testSessionStartCh.hasSubscribers) {
|
|
336
353
|
return oldCreateCli.apply(this, arguments)
|
|
337
354
|
}
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
testSessionStartCh.publish({ command: `vitest ${processArgv}`, frameworkVersion })
|
|
341
|
-
})
|
|
355
|
+
const processArgv = process.argv.slice(2).join(' ')
|
|
356
|
+
testSessionStartCh.publish({ command: `vitest ${processArgv}`, frameworkVersion })
|
|
342
357
|
return oldCreateCli.apply(this, arguments)
|
|
343
358
|
})
|
|
344
359
|
|
|
@@ -364,7 +379,9 @@ addHook({
|
|
|
364
379
|
numRepeats,
|
|
365
380
|
isTestManagementTestsEnabled,
|
|
366
381
|
testManagementAttemptToFixRetries,
|
|
367
|
-
testManagementTests
|
|
382
|
+
testManagementTests,
|
|
383
|
+
isImpactedTestsEnabled,
|
|
384
|
+
modifiedTests
|
|
368
385
|
} = getProvidedContext()
|
|
369
386
|
|
|
370
387
|
if (isTestManagementTestsEnabled) {
|
|
@@ -397,6 +414,23 @@ addHook({
|
|
|
397
414
|
})
|
|
398
415
|
}
|
|
399
416
|
|
|
417
|
+
if (isImpactedTestsEnabled) {
|
|
418
|
+
isModifiedCh.publish({
|
|
419
|
+
modifiedTests,
|
|
420
|
+
testSuiteAbsolutePath: task.file.filepath,
|
|
421
|
+
onDone: (isImpacted) => {
|
|
422
|
+
if (isImpacted) {
|
|
423
|
+
if (isEarlyFlakeDetectionEnabled) {
|
|
424
|
+
isRetryReasonEfd = task.repeats !== numRepeats
|
|
425
|
+
task.repeats = numRepeats
|
|
426
|
+
}
|
|
427
|
+
modifiedTasks.add(task)
|
|
428
|
+
taskToStatuses.set(task, [])
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
})
|
|
432
|
+
}
|
|
433
|
+
|
|
400
434
|
if (isKnownTestsEnabled) {
|
|
401
435
|
isNewTestCh.publish({
|
|
402
436
|
knownTests,
|
|
@@ -404,7 +438,7 @@ addHook({
|
|
|
404
438
|
testName,
|
|
405
439
|
onDone: (isNew) => {
|
|
406
440
|
if (isNew && !attemptToFixTasks.has(task)) {
|
|
407
|
-
if (isEarlyFlakeDetectionEnabled) {
|
|
441
|
+
if (isEarlyFlakeDetectionEnabled && !modifiedTasks.has(task)) {
|
|
408
442
|
isRetryReasonEfd = task.repeats !== numRepeats
|
|
409
443
|
task.repeats = numRepeats
|
|
410
444
|
}
|
|
@@ -575,11 +609,12 @@ addHook({
|
|
|
575
609
|
isAttemptToFix: attemptToFixTasks.has(task),
|
|
576
610
|
isDisabled: disabledTasks.has(task),
|
|
577
611
|
isQuarantined,
|
|
578
|
-
isRetryReasonAtr
|
|
612
|
+
isRetryReasonAtr,
|
|
613
|
+
isModified: modifiedTasks.has(task)
|
|
579
614
|
}
|
|
580
615
|
taskToCtx.set(task, ctx)
|
|
581
616
|
|
|
582
|
-
testStartCh.runStores(ctx, () => {
|
|
617
|
+
testStartCh.runStores(ctx, () => {})
|
|
583
618
|
return onBeforeTryTask.apply(this, arguments)
|
|
584
619
|
})
|
|
585
620
|
|
|
@@ -609,7 +644,7 @@ addHook({
|
|
|
609
644
|
if (statuses.length === testManagementAttemptToFixRetries) {
|
|
610
645
|
if (statuses.every(status => status === 'pass')) {
|
|
611
646
|
attemptToFixPassed = true
|
|
612
|
-
} else if (statuses.
|
|
647
|
+
} else if (statuses.includes('fail')) {
|
|
613
648
|
attemptToFixFailed = true
|
|
614
649
|
}
|
|
615
650
|
}
|
|
@@ -621,7 +656,7 @@ addHook({
|
|
|
621
656
|
ctx.task = task
|
|
622
657
|
ctx.attemptToFixPassed = attemptToFixPassed
|
|
623
658
|
ctx.attemptToFixFailed = attemptToFixFailed
|
|
624
|
-
testFinishTimeCh.runStores(ctx, () => {
|
|
659
|
+
testFinishTimeCh.runStores(ctx, () => {})
|
|
625
660
|
}
|
|
626
661
|
|
|
627
662
|
return result
|
|
@@ -726,7 +761,7 @@ addHook({
|
|
|
726
761
|
const testSuiteAbsolutePath = testPaths[0]?.filepath || testPaths[0]
|
|
727
762
|
|
|
728
763
|
const testSuiteCtx = { testSuiteAbsolutePath, frameworkVersion }
|
|
729
|
-
testSuiteStartCh.runStores(testSuiteCtx, () => {
|
|
764
|
+
testSuiteStartCh.runStores(testSuiteCtx, () => {})
|
|
730
765
|
const startTestsResponse = await startTests.apply(this, arguments)
|
|
731
766
|
|
|
732
767
|
let onFinish = null
|
|
@@ -768,7 +803,7 @@ addHook({
|
|
|
768
803
|
let attemptToFixFailed = false
|
|
769
804
|
if (attemptToFixTasks.has(task)) {
|
|
770
805
|
const statuses = taskToStatuses.get(task)
|
|
771
|
-
if (statuses.
|
|
806
|
+
if (statuses.includes('fail')) {
|
|
772
807
|
attemptToFixFailed = true
|
|
773
808
|
}
|
|
774
809
|
if (statuses.every(status => status === 'fail')) {
|
|
@@ -780,7 +815,7 @@ addHook({
|
|
|
780
815
|
const isRetry = task.result?.retryCount > 0
|
|
781
816
|
// `duration` is the duration of all the retries, so it can't be used if there are retries
|
|
782
817
|
testErrorCh.publish({
|
|
783
|
-
duration:
|
|
818
|
+
duration: isRetry ? undefined : duration,
|
|
784
819
|
error: testError,
|
|
785
820
|
hasFailedAllRetries,
|
|
786
821
|
attemptToFixFailed,
|
|
@@ -815,7 +850,7 @@ addHook({
|
|
|
815
850
|
|
|
816
851
|
if (testSuiteError) {
|
|
817
852
|
testSuiteCtx.error = testSuiteError
|
|
818
|
-
testSuiteErrorCh.runStores(testSuiteCtx, () => {
|
|
853
|
+
testSuiteErrorCh.runStores(testSuiteCtx, () => {})
|
|
819
854
|
}
|
|
820
855
|
|
|
821
856
|
testSuiteFinishCh.publish({ status: testSuiteResult.state, onFinish, ...testSuiteCtx.currentStore })
|
|
@@ -7,12 +7,14 @@ class Amqp10ConsumerPlugin extends ConsumerPlugin {
|
|
|
7
7
|
static get id () { return 'amqp10' }
|
|
8
8
|
static get system () { return 'amqp' }
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
bindStart (ctx) {
|
|
11
|
+
const { link } = ctx
|
|
12
|
+
|
|
11
13
|
const source = getShortName(link)
|
|
12
14
|
const address = getAddress(link)
|
|
13
15
|
|
|
14
16
|
this.startSpan({
|
|
15
|
-
resource: ['receive', source].filter(
|
|
17
|
+
resource: ['receive', source].filter(Boolean).join(' '),
|
|
16
18
|
type: 'worker',
|
|
17
19
|
meta: {
|
|
18
20
|
'amqp.link.source.address': source,
|
|
@@ -23,7 +25,9 @@ class Amqp10ConsumerPlugin extends ConsumerPlugin {
|
|
|
23
25
|
'amqp.connection.port': address.port,
|
|
24
26
|
'amqp.connection.user': address.user
|
|
25
27
|
}
|
|
26
|
-
})
|
|
28
|
+
}, ctx)
|
|
29
|
+
|
|
30
|
+
return ctx.currentStore
|
|
27
31
|
}
|
|
28
32
|
}
|
|
29
33
|
|
|
@@ -9,12 +9,14 @@ class Amqp10ProducerPlugin extends ProducerPlugin {
|
|
|
9
9
|
static get operation () { return 'send' }
|
|
10
10
|
static get system () { return 'amqp' }
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
bindStart (ctx) {
|
|
13
|
+
const { link } = ctx
|
|
14
|
+
|
|
13
15
|
const address = getAddress(link)
|
|
14
16
|
const target = getShortName(link)
|
|
15
17
|
|
|
16
18
|
this.startSpan({
|
|
17
|
-
resource: ['send', target].filter(
|
|
19
|
+
resource: ['send', target].filter(Boolean).join(' '),
|
|
18
20
|
meta: {
|
|
19
21
|
'amqp.link.target.address': target,
|
|
20
22
|
'amqp.link.role': 'sender',
|
|
@@ -26,7 +28,9 @@ class Amqp10ProducerPlugin extends ProducerPlugin {
|
|
|
26
28
|
'amqp.connection.port': address.port,
|
|
27
29
|
'amqp.connection.user': address.user
|
|
28
30
|
}
|
|
29
|
-
})
|
|
31
|
+
}, ctx)
|
|
32
|
+
|
|
33
|
+
return ctx.currentStore
|
|
30
34
|
}
|
|
31
35
|
}
|
|
32
36
|
|
|
@@ -10,7 +10,9 @@ class AmqplibClientPlugin extends ClientPlugin {
|
|
|
10
10
|
static get type () { return 'messaging' }
|
|
11
11
|
static get operation () { return 'command' }
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
bindStart (ctx) {
|
|
14
|
+
const { channel = {}, method, fields } = ctx
|
|
15
|
+
|
|
14
16
|
if (method === 'basic.deliver' || method === 'basic.get') return
|
|
15
17
|
if (method === 'basic.publish') return
|
|
16
18
|
|
|
@@ -29,11 +31,13 @@ class AmqplibClientPlugin extends ClientPlugin {
|
|
|
29
31
|
'amqp.source': fields.source,
|
|
30
32
|
'amqp.destination': fields.destination
|
|
31
33
|
}
|
|
32
|
-
})
|
|
34
|
+
}, ctx)
|
|
33
35
|
|
|
34
36
|
fields.headers = fields.headers || {}
|
|
35
37
|
|
|
36
38
|
this.tracer.inject(span, TEXT_MAP, fields.headers)
|
|
39
|
+
|
|
40
|
+
return ctx.currentStore
|
|
37
41
|
}
|
|
38
42
|
}
|
|
39
43
|
|
|
@@ -7,9 +7,11 @@ const { getResourceName } = require('./util')
|
|
|
7
7
|
|
|
8
8
|
class AmqplibConsumerPlugin extends ConsumerPlugin {
|
|
9
9
|
static get id () { return 'amqplib' }
|
|
10
|
-
static get operation () { return '
|
|
10
|
+
static get operation () { return 'consume' }
|
|
11
|
+
|
|
12
|
+
bindStart (ctx) {
|
|
13
|
+
const { method, fields, message, queue } = ctx
|
|
11
14
|
|
|
12
|
-
start ({ method, fields, message, queue }) {
|
|
13
15
|
if (method !== 'basic.deliver' && method !== 'basic.get') return
|
|
14
16
|
|
|
15
17
|
const childOf = extract(this.tracer, message)
|
|
@@ -27,7 +29,7 @@ class AmqplibConsumerPlugin extends ConsumerPlugin {
|
|
|
27
29
|
'amqp.source': fields.source,
|
|
28
30
|
'amqp.destination': fields.destination
|
|
29
31
|
}
|
|
30
|
-
})
|
|
32
|
+
}, ctx)
|
|
31
33
|
|
|
32
34
|
if (
|
|
33
35
|
this.config.dsmEnabled && message?.properties?.headers
|
|
@@ -37,6 +39,8 @@ class AmqplibConsumerPlugin extends ConsumerPlugin {
|
|
|
37
39
|
this.tracer
|
|
38
40
|
.setCheckpoint(['direction:in', `topic:${queueName}`, 'type:rabbitmq'], span, payloadSize)
|
|
39
41
|
}
|
|
42
|
+
|
|
43
|
+
return ctx.currentStore
|
|
40
44
|
}
|
|
41
45
|
}
|
|
42
46
|
|
|
@@ -8,9 +8,11 @@ const { getResourceName } = require('./util')
|
|
|
8
8
|
|
|
9
9
|
class AmqplibProducerPlugin extends ProducerPlugin {
|
|
10
10
|
static get id () { return 'amqplib' }
|
|
11
|
-
static get operation () { return '
|
|
11
|
+
static get operation () { return 'publish' }
|
|
12
|
+
|
|
13
|
+
bindStart (ctx) {
|
|
14
|
+
const { channel = {}, method, fields, message } = ctx
|
|
12
15
|
|
|
13
|
-
start ({ channel = {}, method, fields, message }) {
|
|
14
16
|
if (method !== 'basic.publish') return
|
|
15
17
|
|
|
16
18
|
const stream = (channel.connection && channel.connection.stream) || {}
|
|
@@ -26,7 +28,7 @@ class AmqplibProducerPlugin extends ProducerPlugin {
|
|
|
26
28
|
'amqp.source': fields.source,
|
|
27
29
|
'amqp.destination': fields.destination
|
|
28
30
|
}
|
|
29
|
-
})
|
|
31
|
+
}, ctx)
|
|
30
32
|
|
|
31
33
|
fields.headers = fields.headers || {}
|
|
32
34
|
|
|
@@ -49,6 +51,8 @@ class AmqplibProducerPlugin extends ProducerPlugin {
|
|
|
49
51
|
, span, payloadSize)
|
|
50
52
|
DsmPathwayCodec.encode(dataStreamsContext, fields.headers)
|
|
51
53
|
}
|
|
54
|
+
|
|
55
|
+
return ctx.currentStore
|
|
52
56
|
}
|
|
53
57
|
}
|
|
54
58
|
|
|
@@ -58,9 +58,8 @@ class ApolloGatewayRequestPlugin extends ApolloBasePlugin {
|
|
|
58
58
|
const errors = ctx?.result?.errors
|
|
59
59
|
// apollo gateway catches certain errors and returns them in the result object
|
|
60
60
|
// we want to capture these errors as spans
|
|
61
|
-
if (errors
|
|
62
|
-
|
|
63
|
-
ctx.currentStore.span.setTag('error', errors[errors.length - 1])
|
|
61
|
+
if (Array.isArray(errors) && errors.at(-1)?.stack && errors.at(-1).message) {
|
|
62
|
+
ctx.currentStore.span.setTag('error', errors.at(-1))
|
|
64
63
|
}
|
|
65
64
|
ctx.currentStore.span.finish()
|
|
66
65
|
return ctx.parentStore
|
|
@@ -91,7 +90,7 @@ function buildOperationContext (schema, operationDocument, operationName) {
|
|
|
91
90
|
break
|
|
92
91
|
}
|
|
93
92
|
})
|
|
94
|
-
} catch
|
|
93
|
+
} catch {
|
|
95
94
|
// safety net
|
|
96
95
|
}
|
|
97
96
|
|
|
@@ -113,12 +112,12 @@ function getSignature (document, operationName, operationType, calculate) {
|
|
|
113
112
|
}
|
|
114
113
|
|
|
115
114
|
return tools.defaultEngineReportingSignature(document, operationName)
|
|
116
|
-
} catch
|
|
115
|
+
} catch {
|
|
117
116
|
// safety net
|
|
118
117
|
}
|
|
119
118
|
}
|
|
120
119
|
|
|
121
|
-
return [operationType, operationName].filter(
|
|
120
|
+
return [operationType, operationName].filter(Boolean).join(' ')
|
|
122
121
|
}
|
|
123
122
|
|
|
124
123
|
module.exports = ApolloGatewayRequestPlugin
|
|
@@ -14,9 +14,8 @@ class ApolloGatewayValidatePlugin extends ApolloBasePlugin {
|
|
|
14
14
|
|
|
15
15
|
if (!span) return
|
|
16
16
|
|
|
17
|
-
if (result
|
|
18
|
-
|
|
19
|
-
span.setTag('error', result[result.length - 1])
|
|
17
|
+
if (Array.isArray(result) && result.at(-1)?.stack && result.at(-1).message) {
|
|
18
|
+
span.setTag('error', result.at(-1))
|
|
20
19
|
}
|
|
21
20
|
span.finish()
|
|
22
21
|
}
|
|
@@ -104,21 +104,21 @@ class SchemaExtractor {
|
|
|
104
104
|
}
|
|
105
105
|
}
|
|
106
106
|
return true
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
}
|
|
107
|
+
}
|
|
108
|
+
if (!builder.shouldExtractSchema(schemaName, depth)) {
|
|
109
|
+
return false
|
|
110
|
+
}
|
|
111
|
+
if (schema.fields?.[Symbol.iterator]) {
|
|
112
|
+
for (const field of schema.fields) {
|
|
113
|
+
if (!this.extractProperty(field, schemaName, field.name, builder, depth)) {
|
|
114
|
+
log.warn('DSM: Unable to extract field with name: %s from Avro schema with name: %s', field.name,
|
|
115
|
+
schemaName)
|
|
117
116
|
}
|
|
118
|
-
} else {
|
|
119
|
-
log.warn('DSM: schema.fields is not iterable from Avro schema with name: %s', schemaName)
|
|
120
117
|
}
|
|
118
|
+
} else {
|
|
119
|
+
log.warn('DSM: schema.fields is not iterable from Avro schema with name: %s', schemaName)
|
|
121
120
|
}
|
|
121
|
+
|
|
122
122
|
return true
|
|
123
123
|
}
|
|
124
124
|
|
|
@@ -6,6 +6,7 @@ const { storage } = require('../../datadog-core')
|
|
|
6
6
|
const { isTrue } = require('../../dd-trace/src/util')
|
|
7
7
|
const coalesce = require('koalas')
|
|
8
8
|
const { tagsFromRequest, tagsFromResponse } = require('../../dd-trace/src/payload-tagging')
|
|
9
|
+
const { getEnvironmentVariable } = require('../../dd-trace/src/config-helper')
|
|
9
10
|
|
|
10
11
|
class BaseAwsSdkPlugin extends ClientPlugin {
|
|
11
12
|
static get id () { return 'aws' }
|
|
@@ -132,7 +133,7 @@ class BaseAwsSdkPlugin extends ClientPlugin {
|
|
|
132
133
|
|
|
133
134
|
isEnabled (request) {
|
|
134
135
|
const serviceId = this.serviceIdentifier.toUpperCase()
|
|
135
|
-
const envVarValue =
|
|
136
|
+
const envVarValue = getEnvironmentVariable(`DD_TRACE_AWS_SDK_${serviceId}_ENABLED`)
|
|
136
137
|
return envVarValue ? isTrue(envVarValue) : true
|
|
137
138
|
}
|
|
138
139
|
|
|
@@ -142,11 +143,12 @@ class BaseAwsSdkPlugin extends ClientPlugin {
|
|
|
142
143
|
const operation = response.request.operation
|
|
143
144
|
const extraTags = this.generateTags(params, operation, response) || {}
|
|
144
145
|
|
|
145
|
-
const tags =
|
|
146
|
+
const tags = {
|
|
146
147
|
'aws.response.request_id': response.requestId,
|
|
147
148
|
'resource.name': operation,
|
|
148
|
-
'span.kind': 'client'
|
|
149
|
-
|
|
149
|
+
'span.kind': 'client',
|
|
150
|
+
...extraTags
|
|
151
|
+
}
|
|
150
152
|
|
|
151
153
|
span.addTags(tags)
|
|
152
154
|
|
|
@@ -211,24 +213,27 @@ function normalizeConfig (config, serviceIdentifier) {
|
|
|
211
213
|
const batchPropagationEnabled = isTrue(
|
|
212
214
|
coalesce(
|
|
213
215
|
specificConfig.batchPropagationEnabled,
|
|
214
|
-
|
|
216
|
+
getEnvironmentVariable(`DD_TRACE_AWS_SDK_${serviceId}_BATCH_PROPAGATION_ENABLED`),
|
|
215
217
|
config.batchPropagationEnabled,
|
|
216
|
-
|
|
218
|
+
getEnvironmentVariable('DD_TRACE_AWS_SDK_BATCH_PROPAGATION_ENABLED'),
|
|
217
219
|
false
|
|
218
220
|
)
|
|
219
221
|
)
|
|
220
222
|
|
|
221
223
|
// Merge the specific config back into the main config
|
|
222
|
-
return
|
|
224
|
+
return {
|
|
225
|
+
...config,
|
|
226
|
+
...specificConfig,
|
|
223
227
|
splitByAwsService: config.splitByAwsService !== false,
|
|
224
228
|
batchPropagationEnabled,
|
|
225
229
|
hooks
|
|
226
|
-
}
|
|
230
|
+
}
|
|
227
231
|
}
|
|
228
232
|
|
|
233
|
+
const noop = () => {}
|
|
234
|
+
|
|
229
235
|
function getHooks (config) {
|
|
230
|
-
const
|
|
231
|
-
const request = (config.hooks && config.hooks.request) || noop
|
|
236
|
+
const request = config.hooks?.request || noop
|
|
232
237
|
|
|
233
238
|
return { request }
|
|
234
239
|
}
|