dd-trace 5.53.0 → 5.55.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE-3rdparty.csv +2 -1
- package/ci/cypress/plugin.js +8 -0
- package/ci/cypress/polyfills.js +23 -0
- package/ci/init.js +8 -7
- package/index.d.ts +33 -16
- package/initialize.mjs +5 -6
- package/package.json +40 -38
- package/packages/datadog-code-origin/index.js +22 -4
- package/packages/datadog-core/src/utils/src/get.js +1 -1
- package/packages/datadog-core/src/utils/src/has.js +1 -1
- package/packages/datadog-core/src/utils/src/kebabcase.js +4 -6
- package/packages/datadog-core/src/utils/src/parse-tags.js +1 -1
- package/packages/datadog-core/src/utils/src/pick.js +2 -2
- package/packages/datadog-core/src/utils/src/set.js +1 -1
- package/packages/datadog-core/src/utils/src/uniq.js +1 -1
- package/packages/datadog-instrumentations/src/amqp10.js +19 -17
- package/packages/datadog-instrumentations/src/amqplib.js +52 -35
- package/packages/datadog-instrumentations/src/apollo.js +2 -2
- package/packages/datadog-instrumentations/src/aws-sdk.js +1 -1
- package/packages/datadog-instrumentations/src/cassandra-driver.js +10 -10
- package/packages/datadog-instrumentations/src/child_process.js +1 -2
- package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +89 -75
- package/packages/datadog-instrumentations/src/cookie-parser.js +1 -1
- package/packages/datadog-instrumentations/src/couchbase.js +6 -9
- package/packages/datadog-instrumentations/src/cucumber.js +108 -68
- package/packages/datadog-instrumentations/src/cypress.js +2 -1
- package/packages/datadog-instrumentations/src/dns.js +5 -5
- package/packages/datadog-instrumentations/src/elasticsearch.js +9 -10
- package/packages/datadog-instrumentations/src/fastify.js +7 -9
- package/packages/datadog-instrumentations/src/fs.js +1 -1
- package/packages/datadog-instrumentations/src/google-cloud-pubsub.js +35 -43
- package/packages/datadog-instrumentations/src/graphql.js +7 -10
- package/packages/datadog-instrumentations/src/grpc/client.js +11 -23
- package/packages/datadog-instrumentations/src/grpc/server.js +7 -20
- package/packages/datadog-instrumentations/src/hapi.js +10 -11
- package/packages/datadog-instrumentations/src/helpers/extract-package-and-module-path.js +16 -10
- package/packages/datadog-instrumentations/src/helpers/fetch.js +4 -5
- package/packages/datadog-instrumentations/src/helpers/hook.js +2 -3
- package/packages/datadog-instrumentations/src/helpers/hooks.js +0 -1
- package/packages/datadog-instrumentations/src/helpers/instrument.js +1 -41
- package/packages/datadog-instrumentations/src/helpers/register.js +11 -12
- package/packages/datadog-instrumentations/src/http/client.js +14 -20
- package/packages/datadog-instrumentations/src/jest.js +201 -143
- package/packages/datadog-instrumentations/src/kafkajs.js +52 -44
- package/packages/datadog-instrumentations/src/knex.js +4 -4
- package/packages/datadog-instrumentations/src/koa.js +2 -3
- package/packages/datadog-instrumentations/src/ldapjs.js +3 -4
- package/packages/datadog-instrumentations/src/mariadb.js +49 -65
- package/packages/datadog-instrumentations/src/mocha/main.js +116 -73
- package/packages/datadog-instrumentations/src/mocha/utils.js +36 -12
- package/packages/datadog-instrumentations/src/mocha/worker.js +6 -0
- package/packages/datadog-instrumentations/src/mocha.js +3 -1
- package/packages/datadog-instrumentations/src/mongodb-core.js +1 -1
- package/packages/datadog-instrumentations/src/mysql.js +30 -37
- package/packages/datadog-instrumentations/src/mysql2.js +53 -47
- package/packages/datadog-instrumentations/src/net.js +1 -1
- package/packages/datadog-instrumentations/src/next.js +1 -0
- package/packages/datadog-instrumentations/src/nyc.js +3 -2
- package/packages/datadog-instrumentations/src/openai.js +22 -24
- package/packages/datadog-instrumentations/src/oracledb.js +1 -1
- package/packages/datadog-instrumentations/src/otel-sdk-trace.js +4 -3
- package/packages/datadog-instrumentations/src/pg.js +3 -5
- package/packages/datadog-instrumentations/src/playwright.js +123 -83
- package/packages/datadog-instrumentations/src/protobufjs.js +3 -4
- package/packages/datadog-instrumentations/src/redis.js +4 -4
- package/packages/datadog-instrumentations/src/restify.js +9 -13
- package/packages/datadog-instrumentations/src/rhea.js +42 -54
- package/packages/datadog-instrumentations/src/router.js +30 -32
- package/packages/datadog-instrumentations/src/tedious.js +2 -3
- package/packages/datadog-instrumentations/src/vitest.js +87 -52
- package/packages/datadog-plugin-amqp10/src/consumer.js +7 -3
- package/packages/datadog-plugin-amqp10/src/producer.js +7 -3
- package/packages/datadog-plugin-amqplib/src/client.js +6 -2
- package/packages/datadog-plugin-amqplib/src/consumer.js +7 -3
- package/packages/datadog-plugin-amqplib/src/producer.js +7 -3
- package/packages/datadog-plugin-amqplib/src/util.js +1 -1
- package/packages/datadog-plugin-apollo/src/gateway/request.js +5 -6
- package/packages/datadog-plugin-apollo/src/gateway/validate.js +2 -3
- package/packages/datadog-plugin-avsc/src/schema_iterator.js +12 -12
- package/packages/datadog-plugin-aws-sdk/src/base.js +15 -10
- package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/tracing.js +2 -2
- package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/utils.js +13 -13
- package/packages/datadog-plugin-aws-sdk/src/services/cloudwatchlogs.js +3 -5
- package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +28 -43
- package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +2 -2
- package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +10 -11
- package/packages/datadog-plugin-aws-sdk/src/services/lambda.js +4 -6
- package/packages/datadog-plugin-aws-sdk/src/services/redshift.js +3 -5
- package/packages/datadog-plugin-aws-sdk/src/services/s3.js +3 -5
- package/packages/datadog-plugin-aws-sdk/src/services/sns.js +2 -3
- package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +11 -15
- package/packages/datadog-plugin-aws-sdk/src/services/stepfunctions.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/util.js +5 -6
- package/packages/datadog-plugin-cassandra-driver/src/index.js +1 -1
- package/packages/datadog-plugin-child_process/src/index.js +4 -4
- package/packages/datadog-plugin-child_process/src/scrub-cmd-params.js +23 -23
- package/packages/datadog-plugin-cucumber/src/index.js +60 -4
- package/packages/datadog-plugin-cypress/src/cypress-plugin.js +99 -28
- package/packages/datadog-plugin-cypress/src/plugin.js +11 -1
- package/packages/datadog-plugin-cypress/src/support.js +24 -5
- package/packages/datadog-plugin-dd-trace-api/src/index.js +2 -1
- package/packages/datadog-plugin-elasticsearch/src/index.js +1 -1
- package/packages/datadog-plugin-express/src/code_origin.js +30 -0
- package/packages/datadog-plugin-express/src/index.js +10 -12
- package/packages/datadog-plugin-express/src/tracing.js +19 -0
- package/packages/datadog-plugin-google-cloud-pubsub/src/client.js +7 -3
- package/packages/datadog-plugin-google-cloud-pubsub/src/consumer.js +12 -7
- package/packages/datadog-plugin-google-cloud-pubsub/src/producer.js +6 -2
- package/packages/datadog-plugin-google-cloud-vertexai/src/tracing.js +27 -10
- package/packages/datadog-plugin-graphql/src/execute.js +2 -2
- package/packages/datadog-plugin-graphql/src/index.js +10 -8
- package/packages/datadog-plugin-graphql/src/resolve.js +19 -12
- package/packages/datadog-plugin-graphql/src/tools/index.js +1 -0
- package/packages/datadog-plugin-graphql/src/tools/signature.js +1 -0
- package/packages/datadog-plugin-graphql/src/tools/transforms.js +1 -0
- package/packages/datadog-plugin-grpc/src/client.js +2 -2
- package/packages/datadog-plugin-grpc/src/util.js +2 -2
- package/packages/datadog-plugin-http/src/client.js +23 -13
- package/packages/datadog-plugin-http2/src/client.js +24 -25
- package/packages/datadog-plugin-jest/src/index.js +26 -23
- package/packages/datadog-plugin-jest/src/util.js +8 -8
- package/packages/datadog-plugin-kafkajs/src/batch-consumer.js +3 -1
- package/packages/datadog-plugin-kafkajs/src/consumer.js +9 -5
- package/packages/datadog-plugin-kafkajs/src/producer.js +8 -3
- package/packages/datadog-plugin-kafkajs/src/utils.js +1 -1
- package/packages/datadog-plugin-langchain/src/handlers/chain.js +7 -7
- package/packages/datadog-plugin-langchain/src/handlers/embedding.js +2 -2
- package/packages/datadog-plugin-langchain/src/handlers/language_models/chat_model.js +6 -4
- package/packages/datadog-plugin-langchain/src/handlers/language_models/llm.js +5 -4
- package/packages/datadog-plugin-langchain/src/tracing.js +11 -10
- package/packages/datadog-plugin-mariadb/src/index.js +3 -9
- package/packages/datadog-plugin-mocha/src/index.js +39 -14
- package/packages/datadog-plugin-mongodb-core/src/index.js +3 -2
- package/packages/datadog-plugin-mysql/src/index.js +22 -9
- package/packages/datadog-plugin-mysql2/src/index.js +16 -0
- package/packages/datadog-plugin-net/src/tcp.js +1 -1
- package/packages/datadog-plugin-next/src/index.js +7 -6
- package/packages/datadog-plugin-openai/src/services.js +6 -10
- package/packages/datadog-plugin-openai/src/tracing.js +12 -18
- package/packages/datadog-plugin-oracledb/src/index.js +1 -1
- package/packages/datadog-plugin-playwright/src/index.js +25 -4
- package/packages/datadog-plugin-protobufjs/src/schema_iterator.js +8 -9
- package/packages/datadog-plugin-redis/src/index.js +2 -4
- package/packages/datadog-plugin-rhea/src/consumer.js +8 -6
- package/packages/datadog-plugin-rhea/src/producer.js +5 -2
- package/packages/datadog-plugin-router/src/index.js +1 -1
- package/packages/datadog-plugin-selenium/src/index.js +1 -6
- package/packages/datadog-plugin-vitest/src/index.js +52 -35
- package/packages/datadog-shimmer/src/shimmer.js +4 -8
- package/packages/dd-trace/src/appsec/api_security_sampler.js +2 -2
- package/packages/dd-trace/src/appsec/blocked_templates.js +1 -1
- package/packages/dd-trace/src/appsec/blocking.js +6 -20
- package/packages/dd-trace/src/appsec/iast/analyzers/analyzers.js +0 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-password-rules.js +0 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secret-rules.js +0 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secrets-rules.js +0 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hsts-header-missing-analyzer.js +7 -12
- package/packages/dd-trace/src/appsec/iast/analyzers/missing-header-analyzer.js +5 -8
- package/packages/dd-trace/src/appsec/iast/analyzers/nosql-injection-mongodb-analyzer.js +4 -0
- package/packages/dd-trace/src/appsec/iast/analyzers/path-traversal-analyzer.js +9 -12
- package/packages/dd-trace/src/appsec/iast/analyzers/vulnerability-analyzer.js +5 -4
- package/packages/dd-trace/src/appsec/iast/context/context-plugin.js +2 -3
- package/packages/dd-trace/src/appsec/iast/iast-plugin.js +3 -3
- package/packages/dd-trace/src/appsec/iast/index.js +1 -0
- package/packages/dd-trace/src/appsec/iast/overhead-controller.js +102 -7
- package/packages/dd-trace/src/appsec/iast/path-line.js +7 -8
- package/packages/dd-trace/src/appsec/iast/security-controls/index.js +16 -24
- package/packages/dd-trace/src/appsec/iast/security-controls/parser.js +6 -6
- package/packages/dd-trace/src/appsec/iast/taint-tracking/filter.js +2 -2
- package/packages/dd-trace/src/appsec/iast/taint-tracking/operations-taint-object.js +3 -3
- package/packages/dd-trace/src/appsec/iast/taint-tracking/operations.js +4 -28
- package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +2 -8
- package/packages/dd-trace/src/appsec/iast/taint-tracking/plugins/kafka.js +3 -4
- package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter-esm.mjs +1 -1
- package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +7 -8
- package/packages/dd-trace/src/appsec/iast/taint-tracking/taint-tracking-impl.js +2 -2
- package/packages/dd-trace/src/appsec/iast/telemetry/span-tags.js +7 -7
- package/packages/dd-trace/src/appsec/iast/telemetry/verbosity.js +2 -3
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/range-utils.js +10 -11
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/command-sensitive-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/ldap-sensitive-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/sql-sensitive-analyzer.js +7 -7
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-handler.js +23 -28
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-regex.js +3 -3
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/index.js +4 -4
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/utils.js +6 -11
- package/packages/dd-trace/src/appsec/iast/vulnerabilities.js +0 -1
- package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +9 -11
- package/packages/dd-trace/src/appsec/index.js +5 -5
- package/packages/dd-trace/src/appsec/rasp/index.js +15 -15
- package/packages/dd-trace/src/appsec/rasp/lfi.js +2 -1
- package/packages/dd-trace/src/appsec/reporter.js +232 -41
- package/packages/dd-trace/src/appsec/rule_manager.js +2 -2
- package/packages/dd-trace/src/appsec/sdk/set_user.js +2 -2
- package/packages/dd-trace/src/appsec/sdk/track_event.js +3 -3
- package/packages/dd-trace/src/appsec/stack_trace.js +2 -4
- package/packages/dd-trace/src/appsec/telemetry/index.js +31 -1
- package/packages/dd-trace/src/appsec/telemetry/rasp.js +3 -5
- package/packages/dd-trace/src/appsec/telemetry/waf.js +3 -5
- package/packages/dd-trace/src/appsec/user_tracking.js +3 -5
- package/packages/dd-trace/src/appsec/waf/waf_context_wrapper.js +8 -4
- package/packages/dd-trace/src/azure_metadata.js +9 -9
- package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/index.js +9 -8
- package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/worker/index.js +2 -2
- package/packages/dd-trace/src/ci-visibility/early-flake-detection/get-known-tests.js +3 -2
- package/packages/dd-trace/src/ci-visibility/exporters/agent-proxy/index.js +3 -3
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/coverage-writer.js +3 -2
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +3 -2
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +3 -2
- package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +6 -4
- package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +6 -5
- package/packages/dd-trace/src/ci-visibility/exporters/test-worker/index.js +7 -6
- package/packages/dd-trace/src/ci-visibility/exporters/test-worker/writer.js +0 -2
- package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +3 -2
- package/packages/dd-trace/src/ci-visibility/log-submission/log-submission-plugin.js +5 -4
- package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +12 -8
- package/packages/dd-trace/src/ci-visibility/telemetry.js +4 -0
- package/packages/dd-trace/src/ci-visibility/test-management/get-test-management-tests.js +3 -2
- package/packages/dd-trace/src/config-helper.js +89 -0
- package/packages/dd-trace/src/config.js +159 -129
- package/packages/dd-trace/src/config_stable.js +10 -7
- package/packages/dd-trace/src/datastreams/encoding.js +9 -9
- package/packages/dd-trace/src/datastreams/fnv.js +2 -2
- package/packages/dd-trace/src/datastreams/pathway.js +4 -4
- package/packages/dd-trace/src/datastreams/processor.js +5 -7
- package/packages/dd-trace/src/datastreams/schemas/schema_builder.js +7 -7
- package/packages/dd-trace/src/datastreams/schemas/schema_sampler.js +4 -6
- package/packages/dd-trace/src/datastreams/size.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/breakpoints.js +75 -69
- package/packages/dd-trace/src/debugger/devtools_client/condition.js +7 -10
- package/packages/dd-trace/src/debugger/devtools_client/defaults.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/index.js +9 -2
- package/packages/dd-trace/src/debugger/devtools_client/remote_config.js +18 -38
- package/packages/dd-trace/src/debugger/devtools_client/send.js +3 -2
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/collector.js +1 -2
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/index.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/processor.js +11 -14
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/redaction.js +4 -4
- package/packages/dd-trace/src/debugger/devtools_client/source-maps.js +2 -10
- package/packages/dd-trace/src/debugger/devtools_client/state.js +10 -3
- package/packages/dd-trace/src/debugger/index.js +1 -0
- package/packages/dd-trace/src/dogstatsd.js +7 -6
- package/packages/dd-trace/src/encode/0.4.js +14 -11
- package/packages/dd-trace/src/encode/0.5.js +4 -6
- package/packages/dd-trace/src/encode/agentless-ci-visibility.js +8 -8
- package/packages/dd-trace/src/encode/coverage-ci-visibility.js +1 -1
- package/packages/dd-trace/src/encode/tags-processors.js +1 -1
- package/packages/dd-trace/src/exporter.js +7 -6
- package/packages/dd-trace/src/exporters/agent/writer.js +1 -5
- package/packages/dd-trace/src/exporters/common/docker.js +4 -3
- package/packages/dd-trace/src/exporters/common/form-data.js +6 -4
- package/packages/dd-trace/src/exporters/common/request.js +5 -2
- package/packages/dd-trace/src/exporters/common/util.js +4 -2
- package/packages/dd-trace/src/external-logger/src/index.js +5 -5
- package/packages/dd-trace/src/flare/file.js +1 -5
- package/packages/dd-trace/src/format.js +1 -1
- package/packages/dd-trace/src/git_properties.js +1 -1
- package/packages/dd-trace/src/id.js +15 -9
- package/packages/dd-trace/src/iitm.js +10 -22
- package/packages/dd-trace/src/index.js +4 -3
- package/packages/dd-trace/src/lambda/handler.js +7 -6
- package/packages/dd-trace/src/lambda/index.js +2 -1
- package/packages/dd-trace/src/lambda/runtime/patch.js +7 -6
- package/packages/dd-trace/src/lambda/runtime/ritm.js +4 -3
- package/packages/dd-trace/src/llmobs/constants/tags.js +1 -0
- package/packages/dd-trace/src/llmobs/index.js +21 -5
- package/packages/dd-trace/src/llmobs/noop.js +18 -20
- package/packages/dd-trace/src/llmobs/plugins/bedrockruntime.js +6 -6
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chain.js +2 -6
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chat_model.js +3 -3
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/index.js +11 -13
- package/packages/dd-trace/src/llmobs/plugins/langchain/index.js +6 -6
- package/packages/dd-trace/src/llmobs/plugins/openai.js +2 -3
- package/packages/dd-trace/src/llmobs/sdk.js +4 -3
- package/packages/dd-trace/src/llmobs/span_processor.js +1 -1
- package/packages/dd-trace/src/llmobs/tagger.js +129 -102
- package/packages/dd-trace/src/llmobs/util.js +9 -9
- package/packages/dd-trace/src/llmobs/writers/base.js +1 -1
- package/packages/dd-trace/src/llmobs/writers/util.js +1 -1
- package/packages/dd-trace/src/log/index.js +9 -8
- package/packages/dd-trace/src/log/log.js +1 -1
- package/packages/dd-trace/src/log/writer.js +3 -4
- package/packages/dd-trace/src/msgpack/chunk.js +3 -3
- package/packages/dd-trace/src/msgpack/encoder.js +31 -31
- package/packages/dd-trace/src/noop/dogstatsd.js +6 -6
- package/packages/dd-trace/src/noop/span.js +4 -6
- package/packages/dd-trace/src/noop/tracer.js +1 -2
- package/packages/dd-trace/src/opentelemetry/span_processor.js +2 -2
- package/packages/dd-trace/src/opentelemetry/tracer.js +7 -6
- package/packages/dd-trace/src/opentracing/propagation/log.js +10 -13
- package/packages/dd-trace/src/opentracing/propagation/text_map.js +40 -37
- package/packages/dd-trace/src/opentracing/propagation/tracestate.js +8 -4
- package/packages/dd-trace/src/opentracing/span.js +16 -20
- package/packages/dd-trace/src/opentracing/tracer.js +9 -6
- package/packages/dd-trace/src/payload-tagging/config/index.js +17 -21
- package/packages/dd-trace/src/payload-tagging/index.js +1 -1
- package/packages/dd-trace/src/payload-tagging/tagging.js +6 -6
- package/packages/dd-trace/src/pkg.js +1 -1
- package/packages/dd-trace/src/plugin_manager.js +4 -3
- package/packages/dd-trace/src/plugins/ci_plugin.js +87 -11
- package/packages/dd-trace/src/plugins/consumer.js +2 -2
- package/packages/dd-trace/src/plugins/inbound.js +5 -1
- package/packages/dd-trace/src/plugins/index.js +0 -1
- package/packages/dd-trace/src/plugins/outbound.js +4 -5
- package/packages/dd-trace/src/plugins/plugin.js +1 -1
- package/packages/dd-trace/src/plugins/producer.js +2 -2
- package/packages/dd-trace/src/plugins/storage.js +2 -2
- package/packages/dd-trace/src/plugins/util/ci.js +28 -20
- package/packages/dd-trace/src/plugins/util/git.js +166 -12
- package/packages/dd-trace/src/plugins/util/inferred_proxy.js +1 -1
- package/packages/dd-trace/src/plugins/util/ip_extractor.js +1 -1
- package/packages/dd-trace/src/plugins/util/llm.js +27 -10
- package/packages/dd-trace/src/plugins/util/stacktrace.js +9 -2
- package/packages/dd-trace/src/plugins/util/test.js +315 -51
- package/packages/dd-trace/src/plugins/util/url.js +1 -1
- package/packages/dd-trace/src/plugins/util/urlfilter.js +13 -17
- package/packages/dd-trace/src/plugins/util/user-provided-git.js +14 -4
- package/packages/dd-trace/src/plugins/util/web.js +8 -8
- package/packages/dd-trace/src/priority_sampler.js +64 -53
- package/packages/dd-trace/src/profiling/config.js +51 -35
- package/packages/dd-trace/src/profiling/exporter_cli.js +20 -20
- package/packages/dd-trace/src/profiling/exporters/agent.js +1 -1
- package/packages/dd-trace/src/profiling/exporters/event_serializer.js +7 -6
- package/packages/dd-trace/src/profiling/exporters/file.js +2 -1
- package/packages/dd-trace/src/profiling/index.js +2 -1
- package/packages/dd-trace/src/profiling/profiler.js +44 -6
- package/packages/dd-trace/src/profiling/profilers/events.js +14 -17
- package/packages/dd-trace/src/profiling/profilers/shared.js +6 -1
- package/packages/dd-trace/src/profiling/profilers/space.js +3 -3
- package/packages/dd-trace/src/profiling/profilers/wall.js +6 -7
- package/packages/dd-trace/src/profiling/ssi-heuristics.js +3 -5
- package/packages/dd-trace/src/profiling/ssi-telemetry-mock-profiler.js +3 -1
- package/packages/dd-trace/src/profiling/tagger.js +21 -13
- package/packages/dd-trace/src/profiling/webspan-utils.js +1 -1
- package/packages/dd-trace/src/proxy.js +9 -10
- package/packages/dd-trace/src/random_sampler.js +40 -0
- package/packages/dd-trace/src/rate_limiter.js +4 -4
- package/packages/dd-trace/src/remote_config/index.js +3 -7
- package/packages/dd-trace/src/remote_config/manager.js +25 -13
- package/packages/dd-trace/src/require-package-json.js +1 -1
- package/packages/dd-trace/src/ritm.js +8 -8
- package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +5 -4
- package/packages/dd-trace/src/sampler.js +41 -4
- package/packages/dd-trace/src/sampling_rule.js +12 -3
- package/packages/dd-trace/src/scope.js +1 -1
- package/packages/dd-trace/src/serverless.js +11 -4
- package/packages/dd-trace/src/service-naming/schemas/util.js +1 -1
- package/packages/dd-trace/src/service-naming/schemas/v0/web.js +2 -3
- package/packages/dd-trace/src/span_processor.js +5 -4
- package/packages/dd-trace/src/span_sampler.js +4 -1
- package/packages/dd-trace/src/standalone/tracesource.js +2 -3
- package/packages/dd-trace/src/standalone/tracesource_priority_sampler.js +1 -2
- package/packages/dd-trace/src/startup-log.js +6 -18
- package/packages/dd-trace/src/supported-configurations.json +439 -0
- package/packages/dd-trace/src/telemetry/dependencies.js +64 -59
- package/packages/dd-trace/src/telemetry/logs/log-collector.js +9 -10
- package/packages/dd-trace/src/telemetry/metrics.js +10 -5
- package/packages/dd-trace/src/telemetry/send-data.js +8 -7
- package/packages/dd-trace/src/telemetry/telemetry.js +31 -45
- package/packages/dd-trace/src/tracer.js +3 -7
- package/packages/dd-trace/src/util.js +1 -6
- package/version.js +1 -0
- package/packages/datadog-instrumentations/src/paperplane.js +0 -77
- package/packages/datadog-plugin-paperplane/src/index.js +0 -25
- package/packages/datadog-plugin-paperplane/src/logger.js +0 -11
- package/packages/datadog-plugin-paperplane/src/server.js +0 -24
- package/packages/dd-trace/src/appsec/iast/analyzers/header-injection-analyzer.js +0 -122
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/header-sensitive-analyzer.js +0 -20
|
@@ -2,8 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
const {
|
|
4
4
|
channel,
|
|
5
|
-
addHook
|
|
6
|
-
AsyncResource
|
|
5
|
+
addHook
|
|
7
6
|
} = require('./helpers/instrument')
|
|
8
7
|
const kebabCase = require('../../datadog-core/src/utils/src/kebabcase')
|
|
9
8
|
const shimmer = require('../../datadog-shimmer')
|
|
@@ -11,18 +10,23 @@ const shimmer = require('../../datadog-shimmer')
|
|
|
11
10
|
const { NODE_MAJOR, NODE_MINOR } = require('../../../version')
|
|
12
11
|
const MIN_VERSION = ((NODE_MAJOR > 22) || (NODE_MAJOR === 22 && NODE_MINOR >= 2)) ? '>=0.5.3' : '>=0.5.0'
|
|
13
12
|
|
|
14
|
-
const
|
|
15
|
-
const
|
|
16
|
-
const
|
|
13
|
+
const commandStartCh = channel('apm:amqplib:command:start')
|
|
14
|
+
const commandFinishCh = channel('apm:amqplib:command:finish')
|
|
15
|
+
const commandErrorCh = channel('apm:amqplib:command:error')
|
|
16
|
+
|
|
17
|
+
const consumeStartCh = channel('apm:amqplib:consume:start')
|
|
18
|
+
const consumeFinishCh = channel('apm:amqplib:consume:finish')
|
|
19
|
+
|
|
20
|
+
const publishStartCh = channel('apm:amqplib:publish:start')
|
|
21
|
+
const publishFinishCh = channel('apm:amqplib:publish:finish')
|
|
22
|
+
const publishErrorCh = channel('apm:amqplib:publish:error')
|
|
17
23
|
|
|
18
24
|
const methods = {}
|
|
19
25
|
|
|
20
26
|
addHook({ name: 'amqplib', file: 'lib/defs.js', versions: [MIN_VERSION] }, defs => {
|
|
21
27
|
for (const [key, value] of Object.entries(defs)) {
|
|
22
28
|
if (Number.isInteger(value) && isCamelCase(key)) {
|
|
23
|
-
|
|
24
|
-
// Example method that is not renamed properly: BasicGetEmpty = 3932232
|
|
25
|
-
methods[value] = kebabCase(key).replace('-', '.')
|
|
29
|
+
methods[value] = kebabCase(key).replaceAll('-', '.')
|
|
26
30
|
}
|
|
27
31
|
}
|
|
28
32
|
return defs
|
|
@@ -34,24 +38,29 @@ addHook({ name: 'amqplib', file: 'lib/channel_model.js', versions: [MIN_VERSION]
|
|
|
34
38
|
if (message === null) {
|
|
35
39
|
return message
|
|
36
40
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
41
|
+
const ctx = { method: 'basic.get', message, fields: message.fields, queue }
|
|
42
|
+
consumeStartCh.runStores(ctx, () => {
|
|
43
|
+
// finish right away
|
|
44
|
+
consumeFinishCh.publish(ctx)
|
|
45
|
+
})
|
|
40
46
|
return message
|
|
41
47
|
})
|
|
42
48
|
})
|
|
43
49
|
shimmer.wrap(x.Channel.prototype, 'consume', consume => function (queue, callback, options) {
|
|
44
|
-
if (!
|
|
50
|
+
if (!consumeStartCh.hasSubscribers) {
|
|
45
51
|
return consume.apply(this, arguments)
|
|
46
52
|
}
|
|
47
53
|
arguments[1] = (message, ...args) => {
|
|
48
54
|
if (message === null) {
|
|
49
55
|
return callback(message, ...args)
|
|
50
56
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
57
|
+
const ctx = { method: 'basic.deliver', message, fields: message.fields, queue }
|
|
58
|
+
return consumeStartCh.runStores(ctx, () => {
|
|
59
|
+
// finish right away
|
|
60
|
+
const result = callback(message, ...args)
|
|
61
|
+
consumeFinishCh.publish(ctx)
|
|
62
|
+
return result
|
|
63
|
+
})
|
|
55
64
|
}
|
|
56
65
|
return consume.apply(this, arguments)
|
|
57
66
|
})
|
|
@@ -60,32 +69,36 @@ addHook({ name: 'amqplib', file: 'lib/channel_model.js', versions: [MIN_VERSION]
|
|
|
60
69
|
|
|
61
70
|
addHook({ name: 'amqplib', file: 'lib/callback_model.js', versions: [MIN_VERSION] }, channel => {
|
|
62
71
|
shimmer.wrap(channel.Channel.prototype, 'get', getMessage => function (queue, options, callback) {
|
|
63
|
-
if (!
|
|
72
|
+
if (!commandStartCh.hasSubscribers) {
|
|
64
73
|
return getMessage.apply(this, arguments)
|
|
65
74
|
}
|
|
66
75
|
arguments[2] = (error, message, ...args) => {
|
|
67
76
|
if (error !== null || message === null) {
|
|
68
77
|
return callback(error, message, ...args)
|
|
69
78
|
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
79
|
+
const ctx = { method: 'basic.get', message, fields: message.fields, queue }
|
|
80
|
+
return consumeStartCh.runStores(ctx, () => {
|
|
81
|
+
const result = callback(error, message, ...args)
|
|
82
|
+
consumeFinishCh.publish(ctx)
|
|
83
|
+
return result
|
|
84
|
+
})
|
|
74
85
|
}
|
|
75
86
|
return getMessage.apply(this, arguments)
|
|
76
87
|
})
|
|
77
88
|
shimmer.wrap(channel.Channel.prototype, 'consume', consume => function (queue, callback) {
|
|
78
|
-
if (!
|
|
89
|
+
if (!consumeStartCh.hasSubscribers) {
|
|
79
90
|
return consume.apply(this, arguments)
|
|
80
91
|
}
|
|
81
92
|
arguments[1] = (message, ...args) => {
|
|
82
93
|
if (message === null) {
|
|
83
94
|
return callback(message, ...args)
|
|
84
95
|
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
96
|
+
const ctx = { method: 'basic.deliver', message, fields: message.fields, queue }
|
|
97
|
+
return consumeStartCh.runStores(ctx, () => {
|
|
98
|
+
const result = callback(message, ...args)
|
|
99
|
+
consumeFinishCh.publish(ctx)
|
|
100
|
+
return result
|
|
101
|
+
})
|
|
89
102
|
}
|
|
90
103
|
return consume.apply(this, arguments)
|
|
91
104
|
})
|
|
@@ -94,32 +107,36 @@ addHook({ name: 'amqplib', file: 'lib/callback_model.js', versions: [MIN_VERSION
|
|
|
94
107
|
|
|
95
108
|
addHook({ name: 'amqplib', file: 'lib/channel.js', versions: [MIN_VERSION] }, channel => {
|
|
96
109
|
shimmer.wrap(channel.Channel.prototype, 'sendImmediately', sendImmediately => function (method, fields) {
|
|
97
|
-
return instrument(
|
|
110
|
+
return instrument(
|
|
111
|
+
sendImmediately, this, arguments, methods[method], fields, null, commandStartCh, commandFinishCh, commandErrorCh
|
|
112
|
+
)
|
|
98
113
|
})
|
|
99
114
|
|
|
100
115
|
shimmer.wrap(channel.Channel.prototype, 'sendMessage', sendMessage => function (fields) {
|
|
101
|
-
return instrument(
|
|
116
|
+
return instrument(
|
|
117
|
+
sendMessage, this, arguments, 'basic.publish', fields, arguments[2],
|
|
118
|
+
publishStartCh, publishFinishCh, publishErrorCh
|
|
119
|
+
)
|
|
102
120
|
})
|
|
103
121
|
return channel
|
|
104
122
|
})
|
|
105
123
|
|
|
106
|
-
function instrument (send, channel, args, method, fields, message) {
|
|
124
|
+
function instrument (send, channel, args, method, fields, message, startCh, finishCh, errorCh) {
|
|
107
125
|
if (!startCh.hasSubscribers || method === 'basic.get') {
|
|
108
126
|
return send.apply(channel, args)
|
|
109
127
|
}
|
|
110
128
|
|
|
111
|
-
const
|
|
112
|
-
return
|
|
113
|
-
startCh.publish({ channel, method, fields, message })
|
|
114
|
-
|
|
129
|
+
const ctx = { channel, method, fields, message }
|
|
130
|
+
return startCh.runStores(ctx, () => {
|
|
115
131
|
try {
|
|
116
132
|
return send.apply(channel, args)
|
|
117
133
|
} catch (err) {
|
|
118
|
-
|
|
134
|
+
ctx.error = err
|
|
135
|
+
errorCh.publish(ctx)
|
|
119
136
|
|
|
120
137
|
throw err
|
|
121
138
|
} finally {
|
|
122
|
-
finishCh.publish()
|
|
139
|
+
finishCh.publish(ctx)
|
|
123
140
|
}
|
|
124
141
|
})
|
|
125
142
|
}
|
|
@@ -42,7 +42,7 @@ function wrapRecordExceptions (recordExceptions) {
|
|
|
42
42
|
// this is mimicking apollo-gateways internal instrumentation
|
|
43
43
|
// TODO: should we consider a mechanism to report all exceptions? since this method aggregates all exceptions
|
|
44
44
|
// where as a span can only have one exception set on it at a time
|
|
45
|
-
generalErrorCh.publish({ error: errors
|
|
45
|
+
generalErrorCh.publish({ error: errors.at(-1) })
|
|
46
46
|
return recordExceptions.apply(this, args)
|
|
47
47
|
}
|
|
48
48
|
}
|
|
@@ -50,7 +50,7 @@ function wrapRecordExceptions (recordExceptions) {
|
|
|
50
50
|
function wrapStartActiveSpan (startActiveSpan) {
|
|
51
51
|
return function (...args) {
|
|
52
52
|
const firstArg = args[0]
|
|
53
|
-
const cb = args
|
|
53
|
+
const cb = args.at(-1)
|
|
54
54
|
if (typeof firstArg !== 'string' || typeof cb !== 'function') return startActiveSpan.apply(this, args)
|
|
55
55
|
|
|
56
56
|
const method = CHANNELS[firstArg]
|
|
@@ -54,7 +54,7 @@ function wrapDeserialize (deserialize, channelSuffix) {
|
|
|
54
54
|
|
|
55
55
|
function wrapSmithySend (send) {
|
|
56
56
|
return function (command, ...args) {
|
|
57
|
-
const cb = args
|
|
57
|
+
const cb = args.at(-1)
|
|
58
58
|
const innerAr = new AsyncResource('apm:aws:request:inner')
|
|
59
59
|
const outerAr = new AsyncResource('apm:aws:request:outer')
|
|
60
60
|
const serviceIdentifier = this.config.serviceId.toLowerCase()
|
|
@@ -34,13 +34,12 @@ addHook({ name: 'cassandra-driver', versions: ['>=3.0.0'] }, cassandra => {
|
|
|
34
34
|
const res = batch.apply(this, arguments)
|
|
35
35
|
if (typeof res === 'function' || !res) {
|
|
36
36
|
return wrapCallback(finishCh, errorCh, asyncResource, res)
|
|
37
|
-
} else {
|
|
38
|
-
const promiseAsyncResource = new AsyncResource('bound-anonymous-fn')
|
|
39
|
-
return res.then(
|
|
40
|
-
promiseAsyncResource.bind(() => finish(finishCh, errorCh)),
|
|
41
|
-
promiseAsyncResource.bind(err => finish(finishCh, errorCh, err))
|
|
42
|
-
)
|
|
43
37
|
}
|
|
38
|
+
const promiseAsyncResource = new AsyncResource('bound-anonymous-fn')
|
|
39
|
+
return res.then(
|
|
40
|
+
promiseAsyncResource.bind(() => finish(finishCh, errorCh)),
|
|
41
|
+
promiseAsyncResource.bind(err => finish(finishCh, errorCh, err))
|
|
42
|
+
)
|
|
44
43
|
} catch (e) {
|
|
45
44
|
finish(finishCh, errorCh, e)
|
|
46
45
|
throw e
|
|
@@ -73,6 +72,10 @@ addHook({ name: 'cassandra-driver', versions: ['>=4.4'] }, cassandra => {
|
|
|
73
72
|
return cassandra
|
|
74
73
|
})
|
|
75
74
|
|
|
75
|
+
const isValid = (args) => {
|
|
76
|
+
return args.length === 4 || typeof args[3] === 'function'
|
|
77
|
+
}
|
|
78
|
+
|
|
76
79
|
addHook({ name: 'cassandra-driver', versions: ['3 - 4.3'] }, cassandra => {
|
|
77
80
|
shimmer.wrap(cassandra.Client.prototype, '_innerExecute', _innerExecute =>
|
|
78
81
|
function (query, params, execOptions, callback) {
|
|
@@ -81,9 +84,6 @@ addHook({ name: 'cassandra-driver', versions: ['3 - 4.3'] }, cassandra => {
|
|
|
81
84
|
}
|
|
82
85
|
const callbackResource = new AsyncResource('bound-anonymous-fn')
|
|
83
86
|
const asyncResource = new AsyncResource('bound-anonymous-fn')
|
|
84
|
-
const isValid = (args) => {
|
|
85
|
-
return args.length === 4 || typeof args[3] === 'function'
|
|
86
|
-
}
|
|
87
87
|
|
|
88
88
|
if (!isValid(arguments)) {
|
|
89
89
|
return _innerExecute.apply(this, arguments)
|
|
@@ -176,7 +176,7 @@ function finish (finishCh, errorCh, error) {
|
|
|
176
176
|
if (error) {
|
|
177
177
|
errorCh.publish(error)
|
|
178
178
|
}
|
|
179
|
-
finishCh.publish(
|
|
179
|
+
finishCh.publish()
|
|
180
180
|
}
|
|
181
181
|
|
|
182
182
|
function wrapCallback (finishCh, errorCh, asyncResource, callback) {
|
|
@@ -233,8 +233,7 @@ function wrapChildProcessAsyncMethod (ChildProcess, shell = false) {
|
|
|
233
233
|
childProcessChannel.error.publish(e)
|
|
234
234
|
})
|
|
235
235
|
|
|
236
|
-
childProcess.on('close', (code) => {
|
|
237
|
-
code = code || 0
|
|
236
|
+
childProcess.on('close', (code = 0) => {
|
|
238
237
|
if (!errorExecuted && code !== 0) {
|
|
239
238
|
childProcessChannel.error.publish()
|
|
240
239
|
}
|
|
@@ -2,8 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
const {
|
|
4
4
|
addHook,
|
|
5
|
-
channel
|
|
6
|
-
AsyncResource
|
|
5
|
+
channel
|
|
7
6
|
} = require('./helpers/instrument')
|
|
8
7
|
const shimmer = require('../../datadog-shimmer')
|
|
9
8
|
|
|
@@ -32,7 +31,6 @@ const disabledHeaderWeakSet = new WeakSet()
|
|
|
32
31
|
// we need to store the offset per partition per topic for the consumer to track offsets for DSM
|
|
33
32
|
const latestConsumerOffsets = new Map()
|
|
34
33
|
|
|
35
|
-
// Customize the instrumentation for Confluent Kafka JavaScript
|
|
36
34
|
addHook({ name: '@confluentinc/kafka-javascript', versions: ['>=1.0.0'] }, (module) => {
|
|
37
35
|
// Hook native module classes first
|
|
38
36
|
instrumentBaseModule(module)
|
|
@@ -55,30 +53,32 @@ function instrumentBaseModule (module) {
|
|
|
55
53
|
// Hook the produce method
|
|
56
54
|
if (typeof producer?.produce === 'function') {
|
|
57
55
|
shimmer.wrap(producer, 'produce', function wrapProduce (produce) {
|
|
58
|
-
return function wrappedProduce (topic, partition, message, key, timestamp, opaque) {
|
|
56
|
+
return function wrappedProduce (topic, partition, message, key, timestamp, opaque, headers) {
|
|
59
57
|
if (!channels.producerStart.hasSubscribers) {
|
|
60
58
|
return produce.apply(this, arguments)
|
|
61
59
|
}
|
|
62
60
|
|
|
63
61
|
const brokers = this.globalConfig?.['bootstrap.servers']
|
|
64
62
|
|
|
65
|
-
const
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
messages: [{ key, value: message }],
|
|
71
|
-
bootstrapServers: brokers
|
|
72
|
-
})
|
|
63
|
+
const ctx = {
|
|
64
|
+
topic,
|
|
65
|
+
messages: [{ key, value: message }],
|
|
66
|
+
bootstrapServers: brokers
|
|
67
|
+
}
|
|
73
68
|
|
|
74
|
-
|
|
69
|
+
return channels.producerStart.runStores(ctx, () => {
|
|
70
|
+
try {
|
|
71
|
+
const headers = convertHeaders(ctx.messages[0].headers)
|
|
72
|
+
const result = produce.apply(this, [topic, partition, message, key, timestamp, opaque, headers])
|
|
75
73
|
|
|
76
|
-
|
|
77
|
-
channels.
|
|
74
|
+
ctx.result = result
|
|
75
|
+
channels.producerCommit.publish(ctx)
|
|
76
|
+
channels.producerFinish.publish(ctx)
|
|
78
77
|
return result
|
|
79
78
|
} catch (error) {
|
|
80
|
-
|
|
81
|
-
channels.
|
|
79
|
+
ctx.error = error
|
|
80
|
+
channels.producerError.publish(ctx)
|
|
81
|
+
channels.producerFinish.publish(ctx)
|
|
82
82
|
throw error
|
|
83
83
|
}
|
|
84
84
|
})
|
|
@@ -110,32 +110,39 @@ function instrumentBaseModule (module) {
|
|
|
110
110
|
callback = numMessages
|
|
111
111
|
}
|
|
112
112
|
|
|
113
|
+
const ctx = {
|
|
114
|
+
groupId
|
|
115
|
+
}
|
|
113
116
|
// Handle callback-based consumption
|
|
114
117
|
if (typeof callback === 'function') {
|
|
115
118
|
return consume.call(this, numMessages, function wrappedCallback (err, messages) {
|
|
116
119
|
if (messages && messages.length > 0) {
|
|
117
120
|
messages.forEach(message => {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
})
|
|
121
|
+
ctx.topic = message?.topic
|
|
122
|
+
ctx.partition = message?.partition
|
|
123
|
+
ctx.message = message
|
|
124
|
+
|
|
125
|
+
// TODO: We should be using publish here instead of runStores but we need bindStart to be called
|
|
126
|
+
channels.consumerStart.runStores(ctx, () => {})
|
|
124
127
|
updateLatestOffset(message?.topic, message?.partition, message?.offset, groupId)
|
|
125
128
|
})
|
|
126
129
|
}
|
|
127
130
|
|
|
128
131
|
if (err) {
|
|
129
|
-
|
|
132
|
+
ctx.error = err
|
|
133
|
+
channels.consumerError.publish(ctx)
|
|
130
134
|
}
|
|
131
135
|
|
|
132
136
|
try {
|
|
133
137
|
const result = callback.apply(this, arguments)
|
|
134
|
-
|
|
138
|
+
if (messages && messages.length > 0) {
|
|
139
|
+
channels.consumerFinish.publish(ctx)
|
|
140
|
+
}
|
|
135
141
|
return result
|
|
136
142
|
} catch (error) {
|
|
137
|
-
|
|
138
|
-
channels.
|
|
143
|
+
ctx.error = error
|
|
144
|
+
channels.consumerError.publish(ctx)
|
|
145
|
+
channels.consumerFinish.publish(ctx)
|
|
139
146
|
throw error
|
|
140
147
|
}
|
|
141
148
|
})
|
|
@@ -204,45 +211,44 @@ function instrumentKafkaJS (kafkaJS) {
|
|
|
204
211
|
return send.apply(this, arguments)
|
|
205
212
|
}
|
|
206
213
|
|
|
207
|
-
const
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
bootstrapServers: kafka._ddBrokers,
|
|
214
|
-
disableHeaderInjection: disabledHeaderWeakSet.has(producer)
|
|
215
|
-
})
|
|
214
|
+
const ctx = {
|
|
215
|
+
topic: payload?.topic,
|
|
216
|
+
messages: payload?.messages || [],
|
|
217
|
+
bootstrapServers: kafka._ddBrokers,
|
|
218
|
+
disableHeaderInjection: disabledHeaderWeakSet.has(producer)
|
|
219
|
+
}
|
|
216
220
|
|
|
221
|
+
return channels.producerStart.runStores(ctx, () => {
|
|
222
|
+
try {
|
|
217
223
|
const result = send.apply(this, arguments)
|
|
218
224
|
|
|
219
|
-
result.then(
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
'Tracer message header injection for Kafka is disabled.')
|
|
235
|
-
}
|
|
236
|
-
channels.producerError.publish(err)
|
|
225
|
+
result.then((res) => {
|
|
226
|
+
ctx.result = res
|
|
227
|
+
channels.producerCommit.publish(ctx)
|
|
228
|
+
channels.producerFinish.publish(ctx)
|
|
229
|
+
}, (err) => {
|
|
230
|
+
if (err) {
|
|
231
|
+
// Fixes bug where we would inject message headers for kafka brokers
|
|
232
|
+
// that don't support headers (version <0.11). On the error, we disable
|
|
233
|
+
// header injection. Tnfortunately the error name / type is not more specific.
|
|
234
|
+
// This approach is implemented by other tracers as well.
|
|
235
|
+
if (err.name === 'KafkaJSError' && err.type === 'ERR_UNKNOWN') {
|
|
236
|
+
disabledHeaderWeakSet.add(producer)
|
|
237
|
+
log.error('Kafka Broker responded with UNKNOWN_SERVER_ERROR (-1). ' +
|
|
238
|
+
'Please look at broker logs for more information. ' +
|
|
239
|
+
'Tracer message header injection for Kafka is disabled.')
|
|
237
240
|
}
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
+
ctx.error = err
|
|
242
|
+
channels.producerError.publish(ctx)
|
|
243
|
+
}
|
|
244
|
+
channels.producerFinish.publish(ctx)
|
|
245
|
+
})
|
|
241
246
|
|
|
242
247
|
return result
|
|
243
248
|
} catch (e) {
|
|
244
|
-
|
|
245
|
-
channels.
|
|
249
|
+
ctx.error = e
|
|
250
|
+
channels.producerError.publish(ctx)
|
|
251
|
+
channels.producerFinish.publish(ctx)
|
|
246
252
|
throw e
|
|
247
253
|
}
|
|
248
254
|
})
|
|
@@ -350,10 +356,11 @@ function wrapKafkaCallback (callback, { startCh, commitCh, finishCh, errorCh },
|
|
|
350
356
|
return function wrappedKafkaCallback (payload) {
|
|
351
357
|
const commitPayload = getPayload(payload)
|
|
352
358
|
|
|
353
|
-
const
|
|
354
|
-
|
|
355
|
-
|
|
359
|
+
const ctx = {
|
|
360
|
+
extractedArgs: commitPayload
|
|
361
|
+
}
|
|
356
362
|
|
|
363
|
+
return startCh.runStores(ctx, () => {
|
|
357
364
|
updateLatestOffset(commitPayload?.topic, commitPayload?.partition, commitPayload?.offset, commitPayload?.groupId)
|
|
358
365
|
|
|
359
366
|
try {
|
|
@@ -361,22 +368,24 @@ function wrapKafkaCallback (callback, { startCh, commitCh, finishCh, errorCh },
|
|
|
361
368
|
|
|
362
369
|
if (result && typeof result.then === 'function') {
|
|
363
370
|
return result
|
|
364
|
-
.then(
|
|
365
|
-
|
|
371
|
+
.then((res) => {
|
|
372
|
+
ctx.result = res
|
|
373
|
+
finishCh.publish(ctx)
|
|
366
374
|
return res
|
|
367
|
-
})
|
|
368
|
-
.catch(
|
|
369
|
-
|
|
370
|
-
|
|
375
|
+
})
|
|
376
|
+
.catch((err) => {
|
|
377
|
+
ctx.error = err
|
|
378
|
+
errorCh.publish(ctx)
|
|
379
|
+
finishCh.publish(ctx)
|
|
371
380
|
throw err
|
|
372
|
-
})
|
|
373
|
-
} else {
|
|
374
|
-
finishCh.publish(undefined)
|
|
375
|
-
return result
|
|
381
|
+
})
|
|
376
382
|
}
|
|
383
|
+
finishCh.publish(ctx)
|
|
384
|
+
return result
|
|
377
385
|
} catch (error) {
|
|
378
|
-
|
|
379
|
-
|
|
386
|
+
ctx.error = error
|
|
387
|
+
errorCh.publish(ctx)
|
|
388
|
+
finishCh.publish(ctx)
|
|
380
389
|
throw error
|
|
381
390
|
}
|
|
382
391
|
})
|
|
@@ -402,5 +411,10 @@ function updateLatestOffset (topic, partition, offset, groupId) {
|
|
|
402
411
|
}
|
|
403
412
|
|
|
404
413
|
function getLatestOffsets () {
|
|
405
|
-
return
|
|
414
|
+
return [...latestConsumerOffsets.values()]
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
function convertHeaders (headers) {
|
|
418
|
+
// convert headers from object to array of objects with 1 key and value per array entry
|
|
419
|
+
return Object.entries(headers).map(([key, value]) => ({ [key.toString()]: value.toString() }))
|
|
406
420
|
}
|
|
@@ -10,7 +10,7 @@ function publishRequestCookieAndNext (req, res, next) {
|
|
|
10
10
|
if (cookieParserReadCh.hasSubscribers && req) {
|
|
11
11
|
const abortController = new AbortController()
|
|
12
12
|
|
|
13
|
-
const mergedCookies =
|
|
13
|
+
const mergedCookies = { ...req.cookies, ...req.signedCookies }
|
|
14
14
|
|
|
15
15
|
cookieParserReadCh.publish({ req, res, abortController, cookies: mergedCookies })
|
|
16
16
|
|
|
@@ -32,7 +32,7 @@ function wrapMaybeInvoke (_maybeInvoke) {
|
|
|
32
32
|
const callbackIndex = args.length - 1
|
|
33
33
|
const callback = args[callbackIndex]
|
|
34
34
|
|
|
35
|
-
if (callback
|
|
35
|
+
if (typeof callback === 'function') {
|
|
36
36
|
args[callbackIndex] = AsyncResource.bind(callback)
|
|
37
37
|
}
|
|
38
38
|
|
|
@@ -43,14 +43,11 @@ function wrapMaybeInvoke (_maybeInvoke) {
|
|
|
43
43
|
|
|
44
44
|
function wrapQuery (query) {
|
|
45
45
|
const wrapped = function (q, params, callback) {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
if (typeof callback === 'function') {
|
|
49
|
-
arguments[arguments.length - 1] = callback
|
|
46
|
+
if (typeof arguments[arguments.length - 1] === 'function') {
|
|
47
|
+
arguments[arguments.length - 1] = AsyncResource.bind(arguments[arguments.length - 1])
|
|
50
48
|
}
|
|
51
49
|
|
|
52
|
-
|
|
53
|
-
return res
|
|
50
|
+
return query.apply(this, arguments)
|
|
54
51
|
}
|
|
55
52
|
return wrapped
|
|
56
53
|
}
|
|
@@ -184,12 +181,12 @@ addHook({ name: 'couchbase', file: 'lib/bucket.js', versions: ['^2.6.12'] }, Buc
|
|
|
184
181
|
startCh.publish({ resource: n1qlQuery, bucket: { name: this.name || this._name }, seedNodes: this._dd_hosts })
|
|
185
182
|
|
|
186
183
|
emitter.once('rows', asyncResource.bind(() => {
|
|
187
|
-
finishCh.publish(
|
|
184
|
+
finishCh.publish()
|
|
188
185
|
}))
|
|
189
186
|
|
|
190
187
|
emitter.once(errorMonitor, asyncResource.bind((error) => {
|
|
191
188
|
errorCh.publish(error)
|
|
192
|
-
finishCh.publish(
|
|
189
|
+
finishCh.publish()
|
|
193
190
|
}))
|
|
194
191
|
|
|
195
192
|
try {
|