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