dd-trace 5.52.0 → 5.54.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE-3rdparty.csv +2 -1
- package/README.md +5 -0
- package/index.d.ts +87 -22
- package/initialize.mjs +3 -4
- package/package.json +36 -34
- package/packages/datadog-core/src/utils/src/get.js +1 -1
- package/packages/datadog-core/src/utils/src/has.js +1 -1
- package/packages/datadog-core/src/utils/src/kebabcase.js +4 -6
- package/packages/datadog-core/src/utils/src/parse-tags.js +1 -1
- package/packages/datadog-core/src/utils/src/pick.js +2 -2
- package/packages/datadog-core/src/utils/src/set.js +1 -1
- package/packages/datadog-core/src/utils/src/uniq.js +1 -1
- package/packages/datadog-instrumentations/src/amqp10.js +19 -17
- package/packages/datadog-instrumentations/src/amqplib.js +57 -37
- package/packages/datadog-instrumentations/src/apollo.js +2 -2
- package/packages/datadog-instrumentations/src/aws-sdk.js +1 -1
- package/packages/datadog-instrumentations/src/cassandra-driver.js +5 -4
- package/packages/datadog-instrumentations/src/child_process.js +3 -3
- package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +92 -62
- package/packages/datadog-instrumentations/src/couchbase.js +5 -4
- package/packages/datadog-instrumentations/src/cucumber.js +126 -84
- package/packages/datadog-instrumentations/src/cypress.js +2 -1
- package/packages/datadog-instrumentations/src/dns.js +1 -1
- package/packages/datadog-instrumentations/src/express.js +2 -6
- package/packages/datadog-instrumentations/src/fs.js +7 -6
- package/packages/datadog-instrumentations/src/google-cloud-pubsub.js +28 -34
- package/packages/datadog-instrumentations/src/graphql.js +7 -10
- package/packages/datadog-instrumentations/src/grpc/client.js +11 -23
- package/packages/datadog-instrumentations/src/grpc/server.js +7 -20
- package/packages/datadog-instrumentations/src/helpers/extract-package-and-module-path.js +16 -10
- package/packages/datadog-instrumentations/src/helpers/hook.js +1 -1
- package/packages/datadog-instrumentations/src/helpers/hooks.js +1 -1
- package/packages/datadog-instrumentations/src/helpers/instrument.js +1 -41
- package/packages/datadog-instrumentations/src/helpers/register.js +21 -18
- package/packages/datadog-instrumentations/src/http/client.js +16 -21
- package/packages/datadog-instrumentations/src/iovalkey.js +51 -0
- package/packages/datadog-instrumentations/src/jest.js +184 -87
- package/packages/datadog-instrumentations/src/kafkajs.js +65 -44
- package/packages/datadog-instrumentations/src/knex.js +4 -4
- package/packages/datadog-instrumentations/src/ldapjs.js +3 -4
- package/packages/datadog-instrumentations/src/mariadb.js +38 -61
- package/packages/datadog-instrumentations/src/mocha/main.js +85 -59
- package/packages/datadog-instrumentations/src/mocha/utils.js +103 -82
- package/packages/datadog-instrumentations/src/mocha/worker.js +6 -0
- package/packages/datadog-instrumentations/src/mongodb-core.js +1 -1
- package/packages/datadog-instrumentations/src/mysql.js +20 -36
- package/packages/datadog-instrumentations/src/mysql2.js +55 -47
- package/packages/datadog-instrumentations/src/net.js +4 -2
- package/packages/datadog-instrumentations/src/next.js +7 -14
- package/packages/datadog-instrumentations/src/nyc.js +1 -1
- package/packages/datadog-instrumentations/src/openai.js +21 -23
- package/packages/datadog-instrumentations/src/oracledb.js +1 -1
- package/packages/datadog-instrumentations/src/pg.js +6 -13
- package/packages/datadog-instrumentations/src/playwright.js +170 -136
- package/packages/datadog-instrumentations/src/redis.js +3 -3
- package/packages/datadog-instrumentations/src/restify.js +2 -2
- package/packages/datadog-instrumentations/src/rhea.js +42 -54
- package/packages/datadog-instrumentations/src/router.js +22 -25
- package/packages/datadog-instrumentations/src/tedious.js +1 -1
- package/packages/datadog-instrumentations/src/url.js +9 -17
- package/packages/datadog-instrumentations/src/vitest.js +126 -97
- package/packages/datadog-plugin-amqp10/src/consumer.js +7 -3
- package/packages/datadog-plugin-amqp10/src/producer.js +7 -3
- package/packages/datadog-plugin-amqplib/src/client.js +6 -2
- package/packages/datadog-plugin-amqplib/src/consumer.js +7 -3
- package/packages/datadog-plugin-amqplib/src/producer.js +7 -3
- package/packages/datadog-plugin-amqplib/src/util.js +1 -1
- package/packages/datadog-plugin-apollo/src/gateway/request.js +5 -6
- package/packages/datadog-plugin-apollo/src/gateway/validate.js +2 -3
- package/packages/datadog-plugin-aws-sdk/src/base.js +3 -2
- package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/tracing.js +2 -2
- package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/utils.js +13 -13
- package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +24 -31
- package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +2 -2
- package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +6 -6
- package/packages/datadog-plugin-aws-sdk/src/services/lambda.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/services/sns.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +4 -5
- package/packages/datadog-plugin-aws-sdk/src/services/stepfunctions.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/util.js +5 -6
- package/packages/datadog-plugin-cassandra-driver/src/index.js +1 -1
- package/packages/datadog-plugin-child_process/src/index.js +4 -4
- package/packages/datadog-plugin-child_process/src/scrub-cmd-params.js +23 -23
- package/packages/datadog-plugin-cucumber/src/index.js +86 -20
- package/packages/datadog-plugin-cypress/src/cypress-plugin.js +97 -27
- package/packages/datadog-plugin-cypress/src/plugin.js +11 -1
- package/packages/datadog-plugin-cypress/src/support.js +24 -5
- package/packages/datadog-plugin-express/src/code_origin.js +30 -0
- package/packages/datadog-plugin-express/src/index.js +10 -12
- package/packages/datadog-plugin-express/src/tracing.js +19 -0
- package/packages/datadog-plugin-google-cloud-pubsub/src/client.js +7 -3
- package/packages/datadog-plugin-google-cloud-pubsub/src/consumer.js +12 -7
- package/packages/datadog-plugin-google-cloud-pubsub/src/producer.js +6 -2
- package/packages/datadog-plugin-google-cloud-vertexai/src/tracing.js +26 -9
- package/packages/datadog-plugin-graphql/src/execute.js +2 -2
- package/packages/datadog-plugin-graphql/src/index.js +7 -6
- package/packages/datadog-plugin-graphql/src/resolve.js +2 -2
- package/packages/datadog-plugin-graphql/src/tools/index.js +1 -0
- package/packages/datadog-plugin-graphql/src/tools/signature.js +1 -0
- package/packages/datadog-plugin-graphql/src/tools/transforms.js +1 -0
- package/packages/datadog-plugin-grpc/src/client.js +2 -2
- package/packages/datadog-plugin-grpc/src/util.js +2 -2
- package/packages/datadog-plugin-http/src/client.js +18 -7
- package/packages/datadog-plugin-http2/src/client.js +20 -20
- package/packages/datadog-plugin-iovalkey/src/index.js +18 -0
- package/packages/datadog-plugin-jest/src/index.js +36 -28
- 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 +15 -7
- 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 +88 -48
- package/packages/datadog-plugin-mongodb-core/src/index.js +1 -1
- package/packages/datadog-plugin-mysql/src/index.js +11 -9
- package/packages/datadog-plugin-mysql2/src/index.js +16 -0
- package/packages/datadog-plugin-net/src/tcp.js +1 -1
- package/packages/datadog-plugin-next/src/index.js +6 -5
- package/packages/datadog-plugin-openai/src/services.js +6 -10
- package/packages/datadog-plugin-openai/src/tracing.js +10 -14
- package/packages/datadog-plugin-oracledb/src/index.js +1 -1
- package/packages/datadog-plugin-playwright/src/index.js +48 -22
- package/packages/datadog-plugin-redis/src/index.js +9 -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 +99 -72
- package/packages/datadog-shimmer/src/shimmer.js +163 -36
- 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/graphql.js +2 -2
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-password-rules.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secret-rules.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secrets-rules.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/header-injection-analyzer.js +4 -6
- package/packages/dd-trace/src/appsec/iast/analyzers/hsts-header-missing-analyzer.js +7 -12
- package/packages/dd-trace/src/appsec/iast/analyzers/missing-header-analyzer.js +4 -6
- package/packages/dd-trace/src/appsec/iast/analyzers/nosql-injection-mongodb-analyzer.js +4 -0
- package/packages/dd-trace/src/appsec/iast/analyzers/path-traversal-analyzer.js +9 -12
- package/packages/dd-trace/src/appsec/iast/analyzers/vulnerability-analyzer.js +5 -4
- package/packages/dd-trace/src/appsec/iast/context/context-plugin.js +2 -3
- package/packages/dd-trace/src/appsec/iast/iast-plugin.js +3 -3
- package/packages/dd-trace/src/appsec/iast/index.js +1 -0
- package/packages/dd-trace/src/appsec/iast/overhead-controller.js +102 -7
- package/packages/dd-trace/src/appsec/iast/path-line.js +7 -8
- package/packages/dd-trace/src/appsec/iast/security-controls/index.js +6 -13
- package/packages/dd-trace/src/appsec/iast/security-controls/parser.js +6 -6
- package/packages/dd-trace/src/appsec/iast/taint-tracking/filter.js +2 -2
- package/packages/dd-trace/src/appsec/iast/taint-tracking/operations-taint-object.js +3 -3
- package/packages/dd-trace/src/appsec/iast/taint-tracking/operations.js +4 -28
- package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +1 -7
- package/packages/dd-trace/src/appsec/iast/taint-tracking/plugins/kafka.js +3 -4
- package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter-esm.mjs +1 -1
- package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +5 -7
- package/packages/dd-trace/src/appsec/iast/taint-tracking/taint-tracking-impl.js +2 -2
- package/packages/dd-trace/src/appsec/iast/telemetry/span-tags.js +6 -6
- package/packages/dd-trace/src/appsec/iast/telemetry/verbosity.js +1 -1
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/command-sensitive-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/ldap-sensitive-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/sql-sensitive-analyzer.js +7 -7
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-handler.js +23 -24
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-regex.js +3 -3
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/index.js +4 -4
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/utils.js +6 -11
- package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +9 -11
- package/packages/dd-trace/src/appsec/index.js +15 -12
- package/packages/dd-trace/src/appsec/rasp/index.js +19 -17
- package/packages/dd-trace/src/appsec/rasp/lfi.js +2 -1
- package/packages/dd-trace/src/appsec/rasp/utils.js +11 -6
- package/packages/dd-trace/src/appsec/reporter.js +233 -40
- package/packages/dd-trace/src/appsec/rule_manager.js +2 -2
- package/packages/dd-trace/src/appsec/sdk/user_blocking.js +2 -2
- package/packages/dd-trace/src/appsec/stack_trace.js +2 -4
- package/packages/dd-trace/src/appsec/telemetry/index.js +1 -2
- package/packages/dd-trace/src/appsec/telemetry/rasp.js +3 -14
- 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 -8
- package/packages/dd-trace/src/azure_metadata.js +2 -7
- package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/index.js +1 -1
- package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/worker/index.js +2 -2
- package/packages/dd-trace/src/ci-visibility/early-flake-detection/get-known-tests.js +1 -1
- package/packages/dd-trace/src/ci-visibility/exporters/agent-proxy/index.js +3 -3
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/coverage-writer.js +1 -1
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +1 -1
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +1 -1
- package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +6 -4
- package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +2 -2
- package/packages/dd-trace/src/ci-visibility/exporters/test-worker/writer.js +0 -2
- package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +1 -1
- package/packages/dd-trace/src/ci-visibility/log-submission/log-submission-plugin.js +1 -1
- package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +8 -5
- package/packages/dd-trace/src/ci-visibility/telemetry.js +4 -0
- package/packages/dd-trace/src/ci-visibility/test-management/get-test-management-tests.js +1 -1
- package/packages/dd-trace/src/config.js +82 -51
- package/packages/dd-trace/src/config_stable.js +3 -3
- package/packages/dd-trace/src/datastreams/encoding.js +9 -9
- package/packages/dd-trace/src/datastreams/fnv.js +1 -1
- package/packages/dd-trace/src/datastreams/pathway.js +4 -4
- package/packages/dd-trace/src/datastreams/processor.js +5 -7
- package/packages/dd-trace/src/datastreams/schemas/schema_builder.js +1 -1
- package/packages/dd-trace/src/datastreams/schemas/schema_sampler.js +4 -6
- package/packages/dd-trace/src/datastreams/size.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/breakpoints.js +131 -72
- package/packages/dd-trace/src/debugger/devtools_client/condition.js +6 -8
- package/packages/dd-trace/src/debugger/devtools_client/defaults.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/index.js +17 -27
- package/packages/dd-trace/src/debugger/devtools_client/remote_config.js +18 -38
- package/packages/dd-trace/src/debugger/devtools_client/send.js +8 -7
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/index.js +16 -8
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/processor.js +8 -10
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/redaction.js +3 -3
- package/packages/dd-trace/src/debugger/devtools_client/source-maps.js +2 -10
- package/packages/dd-trace/src/debugger/devtools_client/state.js +31 -4
- package/packages/dd-trace/src/dogstatsd.js +7 -4
- package/packages/dd-trace/src/encode/0.4.js +9 -9
- package/packages/dd-trace/src/encode/0.5.js +1 -1
- package/packages/dd-trace/src/encode/agentless-ci-visibility.js +3 -3
- package/packages/dd-trace/src/encode/coverage-ci-visibility.js +1 -1
- package/packages/dd-trace/src/encode/tags-processors.js +1 -1
- package/packages/dd-trace/src/exporter.js +6 -6
- package/packages/dd-trace/src/exporters/agent/writer.js +1 -5
- package/packages/dd-trace/src/exporters/common/docker.js +1 -1
- package/packages/dd-trace/src/exporters/common/form-data.js +6 -4
- package/packages/dd-trace/src/exporters/common/request.js +1 -1
- package/packages/dd-trace/src/exporters/common/util.js +1 -1
- package/packages/dd-trace/src/external-logger/src/index.js +5 -5
- package/packages/dd-trace/src/flare/file.js +1 -5
- package/packages/dd-trace/src/format.js +1 -1
- package/packages/dd-trace/src/git_properties.js +1 -1
- package/packages/dd-trace/src/id.js +12 -6
- package/packages/dd-trace/src/iitm.js +10 -22
- package/packages/dd-trace/src/lambda/handler.js +6 -6
- package/packages/dd-trace/src/lambda/runtime/patch.js +4 -4
- package/packages/dd-trace/src/lambda/runtime/ritm.js +1 -1
- package/packages/dd-trace/src/llmobs/plugins/bedrockruntime.js +6 -6
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chain.js +2 -6
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chat_model.js +3 -3
- package/packages/dd-trace/src/llmobs/plugins/langchain/index.js +6 -6
- package/packages/dd-trace/src/llmobs/plugins/openai.js +1 -1
- package/packages/dd-trace/src/llmobs/sdk.js +2 -2
- package/packages/dd-trace/src/llmobs/tagger.js +113 -99
- package/packages/dd-trace/src/llmobs/util.js +9 -9
- package/packages/dd-trace/src/llmobs/writers/base.js +1 -1
- package/packages/dd-trace/src/llmobs/writers/util.js +1 -1
- package/packages/dd-trace/src/log/index.js +4 -4
- package/packages/dd-trace/src/log/log.js +1 -1
- package/packages/dd-trace/src/log/writer.js +2 -2
- package/packages/dd-trace/src/msgpack/chunk.js +3 -3
- package/packages/dd-trace/src/msgpack/encoder.js +28 -28
- package/packages/dd-trace/src/noop/dogstatsd.js +6 -6
- package/packages/dd-trace/src/noop/span.js +3 -5
- package/packages/dd-trace/src/noop/tracer.js +1 -2
- package/packages/dd-trace/src/opentelemetry/span_processor.js +2 -2
- package/packages/dd-trace/src/opentelemetry/tracer.js +6 -5
- package/packages/dd-trace/src/opentracing/propagation/log.js +6 -8
- package/packages/dd-trace/src/opentracing/propagation/text_map.js +27 -23
- package/packages/dd-trace/src/opentracing/propagation/tracestate.js +8 -4
- package/packages/dd-trace/src/opentracing/span.js +9 -14
- package/packages/dd-trace/src/opentracing/tracer.js +9 -6
- package/packages/dd-trace/src/payload-tagging/index.js +1 -1
- package/packages/dd-trace/src/payload-tagging/tagging.js +6 -6
- package/packages/dd-trace/src/pkg.js +1 -1
- package/packages/dd-trace/src/plugins/ci_plugin.js +62 -10
- package/packages/dd-trace/src/plugins/consumer.js +2 -2
- package/packages/dd-trace/src/plugins/inbound.js +5 -1
- package/packages/dd-trace/src/plugins/index.js +1 -1
- package/packages/dd-trace/src/plugins/outbound.js +4 -5
- package/packages/dd-trace/src/plugins/plugin.js +1 -1
- package/packages/dd-trace/src/plugins/producer.js +2 -2
- package/packages/dd-trace/src/plugins/storage.js +2 -2
- package/packages/dd-trace/src/plugins/util/ci.js +23 -15
- package/packages/dd-trace/src/plugins/util/git.js +165 -11
- package/packages/dd-trace/src/plugins/util/inferred_proxy.js +1 -1
- package/packages/dd-trace/src/plugins/util/ip_extractor.js +1 -1
- package/packages/dd-trace/src/plugins/util/llm.js +27 -10
- package/packages/dd-trace/src/plugins/util/stacktrace.js +1 -1
- package/packages/dd-trace/src/plugins/util/test.js +311 -48
- package/packages/dd-trace/src/plugins/util/url.js +1 -1
- package/packages/dd-trace/src/plugins/util/urlfilter.js +13 -17
- package/packages/dd-trace/src/plugins/util/user-provided-git.js +12 -3
- package/packages/dd-trace/src/plugins/util/web.js +5 -4
- package/packages/dd-trace/src/priority_sampler.js +22 -22
- package/packages/dd-trace/src/profiling/config.js +44 -8
- package/packages/dd-trace/src/profiling/exporters/event_serializer.js +5 -5
- package/packages/dd-trace/src/profiling/exporters/file.js +2 -1
- package/packages/dd-trace/src/profiling/profiler.js +37 -2
- package/packages/dd-trace/src/profiling/profilers/events.js +14 -17
- package/packages/dd-trace/src/profiling/profilers/shared.js +6 -1
- package/packages/dd-trace/src/profiling/profilers/space.js +3 -3
- package/packages/dd-trace/src/profiling/profilers/wall.js +6 -7
- package/packages/dd-trace/src/profiling/ssi-heuristics.js +3 -5
- package/packages/dd-trace/src/profiling/tagger.js +3 -5
- package/packages/dd-trace/src/profiling/webspan-utils.js +1 -1
- package/packages/dd-trace/src/proxy.js +7 -13
- package/packages/dd-trace/src/random_sampler.js +40 -0
- package/packages/dd-trace/src/rate_limiter.js +4 -4
- package/packages/dd-trace/src/remote_config/index.js +3 -7
- package/packages/dd-trace/src/remote_config/manager.js +25 -13
- package/packages/dd-trace/src/require-package-json.js +1 -1
- package/packages/dd-trace/src/ritm.js +4 -4
- package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +2 -2
- package/packages/dd-trace/src/sampler.js +33 -4
- package/packages/dd-trace/src/sampling_rule.js +12 -3
- package/packages/dd-trace/src/scope.js +1 -1
- package/packages/dd-trace/src/serverless.js +0 -48
- package/packages/dd-trace/src/service-naming/schemas/util.js +1 -1
- package/packages/dd-trace/src/service-naming/schemas/v0/storage.js +8 -0
- package/packages/dd-trace/src/service-naming/schemas/v0/web.js +2 -3
- package/packages/dd-trace/src/service-naming/schemas/v1/storage.js +4 -0
- package/packages/dd-trace/src/span_processor.js +3 -3
- package/packages/dd-trace/src/span_sampler.js +4 -1
- package/packages/dd-trace/src/standalone/tracesource.js +1 -1
- package/packages/dd-trace/src/startup-log.js +2 -2
- package/packages/dd-trace/src/telemetry/dependencies.js +4 -4
- package/packages/dd-trace/src/telemetry/logs/log-collector.js +9 -10
- package/packages/dd-trace/src/telemetry/metrics.js +10 -5
- package/packages/dd-trace/src/telemetry/send-data.js +1 -1
- package/packages/dd-trace/src/telemetry/telemetry.js +23 -24
- package/packages/dd-trace/src/util.js +1 -1
- package/version.js +1 -0
- package/packages/datadog-instrumentations/src/paperplane.js +0 -77
- package/packages/datadog-plugin-paperplane/src/index.js +0 -25
- package/packages/datadog-plugin-paperplane/src/logger.js +0 -11
- package/packages/datadog-plugin-paperplane/src/server.js +0 -24
|
@@ -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
|
|
|
@@ -7,7 +7,9 @@ class GoogleCloudPubsubProducerPlugin extends ProducerPlugin {
|
|
|
7
7
|
static get id () { return 'google-cloud-pubsub' }
|
|
8
8
|
static get operation () { return 'request' }
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
bindStart (ctx) {
|
|
11
|
+
const { request, api, projectId } = ctx
|
|
12
|
+
|
|
11
13
|
if (api !== 'publish') return
|
|
12
14
|
|
|
13
15
|
const messages = request.messages || []
|
|
@@ -19,7 +21,7 @@ class GoogleCloudPubsubProducerPlugin extends ProducerPlugin {
|
|
|
19
21
|
'pubsub.method': api, // TODO: remove
|
|
20
22
|
'pubsub.topic': topic
|
|
21
23
|
}
|
|
22
|
-
})
|
|
24
|
+
}, ctx)
|
|
23
25
|
|
|
24
26
|
for (const msg of messages) {
|
|
25
27
|
if (!msg.attributes) {
|
|
@@ -33,6 +35,8 @@ class GoogleCloudPubsubProducerPlugin extends ProducerPlugin {
|
|
|
33
35
|
DsmPathwayCodec.encode(dataStreamsContext, msg.attributes)
|
|
34
36
|
}
|
|
35
37
|
}
|
|
38
|
+
|
|
39
|
+
return ctx.currentStore
|
|
36
40
|
}
|
|
37
41
|
}
|
|
38
42
|
|
|
@@ -25,18 +25,18 @@ class GoogleCloudVertexAITracingPlugin extends TracingPlugin {
|
|
|
25
25
|
bindStart (ctx) {
|
|
26
26
|
const { instance, request, resource, stream } = ctx
|
|
27
27
|
|
|
28
|
-
const tags = this.tagRequest(request, instance, stream)
|
|
29
|
-
|
|
30
28
|
const span = this.startSpan('vertexai.request', {
|
|
31
29
|
service: this.config.service,
|
|
32
30
|
resource,
|
|
33
31
|
kind: 'client',
|
|
34
32
|
meta: {
|
|
35
|
-
[MEASURED]: 1
|
|
36
|
-
...tags
|
|
33
|
+
[MEASURED]: 1
|
|
37
34
|
}
|
|
38
35
|
}, false)
|
|
39
36
|
|
|
37
|
+
const tags = this.tagRequest(request, instance, stream, span)
|
|
38
|
+
span.addTags(tags)
|
|
39
|
+
|
|
40
40
|
const store = storage('legacy').getStore() || {}
|
|
41
41
|
ctx.currentStore = { ...store, span }
|
|
42
42
|
|
|
@@ -51,14 +51,23 @@ class GoogleCloudVertexAITracingPlugin extends TracingPlugin {
|
|
|
51
51
|
|
|
52
52
|
const response = result?.response
|
|
53
53
|
if (response) {
|
|
54
|
-
const tags = this.tagResponse(response)
|
|
54
|
+
const tags = this.tagResponse(response, span)
|
|
55
55
|
span.addTags(tags)
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
span.finish()
|
|
59
59
|
}
|
|
60
60
|
|
|
61
|
-
|
|
61
|
+
/**
|
|
62
|
+
* Generate the request tags.
|
|
63
|
+
*
|
|
64
|
+
* @param {Object} request
|
|
65
|
+
* @param {Object} instance
|
|
66
|
+
* @param {boolean} stream
|
|
67
|
+
* @param {Span} span
|
|
68
|
+
* @returns {Object}
|
|
69
|
+
*/
|
|
70
|
+
tagRequest (request, instance, stream, span) {
|
|
62
71
|
const model = extractModel(instance)
|
|
63
72
|
const tags = {
|
|
64
73
|
'vertexai.request.model': model
|
|
@@ -81,7 +90,7 @@ class GoogleCloudVertexAITracingPlugin extends TracingPlugin {
|
|
|
81
90
|
tags['vertexai.request.stream'] = true
|
|
82
91
|
}
|
|
83
92
|
|
|
84
|
-
if (!this.isPromptCompletionSampled()) return tags
|
|
93
|
+
if (!this.isPromptCompletionSampled(span)) return tags
|
|
85
94
|
|
|
86
95
|
const systemInstructions = extractSystemInstructions(instance)
|
|
87
96
|
|
|
@@ -141,8 +150,16 @@ class GoogleCloudVertexAITracingPlugin extends TracingPlugin {
|
|
|
141
150
|
}
|
|
142
151
|
}
|
|
143
152
|
|
|
144
|
-
|
|
153
|
+
/**
|
|
154
|
+
* Generate the response tags.
|
|
155
|
+
*
|
|
156
|
+
* @param {Object} response
|
|
157
|
+
* @param {Span} span
|
|
158
|
+
* @returns {Object}
|
|
159
|
+
*/
|
|
160
|
+
tagResponse (response, span) {
|
|
145
161
|
const tags = {}
|
|
162
|
+
const isSampled = this.isPromptCompletionSampled(span)
|
|
146
163
|
|
|
147
164
|
const candidates = response.candidates
|
|
148
165
|
for (const [candidateIdx, candidate] of candidates.entries()) {
|
|
@@ -154,7 +171,7 @@ class GoogleCloudVertexAITracingPlugin extends TracingPlugin {
|
|
|
154
171
|
const role = candidateContent.role
|
|
155
172
|
tags[`vertexai.response.candidates.${candidateIdx}.content.role`] = role
|
|
156
173
|
|
|
157
|
-
if (!
|
|
174
|
+
if (!isSampled) continue
|
|
158
175
|
|
|
159
176
|
const parts = candidateContent.parts
|
|
160
177
|
for (const [partIdx, part] of parts.entries()) {
|
|
@@ -70,12 +70,12 @@ function getSignature (document, operationName, operationType, calculate) {
|
|
|
70
70
|
}
|
|
71
71
|
|
|
72
72
|
return tools.defaultEngineReportingSignature(document, operationName)
|
|
73
|
-
} catch
|
|
73
|
+
} catch {
|
|
74
74
|
// safety net
|
|
75
75
|
}
|
|
76
76
|
}
|
|
77
77
|
|
|
78
|
-
return [operationType, operationName].filter(
|
|
78
|
+
return [operationType, operationName].filter(Boolean).join(' ')
|
|
79
79
|
}
|
|
80
80
|
|
|
81
81
|
module.exports = GraphQLExecutePlugin
|
|
@@ -47,7 +47,7 @@ function getDepth (config) {
|
|
|
47
47
|
function getVariablesFilter (config) {
|
|
48
48
|
if (typeof config.variables === 'function') {
|
|
49
49
|
return config.variables
|
|
50
|
-
} else if (config.variables
|
|
50
|
+
} else if (Array.isArray(config.variables)) {
|
|
51
51
|
return variables => pick(variables, config.variables)
|
|
52
52
|
} else if (config.hasOwnProperty('variables')) {
|
|
53
53
|
log.error('Expected `variables` to be an array or function.')
|
|
@@ -55,11 +55,12 @@ function getVariablesFilter (config) {
|
|
|
55
55
|
return null
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
const
|
|
62
|
-
const
|
|
58
|
+
const noop = () => {}
|
|
59
|
+
|
|
60
|
+
function getHooks ({ hooks }) {
|
|
61
|
+
const execute = hooks?.execute ?? noop
|
|
62
|
+
const parse = hooks?.parse ?? noop
|
|
63
|
+
const validate = hooks?.validate ?? noop
|
|
63
64
|
|
|
64
65
|
return { execute, parse, validate }
|
|
65
66
|
}
|
|
@@ -29,7 +29,7 @@ class GraphQLResolvePlugin extends TracingPlugin {
|
|
|
29
29
|
const document = context.source
|
|
30
30
|
const fieldNode = info.fieldNodes.find(fieldNode => fieldNode.kind === 'Field')
|
|
31
31
|
const loc = this.config.source && document && fieldNode && fieldNode.loc
|
|
32
|
-
const source = loc && document.
|
|
32
|
+
const source = loc && document.slice(loc.start, loc.end)
|
|
33
33
|
|
|
34
34
|
const span = this.startSpan('graphql.resolve', {
|
|
35
35
|
service: this.config.service,
|
|
@@ -122,7 +122,7 @@ function getResolverInfo (info, args) {
|
|
|
122
122
|
let resolverInfo = null
|
|
123
123
|
const resolverVars = {}
|
|
124
124
|
|
|
125
|
-
if (args
|
|
125
|
+
if (args) {
|
|
126
126
|
Object.assign(resolverVars, args)
|
|
127
127
|
}
|
|
128
128
|
|
|
@@ -87,8 +87,8 @@ class GrpcClientPlugin extends ClientPlugin {
|
|
|
87
87
|
// more are supported by the library
|
|
88
88
|
// https://github.com/grpc/grpc/blob/v1.60.0/doc/naming.md
|
|
89
89
|
const parts = peer.split(':')
|
|
90
|
-
if (parts
|
|
91
|
-
const port = parts
|
|
90
|
+
if (/^\d+/.test(parts.at(-1))) {
|
|
91
|
+
const port = parts.at(-1)
|
|
92
92
|
const ip = parts.slice(0, -1).join(':')
|
|
93
93
|
span.setTag('network.destination.ip', ip)
|
|
94
94
|
span.setTag('network.destination.port', port)
|
|
@@ -27,7 +27,7 @@ module.exports = {
|
|
|
27
27
|
tags.service = service
|
|
28
28
|
tags.package = pkg
|
|
29
29
|
} else {
|
|
30
|
-
tags.name = methodParts
|
|
30
|
+
tags.name = methodParts.at(-1)
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
return tags
|
|
@@ -49,7 +49,7 @@ module.exports = {
|
|
|
49
49
|
return config[filter]
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
-
if (config[filter]
|
|
52
|
+
if (Array.isArray(config[filter])) {
|
|
53
53
|
return element => pick(element, config[filter])
|
|
54
54
|
}
|
|
55
55
|
|
|
@@ -49,7 +49,7 @@ class HttpClientPlugin extends ClientPlugin {
|
|
|
49
49
|
'out.host': hostname
|
|
50
50
|
},
|
|
51
51
|
metrics: {
|
|
52
|
-
[CLIENT_PORT_KEY]: parseInt(options.port)
|
|
52
|
+
[CLIENT_PORT_KEY]: Number.parseInt(options.port)
|
|
53
53
|
}
|
|
54
54
|
}, false)
|
|
55
55
|
|
|
@@ -202,15 +202,26 @@ function getFilter (config) {
|
|
|
202
202
|
function getHeaders (config) {
|
|
203
203
|
if (!Array.isArray(config.headers)) return []
|
|
204
204
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
205
|
+
const result = []
|
|
206
|
+
for (const header of config.headers) {
|
|
207
|
+
if (typeof header === 'string') {
|
|
208
|
+
const separatorIndex = header.indexOf(':')
|
|
209
|
+
result.push(separatorIndex === -1
|
|
210
|
+
? [header, undefined]
|
|
211
|
+
: [
|
|
212
|
+
header.slice(0, separatorIndex).toLowerCase(),
|
|
213
|
+
header.slice(separatorIndex + 1)
|
|
214
|
+
]
|
|
215
|
+
)
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
return result
|
|
209
219
|
}
|
|
210
220
|
|
|
221
|
+
const noop = () => {}
|
|
222
|
+
|
|
211
223
|
function getHooks (config) {
|
|
212
|
-
const
|
|
213
|
-
const request = (config.hooks && config.hooks.request) || noop
|
|
224
|
+
const request = config.hooks?.request ?? noop
|
|
214
225
|
|
|
215
226
|
return { request }
|
|
216
227
|
}
|
|
@@ -51,7 +51,7 @@ class Http2ClientPlugin extends ClientPlugin {
|
|
|
51
51
|
'out.host': sessionDetails.host
|
|
52
52
|
},
|
|
53
53
|
metrics: {
|
|
54
|
-
[CLIENT_PORT_KEY]: parseInt(sessionDetails.port)
|
|
54
|
+
[CLIENT_PORT_KEY]: Number.parseInt(sessionDetails.port)
|
|
55
55
|
}
|
|
56
56
|
}, false)
|
|
57
57
|
|
|
@@ -124,9 +124,9 @@ function extractSessionDetails (authority, options) {
|
|
|
124
124
|
}
|
|
125
125
|
|
|
126
126
|
const protocol = authority.protocol || options.protocol || 'https:'
|
|
127
|
-
let port = '' + (authority.port
|
|
128
|
-
? authority.
|
|
129
|
-
:
|
|
127
|
+
let port = '' + (authority.port === ''
|
|
128
|
+
? (authority.protocol === 'http:' ? 80 : 443)
|
|
129
|
+
: authority.port)
|
|
130
130
|
let host = authority.hostname || authority.host || 'localhost'
|
|
131
131
|
|
|
132
132
|
if (protocol === 'https:' && options) {
|
|
@@ -138,26 +138,26 @@ function extractSessionDetails (authority, options) {
|
|
|
138
138
|
}
|
|
139
139
|
|
|
140
140
|
function hasAmazonSignature (headers, path) {
|
|
141
|
-
if (
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
[next.toLowerCase()]: headers[next]
|
|
145
|
-
}), {})
|
|
146
|
-
|
|
147
|
-
if (headers['x-amz-signature']) {
|
|
148
|
-
return true
|
|
149
|
-
}
|
|
141
|
+
if (path?.toLowerCase().includes('x-amz-signature=')) {
|
|
142
|
+
return true
|
|
143
|
+
}
|
|
150
144
|
|
|
151
|
-
|
|
152
|
-
|
|
145
|
+
if (headers) {
|
|
146
|
+
for (const [key, value] of Object.entries(headers)) {
|
|
147
|
+
const lowerCaseKey = key.toLowerCase()
|
|
148
|
+
if (lowerCaseKey === 'x-amz-signature' && value) {
|
|
149
|
+
return true
|
|
150
|
+
}
|
|
151
|
+
if (lowerCaseKey === 'authorization' && value) {
|
|
152
|
+
const authorization = Array.isArray(value) ? value : [value]
|
|
153
|
+
if (authorization.some((val) => val.startsWith('AWS4-HMAC-SHA256'))) {
|
|
154
|
+
return true
|
|
155
|
+
}
|
|
156
|
+
}
|
|
153
157
|
}
|
|
154
158
|
}
|
|
155
159
|
|
|
156
|
-
return
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
function startsWith (searchString) {
|
|
160
|
-
return value => String(value).startsWith(searchString)
|
|
160
|
+
return false
|
|
161
161
|
}
|
|
162
162
|
|
|
163
163
|
function getStatusValidator (config) {
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const RedisPlugin = require('../../datadog-plugin-redis/src')
|
|
4
|
+
|
|
5
|
+
class IOValkeyPlugin extends RedisPlugin {
|
|
6
|
+
static get id () {
|
|
7
|
+
return 'iovalkey'
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
static get system () { return 'valkey' }
|
|
11
|
+
|
|
12
|
+
constructor (...args) {
|
|
13
|
+
super(...args)
|
|
14
|
+
this._spanType = 'valkey'
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
module.exports = IOValkeyPlugin
|
|
@@ -31,7 +31,8 @@ const {
|
|
|
31
31
|
TEST_MANAGEMENT_IS_ATTEMPT_TO_FIX,
|
|
32
32
|
TEST_MANAGEMENT_ATTEMPT_TO_FIX_PASSED,
|
|
33
33
|
TEST_HAS_FAILED_ALL_RETRIES,
|
|
34
|
-
TEST_RETRY_REASON_TYPES
|
|
34
|
+
TEST_RETRY_REASON_TYPES,
|
|
35
|
+
TEST_IS_MODIFIED
|
|
35
36
|
} = require('../../dd-trace/src/plugins/util/test')
|
|
36
37
|
const { COMPONENT } = require('../../dd-trace/src/constants')
|
|
37
38
|
const id = require('../../dd-trace/src/id')
|
|
@@ -185,6 +186,7 @@ class JestPlugin extends CiPlugin {
|
|
|
185
186
|
config._ddFlakyTestRetriesCount = this.libraryConfig?.flakyTestRetriesCount
|
|
186
187
|
config._ddIsDiEnabled = this.libraryConfig?.isDiEnabled ?? false
|
|
187
188
|
config._ddIsKnownTestsEnabled = this.libraryConfig?.isKnownTestsEnabled ?? false
|
|
189
|
+
config._ddIsImpactedTestsEnabled = this.libraryConfig?.isImpactedTestsEnabled ?? false
|
|
188
190
|
})
|
|
189
191
|
})
|
|
190
192
|
|
|
@@ -333,15 +335,24 @@ class JestPlugin extends CiPlugin {
|
|
|
333
335
|
this.telemetry.distribution(TELEMETRY_CODE_COVERAGE_NUM_FILES, {}, files.length)
|
|
334
336
|
})
|
|
335
337
|
|
|
336
|
-
this.
|
|
338
|
+
this.addBind('ci:jest:test:start', (ctx) => {
|
|
337
339
|
const store = storage('legacy').getStore()
|
|
338
|
-
const span = this.startTestSpan(
|
|
340
|
+
const span = this.startTestSpan(ctx)
|
|
341
|
+
|
|
342
|
+
ctx.parentStore = store
|
|
343
|
+
ctx.currentStore = { ...store, span }
|
|
339
344
|
|
|
340
|
-
this.enter(span, store)
|
|
341
345
|
this.activeTestSpan = span
|
|
346
|
+
|
|
347
|
+
return ctx.currentStore
|
|
348
|
+
})
|
|
349
|
+
|
|
350
|
+
this.addBind('ci:jest:test:fn', (ctx) => {
|
|
351
|
+
return ctx.currentStore
|
|
342
352
|
})
|
|
343
353
|
|
|
344
354
|
this.addSub('ci:jest:test:finish', ({
|
|
355
|
+
span,
|
|
345
356
|
status,
|
|
346
357
|
testStartLine,
|
|
347
358
|
attemptToFixPassed,
|
|
@@ -349,7 +360,6 @@ class JestPlugin extends CiPlugin {
|
|
|
349
360
|
attemptToFixFailed,
|
|
350
361
|
isAtrRetry
|
|
351
362
|
}) => {
|
|
352
|
-
const span = storage('legacy').getStore().span
|
|
353
363
|
span.setTag(TEST_STATUS, status)
|
|
354
364
|
if (testStartLine) {
|
|
355
365
|
span.setTag(TEST_SOURCE_START, testStartLine)
|
|
@@ -384,19 +394,15 @@ class JestPlugin extends CiPlugin {
|
|
|
384
394
|
this.activeTestSpan = null
|
|
385
395
|
})
|
|
386
396
|
|
|
387
|
-
this.addSub('ci:jest:test:err', ({ error, shouldSetProbe, promises }) => {
|
|
388
|
-
if (error) {
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
if (probeInformation) {
|
|
397
|
-
const { setProbePromise } = probeInformation
|
|
398
|
-
promises.isProbeReady = withTimeout(setProbePromise, 2000)
|
|
399
|
-
}
|
|
397
|
+
this.addSub('ci:jest:test:err', ({ span, error, shouldSetProbe, promises }) => {
|
|
398
|
+
if (error && span) {
|
|
399
|
+
span.setTag(TEST_STATUS, 'fail')
|
|
400
|
+
span.setTag('error', getFormattedError(error, this.repositoryRoot))
|
|
401
|
+
if (shouldSetProbe) {
|
|
402
|
+
const probeInformation = this.addDiProbe(error)
|
|
403
|
+
if (probeInformation) {
|
|
404
|
+
const { setProbePromise } = probeInformation
|
|
405
|
+
promises.isProbeReady = withTimeout(setProbePromise, 2000)
|
|
400
406
|
}
|
|
401
407
|
}
|
|
402
408
|
}
|
|
@@ -432,7 +438,8 @@ class JestPlugin extends CiPlugin {
|
|
|
432
438
|
isAttemptToFixRetry,
|
|
433
439
|
isJestRetry,
|
|
434
440
|
isDisabled,
|
|
435
|
-
isQuarantined
|
|
441
|
+
isQuarantined,
|
|
442
|
+
isModified
|
|
436
443
|
} = test
|
|
437
444
|
|
|
438
445
|
const extraTags = {
|
|
@@ -457,6 +464,12 @@ class JestPlugin extends CiPlugin {
|
|
|
457
464
|
if (isAttemptToFixRetry) {
|
|
458
465
|
extraTags[TEST_IS_RETRY] = 'true'
|
|
459
466
|
extraTags[TEST_RETRY_REASON] = TEST_RETRY_REASON_TYPES.atf
|
|
467
|
+
} else if (isEfdRetry) {
|
|
468
|
+
extraTags[TEST_IS_RETRY] = 'true'
|
|
469
|
+
extraTags[TEST_RETRY_REASON] = TEST_RETRY_REASON_TYPES.efd
|
|
470
|
+
} else if (isJestRetry) {
|
|
471
|
+
extraTags[TEST_IS_RETRY] = 'true'
|
|
472
|
+
extraTags[TEST_RETRY_REASON] = TEST_RETRY_REASON_TYPES.ext
|
|
460
473
|
}
|
|
461
474
|
|
|
462
475
|
if (isDisabled) {
|
|
@@ -467,17 +480,12 @@ class JestPlugin extends CiPlugin {
|
|
|
467
480
|
extraTags[TEST_MANAGEMENT_IS_QUARANTINED] = 'true'
|
|
468
481
|
}
|
|
469
482
|
|
|
470
|
-
if (
|
|
471
|
-
extraTags[
|
|
472
|
-
if (isEfdRetry) {
|
|
473
|
-
extraTags[TEST_IS_RETRY] = 'true'
|
|
474
|
-
extraTags[TEST_RETRY_REASON] = TEST_RETRY_REASON_TYPES.efd
|
|
475
|
-
}
|
|
483
|
+
if (isModified) {
|
|
484
|
+
extraTags[TEST_IS_MODIFIED] = 'true'
|
|
476
485
|
}
|
|
477
486
|
|
|
478
|
-
if (
|
|
479
|
-
extraTags[
|
|
480
|
-
extraTags[TEST_RETRY_REASON] = TEST_RETRY_REASON_TYPES.ext
|
|
487
|
+
if (isNew) {
|
|
488
|
+
extraTags[TEST_IS_NEW] = 'true'
|
|
481
489
|
}
|
|
482
490
|
|
|
483
491
|
return super.startTestSpan(name, suite, this.testSuiteSpan, extraTags)
|
|
@@ -25,15 +25,15 @@ function getFormattedJestTestParameters (testParameters) {
|
|
|
25
25
|
// Way 2.
|
|
26
26
|
const parameterKeys = parameterArray[0].split('|').map(key => key.trim())
|
|
27
27
|
const formattedParameters = []
|
|
28
|
+
let lastFormattedParameter = {}
|
|
28
29
|
for (let index = 0; index < parameterValues.length; index++) {
|
|
29
|
-
const parameterValue = parameterValues[index]
|
|
30
30
|
const parameterIndex = index % parameterKeys.length
|
|
31
|
-
if (
|
|
32
|
-
|
|
31
|
+
if (parameterIndex === 0) {
|
|
32
|
+
lastFormattedParameter = {}
|
|
33
|
+
formattedParameters.push(lastFormattedParameter)
|
|
33
34
|
}
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
lastFormattedParameter[parameterKey] = parameterValue
|
|
35
|
+
const key = parameterKeys[parameterIndex]
|
|
36
|
+
lastFormattedParameter[key] = parameterValues[index]
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
return formattedParameters
|
|
@@ -57,7 +57,7 @@ function isMarkedAsUnskippable (test) {
|
|
|
57
57
|
try {
|
|
58
58
|
const testSource = readFileSync(test.path, 'utf8')
|
|
59
59
|
docblocks = parse(extract(testSource))
|
|
60
|
-
} catch
|
|
60
|
+
} catch {
|
|
61
61
|
// If we have issues parsing the file, we'll assume no unskippable was passed
|
|
62
62
|
return false
|
|
63
63
|
}
|
|
@@ -69,7 +69,7 @@ function isMarkedAsUnskippable (test) {
|
|
|
69
69
|
|
|
70
70
|
try {
|
|
71
71
|
return JSON.parse(docblocks.datadog).unskippable
|
|
72
|
-
} catch
|
|
72
|
+
} catch {
|
|
73
73
|
// If the @datadog block comment is present but malformed, we'll run the suite
|
|
74
74
|
log.warn('@datadog block comment is malformed.')
|
|
75
75
|
return true
|
|
@@ -6,7 +6,9 @@ class KafkajsBatchConsumerPlugin extends ConsumerPlugin {
|
|
|
6
6
|
static get id () { return 'kafkajs' }
|
|
7
7
|
static get operation () { return 'consume-batch' }
|
|
8
8
|
|
|
9
|
-
start (
|
|
9
|
+
start (ctx) {
|
|
10
|
+
const { topic, messages, groupId, clusterId } = ctx.extractedArgs || ctx
|
|
11
|
+
|
|
10
12
|
if (!this.config.dsmEnabled) return
|
|
11
13
|
for (const message of messages) {
|
|
12
14
|
if (!message || !message.headers) continue
|
|
@@ -64,7 +64,9 @@ class KafkajsConsumerPlugin extends ConsumerPlugin {
|
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
-
|
|
67
|
+
bindStart (ctx) {
|
|
68
|
+
const { topic, partition, message, groupId, clusterId } = ctx.extractedArgs || ctx
|
|
69
|
+
|
|
68
70
|
let childOf
|
|
69
71
|
const headers = convertToTextMap(message?.headers)
|
|
70
72
|
if (headers) {
|
|
@@ -83,7 +85,7 @@ class KafkajsConsumerPlugin extends ConsumerPlugin {
|
|
|
83
85
|
metrics: {
|
|
84
86
|
'kafka.partition': partition
|
|
85
87
|
}
|
|
86
|
-
})
|
|
88
|
+
}, ctx)
|
|
87
89
|
if (message?.offset) span.setTag('kafka.message.offset', message?.offset)
|
|
88
90
|
|
|
89
91
|
if (this.config.dsmEnabled && headers) {
|
|
@@ -97,16 +99,18 @@ class KafkajsConsumerPlugin extends ConsumerPlugin {
|
|
|
97
99
|
}
|
|
98
100
|
|
|
99
101
|
if (afterStartCh.hasSubscribers) {
|
|
100
|
-
afterStartCh.publish({ topic, partition, message, groupId })
|
|
102
|
+
afterStartCh.publish({ topic, partition, message, groupId, currentStore: ctx.currentStore })
|
|
101
103
|
}
|
|
104
|
+
|
|
105
|
+
return ctx.currentStore
|
|
102
106
|
}
|
|
103
107
|
|
|
104
|
-
finish () {
|
|
108
|
+
finish (ctx) {
|
|
105
109
|
if (beforeFinishCh.hasSubscribers) {
|
|
106
110
|
beforeFinishCh.publish()
|
|
107
111
|
}
|
|
108
112
|
|
|
109
|
-
super.finish()
|
|
113
|
+
super.finish(ctx)
|
|
110
114
|
}
|
|
111
115
|
}
|
|
112
116
|
|
|
@@ -52,7 +52,9 @@ class KafkajsProducerPlugin extends ProducerPlugin {
|
|
|
52
52
|
* @param {ProducerResponseItem[]} commitList
|
|
53
53
|
* @returns {void}
|
|
54
54
|
*/
|
|
55
|
-
commit (
|
|
55
|
+
commit (ctx) {
|
|
56
|
+
const commitList = ctx.result
|
|
57
|
+
|
|
56
58
|
if (!this.config.dsmEnabled) return
|
|
57
59
|
if (!commitList || !Array.isArray(commitList)) return
|
|
58
60
|
const keys = [
|
|
@@ -67,7 +69,8 @@ class KafkajsProducerPlugin extends ProducerPlugin {
|
|
|
67
69
|
}
|
|
68
70
|
}
|
|
69
71
|
|
|
70
|
-
|
|
72
|
+
bindStart (ctx) {
|
|
73
|
+
const { topic, messages, bootstrapServers, clusterId, disableHeaderInjection } = ctx
|
|
71
74
|
const span = this.startSpan({
|
|
72
75
|
resource: topic,
|
|
73
76
|
meta: {
|
|
@@ -79,16 +82,17 @@ class KafkajsProducerPlugin extends ProducerPlugin {
|
|
|
79
82
|
metrics: {
|
|
80
83
|
'kafka.batch_size': messages.length
|
|
81
84
|
}
|
|
82
|
-
})
|
|
85
|
+
}, ctx)
|
|
83
86
|
if (bootstrapServers) {
|
|
84
87
|
span.setTag(BOOTSTRAP_SERVERS_KEY, bootstrapServers)
|
|
85
88
|
}
|
|
86
89
|
for (const message of messages) {
|
|
87
90
|
if (message !== null && typeof message === 'object') {
|
|
88
|
-
|
|
89
|
-
|
|
91
|
+
// message headers are not supported for kafka broker versions <0.11
|
|
92
|
+
if (!disableHeaderInjection) {
|
|
93
|
+
message.headers ??= {}
|
|
94
|
+
this.tracer.inject(span, 'text_map', message.headers)
|
|
90
95
|
}
|
|
91
|
-
this.tracer.inject(span, 'text_map', message.headers)
|
|
92
96
|
if (this.config.dsmEnabled) {
|
|
93
97
|
const payloadSize = getMessageSize(message)
|
|
94
98
|
const edgeTags = ['direction:out', `topic:${topic}`, 'type:kafka']
|
|
@@ -98,10 +102,14 @@ class KafkajsProducerPlugin extends ProducerPlugin {
|
|
|
98
102
|
}
|
|
99
103
|
|
|
100
104
|
const dataStreamsContext = this.tracer.setCheckpoint(edgeTags, span, payloadSize)
|
|
101
|
-
|
|
105
|
+
if (!disableHeaderInjection) {
|
|
106
|
+
DsmPathwayCodec.encode(dataStreamsContext, message.headers)
|
|
107
|
+
}
|
|
102
108
|
}
|
|
103
109
|
}
|
|
104
110
|
}
|
|
111
|
+
|
|
112
|
+
return ctx.currentStore
|
|
105
113
|
}
|
|
106
114
|
}
|
|
107
115
|
|