dd-trace 5.53.0 → 5.54.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE-3rdparty.csv +2 -1
- package/index.d.ts +33 -16
- package/initialize.mjs +3 -4
- package/package.json +36 -34
- package/packages/datadog-core/src/utils/src/get.js +1 -1
- package/packages/datadog-core/src/utils/src/has.js +1 -1
- package/packages/datadog-core/src/utils/src/kebabcase.js +4 -6
- package/packages/datadog-core/src/utils/src/parse-tags.js +1 -1
- package/packages/datadog-core/src/utils/src/pick.js +2 -2
- package/packages/datadog-core/src/utils/src/set.js +1 -1
- package/packages/datadog-core/src/utils/src/uniq.js +1 -1
- package/packages/datadog-instrumentations/src/amqp10.js +19 -17
- package/packages/datadog-instrumentations/src/amqplib.js +52 -35
- package/packages/datadog-instrumentations/src/apollo.js +2 -2
- package/packages/datadog-instrumentations/src/aws-sdk.js +1 -1
- package/packages/datadog-instrumentations/src/cassandra-driver.js +5 -4
- package/packages/datadog-instrumentations/src/child_process.js +1 -2
- package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +88 -73
- package/packages/datadog-instrumentations/src/couchbase.js +3 -3
- package/packages/datadog-instrumentations/src/cucumber.js +87 -40
- package/packages/datadog-instrumentations/src/cypress.js +2 -1
- package/packages/datadog-instrumentations/src/dns.js +1 -1
- package/packages/datadog-instrumentations/src/fs.js +1 -1
- package/packages/datadog-instrumentations/src/google-cloud-pubsub.js +28 -34
- package/packages/datadog-instrumentations/src/graphql.js +7 -10
- package/packages/datadog-instrumentations/src/grpc/client.js +11 -23
- package/packages/datadog-instrumentations/src/grpc/server.js +7 -20
- package/packages/datadog-instrumentations/src/helpers/extract-package-and-module-path.js +16 -10
- package/packages/datadog-instrumentations/src/helpers/hook.js +1 -1
- package/packages/datadog-instrumentations/src/helpers/hooks.js +0 -1
- package/packages/datadog-instrumentations/src/helpers/instrument.js +1 -41
- package/packages/datadog-instrumentations/src/helpers/register.js +5 -7
- package/packages/datadog-instrumentations/src/http/client.js +14 -20
- package/packages/datadog-instrumentations/src/jest.js +137 -48
- package/packages/datadog-instrumentations/src/kafkajs.js +52 -44
- package/packages/datadog-instrumentations/src/knex.js +4 -4
- package/packages/datadog-instrumentations/src/ldapjs.js +3 -4
- package/packages/datadog-instrumentations/src/mariadb.js +38 -61
- package/packages/datadog-instrumentations/src/mocha/main.js +63 -24
- package/packages/datadog-instrumentations/src/mocha/utils.js +36 -12
- package/packages/datadog-instrumentations/src/mocha/worker.js +6 -0
- package/packages/datadog-instrumentations/src/mongodb-core.js +1 -1
- package/packages/datadog-instrumentations/src/mysql.js +20 -36
- package/packages/datadog-instrumentations/src/mysql2.js +53 -47
- package/packages/datadog-instrumentations/src/net.js +1 -1
- package/packages/datadog-instrumentations/src/next.js +1 -0
- package/packages/datadog-instrumentations/src/nyc.js +1 -1
- package/packages/datadog-instrumentations/src/openai.js +21 -23
- package/packages/datadog-instrumentations/src/oracledb.js +1 -1
- package/packages/datadog-instrumentations/src/pg.js +1 -2
- package/packages/datadog-instrumentations/src/playwright.js +112 -69
- package/packages/datadog-instrumentations/src/redis.js +3 -3
- package/packages/datadog-instrumentations/src/restify.js +2 -2
- package/packages/datadog-instrumentations/src/rhea.js +42 -54
- package/packages/datadog-instrumentations/src/router.js +22 -25
- package/packages/datadog-instrumentations/src/tedious.js +1 -1
- package/packages/datadog-instrumentations/src/vitest.js +77 -28
- package/packages/datadog-plugin-amqp10/src/consumer.js +7 -3
- package/packages/datadog-plugin-amqp10/src/producer.js +7 -3
- package/packages/datadog-plugin-amqplib/src/client.js +6 -2
- package/packages/datadog-plugin-amqplib/src/consumer.js +7 -3
- package/packages/datadog-plugin-amqplib/src/producer.js +7 -3
- package/packages/datadog-plugin-amqplib/src/util.js +1 -1
- package/packages/datadog-plugin-apollo/src/gateway/request.js +5 -6
- package/packages/datadog-plugin-apollo/src/gateway/validate.js +2 -3
- package/packages/datadog-plugin-aws-sdk/src/base.js +3 -2
- package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/tracing.js +2 -2
- package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/utils.js +13 -13
- package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +24 -31
- package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +2 -2
- package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +6 -6
- package/packages/datadog-plugin-aws-sdk/src/services/lambda.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/services/sns.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +4 -5
- package/packages/datadog-plugin-aws-sdk/src/services/stepfunctions.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/util.js +5 -6
- package/packages/datadog-plugin-cassandra-driver/src/index.js +1 -1
- package/packages/datadog-plugin-child_process/src/index.js +4 -4
- package/packages/datadog-plugin-child_process/src/scrub-cmd-params.js +23 -23
- package/packages/datadog-plugin-cucumber/src/index.js +57 -2
- package/packages/datadog-plugin-cypress/src/cypress-plugin.js +97 -27
- package/packages/datadog-plugin-cypress/src/plugin.js +11 -1
- package/packages/datadog-plugin-cypress/src/support.js +24 -5
- package/packages/datadog-plugin-express/src/code_origin.js +30 -0
- package/packages/datadog-plugin-express/src/index.js +10 -12
- package/packages/datadog-plugin-express/src/tracing.js +19 -0
- package/packages/datadog-plugin-google-cloud-pubsub/src/client.js +7 -3
- package/packages/datadog-plugin-google-cloud-pubsub/src/consumer.js +12 -7
- package/packages/datadog-plugin-google-cloud-pubsub/src/producer.js +6 -2
- package/packages/datadog-plugin-google-cloud-vertexai/src/tracing.js +26 -9
- package/packages/datadog-plugin-graphql/src/execute.js +2 -2
- package/packages/datadog-plugin-graphql/src/index.js +7 -6
- package/packages/datadog-plugin-graphql/src/resolve.js +2 -2
- package/packages/datadog-plugin-graphql/src/tools/index.js +1 -0
- package/packages/datadog-plugin-graphql/src/tools/signature.js +1 -0
- package/packages/datadog-plugin-graphql/src/tools/transforms.js +1 -0
- package/packages/datadog-plugin-grpc/src/client.js +2 -2
- package/packages/datadog-plugin-grpc/src/util.js +2 -2
- package/packages/datadog-plugin-http/src/client.js +18 -7
- package/packages/datadog-plugin-http2/src/client.js +20 -20
- package/packages/datadog-plugin-jest/src/index.js +23 -21
- package/packages/datadog-plugin-jest/src/util.js +8 -8
- package/packages/datadog-plugin-kafkajs/src/batch-consumer.js +3 -1
- package/packages/datadog-plugin-kafkajs/src/consumer.js +9 -5
- package/packages/datadog-plugin-kafkajs/src/producer.js +8 -3
- package/packages/datadog-plugin-kafkajs/src/utils.js +1 -1
- package/packages/datadog-plugin-langchain/src/handlers/chain.js +7 -7
- package/packages/datadog-plugin-langchain/src/handlers/embedding.js +2 -2
- package/packages/datadog-plugin-langchain/src/handlers/language_models/chat_model.js +6 -4
- package/packages/datadog-plugin-langchain/src/handlers/language_models/llm.js +5 -4
- package/packages/datadog-plugin-langchain/src/tracing.js +11 -10
- package/packages/datadog-plugin-mariadb/src/index.js +3 -9
- package/packages/datadog-plugin-mocha/src/index.js +33 -13
- package/packages/datadog-plugin-mongodb-core/src/index.js +1 -1
- package/packages/datadog-plugin-mysql/src/index.js +11 -9
- package/packages/datadog-plugin-mysql2/src/index.js +16 -0
- package/packages/datadog-plugin-net/src/tcp.js +1 -1
- package/packages/datadog-plugin-next/src/index.js +6 -5
- package/packages/datadog-plugin-openai/src/services.js +6 -10
- package/packages/datadog-plugin-openai/src/tracing.js +10 -14
- package/packages/datadog-plugin-oracledb/src/index.js +1 -1
- package/packages/datadog-plugin-playwright/src/index.js +22 -2
- package/packages/datadog-plugin-redis/src/index.js +1 -1
- package/packages/datadog-plugin-rhea/src/consumer.js +8 -6
- package/packages/datadog-plugin-rhea/src/producer.js +5 -2
- package/packages/datadog-plugin-router/src/index.js +1 -1
- package/packages/datadog-plugin-selenium/src/index.js +1 -6
- package/packages/datadog-plugin-vitest/src/index.js +47 -31
- package/packages/datadog-shimmer/src/shimmer.js +4 -8
- package/packages/dd-trace/src/appsec/api_security_sampler.js +2 -2
- package/packages/dd-trace/src/appsec/blocked_templates.js +1 -1
- package/packages/dd-trace/src/appsec/blocking.js +6 -20
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-password-rules.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secret-rules.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secrets-rules.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/header-injection-analyzer.js +4 -6
- package/packages/dd-trace/src/appsec/iast/analyzers/hsts-header-missing-analyzer.js +7 -12
- package/packages/dd-trace/src/appsec/iast/analyzers/missing-header-analyzer.js +4 -6
- package/packages/dd-trace/src/appsec/iast/analyzers/nosql-injection-mongodb-analyzer.js +4 -0
- package/packages/dd-trace/src/appsec/iast/analyzers/path-traversal-analyzer.js +9 -12
- package/packages/dd-trace/src/appsec/iast/analyzers/vulnerability-analyzer.js +5 -4
- package/packages/dd-trace/src/appsec/iast/context/context-plugin.js +2 -3
- package/packages/dd-trace/src/appsec/iast/iast-plugin.js +3 -3
- package/packages/dd-trace/src/appsec/iast/index.js +1 -0
- package/packages/dd-trace/src/appsec/iast/overhead-controller.js +102 -7
- package/packages/dd-trace/src/appsec/iast/path-line.js +7 -8
- package/packages/dd-trace/src/appsec/iast/security-controls/index.js +6 -13
- package/packages/dd-trace/src/appsec/iast/security-controls/parser.js +6 -6
- package/packages/dd-trace/src/appsec/iast/taint-tracking/filter.js +2 -2
- package/packages/dd-trace/src/appsec/iast/taint-tracking/operations-taint-object.js +3 -3
- package/packages/dd-trace/src/appsec/iast/taint-tracking/operations.js +4 -28
- package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +1 -7
- package/packages/dd-trace/src/appsec/iast/taint-tracking/plugins/kafka.js +3 -4
- package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter-esm.mjs +1 -1
- package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +5 -7
- package/packages/dd-trace/src/appsec/iast/taint-tracking/taint-tracking-impl.js +2 -2
- package/packages/dd-trace/src/appsec/iast/telemetry/span-tags.js +6 -6
- package/packages/dd-trace/src/appsec/iast/telemetry/verbosity.js +1 -1
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/command-sensitive-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/ldap-sensitive-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/sql-sensitive-analyzer.js +7 -7
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-handler.js +23 -24
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-regex.js +3 -3
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/index.js +4 -4
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/utils.js +6 -11
- package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +9 -11
- package/packages/dd-trace/src/appsec/index.js +1 -1
- package/packages/dd-trace/src/appsec/rasp/index.js +15 -15
- package/packages/dd-trace/src/appsec/rasp/lfi.js +2 -1
- package/packages/dd-trace/src/appsec/reporter.js +233 -40
- package/packages/dd-trace/src/appsec/rule_manager.js +2 -2
- package/packages/dd-trace/src/appsec/stack_trace.js +2 -4
- package/packages/dd-trace/src/appsec/telemetry/rasp.js +3 -5
- package/packages/dd-trace/src/appsec/telemetry/waf.js +3 -5
- package/packages/dd-trace/src/appsec/user_tracking.js +3 -5
- package/packages/dd-trace/src/appsec/waf/waf_context_wrapper.js +2 -2
- package/packages/dd-trace/src/azure_metadata.js +2 -7
- package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/index.js +1 -1
- package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/worker/index.js +2 -2
- package/packages/dd-trace/src/ci-visibility/early-flake-detection/get-known-tests.js +1 -1
- package/packages/dd-trace/src/ci-visibility/exporters/agent-proxy/index.js +3 -3
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/coverage-writer.js +1 -1
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +1 -1
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +1 -1
- package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +6 -4
- package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +2 -2
- package/packages/dd-trace/src/ci-visibility/exporters/test-worker/writer.js +0 -2
- package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +1 -1
- package/packages/dd-trace/src/ci-visibility/log-submission/log-submission-plugin.js +1 -1
- package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +8 -5
- package/packages/dd-trace/src/ci-visibility/telemetry.js +4 -0
- package/packages/dd-trace/src/ci-visibility/test-management/get-test-management-tests.js +1 -1
- package/packages/dd-trace/src/config.js +82 -51
- package/packages/dd-trace/src/config_stable.js +3 -3
- package/packages/dd-trace/src/datastreams/encoding.js +9 -9
- package/packages/dd-trace/src/datastreams/fnv.js +1 -1
- package/packages/dd-trace/src/datastreams/pathway.js +4 -4
- package/packages/dd-trace/src/datastreams/processor.js +5 -7
- package/packages/dd-trace/src/datastreams/schemas/schema_builder.js +1 -1
- package/packages/dd-trace/src/datastreams/schemas/schema_sampler.js +4 -6
- package/packages/dd-trace/src/datastreams/size.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/breakpoints.js +74 -67
- package/packages/dd-trace/src/debugger/devtools_client/condition.js +6 -8
- package/packages/dd-trace/src/debugger/devtools_client/defaults.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/index.js +7 -1
- package/packages/dd-trace/src/debugger/devtools_client/remote_config.js +18 -38
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/index.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/processor.js +8 -10
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/redaction.js +3 -3
- package/packages/dd-trace/src/debugger/devtools_client/source-maps.js +2 -10
- package/packages/dd-trace/src/debugger/devtools_client/state.js +10 -3
- package/packages/dd-trace/src/dogstatsd.js +5 -4
- package/packages/dd-trace/src/encode/0.4.js +9 -9
- package/packages/dd-trace/src/encode/0.5.js +1 -1
- package/packages/dd-trace/src/encode/agentless-ci-visibility.js +3 -3
- package/packages/dd-trace/src/encode/coverage-ci-visibility.js +1 -1
- package/packages/dd-trace/src/encode/tags-processors.js +1 -1
- package/packages/dd-trace/src/exporter.js +6 -6
- package/packages/dd-trace/src/exporters/agent/writer.js +1 -5
- package/packages/dd-trace/src/exporters/common/docker.js +1 -1
- package/packages/dd-trace/src/exporters/common/form-data.js +6 -4
- package/packages/dd-trace/src/exporters/common/request.js +1 -1
- package/packages/dd-trace/src/exporters/common/util.js +1 -1
- package/packages/dd-trace/src/external-logger/src/index.js +5 -5
- package/packages/dd-trace/src/flare/file.js +1 -5
- package/packages/dd-trace/src/format.js +1 -1
- package/packages/dd-trace/src/git_properties.js +1 -1
- package/packages/dd-trace/src/id.js +12 -6
- package/packages/dd-trace/src/iitm.js +10 -22
- package/packages/dd-trace/src/lambda/handler.js +6 -6
- package/packages/dd-trace/src/lambda/runtime/patch.js +4 -4
- package/packages/dd-trace/src/lambda/runtime/ritm.js +1 -1
- package/packages/dd-trace/src/llmobs/plugins/bedrockruntime.js +6 -6
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chain.js +2 -6
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chat_model.js +3 -3
- package/packages/dd-trace/src/llmobs/plugins/langchain/index.js +6 -6
- package/packages/dd-trace/src/llmobs/plugins/openai.js +1 -1
- package/packages/dd-trace/src/llmobs/sdk.js +2 -2
- package/packages/dd-trace/src/llmobs/tagger.js +110 -96
- package/packages/dd-trace/src/llmobs/util.js +9 -9
- package/packages/dd-trace/src/llmobs/writers/base.js +1 -1
- package/packages/dd-trace/src/llmobs/writers/util.js +1 -1
- package/packages/dd-trace/src/log/index.js +4 -4
- package/packages/dd-trace/src/log/log.js +1 -1
- package/packages/dd-trace/src/log/writer.js +2 -2
- package/packages/dd-trace/src/msgpack/chunk.js +3 -3
- package/packages/dd-trace/src/msgpack/encoder.js +28 -28
- package/packages/dd-trace/src/noop/dogstatsd.js +6 -6
- package/packages/dd-trace/src/noop/span.js +3 -5
- package/packages/dd-trace/src/noop/tracer.js +1 -2
- package/packages/dd-trace/src/opentelemetry/span_processor.js +2 -2
- package/packages/dd-trace/src/opentelemetry/tracer.js +6 -5
- package/packages/dd-trace/src/opentracing/propagation/log.js +6 -8
- package/packages/dd-trace/src/opentracing/propagation/text_map.js +27 -23
- package/packages/dd-trace/src/opentracing/propagation/tracestate.js +8 -4
- package/packages/dd-trace/src/opentracing/span.js +9 -14
- package/packages/dd-trace/src/opentracing/tracer.js +9 -6
- package/packages/dd-trace/src/payload-tagging/index.js +1 -1
- package/packages/dd-trace/src/payload-tagging/tagging.js +6 -6
- package/packages/dd-trace/src/pkg.js +1 -1
- package/packages/dd-trace/src/plugins/ci_plugin.js +62 -10
- package/packages/dd-trace/src/plugins/consumer.js +2 -2
- package/packages/dd-trace/src/plugins/inbound.js +5 -1
- package/packages/dd-trace/src/plugins/index.js +0 -1
- package/packages/dd-trace/src/plugins/outbound.js +4 -5
- package/packages/dd-trace/src/plugins/plugin.js +1 -1
- package/packages/dd-trace/src/plugins/producer.js +2 -2
- package/packages/dd-trace/src/plugins/storage.js +2 -2
- package/packages/dd-trace/src/plugins/util/ci.js +23 -15
- package/packages/dd-trace/src/plugins/util/git.js +165 -11
- package/packages/dd-trace/src/plugins/util/inferred_proxy.js +1 -1
- package/packages/dd-trace/src/plugins/util/ip_extractor.js +1 -1
- package/packages/dd-trace/src/plugins/util/llm.js +27 -10
- package/packages/dd-trace/src/plugins/util/stacktrace.js +1 -1
- package/packages/dd-trace/src/plugins/util/test.js +311 -48
- package/packages/dd-trace/src/plugins/util/url.js +1 -1
- package/packages/dd-trace/src/plugins/util/urlfilter.js +13 -17
- package/packages/dd-trace/src/plugins/util/user-provided-git.js +12 -3
- package/packages/dd-trace/src/plugins/util/web.js +5 -4
- package/packages/dd-trace/src/priority_sampler.js +22 -22
- package/packages/dd-trace/src/profiling/config.js +44 -8
- package/packages/dd-trace/src/profiling/exporters/event_serializer.js +5 -5
- package/packages/dd-trace/src/profiling/exporters/file.js +2 -1
- package/packages/dd-trace/src/profiling/profiler.js +37 -2
- package/packages/dd-trace/src/profiling/profilers/events.js +14 -17
- package/packages/dd-trace/src/profiling/profilers/shared.js +6 -1
- package/packages/dd-trace/src/profiling/profilers/space.js +3 -3
- package/packages/dd-trace/src/profiling/profilers/wall.js +6 -7
- package/packages/dd-trace/src/profiling/ssi-heuristics.js +3 -5
- package/packages/dd-trace/src/profiling/tagger.js +3 -5
- package/packages/dd-trace/src/profiling/webspan-utils.js +1 -1
- package/packages/dd-trace/src/proxy.js +7 -9
- package/packages/dd-trace/src/random_sampler.js +40 -0
- package/packages/dd-trace/src/rate_limiter.js +4 -4
- package/packages/dd-trace/src/remote_config/index.js +3 -7
- package/packages/dd-trace/src/remote_config/manager.js +25 -13
- package/packages/dd-trace/src/require-package-json.js +1 -1
- package/packages/dd-trace/src/ritm.js +4 -4
- package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +2 -2
- package/packages/dd-trace/src/sampler.js +33 -4
- package/packages/dd-trace/src/sampling_rule.js +12 -3
- package/packages/dd-trace/src/scope.js +1 -1
- package/packages/dd-trace/src/service-naming/schemas/util.js +1 -1
- package/packages/dd-trace/src/service-naming/schemas/v0/web.js +2 -3
- package/packages/dd-trace/src/span_processor.js +3 -3
- package/packages/dd-trace/src/span_sampler.js +4 -1
- package/packages/dd-trace/src/standalone/tracesource.js +1 -1
- package/packages/dd-trace/src/startup-log.js +2 -2
- package/packages/dd-trace/src/telemetry/dependencies.js +4 -4
- package/packages/dd-trace/src/telemetry/logs/log-collector.js +9 -10
- package/packages/dd-trace/src/telemetry/metrics.js +10 -5
- package/packages/dd-trace/src/telemetry/send-data.js +1 -1
- package/packages/dd-trace/src/telemetry/telemetry.js +23 -24
- package/packages/dd-trace/src/util.js +1 -1
- package/version.js +1 -0
- package/packages/datadog-instrumentations/src/paperplane.js +0 -77
- package/packages/datadog-plugin-paperplane/src/index.js +0 -25
- package/packages/datadog-plugin-paperplane/src/logger.js +0 -11
- package/packages/datadog-plugin-paperplane/src/server.js +0 -24
|
@@ -28,7 +28,8 @@ function getLibraryConfiguration ({
|
|
|
28
28
|
runtimeVersion,
|
|
29
29
|
branch,
|
|
30
30
|
testLevel = 'suite',
|
|
31
|
-
custom
|
|
31
|
+
custom,
|
|
32
|
+
tag
|
|
32
33
|
}, done) {
|
|
33
34
|
const options = {
|
|
34
35
|
path: '/api/v2/libraries/tests/services/setting',
|
|
@@ -37,7 +38,7 @@ function getLibraryConfiguration ({
|
|
|
37
38
|
'Content-Type': 'application/json'
|
|
38
39
|
},
|
|
39
40
|
url,
|
|
40
|
-
timeout:
|
|
41
|
+
timeout: 20_000
|
|
41
42
|
}
|
|
42
43
|
|
|
43
44
|
if (isEvpProxy) {
|
|
@@ -69,7 +70,7 @@ function getLibraryConfiguration ({
|
|
|
69
70
|
env,
|
|
70
71
|
repository_url: repositoryUrl,
|
|
71
72
|
sha,
|
|
72
|
-
branch
|
|
73
|
+
branch: branch || tag
|
|
73
74
|
}
|
|
74
75
|
}
|
|
75
76
|
})
|
|
@@ -95,7 +96,8 @@ function getLibraryConfiguration ({
|
|
|
95
96
|
flaky_test_retries_enabled: isFlakyTestRetriesEnabled,
|
|
96
97
|
di_enabled: isDiEnabled,
|
|
97
98
|
known_tests_enabled: isKnownTestsEnabled,
|
|
98
|
-
test_management: testManagementConfig
|
|
99
|
+
test_management: testManagementConfig,
|
|
100
|
+
impacted_tests_enabled: isImpactedTestsEnabled
|
|
99
101
|
}
|
|
100
102
|
}
|
|
101
103
|
} = JSON.parse(res)
|
|
@@ -115,7 +117,8 @@ function getLibraryConfiguration ({
|
|
|
115
117
|
isKnownTestsEnabled,
|
|
116
118
|
isTestManagementEnabled: (testManagementConfig?.enabled ?? false),
|
|
117
119
|
testManagementAttemptToFixRetries:
|
|
118
|
-
testManagementConfig?.attempt_to_fix_retries
|
|
120
|
+
testManagementConfig?.attempt_to_fix_retries,
|
|
121
|
+
isImpactedTestsEnabled
|
|
119
122
|
}
|
|
120
123
|
|
|
121
124
|
log.debug(() => `Remote settings: ${JSON.stringify(settings)}`)
|
|
@@ -81,6 +81,8 @@ const TELEMETRY_GIT_REQUESTS_SETTINGS = 'git_requests.settings'
|
|
|
81
81
|
const TELEMETRY_GIT_REQUESTS_SETTINGS_MS = 'git_requests.settings_ms'
|
|
82
82
|
const TELEMETRY_GIT_REQUESTS_SETTINGS_ERRORS = 'git_requests.settings_errors'
|
|
83
83
|
const TELEMETRY_GIT_REQUESTS_SETTINGS_RESPONSE = 'git_requests.settings_response'
|
|
84
|
+
const TELEMETRY_GIT_SHA_MATCH = 'git.commit_sha_match'
|
|
85
|
+
const TELEMETRY_GIT_COMMIT_SHA_DISCREPANCY = 'git.commit_sha_discrepancy'
|
|
84
86
|
const TELEMETRY_ITR_SKIPPABLE_TESTS = 'itr_skippable_tests.request'
|
|
85
87
|
const TELEMETRY_ITR_SKIPPABLE_TESTS_MS = 'itr_skippable_tests.request_ms'
|
|
86
88
|
const TELEMETRY_ITR_SKIPPABLE_TESTS_ERRORS = 'itr_skippable_tests.request_errors'
|
|
@@ -144,6 +146,8 @@ module.exports = {
|
|
|
144
146
|
TELEMETRY_GIT_REQUESTS_SETTINGS_MS,
|
|
145
147
|
TELEMETRY_GIT_REQUESTS_SETTINGS_ERRORS,
|
|
146
148
|
TELEMETRY_GIT_REQUESTS_SETTINGS_RESPONSE,
|
|
149
|
+
TELEMETRY_GIT_SHA_MATCH,
|
|
150
|
+
TELEMETRY_GIT_COMMIT_SHA_DISCREPANCY,
|
|
147
151
|
TELEMETRY_ITR_SKIPPABLE_TESTS,
|
|
148
152
|
TELEMETRY_ITR_SKIPPABLE_TESTS_MS,
|
|
149
153
|
TELEMETRY_ITR_SKIPPABLE_TESTS_ERRORS,
|
|
@@ -105,7 +105,7 @@ function validateEnvVarType (envVar) {
|
|
|
105
105
|
case 'OTEL_TRACES_SAMPLER':
|
|
106
106
|
return getFromOtelSamplerMap(value, process.env.OTEL_TRACES_SAMPLER_ARG) !== undefined
|
|
107
107
|
case 'OTEL_TRACES_SAMPLER_ARG':
|
|
108
|
-
return !isNaN(parseFloat(value))
|
|
108
|
+
return !Number.isNaN(Number.parseFloat(value))
|
|
109
109
|
case 'OTEL_SDK_DISABLED':
|
|
110
110
|
return value.toLowerCase() === 'true' || value.toLowerCase() === 'false'
|
|
111
111
|
case 'OTEL_TRACES_EXPORTER':
|
|
@@ -131,15 +131,12 @@ function checkIfBothOtelAndDdEnvVarSet () {
|
|
|
131
131
|
}
|
|
132
132
|
}
|
|
133
133
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
const defaultWafObfuscatorKeyRegex = '(?i)pass|pw(?:or)?d|secret|(?:api|private|public|access)[_-]?key|token|consumer[_-]?(?:id|key|secret)|sign(?:ed|ature)|bearer|authorization|jsessionid|phpsessid|asp\\.net[_-]sessionid|sid|jwt'
|
|
141
|
-
// eslint-disable-next-line @stylistic/js/max-len
|
|
142
|
-
const defaultWafObfuscatorValueRegex = '(?i)(?:p(?:ass)?w(?:or)?d|pass(?:[_-]?phrase)?|secret(?:[_-]?key)?|(?:(?:api|private|public|access)[_-]?)key(?:[_-]?id)?|(?:(?:auth|access|id|refresh)[_-]?)?token|consumer[_-]?(?:id|key|secret)|sign(?:ed|ature)?|auth(?:entication|orization)?|jsessionid|phpsessid|asp\\.net(?:[_-]|-)sessionid|sid|jwt)(?:\\s*=([^;&]+)|"\\s*:\\s*("[^"]+"|\\d+))|bearer\\s+([a-z0-9\\._\\-]+)|token\\s*:\\s*([a-z0-9]{13})|gh[opsu]_([0-9a-zA-Z]{36})|ey[I-L][\\w=-]+\\.(ey[I-L][\\w=-]+(?:\\.[\\w.+\\/=-]+)?)|[\\-]{5}BEGIN[a-z\\s]+PRIVATE\\sKEY[\\-]{5}([^\\-]+)[\\-]{5}END[a-z\\s]+PRIVATE\\sKEY|ssh-rsa\\s*([a-z0-9\\/\\.+]{100,})'
|
|
134
|
+
// eslint-disable-next-line @stylistic/max-len
|
|
135
|
+
const qsRegex = String.raw`(?:p(?:ass)?w(?:or)?d|pass(?:_?phrase)?|secret|(?:api_?|private_?|public_?|access_?|secret_?)key(?:_?id)?|token|consumer_?(?:id|key|secret)|sign(?:ed|ature)?|auth(?:entication|orization)?)(?:(?:\s|%20)*(?:=|%3D)[^&]+|(?:"|%22)(?:\s|%20)*(?::|%3A)(?:\s|%20)*(?:"|%22)(?:%2[^2]|%[^2]|[^"%])+(?:"|%22))|bearer(?:\s|%20)+[a-z0-9\._\-]+|token(?::|%3A)[a-z0-9]{13}|gh[opsu]_[0-9a-zA-Z]{36}|ey[I-L](?:[\w=-]|%3D)+\.ey[I-L](?:[\w=-]|%3D)+(?:\.(?:[\w.+\/=-]|%3D|%2F|%2B)+)?|[\-]{5}BEGIN(?:[a-z\s]|%20)+PRIVATE(?:\s|%20)KEY[\-]{5}[^\-]+[\-]{5}END(?:[a-z\s]|%20)+PRIVATE(?:\s|%20)KEY|ssh-rsa(?:\s|%20)*(?:[a-z0-9\/\.+]|%2F|%5C|%2B){100,}`
|
|
136
|
+
// eslint-disable-next-line @stylistic/max-len
|
|
137
|
+
const defaultWafObfuscatorKeyRegex = String.raw`(?i)pass|pw(?:or)?d|secret|(?:api|private|public|access)[_-]?key|token|consumer[_-]?(?:id|key|secret)|sign(?:ed|ature)|bearer|authorization|jsessionid|phpsessid|asp\.net[_-]sessionid|sid|jwt`
|
|
138
|
+
// eslint-disable-next-line @stylistic/max-len
|
|
139
|
+
const defaultWafObfuscatorValueRegex = String.raw`(?i)(?:p(?:ass)?w(?:or)?d|pass(?:[_-]?phrase)?|secret(?:[_-]?key)?|(?:(?:api|private|public|access)[_-]?)key(?:[_-]?id)?|(?:(?:auth|access|id|refresh)[_-]?)?token|consumer[_-]?(?:id|key|secret)|sign(?:ed|ature)?|auth(?:entication|orization)?|jsessionid|phpsessid|asp\.net(?:[_-]|-)sessionid|sid|jwt)(?:\s*=([^;&]+)|"\s*:\s*("[^"]+"|\d+))|bearer\s+([a-z0-9\._\-]+)|token\s*:\s*([a-z0-9]{13})|gh[opsu]_([0-9a-zA-Z]{36})|ey[I-L][\w=-]+\.(ey[I-L][\w=-]+(?:\.[\w.+\/=-]+)?)|[\-]{5}BEGIN[a-z\s]+PRIVATE\sKEY[\-]{5}([^\-]+)[\-]{5}END[a-z\s]+PRIVATE\sKEY|ssh-rsa\s*([a-z0-9\/\.+]{100,})`
|
|
143
140
|
const runtimeId = uuid()
|
|
144
141
|
|
|
145
142
|
function maybeFile (filepath) {
|
|
@@ -148,26 +145,23 @@ function maybeFile (filepath) {
|
|
|
148
145
|
return fs.readFileSync(filepath, 'utf8')
|
|
149
146
|
} catch (e) {
|
|
150
147
|
log.error('Error reading file %s', filepath, e)
|
|
151
|
-
return undefined
|
|
152
148
|
}
|
|
153
149
|
}
|
|
154
150
|
|
|
155
151
|
function safeJsonParse (input) {
|
|
156
152
|
try {
|
|
157
153
|
return JSON.parse(input)
|
|
158
|
-
} catch
|
|
159
|
-
return undefined
|
|
160
|
-
}
|
|
154
|
+
} catch {}
|
|
161
155
|
}
|
|
162
156
|
|
|
163
|
-
const namingVersions = ['v0', 'v1']
|
|
157
|
+
const namingVersions = new Set(['v0', 'v1'])
|
|
164
158
|
const defaultNamingVersion = 'v0'
|
|
165
159
|
|
|
166
160
|
function validateNamingVersion (versionString) {
|
|
167
161
|
if (!versionString) {
|
|
168
162
|
return defaultNamingVersion
|
|
169
163
|
}
|
|
170
|
-
if (!namingVersions.
|
|
164
|
+
if (!namingVersions.has(versionString)) {
|
|
171
165
|
log.warn(
|
|
172
166
|
`Unexpected input for config.spanAttributeSchema, picked default ${defaultNamingVersion}`
|
|
173
167
|
)
|
|
@@ -245,8 +239,8 @@ class Config {
|
|
|
245
239
|
|
|
246
240
|
options = {
|
|
247
241
|
...options,
|
|
248
|
-
appsec: options.appsec
|
|
249
|
-
iast: options.iast
|
|
242
|
+
appsec: options.appsec == null ? options.experimental?.appsec : options.appsec,
|
|
243
|
+
iast: options.iast == null ? options.experimental?.iast : options.iast
|
|
250
244
|
}
|
|
251
245
|
|
|
252
246
|
// Configure the logger first so it can be used to warn about other configs
|
|
@@ -429,8 +423,7 @@ class Config {
|
|
|
429
423
|
)
|
|
430
424
|
const defaultPropagationStyle = ['datadog', 'tracecontext']
|
|
431
425
|
if (isTrue(DD_TRACE_B3_ENABLED)) {
|
|
432
|
-
defaultPropagationStyle.push('b3')
|
|
433
|
-
defaultPropagationStyle.push('b3 single header')
|
|
426
|
+
defaultPropagationStyle.push('b3', 'b3 single header')
|
|
434
427
|
}
|
|
435
428
|
return defaultPropagationStyle
|
|
436
429
|
}
|
|
@@ -460,16 +453,20 @@ class Config {
|
|
|
460
453
|
this._setBoolean(defaults, 'apmTracingEnabled', true)
|
|
461
454
|
this._setValue(defaults, 'appsec.apiSecurity.enabled', true)
|
|
462
455
|
this._setValue(defaults, 'appsec.apiSecurity.sampleDelay', 30)
|
|
463
|
-
this._setValue(defaults, 'appsec.blockedTemplateGraphql'
|
|
464
|
-
this._setValue(defaults, 'appsec.blockedTemplateHtml'
|
|
465
|
-
this._setValue(defaults, 'appsec.blockedTemplateJson'
|
|
466
|
-
this._setValue(defaults, 'appsec.enabled'
|
|
456
|
+
this._setValue(defaults, 'appsec.blockedTemplateGraphql')
|
|
457
|
+
this._setValue(defaults, 'appsec.blockedTemplateHtml')
|
|
458
|
+
this._setValue(defaults, 'appsec.blockedTemplateJson')
|
|
459
|
+
this._setValue(defaults, 'appsec.enabled')
|
|
467
460
|
this._setValue(defaults, 'appsec.eventTracking.mode', 'identification')
|
|
461
|
+
this._setValue(defaults, 'appsec.extendedHeadersCollection.enabled', false)
|
|
462
|
+
this._setValue(defaults, 'appsec.extendedHeadersCollection.redaction', true)
|
|
463
|
+
this._setValue(defaults, 'appsec.extendedHeadersCollection.maxHeaders', 50)
|
|
468
464
|
this._setValue(defaults, 'appsec.obfuscatorKeyRegex', defaultWafObfuscatorKeyRegex)
|
|
469
465
|
this._setValue(defaults, 'appsec.obfuscatorValueRegex', defaultWafObfuscatorValueRegex)
|
|
470
466
|
this._setValue(defaults, 'appsec.rasp.enabled', true)
|
|
467
|
+
this._setValue(defaults, 'appsec.rasp.bodyCollection', false)
|
|
471
468
|
this._setValue(defaults, 'appsec.rateLimit', 100)
|
|
472
|
-
this._setValue(defaults, 'appsec.rules'
|
|
469
|
+
this._setValue(defaults, 'appsec.rules')
|
|
473
470
|
this._setValue(defaults, 'appsec.sca.enabled', null)
|
|
474
471
|
this._setValue(defaults, 'appsec.stackTrace.enabled', true)
|
|
475
472
|
this._setValue(defaults, 'appsec.stackTrace.maxDepth', 32)
|
|
@@ -477,6 +474,7 @@ class Config {
|
|
|
477
474
|
this._setValue(defaults, 'appsec.wafTimeout', 5e3) // µs
|
|
478
475
|
this._setValue(defaults, 'baggageMaxBytes', 8192)
|
|
479
476
|
this._setValue(defaults, 'baggageMaxItems', 64)
|
|
477
|
+
this._setValue(defaults, 'baggageTagKeys', 'user.id,session.id,account.id')
|
|
480
478
|
this._setValue(defaults, 'ciVisibilityTestSessionName', '')
|
|
481
479
|
this._setValue(defaults, 'clientIpEnabled', false)
|
|
482
480
|
this._setValue(defaults, 'clientIpHeader', null)
|
|
@@ -490,9 +488,9 @@ class Config {
|
|
|
490
488
|
this._setValue(defaults, 'dynamicInstrumentation.enabled', false)
|
|
491
489
|
this._setValue(defaults, 'dynamicInstrumentation.redactedIdentifiers', [])
|
|
492
490
|
this._setValue(defaults, 'dynamicInstrumentation.redactionExcludedIdentifiers', [])
|
|
493
|
-
this._setValue(defaults, 'env'
|
|
491
|
+
this._setValue(defaults, 'env')
|
|
494
492
|
this._setValue(defaults, 'experimental.enableGetRumData', false)
|
|
495
|
-
this._setValue(defaults, 'experimental.exporter'
|
|
493
|
+
this._setValue(defaults, 'experimental.exporter')
|
|
496
494
|
this._setValue(defaults, 'experimental.runtimeId', false)
|
|
497
495
|
this._setValue(defaults, 'flushInterval', 2000)
|
|
498
496
|
this._setValue(defaults, 'flushMinSpans', 1000)
|
|
@@ -525,10 +523,10 @@ class Config {
|
|
|
525
523
|
this._setValue(defaults, 'isIntelligentTestRunnerEnabled', false)
|
|
526
524
|
this._setValue(defaults, 'isManualApiEnabled', false)
|
|
527
525
|
this._setValue(defaults, 'langchain.spanCharLimit', 128)
|
|
528
|
-
this._setValue(defaults, 'langchain.spanPromptCompletionSampleRate', 1
|
|
529
|
-
this._setValue(defaults, 'llmobs.agentlessEnabled'
|
|
526
|
+
this._setValue(defaults, 'langchain.spanPromptCompletionSampleRate', 1)
|
|
527
|
+
this._setValue(defaults, 'llmobs.agentlessEnabled')
|
|
530
528
|
this._setValue(defaults, 'llmobs.enabled', false)
|
|
531
|
-
this._setValue(defaults, 'llmobs.mlApp'
|
|
529
|
+
this._setValue(defaults, 'llmobs.mlApp')
|
|
532
530
|
this._setValue(defaults, 'ciVisibilityTestSessionName', '')
|
|
533
531
|
this._setValue(defaults, 'ciVisAgentlessLogSubmissionEnabled', false)
|
|
534
532
|
this._setValue(defaults, 'legacyBaggageEnabled', true)
|
|
@@ -536,8 +534,9 @@ class Config {
|
|
|
536
534
|
this._setValue(defaults, 'isServiceUserProvided', false)
|
|
537
535
|
this._setValue(defaults, 'testManagementAttemptToFixRetries', 20)
|
|
538
536
|
this._setValue(defaults, 'isTestManagementEnabled', false)
|
|
537
|
+
this._setValue(defaults, 'isImpactedTestsEnabled', false)
|
|
539
538
|
this._setValue(defaults, 'logInjection', false)
|
|
540
|
-
this._setValue(defaults, 'lookup'
|
|
539
|
+
this._setValue(defaults, 'lookup')
|
|
541
540
|
this._setValue(defaults, 'inferredProxyServicesEnabled', false)
|
|
542
541
|
this._setValue(defaults, 'memcachedCommandEnabled', false)
|
|
543
542
|
this._setValue(defaults, 'middlewareTracingEnabled', true)
|
|
@@ -546,21 +545,21 @@ class Config {
|
|
|
546
545
|
this._setValue(defaults, 'peerServiceMapping', {})
|
|
547
546
|
this._setValue(defaults, 'plugins', true)
|
|
548
547
|
this._setValue(defaults, 'port', '8126')
|
|
549
|
-
this._setValue(defaults, 'profiling.enabled'
|
|
548
|
+
this._setValue(defaults, 'profiling.enabled')
|
|
550
549
|
this._setValue(defaults, 'profiling.exporters', 'agent')
|
|
551
550
|
this._setValue(defaults, 'profiling.sourceMap', true)
|
|
552
|
-
this._setValue(defaults, 'profiling.longLivedThreshold'
|
|
551
|
+
this._setValue(defaults, 'profiling.longLivedThreshold')
|
|
553
552
|
this._setValue(defaults, 'protocolVersion', '0.4')
|
|
554
553
|
this._setValue(defaults, 'queryStringObfuscation', qsRegex)
|
|
555
554
|
this._setValue(defaults, 'remoteConfig.enabled', true)
|
|
556
555
|
this._setValue(defaults, 'remoteConfig.pollInterval', 5) // seconds
|
|
557
556
|
this._setValue(defaults, 'reportHostname', false)
|
|
558
557
|
this._setValue(defaults, 'runtimeMetrics', false)
|
|
559
|
-
this._setValue(defaults, 'sampleRate'
|
|
558
|
+
this._setValue(defaults, 'sampleRate')
|
|
560
559
|
this._setValue(defaults, 'sampler.rateLimit', 100)
|
|
561
560
|
this._setValue(defaults, 'sampler.rules', [])
|
|
562
561
|
this._setValue(defaults, 'sampler.spanSamplingRules', [])
|
|
563
|
-
this._setValue(defaults, 'scope'
|
|
562
|
+
this._setValue(defaults, 'scope')
|
|
564
563
|
this._setValue(defaults, 'service', service)
|
|
565
564
|
this._setValue(defaults, 'serviceMapping', {})
|
|
566
565
|
this._setValue(defaults, 'site', 'datadoghq.com')
|
|
@@ -575,7 +574,7 @@ class Config {
|
|
|
575
574
|
this._setValue(defaults, 'telemetry.debug', false)
|
|
576
575
|
this._setValue(defaults, 'telemetry.dependencyCollection', true)
|
|
577
576
|
this._setValue(defaults, 'telemetry.enabled', true)
|
|
578
|
-
this._setValue(defaults, 'telemetry.heartbeatInterval',
|
|
577
|
+
this._setValue(defaults, 'telemetry.heartbeatInterval', 60_000)
|
|
579
578
|
this._setValue(defaults, 'telemetry.logCollection', true)
|
|
580
579
|
this._setValue(defaults, 'telemetry.metrics', true)
|
|
581
580
|
this._setValue(defaults, 'traceEnabled', true)
|
|
@@ -587,13 +586,13 @@ class Config {
|
|
|
587
586
|
this._setValue(defaults, 'tracePropagationStyle.extract', ['datadog', 'tracecontext', 'baggage'])
|
|
588
587
|
this._setValue(defaults, 'tracePropagationStyle.otelPropagators', false)
|
|
589
588
|
this._setValue(defaults, 'tracing', true)
|
|
590
|
-
this._setValue(defaults, 'url'
|
|
589
|
+
this._setValue(defaults, 'url')
|
|
591
590
|
this._setValue(defaults, 'version', pkg.version)
|
|
592
|
-
this._setValue(defaults, 'instrumentation_config_id'
|
|
591
|
+
this._setValue(defaults, 'instrumentation_config_id')
|
|
593
592
|
this._setValue(defaults, 'vertexai.spanCharLimit', 128)
|
|
594
|
-
this._setValue(defaults, 'vertexai.spanPromptCompletionSampleRate', 1
|
|
593
|
+
this._setValue(defaults, 'vertexai.spanPromptCompletionSampleRate', 1)
|
|
595
594
|
this._setValue(defaults, 'trace.aws.addSpanPointers', true)
|
|
596
|
-
this._setValue(defaults, 'trace.dynamoDb.tablePrimaryKeys'
|
|
595
|
+
this._setValue(defaults, 'trace.dynamoDb.tablePrimaryKeys')
|
|
597
596
|
this._setValue(defaults, 'trace.nativeSpanEvents', false)
|
|
598
597
|
}
|
|
599
598
|
|
|
@@ -645,10 +644,13 @@ class Config {
|
|
|
645
644
|
DD_APM_TRACING_ENABLED,
|
|
646
645
|
DD_APPSEC_AUTO_USER_INSTRUMENTATION_MODE,
|
|
647
646
|
DD_APPSEC_AUTOMATED_USER_EVENTS_TRACKING,
|
|
647
|
+
DD_APPSEC_COLLECT_ALL_HEADERS,
|
|
648
648
|
DD_APPSEC_ENABLED,
|
|
649
649
|
DD_APPSEC_GRAPHQL_BLOCKED_TEMPLATE_JSON,
|
|
650
|
+
DD_APPSEC_HEADER_COLLECTION_REDACTION_ENABLED,
|
|
650
651
|
DD_APPSEC_HTTP_BLOCKED_TEMPLATE_HTML,
|
|
651
652
|
DD_APPSEC_HTTP_BLOCKED_TEMPLATE_JSON,
|
|
653
|
+
DD_APPSEC_MAX_COLLECTED_HEADERS,
|
|
652
654
|
DD_APPSEC_MAX_STACK_TRACES,
|
|
653
655
|
DD_APPSEC_MAX_STACK_TRACE_DEPTH,
|
|
654
656
|
DD_APPSEC_OBFUSCATION_PARAMETER_KEY_REGEXP,
|
|
@@ -657,6 +659,7 @@ class Config {
|
|
|
657
659
|
DD_APPSEC_SCA_ENABLED,
|
|
658
660
|
DD_APPSEC_STACK_TRACE_ENABLED,
|
|
659
661
|
DD_APPSEC_RASP_ENABLED,
|
|
662
|
+
DD_APPSEC_RASP_COLLECT_REQUEST_BODY,
|
|
660
663
|
DD_APPSEC_TRACE_RATE_LIMIT,
|
|
661
664
|
DD_APPSEC_WAF_TIMEOUT,
|
|
662
665
|
DD_CRASHTRACKING_ENABLED,
|
|
@@ -727,6 +730,7 @@ class Config {
|
|
|
727
730
|
DD_TRACE_AWS_ADD_SPAN_POINTERS,
|
|
728
731
|
DD_TRACE_BAGGAGE_MAX_BYTES,
|
|
729
732
|
DD_TRACE_BAGGAGE_MAX_ITEMS,
|
|
733
|
+
DD_TRACE_BAGGAGE_TAG_KEYS,
|
|
730
734
|
DD_TRACE_CLIENT_IP_ENABLED,
|
|
731
735
|
DD_TRACE_CLIENT_IP_HEADER,
|
|
732
736
|
DD_TRACE_DYNAMODB_TABLE_PRIMARY_KEYS,
|
|
@@ -803,9 +807,18 @@ class Config {
|
|
|
803
807
|
DD_APPSEC_AUTO_USER_INSTRUMENTATION_MODE,
|
|
804
808
|
DD_APPSEC_AUTOMATED_USER_EVENTS_TRACKING // TODO: remove in next major
|
|
805
809
|
))
|
|
810
|
+
this._setBoolean(env, 'appsec.extendedHeadersCollection.enabled', DD_APPSEC_COLLECT_ALL_HEADERS)
|
|
811
|
+
this._setBoolean(
|
|
812
|
+
env,
|
|
813
|
+
'appsec.extendedHeadersCollection.redaction',
|
|
814
|
+
DD_APPSEC_HEADER_COLLECTION_REDACTION_ENABLED
|
|
815
|
+
)
|
|
816
|
+
this._setValue(env, 'appsec.extendedHeadersCollection.maxHeaders', maybeInt(DD_APPSEC_MAX_COLLECTED_HEADERS))
|
|
817
|
+
this._envUnprocessed['appsec.extendedHeadersCollection.maxHeaders'] = DD_APPSEC_MAX_COLLECTED_HEADERS
|
|
806
818
|
this._setString(env, 'appsec.obfuscatorKeyRegex', DD_APPSEC_OBFUSCATION_PARAMETER_KEY_REGEXP)
|
|
807
819
|
this._setString(env, 'appsec.obfuscatorValueRegex', DD_APPSEC_OBFUSCATION_PARAMETER_VALUE_REGEXP)
|
|
808
820
|
this._setBoolean(env, 'appsec.rasp.enabled', DD_APPSEC_RASP_ENABLED)
|
|
821
|
+
this._setBoolean(env, 'appsec.rasp.bodyCollection', DD_APPSEC_RASP_COLLECT_REQUEST_BODY)
|
|
809
822
|
this._setValue(env, 'appsec.rateLimit', maybeInt(DD_APPSEC_TRACE_RATE_LIMIT))
|
|
810
823
|
this._envUnprocessed['appsec.rateLimit'] = DD_APPSEC_TRACE_RATE_LIMIT
|
|
811
824
|
this._setString(env, 'appsec.rules', DD_APPSEC_RULES)
|
|
@@ -820,6 +833,7 @@ class Config {
|
|
|
820
833
|
this._envUnprocessed['appsec.wafTimeout'] = DD_APPSEC_WAF_TIMEOUT
|
|
821
834
|
this._setValue(env, 'baggageMaxBytes', DD_TRACE_BAGGAGE_MAX_BYTES)
|
|
822
835
|
this._setValue(env, 'baggageMaxItems', DD_TRACE_BAGGAGE_MAX_ITEMS)
|
|
836
|
+
this._setValue(env, 'baggageTagKeys', DD_TRACE_BAGGAGE_TAG_KEYS)
|
|
823
837
|
this._setBoolean(env, 'clientIpEnabled', DD_TRACE_CLIENT_IP_ENABLED)
|
|
824
838
|
this._setString(env, 'clientIpHeader', DD_TRACE_CLIENT_IP_HEADER?.toLowerCase())
|
|
825
839
|
this._setBoolean(env, 'crashtracking.enabled', coalesce(
|
|
@@ -893,7 +907,7 @@ class Config {
|
|
|
893
907
|
this._setValue(env, 'openai.spanCharLimit', maybeInt(DD_OPENAI_SPAN_CHAR_LIMIT))
|
|
894
908
|
this._envUnprocessed.openaiSpanCharLimit = DD_OPENAI_SPAN_CHAR_LIMIT
|
|
895
909
|
if (DD_TRACE_PEER_SERVICE_MAPPING) {
|
|
896
|
-
this._setValue(env, 'peerServiceMapping', fromEntries(
|
|
910
|
+
this._setValue(env, 'peerServiceMapping', Object.fromEntries(
|
|
897
911
|
DD_TRACE_PEER_SERVICE_MAPPING.split(',').map(x => x.trim().split(':'))
|
|
898
912
|
))
|
|
899
913
|
this._envUnprocessed.peerServiceMapping = DD_TRACE_PEER_SERVICE_MAPPING
|
|
@@ -941,7 +955,7 @@ class Config {
|
|
|
941
955
|
this._setString(env, 'scope', DD_TRACE_SCOPE)
|
|
942
956
|
this._setString(env, 'service', DD_SERVICE || DD_SERVICE_NAME || tags.service || OTEL_SERVICE_NAME)
|
|
943
957
|
if (DD_SERVICE_MAPPING) {
|
|
944
|
-
this._setValue(env, 'serviceMapping', fromEntries(
|
|
958
|
+
this._setValue(env, 'serviceMapping', Object.fromEntries(
|
|
945
959
|
process.env.DD_SERVICE_MAPPING.split(',').map(x => x.trim().split(':'))
|
|
946
960
|
))
|
|
947
961
|
}
|
|
@@ -1018,9 +1032,24 @@ class Config {
|
|
|
1018
1032
|
this._optsUnprocessed['appsec.blockedTemplateJson'] = options.appsec?.blockedTemplateJson
|
|
1019
1033
|
this._setBoolean(opts, 'appsec.enabled', options.appsec?.enabled)
|
|
1020
1034
|
this._setString(opts, 'appsec.eventTracking.mode', options.appsec?.eventTracking?.mode)
|
|
1035
|
+
this._setBoolean(
|
|
1036
|
+
opts,
|
|
1037
|
+
'appsec.extendedHeadersCollection.enabled',
|
|
1038
|
+
options.appsec?.extendedHeadersCollection?.enabled
|
|
1039
|
+
)
|
|
1040
|
+
this._setBoolean(
|
|
1041
|
+
opts,
|
|
1042
|
+
'appsec.extendedHeadersCollection.redaction',
|
|
1043
|
+
options.appsec?.extendedHeadersCollection?.redaction
|
|
1044
|
+
)
|
|
1045
|
+
this._setValue(opts,
|
|
1046
|
+
'appsec.extendedHeadersCollection.maxHeaders',
|
|
1047
|
+
options.appsec?.extendedHeadersCollection?.maxHeaders
|
|
1048
|
+
)
|
|
1021
1049
|
this._setString(opts, 'appsec.obfuscatorKeyRegex', options.appsec?.obfuscatorKeyRegex)
|
|
1022
1050
|
this._setString(opts, 'appsec.obfuscatorValueRegex', options.appsec?.obfuscatorValueRegex)
|
|
1023
1051
|
this._setBoolean(opts, 'appsec.rasp.enabled', options.appsec?.rasp?.enabled)
|
|
1052
|
+
this._setBoolean(opts, 'appsec.rasp.bodyCollection', options.appsec?.rasp?.bodyCollection)
|
|
1024
1053
|
this._setValue(opts, 'appsec.rateLimit', maybeInt(options.appsec?.rateLimit))
|
|
1025
1054
|
this._optsUnprocessed['appsec.rateLimit'] = options.appsec?.rateLimit
|
|
1026
1055
|
this._setString(opts, 'appsec.rules', options.appsec?.rules)
|
|
@@ -1035,6 +1064,7 @@ class Config {
|
|
|
1035
1064
|
this._setString(opts, 'clientIpHeader', options.clientIpHeader?.toLowerCase())
|
|
1036
1065
|
this._setValue(opts, 'baggageMaxBytes', options.baggageMaxBytes)
|
|
1037
1066
|
this._setValue(opts, 'baggageMaxItems', options.baggageMaxItems)
|
|
1067
|
+
this._setValue(opts, 'baggageTagKeys', options.baggageTagKeys)
|
|
1038
1068
|
this._setBoolean(opts, 'codeOriginForSpans.enabled', options.codeOriginForSpans?.enabled)
|
|
1039
1069
|
this._setBoolean(
|
|
1040
1070
|
opts,
|
|
@@ -1245,7 +1275,8 @@ class Config {
|
|
|
1245
1275
|
DD_AGENTLESS_LOG_SUBMISSION_ENABLED,
|
|
1246
1276
|
DD_TEST_FAILED_TEST_REPLAY_ENABLED,
|
|
1247
1277
|
DD_TEST_MANAGEMENT_ENABLED,
|
|
1248
|
-
DD_TEST_MANAGEMENT_ATTEMPT_TO_FIX_RETRIES
|
|
1278
|
+
DD_TEST_MANAGEMENT_ATTEMPT_TO_FIX_RETRIES,
|
|
1279
|
+
DD_CIVISIBILITY_IMPACTED_TESTS_DETECTION_ENABLED
|
|
1249
1280
|
} = process.env
|
|
1250
1281
|
|
|
1251
1282
|
if (DD_CIVISIBILITY_AGENTLESS_URL) {
|
|
@@ -1270,6 +1301,7 @@ class Config {
|
|
|
1270
1301
|
'testManagementAttemptToFixRetries',
|
|
1271
1302
|
coalesce(maybeInt(DD_TEST_MANAGEMENT_ATTEMPT_TO_FIX_RETRIES), 20)
|
|
1272
1303
|
)
|
|
1304
|
+
this._setBoolean(calc, 'isImpactedTestsEnabled', !isFalse(DD_CIVISIBILITY_IMPACTED_TESTS_DETECTION_ENABLED))
|
|
1273
1305
|
}
|
|
1274
1306
|
this._setString(calc, 'dogstatsd.hostname', this._getHostname())
|
|
1275
1307
|
this._setBoolean(calc, 'isGitUploadEnabled',
|
|
@@ -1341,9 +1373,9 @@ class Config {
|
|
|
1341
1373
|
return this._setValue(obj, name, value)
|
|
1342
1374
|
}
|
|
1343
1375
|
|
|
1344
|
-
value = parseFloat(value)
|
|
1376
|
+
value = Number.parseFloat(value)
|
|
1345
1377
|
|
|
1346
|
-
if (!isNaN(value)) {
|
|
1378
|
+
if (!Number.isNaN(value)) {
|
|
1347
1379
|
// TODO: Ignore out of range values instead of normalizing them.
|
|
1348
1380
|
this._setValue(obj, name, Math.min(Math.max(value, 0), 1))
|
|
1349
1381
|
}
|
|
@@ -1358,7 +1390,7 @@ class Config {
|
|
|
1358
1390
|
value = value.split(',').map(item => {
|
|
1359
1391
|
// Trim each item and remove whitespace around the colon
|
|
1360
1392
|
const [key, val] = item.split(':').map(part => part.trim())
|
|
1361
|
-
return val
|
|
1393
|
+
return val === undefined ? key : `${key}:${val}`
|
|
1362
1394
|
})
|
|
1363
1395
|
}
|
|
1364
1396
|
|
|
@@ -1426,7 +1458,6 @@ class Config {
|
|
|
1426
1458
|
// TODO: Deeply merge configurations.
|
|
1427
1459
|
// TODO: Move change tracking to telemetry.
|
|
1428
1460
|
// for telemetry reporting, `name`s in `containers` need to be keys from:
|
|
1429
|
-
// eslint-disable-next-line @stylistic/js/max-len
|
|
1430
1461
|
// https://github.com/DataDog/dd-go/blob/prod/trace/apps/tracer-telemetry-intake/telemetry-payload/static/config_norm_rules.json
|
|
1431
1462
|
_merge () {
|
|
1432
1463
|
const containers = [
|
|
@@ -1516,13 +1547,13 @@ function parseSpaceSeparatedTags (tagString) {
|
|
|
1516
1547
|
}
|
|
1517
1548
|
|
|
1518
1549
|
function maybeInt (number) {
|
|
1519
|
-
const parsed = parseInt(number)
|
|
1520
|
-
return isNaN(parsed) ? undefined : parsed
|
|
1550
|
+
const parsed = Number.parseInt(number)
|
|
1551
|
+
return Number.isNaN(parsed) ? undefined : parsed
|
|
1521
1552
|
}
|
|
1522
1553
|
|
|
1523
1554
|
function maybeFloat (number) {
|
|
1524
|
-
const parsed = parseFloat(number)
|
|
1525
|
-
return isNaN(parsed) ? undefined : parsed
|
|
1555
|
+
const parsed = Number.parseFloat(number)
|
|
1556
|
+
return Number.isNaN(parsed) ? undefined : parsed
|
|
1526
1557
|
}
|
|
1527
1558
|
|
|
1528
1559
|
function getAgentUrl (url, options) {
|
|
@@ -27,7 +27,7 @@ class StableConfig {
|
|
|
27
27
|
try {
|
|
28
28
|
libdatadog = require('@datadog/libdatadog')
|
|
29
29
|
this.wasm_loaded = true
|
|
30
|
-
} catch
|
|
30
|
+
} catch {
|
|
31
31
|
this.warnings.push('Can\'t load libdatadog library')
|
|
32
32
|
return
|
|
33
33
|
}
|
|
@@ -78,8 +78,8 @@ class StableConfig {
|
|
|
78
78
|
fleetConfigPath = '/opt/datadog-agent/etc/managed/datadog-agent/stable/application_monitoring.yaml'
|
|
79
79
|
break
|
|
80
80
|
case 'win32':
|
|
81
|
-
localConfigPath =
|
|
82
|
-
fleetConfigPath =
|
|
81
|
+
localConfigPath = String.raw`C:\ProgramData\Datadog\application_monitoring.yaml`
|
|
82
|
+
fleetConfigPath = String.raw`C:\ProgramData\Datadog\managed\datadog-agent\stable\application_monitoring.yaml`
|
|
83
83
|
break
|
|
84
84
|
default:
|
|
85
85
|
break
|
|
@@ -6,10 +6,10 @@ function encodeVarint (v) {
|
|
|
6
6
|
// we leave the least significant bit for the sign.
|
|
7
7
|
const double = Math.abs(v) * 2
|
|
8
8
|
if (double > Number.MAX_SAFE_INTEGER) {
|
|
9
|
-
return
|
|
9
|
+
return
|
|
10
10
|
}
|
|
11
|
-
const high = Math.floor(double /
|
|
12
|
-
const low = (double &
|
|
11
|
+
const high = Math.floor(double / 0x1_00_00_00_00)
|
|
12
|
+
const low = (double & 0xFF_FF_FF_FF) | sign
|
|
13
13
|
return encodeUvarint64(low, high)
|
|
14
14
|
}
|
|
15
15
|
|
|
@@ -21,7 +21,7 @@ function decodeVarint (b) {
|
|
|
21
21
|
return [undefined, bytes]
|
|
22
22
|
}
|
|
23
23
|
const positive = (low & 1) === 0
|
|
24
|
-
const abs = (low >>> 1) + high *
|
|
24
|
+
const abs = (low >>> 1) + high * 0x80_00_00_00
|
|
25
25
|
return [positive ? abs : -abs, bytes]
|
|
26
26
|
}
|
|
27
27
|
|
|
@@ -32,13 +32,13 @@ function encodeUvarint64 (low, high) {
|
|
|
32
32
|
let i = 0
|
|
33
33
|
// if first byte is 1, the number is negative in javascript, but we want to interpret it as positive
|
|
34
34
|
while ((high !== 0 || low < 0 || low > 0x80) && i < maxVarLen64 - 1) {
|
|
35
|
-
result[i] = (low &
|
|
35
|
+
result[i] = (low & 0x7F) | 0x80
|
|
36
36
|
low >>>= 7
|
|
37
|
-
low |= (high &
|
|
37
|
+
low |= (high & 0x7F) << 25
|
|
38
38
|
high >>>= 7
|
|
39
39
|
i++
|
|
40
40
|
}
|
|
41
|
-
result[i] = low &
|
|
41
|
+
result[i] = low & 0x7F
|
|
42
42
|
return result.slice(0, i + 1)
|
|
43
43
|
}
|
|
44
44
|
|
|
@@ -64,11 +64,11 @@ function decodeUvarint64 (
|
|
|
64
64
|
return [low, high, bytes]
|
|
65
65
|
}
|
|
66
66
|
if (s < 32) {
|
|
67
|
-
low |= (n &
|
|
67
|
+
low |= (n & 0x7F) << s
|
|
68
68
|
}
|
|
69
69
|
if (s > 0) {
|
|
70
70
|
high |=
|
|
71
|
-
s - 32 > 0 ? (n &
|
|
71
|
+
s - 32 > 0 ? (n & 0x7F) << (s - 32) : (n & 0x7F) >> (32 - s)
|
|
72
72
|
}
|
|
73
73
|
s += 7
|
|
74
74
|
}
|
|
@@ -12,7 +12,7 @@ function fnv (data, hvalInit, fnvPrime, fnvSize) {
|
|
|
12
12
|
|
|
13
13
|
function fnv64 (data) {
|
|
14
14
|
if (!Buffer.isBuffer(data)) {
|
|
15
|
-
data = Buffer.from(data, '
|
|
15
|
+
data = Buffer.from(data, 'utf8')
|
|
16
16
|
}
|
|
17
17
|
const byteArray = new Uint8Array(data)
|
|
18
18
|
return fnv(byteArray, FNV1_64_INIT, FNV_64_PRIME, 2n ** 64n)
|
|
@@ -77,19 +77,19 @@ function decodePathwayContextBase64 (pathwayContext) {
|
|
|
77
77
|
return decodePathwayContext(encodedPathway)
|
|
78
78
|
}
|
|
79
79
|
|
|
80
|
-
|
|
80
|
+
const DsmPathwayCodec = {
|
|
81
81
|
// we use a class for encoding / decoding in case we update our encoding/decoding. A class will make updates easier
|
|
82
82
|
// instead of using individual functions.
|
|
83
|
-
|
|
83
|
+
encode (dataStreamsContext, carrier) {
|
|
84
84
|
if (!dataStreamsContext || !dataStreamsContext.hash) {
|
|
85
85
|
return
|
|
86
86
|
}
|
|
87
87
|
carrier[CONTEXT_PROPAGATION_KEY_BASE64] = encodePathwayContextBase64(dataStreamsContext)
|
|
88
88
|
|
|
89
89
|
log.debug(() => `Injected into DSM carrier: ${JSON.stringify(pick(carrier, logKeys))}.`)
|
|
90
|
-
}
|
|
90
|
+
},
|
|
91
91
|
|
|
92
|
-
|
|
92
|
+
decode (carrier) {
|
|
93
93
|
log.debug(() => `Attempting extract from DSM carrier: ${JSON.stringify(pick(carrier, logKeys))}.`)
|
|
94
94
|
|
|
95
95
|
if (carrier == null) return
|
|
@@ -103,10 +103,8 @@ class StatsBucket {
|
|
|
103
103
|
forBacklog (backlogData) {
|
|
104
104
|
const backlog = new Backlog(backlogData)
|
|
105
105
|
const existingBacklog = this._backlogs.get(backlog.hash)
|
|
106
|
-
if (existingBacklog !== undefined) {
|
|
107
|
-
|
|
108
|
-
return existingBacklog
|
|
109
|
-
}
|
|
106
|
+
if (existingBacklog !== undefined && existingBacklog.offset > backlog.offset) {
|
|
107
|
+
return existingBacklog
|
|
110
108
|
}
|
|
111
109
|
this._backlogs.set(backlog.hash, backlog)
|
|
112
110
|
return backlog
|
|
@@ -205,7 +203,9 @@ class DataStreamsProcessor {
|
|
|
205
203
|
let parentHash = ENTRY_PARENT_HASH
|
|
206
204
|
let closestOppositeDirectionHash = ENTRY_PARENT_HASH
|
|
207
205
|
let closestOppositeDirectionEdgeStart = nowNs
|
|
208
|
-
if (ctx
|
|
206
|
+
if (ctx == null) {
|
|
207
|
+
log.debug(() => 'Setting DSM Checkpoint with empty parent context.')
|
|
208
|
+
} else {
|
|
209
209
|
pathwayStartNs = ctx.pathwayStartNs
|
|
210
210
|
edgeStartNs = ctx.edgeStartNs
|
|
211
211
|
parentHash = ctx.hash
|
|
@@ -229,8 +229,6 @@ class DataStreamsProcessor {
|
|
|
229
229
|
log.debug(
|
|
230
230
|
() => `Setting DSM Checkpoint from extracted parent context with hash: ${parentHash} and edge tags: ${edgeTags}`
|
|
231
231
|
)
|
|
232
|
-
} else {
|
|
233
|
-
log.debug(() => 'Setting DSM Checkpoint with empty parent context.')
|
|
234
232
|
}
|
|
235
233
|
const hash = computePathwayHash(this.service, this.env, edgeTags, parentHash)
|
|
236
234
|
const edgeLatencyNs = nowNs - edgeStartNs
|
|
@@ -20,7 +20,7 @@ class SchemaBuilder {
|
|
|
20
20
|
static getSchemaDefinition (schema) {
|
|
21
21
|
const noNones = convertToJsonCompatible(schema)
|
|
22
22
|
const definition = jsonStringify(noNones)
|
|
23
|
-
const id = fnv64(Buffer.from(definition, '
|
|
23
|
+
const id = fnv64(Buffer.from(definition, 'utf8')).toString()
|
|
24
24
|
return new Schema(definition, id)
|
|
25
25
|
}
|
|
26
26
|
|
|
@@ -8,12 +8,10 @@ class SchemaSampler {
|
|
|
8
8
|
|
|
9
9
|
trySample (currentTimeMs) {
|
|
10
10
|
if (currentTimeMs >= this.lastSampleMs + SAMPLE_INTERVAL_MILLIS) {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
return weight
|
|
16
|
-
}
|
|
11
|
+
this.lastSampleMs = currentTimeMs
|
|
12
|
+
const weight = this.weight
|
|
13
|
+
this.weight = 0
|
|
14
|
+
return weight
|
|
17
15
|
}
|
|
18
16
|
return 0
|
|
19
17
|
}
|