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
|
@@ -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
|
|
@@ -73,7 +82,7 @@ class GoogleCloudVertexAITracingPlugin extends TracingPlugin {
|
|
|
73
82
|
|
|
74
83
|
const generationConfig = instance.generationConfig || {}
|
|
75
84
|
for (const key of Object.keys(generationConfig)) {
|
|
76
|
-
const transformedKey = key.
|
|
85
|
+
const transformedKey = key.replaceAll(/([a-z0-9])([A-Z])/g, '$1_$2').toLowerCase()
|
|
77
86
|
tags[`vertexai.request.generation_config.${transformedKey}`] = JSON.stringify(generationConfig[key])
|
|
78
87
|
}
|
|
79
88
|
|
|
@@ -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
|
|
@@ -27,12 +27,13 @@ class GraphQLPlugin extends CompositePlugin {
|
|
|
27
27
|
// config validator helpers
|
|
28
28
|
|
|
29
29
|
function validateConfig (config) {
|
|
30
|
-
return
|
|
30
|
+
return {
|
|
31
|
+
...config,
|
|
31
32
|
depth: getDepth(config),
|
|
32
33
|
variables: getVariablesFilter(config),
|
|
33
34
|
collapse: config.collapse === undefined || !!config.collapse,
|
|
34
35
|
hooks: getHooks(config)
|
|
35
|
-
}
|
|
36
|
+
}
|
|
36
37
|
}
|
|
37
38
|
|
|
38
39
|
function getDepth (config) {
|
|
@@ -47,7 +48,7 @@ function getDepth (config) {
|
|
|
47
48
|
function getVariablesFilter (config) {
|
|
48
49
|
if (typeof config.variables === 'function') {
|
|
49
50
|
return config.variables
|
|
50
|
-
} else if (config.variables
|
|
51
|
+
} else if (Array.isArray(config.variables)) {
|
|
51
52
|
return variables => pick(variables, config.variables)
|
|
52
53
|
} else if (config.hasOwnProperty('variables')) {
|
|
53
54
|
log.error('Expected `variables` to be an array or function.')
|
|
@@ -55,11 +56,12 @@ function getVariablesFilter (config) {
|
|
|
55
56
|
return null
|
|
56
57
|
}
|
|
57
58
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
const
|
|
62
|
-
const
|
|
59
|
+
const noop = () => {}
|
|
60
|
+
|
|
61
|
+
function getHooks ({ hooks }) {
|
|
62
|
+
const execute = hooks?.execute ?? noop
|
|
63
|
+
const parse = hooks?.parse ?? noop
|
|
64
|
+
const validate = hooks?.validate ?? noop
|
|
63
65
|
|
|
64
66
|
return { execute, parse, validate }
|
|
65
67
|
}
|
|
@@ -16,20 +16,21 @@ class GraphQLResolvePlugin extends TracingPlugin {
|
|
|
16
16
|
const computedPathString = path.join('.')
|
|
17
17
|
|
|
18
18
|
if (this.config.collapse) {
|
|
19
|
+
if (context.fields[computedPathString]) return
|
|
20
|
+
|
|
19
21
|
if (!context[collapsedPathSym]) {
|
|
20
22
|
context[collapsedPathSym] = {}
|
|
23
|
+
} else if (context[collapsedPathSym][computedPathString]) {
|
|
24
|
+
return
|
|
21
25
|
}
|
|
22
26
|
|
|
23
|
-
if (context.fields[computedPathString]) return
|
|
24
|
-
if (context[collapsedPathSym][computedPathString]) return
|
|
25
|
-
|
|
26
27
|
context[collapsedPathSym][computedPathString] = true
|
|
27
28
|
}
|
|
28
29
|
|
|
29
30
|
const document = context.source
|
|
30
31
|
const fieldNode = info.fieldNodes.find(fieldNode => fieldNode.kind === 'Field')
|
|
31
32
|
const loc = this.config.source && document && fieldNode && fieldNode.loc
|
|
32
|
-
const source = loc && document.
|
|
33
|
+
const source = loc && document.slice(loc.start, loc.end)
|
|
33
34
|
|
|
34
35
|
const span = this.startSpan('graphql.resolve', {
|
|
35
36
|
service: this.config.service,
|
|
@@ -47,10 +48,9 @@ class GraphQLResolvePlugin extends TracingPlugin {
|
|
|
47
48
|
const variables = this.config.variables(info.variableValues)
|
|
48
49
|
|
|
49
50
|
fieldNode.arguments
|
|
50
|
-
.filter(arg => arg.value && arg.value.kind === 'Variable')
|
|
51
|
-
.
|
|
52
|
-
|
|
53
|
-
.forEach(name => {
|
|
51
|
+
.filter(arg => arg.value?.name && arg.value.kind === 'Variable' && variables[arg.value.name.value])
|
|
52
|
+
.forEach(arg => {
|
|
53
|
+
const name = arg.value.name.value
|
|
54
54
|
span.setTag(`graphql.variables.${name}`, variables[name])
|
|
55
55
|
})
|
|
56
56
|
}
|
|
@@ -89,7 +89,12 @@ class GraphQLResolvePlugin extends TracingPlugin {
|
|
|
89
89
|
// helpers
|
|
90
90
|
|
|
91
91
|
function shouldInstrument (config, path) {
|
|
92
|
-
|
|
92
|
+
let depth = 0
|
|
93
|
+
for (const item of path) {
|
|
94
|
+
if (typeof item === 'string') {
|
|
95
|
+
depth += 1
|
|
96
|
+
}
|
|
97
|
+
}
|
|
93
98
|
|
|
94
99
|
return config.depth < 0 || config.depth >= depth
|
|
95
100
|
}
|
|
@@ -122,10 +127,11 @@ function getResolverInfo (info, args) {
|
|
|
122
127
|
let resolverInfo = null
|
|
123
128
|
const resolverVars = {}
|
|
124
129
|
|
|
125
|
-
if (args
|
|
130
|
+
if (args) {
|
|
126
131
|
Object.assign(resolverVars, args)
|
|
127
132
|
}
|
|
128
133
|
|
|
134
|
+
let hasResolvers = false
|
|
129
135
|
const directives = info.fieldNodes?.[0]?.directives
|
|
130
136
|
if (Array.isArray(directives)) {
|
|
131
137
|
for (const directive of directives) {
|
|
@@ -134,13 +140,14 @@ function getResolverInfo (info, args) {
|
|
|
134
140
|
argList[argument.name.value] = argument.value.value
|
|
135
141
|
}
|
|
136
142
|
|
|
137
|
-
if (
|
|
143
|
+
if (directive.arguments.length > 0) {
|
|
144
|
+
hasResolvers = true
|
|
138
145
|
resolverVars[directive.name.value] = argList
|
|
139
146
|
}
|
|
140
147
|
}
|
|
141
148
|
}
|
|
142
149
|
|
|
143
|
-
if (Object.keys(resolverVars).length) {
|
|
150
|
+
if (hasResolvers || args && Object.keys(resolverVars).length) {
|
|
144
151
|
resolverInfo = { [info.fieldName]: resolverVars }
|
|
145
152
|
}
|
|
146
153
|
|
|
@@ -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
|
|
|
@@ -63,7 +63,7 @@ class HttpClientPlugin extends ClientPlugin {
|
|
|
63
63
|
// Implemented due to aws-sdk issue where request signing is broken if we mutate the headers
|
|
64
64
|
// Explained further in:
|
|
65
65
|
// https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1609#issuecomment-1826167348
|
|
66
|
-
options.headers =
|
|
66
|
+
options.headers = { ...options.headers }
|
|
67
67
|
this.tracer.inject(span, HTTP_HEADERS, options.headers)
|
|
68
68
|
}
|
|
69
69
|
|
|
@@ -173,13 +173,14 @@ function normalizeClientConfig (config) {
|
|
|
173
173
|
const headers = getHeaders(config)
|
|
174
174
|
const hooks = getHooks(config)
|
|
175
175
|
|
|
176
|
-
return
|
|
176
|
+
return {
|
|
177
|
+
...config,
|
|
177
178
|
validateStatus,
|
|
178
179
|
filter,
|
|
179
180
|
propagationFilter,
|
|
180
181
|
headers,
|
|
181
182
|
hooks
|
|
182
|
-
}
|
|
183
|
+
}
|
|
183
184
|
}
|
|
184
185
|
|
|
185
186
|
function getStatusValidator (config) {
|
|
@@ -192,9 +193,7 @@ function getStatusValidator (config) {
|
|
|
192
193
|
}
|
|
193
194
|
|
|
194
195
|
function getFilter (config) {
|
|
195
|
-
config =
|
|
196
|
-
blocklist: config.blocklist || []
|
|
197
|
-
})
|
|
196
|
+
config = { ...config, blocklist: config.blocklist || [] }
|
|
198
197
|
|
|
199
198
|
return urlFilter.getFilter(config)
|
|
200
199
|
}
|
|
@@ -202,15 +201,26 @@ function getFilter (config) {
|
|
|
202
201
|
function getHeaders (config) {
|
|
203
202
|
if (!Array.isArray(config.headers)) return []
|
|
204
203
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
204
|
+
const result = []
|
|
205
|
+
for (const header of config.headers) {
|
|
206
|
+
if (typeof header === 'string') {
|
|
207
|
+
const separatorIndex = header.indexOf(':')
|
|
208
|
+
result.push(separatorIndex === -1
|
|
209
|
+
? [header, undefined]
|
|
210
|
+
: [
|
|
211
|
+
header.slice(0, separatorIndex).toLowerCase(),
|
|
212
|
+
header.slice(separatorIndex + 1)
|
|
213
|
+
]
|
|
214
|
+
)
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
return result
|
|
209
218
|
}
|
|
210
219
|
|
|
220
|
+
const noop = () => {}
|
|
221
|
+
|
|
211
222
|
function getHooks (config) {
|
|
212
|
-
const
|
|
213
|
-
const request = (config.hooks && config.hooks.request) || noop
|
|
223
|
+
const request = config.hooks?.request ?? noop
|
|
214
224
|
|
|
215
225
|
return { request }
|
|
216
226
|
}
|
|
@@ -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 =
|
|
128
|
-
? authority.
|
|
129
|
-
: (authority.
|
|
127
|
+
let port = authority.port === ''
|
|
128
|
+
? authority.protocol === 'http:' ? '80' : '443'
|
|
129
|
+
: String(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) {
|
|
@@ -174,17 +174,16 @@ function normalizeConfig (config) {
|
|
|
174
174
|
const filter = getFilter(config)
|
|
175
175
|
const headers = getHeaders(config)
|
|
176
176
|
|
|
177
|
-
return
|
|
177
|
+
return {
|
|
178
|
+
...config,
|
|
178
179
|
validateStatus,
|
|
179
180
|
filter,
|
|
180
181
|
headers
|
|
181
|
-
}
|
|
182
|
+
}
|
|
182
183
|
}
|
|
183
184
|
|
|
184
185
|
function getFilter (config) {
|
|
185
|
-
config =
|
|
186
|
-
blocklist: config.blocklist || []
|
|
187
|
-
})
|
|
186
|
+
config = { ...config, blocklist: config.blocklist || [] }
|
|
188
187
|
|
|
189
188
|
return urlFilter.getFilter(config)
|
|
190
189
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
const CiPlugin = require('../../dd-trace/src/plugins/ci_plugin')
|
|
2
2
|
const { storage } = require('../../datadog-core')
|
|
3
|
+
const { getEnvironmentVariable } = require('../../dd-trace/src/config-helper')
|
|
3
4
|
|
|
4
5
|
const {
|
|
5
6
|
TEST_STATUS,
|
|
@@ -31,7 +32,8 @@ const {
|
|
|
31
32
|
TEST_MANAGEMENT_IS_ATTEMPT_TO_FIX,
|
|
32
33
|
TEST_MANAGEMENT_ATTEMPT_TO_FIX_PASSED,
|
|
33
34
|
TEST_HAS_FAILED_ALL_RETRIES,
|
|
34
|
-
TEST_RETRY_REASON_TYPES
|
|
35
|
+
TEST_RETRY_REASON_TYPES,
|
|
36
|
+
TEST_IS_MODIFIED
|
|
35
37
|
} = require('../../dd-trace/src/plugins/util/test')
|
|
36
38
|
const { COMPONENT } = require('../../dd-trace/src/constants')
|
|
37
39
|
const id = require('../../dd-trace/src/id')
|
|
@@ -47,7 +49,7 @@ const {
|
|
|
47
49
|
TELEMETRY_TEST_SESSION
|
|
48
50
|
} = require('../../dd-trace/src/ci-visibility/telemetry')
|
|
49
51
|
|
|
50
|
-
const isJestWorker = !!
|
|
52
|
+
const isJestWorker = !!getEnvironmentVariable('JEST_WORKER_ID')
|
|
51
53
|
|
|
52
54
|
// https://github.com/facebook/jest/blob/d6ad15b0f88a05816c2fe034dd6900d28315d570/packages/jest-worker/src/types.ts#L38
|
|
53
55
|
const CHILD_MESSAGE_END = 2
|
|
@@ -157,7 +159,7 @@ class JestPlugin extends CiPlugin {
|
|
|
157
159
|
|
|
158
160
|
this.telemetry.count(TELEMETRY_TEST_SESSION, {
|
|
159
161
|
provider: this.ciProviderName,
|
|
160
|
-
autoInjected: !!
|
|
162
|
+
autoInjected: !!getEnvironmentVariable('DD_CIVISIBILITY_AUTO_INSTRUMENTATION_PROVIDER')
|
|
161
163
|
})
|
|
162
164
|
|
|
163
165
|
this.tracer._exporter.flush(() => {
|
|
@@ -185,6 +187,7 @@ class JestPlugin extends CiPlugin {
|
|
|
185
187
|
config._ddFlakyTestRetriesCount = this.libraryConfig?.flakyTestRetriesCount
|
|
186
188
|
config._ddIsDiEnabled = this.libraryConfig?.isDiEnabled ?? false
|
|
187
189
|
config._ddIsKnownTestsEnabled = this.libraryConfig?.isKnownTestsEnabled ?? false
|
|
190
|
+
config._ddIsImpactedTestsEnabled = this.libraryConfig?.isImpactedTestsEnabled ?? false
|
|
188
191
|
})
|
|
189
192
|
})
|
|
190
193
|
|
|
@@ -393,16 +396,14 @@ class JestPlugin extends CiPlugin {
|
|
|
393
396
|
})
|
|
394
397
|
|
|
395
398
|
this.addSub('ci:jest:test:err', ({ span, error, shouldSetProbe, promises }) => {
|
|
396
|
-
if (error) {
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
promises.isProbeReady = withTimeout(setProbePromise, 2000)
|
|
405
|
-
}
|
|
399
|
+
if (error && span) {
|
|
400
|
+
span.setTag(TEST_STATUS, 'fail')
|
|
401
|
+
span.setTag('error', getFormattedError(error, this.repositoryRoot))
|
|
402
|
+
if (shouldSetProbe) {
|
|
403
|
+
const probeInformation = this.addDiProbe(error)
|
|
404
|
+
if (probeInformation) {
|
|
405
|
+
const { setProbePromise } = probeInformation
|
|
406
|
+
promises.isProbeReady = withTimeout(setProbePromise, 2000)
|
|
406
407
|
}
|
|
407
408
|
}
|
|
408
409
|
}
|
|
@@ -438,7 +439,8 @@ class JestPlugin extends CiPlugin {
|
|
|
438
439
|
isAttemptToFixRetry,
|
|
439
440
|
isJestRetry,
|
|
440
441
|
isDisabled,
|
|
441
|
-
isQuarantined
|
|
442
|
+
isQuarantined,
|
|
443
|
+
isModified
|
|
442
444
|
} = test
|
|
443
445
|
|
|
444
446
|
const extraTags = {
|
|
@@ -463,6 +465,12 @@ class JestPlugin extends CiPlugin {
|
|
|
463
465
|
if (isAttemptToFixRetry) {
|
|
464
466
|
extraTags[TEST_IS_RETRY] = 'true'
|
|
465
467
|
extraTags[TEST_RETRY_REASON] = TEST_RETRY_REASON_TYPES.atf
|
|
468
|
+
} else if (isEfdRetry) {
|
|
469
|
+
extraTags[TEST_IS_RETRY] = 'true'
|
|
470
|
+
extraTags[TEST_RETRY_REASON] = TEST_RETRY_REASON_TYPES.efd
|
|
471
|
+
} else if (isJestRetry) {
|
|
472
|
+
extraTags[TEST_IS_RETRY] = 'true'
|
|
473
|
+
extraTags[TEST_RETRY_REASON] = TEST_RETRY_REASON_TYPES.ext
|
|
466
474
|
}
|
|
467
475
|
|
|
468
476
|
if (isDisabled) {
|
|
@@ -473,17 +481,12 @@ class JestPlugin extends CiPlugin {
|
|
|
473
481
|
extraTags[TEST_MANAGEMENT_IS_QUARANTINED] = 'true'
|
|
474
482
|
}
|
|
475
483
|
|
|
476
|
-
if (
|
|
477
|
-
extraTags[
|
|
478
|
-
if (isEfdRetry) {
|
|
479
|
-
extraTags[TEST_IS_RETRY] = 'true'
|
|
480
|
-
extraTags[TEST_RETRY_REASON] = TEST_RETRY_REASON_TYPES.efd
|
|
481
|
-
}
|
|
484
|
+
if (isModified) {
|
|
485
|
+
extraTags[TEST_IS_MODIFIED] = 'true'
|
|
482
486
|
}
|
|
483
487
|
|
|
484
|
-
if (
|
|
485
|
-
extraTags[
|
|
486
|
-
extraTags[TEST_RETRY_REASON] = TEST_RETRY_REASON_TYPES.ext
|
|
488
|
+
if (isNew) {
|
|
489
|
+
extraTags[TEST_IS_NEW] = 'true'
|
|
487
490
|
}
|
|
488
491
|
|
|
489
492
|
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
|