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
package/LICENSE-3rdparty.csv
CHANGED
|
@@ -37,7 +37,7 @@ dev,@types/node,MIT,Copyright Authors
|
|
|
37
37
|
dev,@eslint/eslintrc,MIT,Copyright OpenJS Foundation and other contributors, <www.openjsf.org>
|
|
38
38
|
dev,@eslint/js,MIT,Copyright OpenJS Foundation and other contributors, <www.openjsf.org>
|
|
39
39
|
dev,@msgpack/msgpack,ISC,Copyright 2019 The MessagePack Community
|
|
40
|
-
dev,@stylistic/eslint-plugin
|
|
40
|
+
dev,@stylistic/eslint-plugin,MIT,Copyright OpenJS Foundation and other contributors, <www.openjsf.org>
|
|
41
41
|
dev,axios,MIT,Copyright 2014-present Matt Zabriskie
|
|
42
42
|
dev,benchmark,MIT,Copyright 2010-2016 Mathias Bynens Robert Kieffer John-David Dalton
|
|
43
43
|
dev,body-parser,MIT,Copyright 2014 Jonathan Ong 2014-2015 Douglas Christopher Wilson
|
|
@@ -67,6 +67,7 @@ dev,sinon-chai,WTFPL and BSD-2-Clause,Copyright 2004 Sam Hocevar 2012–2017 Dom
|
|
|
67
67
|
dev,tap,ISC,Copyright 2011-2022 Isaac Z. Schlueter and Contributors
|
|
68
68
|
dev,tiktoken,MIT,Copyright (c) 2022 OpenAI, Shantanu Jain
|
|
69
69
|
dev,yaml,ISC,Copyright Eemeli Aro <eemeli@gmail.com>
|
|
70
|
+
dev,yarn-deduplicate,Apache license 2.0,Copyright [yyyy] [name of copyright owner]
|
|
70
71
|
file,aws-lambda-nodejs-runtime-interface-client,Apache 2.0,Copyright 2019 Amazon.com Inc. or its affiliates. All Rights Reserved.
|
|
71
72
|
file,profile.proto,Apache license 2.0,Copyright 2016 Google Inc.
|
|
72
73
|
file,is-git-url,MIT,Copyright (c) 2017 Jon Schlinkert.
|
package/index.d.ts
CHANGED
|
@@ -209,7 +209,6 @@ interface Plugins {
|
|
|
209
209
|
"openai": tracer.plugins.openai;
|
|
210
210
|
"opensearch": tracer.plugins.opensearch;
|
|
211
211
|
"oracledb": tracer.plugins.oracledb;
|
|
212
|
-
"paperplane": tracer.plugins.paperplane;
|
|
213
212
|
"playwright": tracer.plugins.playwright;
|
|
214
213
|
"pg": tracer.plugins.pg;
|
|
215
214
|
"pino": tracer.plugins.pino;
|
|
@@ -457,7 +456,7 @@ declare namespace tracer {
|
|
|
457
456
|
rateLimit?: number,
|
|
458
457
|
|
|
459
458
|
/**
|
|
460
|
-
* Sampling rules to apply to priority
|
|
459
|
+
* Sampling rules to apply to priority sampling. Each rule is a JSON,
|
|
461
460
|
* consisting of `service` and `name`, which are regexes to match against
|
|
462
461
|
* a trace's `service` and `name`, and a corresponding `sampleRate`. If not
|
|
463
462
|
* specified, will defer to global sampling rate for all spans.
|
|
@@ -714,7 +713,12 @@ declare namespace tracer {
|
|
|
714
713
|
/** Whether to enable RASP.
|
|
715
714
|
* @default false
|
|
716
715
|
*/
|
|
717
|
-
enabled?: boolean
|
|
716
|
+
enabled?: boolean,
|
|
717
|
+
|
|
718
|
+
/** Whether to enable request body collection on RASP event
|
|
719
|
+
* @default false
|
|
720
|
+
*/
|
|
721
|
+
bodyCollection?: boolean
|
|
718
722
|
},
|
|
719
723
|
/**
|
|
720
724
|
* Configuration for stack trace reporting
|
|
@@ -734,6 +738,25 @@ declare namespace tracer {
|
|
|
734
738
|
* @default 32
|
|
735
739
|
*/
|
|
736
740
|
maxDepth?: number,
|
|
741
|
+
},
|
|
742
|
+
/**
|
|
743
|
+
* Configuration for extended headers collection tied to security events
|
|
744
|
+
*/
|
|
745
|
+
extendedHeadersCollection?: {
|
|
746
|
+
/** Whether to enable extended headers collection
|
|
747
|
+
* @default false
|
|
748
|
+
*/
|
|
749
|
+
enabled: boolean,
|
|
750
|
+
|
|
751
|
+
/** Whether to redact collected headers
|
|
752
|
+
* @default true
|
|
753
|
+
*/
|
|
754
|
+
redaction: boolean,
|
|
755
|
+
|
|
756
|
+
/** Specifies the maximum number of headers collected.
|
|
757
|
+
* @default 50
|
|
758
|
+
*/
|
|
759
|
+
maxHeaders: number,
|
|
737
760
|
}
|
|
738
761
|
}
|
|
739
762
|
|
|
@@ -801,7 +824,7 @@ declare namespace tracer {
|
|
|
801
824
|
}
|
|
802
825
|
|
|
803
826
|
/**
|
|
804
|
-
* Configuration enabling LLM Observability. Enablement is
|
|
827
|
+
* Configuration enabling LLM Observability. Enablement is superseded by the DD_LLMOBS_ENABLED environment variable.
|
|
805
828
|
*/
|
|
806
829
|
llmobs?: llmobs.LLMObsEnableOptions
|
|
807
830
|
}
|
|
@@ -1498,7 +1521,7 @@ declare namespace tracer {
|
|
|
1498
1521
|
|
|
1499
1522
|
/**
|
|
1500
1523
|
* Whether to include the source of the operation within the query as a tag
|
|
1501
|
-
* on every span. This may contain sensitive information and
|
|
1524
|
+
* on every span. This may contain sensitive information and should only be
|
|
1502
1525
|
* enabled if sensitive data is always sent as variables and not in the
|
|
1503
1526
|
* query text.
|
|
1504
1527
|
*
|
|
@@ -1876,12 +1899,6 @@ declare namespace tracer {
|
|
|
1876
1899
|
service?: string | ((params: any) => string);
|
|
1877
1900
|
}
|
|
1878
1901
|
|
|
1879
|
-
/**
|
|
1880
|
-
* This plugin automatically instruments the
|
|
1881
|
-
* [paperplane](https://github.com/articulate/paperplane) module.
|
|
1882
|
-
*/
|
|
1883
|
-
interface paperplane extends HttpServer {}
|
|
1884
|
-
|
|
1885
1902
|
/**
|
|
1886
1903
|
* This plugin automatically instruments the
|
|
1887
1904
|
* [playwright](https://github.com/microsoft/playwright) module.
|
|
@@ -2485,7 +2502,7 @@ declare namespace tracer {
|
|
|
2485
2502
|
annotate (span: tracer.Span | undefined, options: llmobs.AnnotationOptions): void
|
|
2486
2503
|
|
|
2487
2504
|
/**
|
|
2488
|
-
* Submits a custom
|
|
2505
|
+
* Submits a custom evaluation metric for a given span ID and trace ID.
|
|
2489
2506
|
* @param spanContext The span context of the span to submit the evaluation metric for.
|
|
2490
2507
|
* @param options An object containing the label, metric type, value, and tags of the evaluation metric.
|
|
2491
2508
|
*/
|
|
@@ -2499,7 +2516,7 @@ declare namespace tracer {
|
|
|
2499
2516
|
|
|
2500
2517
|
interface EvaluationOptions {
|
|
2501
2518
|
/**
|
|
2502
|
-
* The name of the
|
|
2519
|
+
* The name of the evaluation metric
|
|
2503
2520
|
*/
|
|
2504
2521
|
label: string,
|
|
2505
2522
|
|
|
@@ -2623,7 +2640,7 @@ declare namespace tracer {
|
|
|
2623
2640
|
metadata?: { [key: string]: any },
|
|
2624
2641
|
|
|
2625
2642
|
/**
|
|
2626
|
-
* Object of JSON
|
|
2643
|
+
* Object of JSON serializable key-value metrics (number) pairs, such as `{input,output,total}Tokens`
|
|
2627
2644
|
*/
|
|
2628
2645
|
metrics?: { [key: string]: number },
|
|
2629
2646
|
|
|
@@ -2661,7 +2678,7 @@ declare namespace tracer {
|
|
|
2661
2678
|
|
|
2662
2679
|
/**
|
|
2663
2680
|
* The name of the ML application that the agent is orchestrating.
|
|
2664
|
-
* If not provided, the default value will be set to mlApp provided during
|
|
2681
|
+
* If not provided, the default value will be set to mlApp provided during initialization, or `DD_LLMOBS_ML_APP`.
|
|
2665
2682
|
*/
|
|
2666
2683
|
mlApp?: string,
|
|
2667
2684
|
|
|
@@ -2701,7 +2718,7 @@ declare namespace tracer {
|
|
|
2701
2718
|
mlApp?: string,
|
|
2702
2719
|
|
|
2703
2720
|
/**
|
|
2704
|
-
* Set to `true` to
|
|
2721
|
+
* Set to `true` to disable sending data that requires a Datadog Agent.
|
|
2705
2722
|
*/
|
|
2706
2723
|
agentlessEnabled?: boolean,
|
|
2707
2724
|
}
|
package/initialize.mjs
CHANGED
|
@@ -17,7 +17,6 @@ import { fileURLToPath } from 'node:url'
|
|
|
17
17
|
import {
|
|
18
18
|
load as origLoad,
|
|
19
19
|
resolve as origResolve,
|
|
20
|
-
getFormat as origGetFormat,
|
|
21
20
|
getSource as origGetSource
|
|
22
21
|
} from 'import-in-the-middle/hook.mjs'
|
|
23
22
|
|
|
@@ -26,7 +25,7 @@ function insertInit (result) {
|
|
|
26
25
|
if (!hasInsertedInit) {
|
|
27
26
|
hasInsertedInit = true
|
|
28
27
|
result.source = `
|
|
29
|
-
import '${fileURLToPath(new URL('
|
|
28
|
+
import '${fileURLToPath(new URL('init.js', import.meta.url))}';
|
|
30
29
|
${result.source}`
|
|
31
30
|
}
|
|
32
31
|
return result
|
|
@@ -45,8 +44,6 @@ export async function load (url, context, nextLoad) {
|
|
|
45
44
|
|
|
46
45
|
export const resolve = brokenLoaders ? undefined : origResolve
|
|
47
46
|
|
|
48
|
-
export const getFormat = origGetFormat
|
|
49
|
-
|
|
50
47
|
export async function getSource (...args) {
|
|
51
48
|
return insertInit(await origGetSource(...args))
|
|
52
49
|
}
|
|
@@ -60,3 +57,5 @@ if (isMainThread) {
|
|
|
60
57
|
})
|
|
61
58
|
}
|
|
62
59
|
}
|
|
60
|
+
|
|
61
|
+
export { getFormat } from 'import-in-the-middle/hook.mjs'
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dd-trace",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.54.0",
|
|
4
4
|
"description": "Datadog APM tracing client for JavaScript",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"typings": "index.d.ts",
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
"preinstall": "node scripts/preinstall.js",
|
|
10
10
|
"bench": "node benchmark/index.js",
|
|
11
11
|
"bench:e2e:ci-visibility": "node benchmark/e2e-ci/benchmark-run.js",
|
|
12
|
+
"dependencies:dedupe": "yarn-deduplicate yarn.lock",
|
|
12
13
|
"type:doc": "cd docs && yarn && yarn build",
|
|
13
14
|
"type:test": "cd docs && yarn && yarn test",
|
|
14
15
|
"lint": "node scripts/check_licenses.js && eslint . --max-warnings 0 && yarn audit",
|
|
@@ -83,75 +84,76 @@
|
|
|
83
84
|
"node": ">=18"
|
|
84
85
|
},
|
|
85
86
|
"dependencies": {
|
|
86
|
-
"@datadog/libdatadog": "^0.
|
|
87
|
+
"@datadog/libdatadog": "^0.6.0",
|
|
87
88
|
"@datadog/native-appsec": "8.5.2",
|
|
88
89
|
"@datadog/native-iast-taint-tracking": "4.0.0",
|
|
89
90
|
"@datadog/native-metrics": "^3.1.1",
|
|
90
91
|
"@datadog/pprof": "5.8.0",
|
|
91
|
-
"@datadog/sketches-js": "^2.1.
|
|
92
|
+
"@datadog/sketches-js": "^2.1.1",
|
|
92
93
|
"@datadog/wasm-js-rewriter": "4.0.1",
|
|
93
94
|
"@isaacs/ttlcache": "^1.4.1",
|
|
94
95
|
"@opentelemetry/api": ">=1.0.0 <1.9.0",
|
|
95
96
|
"@opentelemetry/core": "^1.14.0",
|
|
96
97
|
"crypto-randomuuid": "^1.0.0",
|
|
97
|
-
"dc-polyfill": "0.1.
|
|
98
|
+
"dc-polyfill": "0.1.9",
|
|
98
99
|
"ignore": "^5.2.4",
|
|
99
|
-
"import-in-the-middle": "1.
|
|
100
|
-
"istanbul-lib-coverage": "3.2.
|
|
100
|
+
"import-in-the-middle": "1.14.0",
|
|
101
|
+
"istanbul-lib-coverage": "3.2.2",
|
|
101
102
|
"jest-docblock": "^29.7.0",
|
|
102
103
|
"koalas": "^1.0.2",
|
|
103
104
|
"limiter": "1.1.5",
|
|
104
105
|
"lodash.sortby": "^4.7.0",
|
|
105
|
-
"lru-cache": "^7.
|
|
106
|
-
"module-details-from-path": "^1.0.
|
|
106
|
+
"lru-cache": "^7.18.3",
|
|
107
|
+
"module-details-from-path": "^1.0.4",
|
|
107
108
|
"mutexify": "^1.4.0",
|
|
108
109
|
"opentracing": ">=0.12.1",
|
|
109
110
|
"path-to-regexp": "^0.1.12",
|
|
110
111
|
"pprof-format": "^2.1.0",
|
|
111
|
-
"protobufjs": "^7.
|
|
112
|
+
"protobufjs": "^7.5.3",
|
|
112
113
|
"retry": "^0.13.1",
|
|
113
|
-
"rfdc": "^1.
|
|
114
|
+
"rfdc": "^1.4.1",
|
|
114
115
|
"semifies": "^1.0.0",
|
|
115
|
-
"shell-quote": "^1.8.
|
|
116
|
+
"shell-quote": "^1.8.2",
|
|
116
117
|
"source-map": "^0.7.4",
|
|
117
118
|
"tlhunter-sorted-set": "^0.1.0",
|
|
118
119
|
"ttl-set": "^1.0.0"
|
|
119
120
|
},
|
|
120
121
|
"devDependencies": {
|
|
121
|
-
"@babel/helpers": "^7.
|
|
122
|
-
"@eslint/eslintrc": "^3.
|
|
123
|
-
"@eslint/js": "^9.
|
|
124
|
-
"@msgpack/msgpack": "^3.
|
|
125
|
-
"@stylistic/eslint-plugin
|
|
126
|
-
"@types/node": "^
|
|
127
|
-
"axios": "^1.
|
|
122
|
+
"@babel/helpers": "^7.27.3",
|
|
123
|
+
"@eslint/eslintrc": "^3.3.1",
|
|
124
|
+
"@eslint/js": "^9.27.0",
|
|
125
|
+
"@msgpack/msgpack": "^3.1.2",
|
|
126
|
+
"@stylistic/eslint-plugin": "^4.4.0",
|
|
127
|
+
"@types/node": "^18.19.106",
|
|
128
|
+
"axios": "^1.9.0",
|
|
128
129
|
"benchmark": "^2.1.4",
|
|
129
|
-
"body-parser": "^
|
|
130
|
-
"chai": "^4.
|
|
131
|
-
"eslint": "^9.
|
|
130
|
+
"body-parser": "^2.2.0",
|
|
131
|
+
"chai": "^4.5.0",
|
|
132
|
+
"eslint": "^9.27.0",
|
|
132
133
|
"eslint-config-standard": "^17.1.0",
|
|
133
134
|
"eslint-plugin-import": "^2.31.0",
|
|
134
135
|
"eslint-plugin-mocha": "^10.5.0",
|
|
135
|
-
"eslint-plugin-n": "^17.
|
|
136
|
+
"eslint-plugin-n": "^17.18.0",
|
|
136
137
|
"eslint-plugin-promise": "^7.2.1",
|
|
137
138
|
"eslint-plugin-unicorn": "^57.0.0",
|
|
138
139
|
"express": "^4.21.2",
|
|
139
140
|
"get-port": "^5.1.1",
|
|
140
|
-
"glob": "^7.
|
|
141
|
-
"globals": "^15.
|
|
141
|
+
"glob": "^7.2.3",
|
|
142
|
+
"globals": "^15.15.0",
|
|
142
143
|
"graphql": "0.13.2",
|
|
143
|
-
"jszip": "^3.
|
|
144
|
-
"mocha": "^10",
|
|
145
|
-
"multer": "^
|
|
146
|
-
"nock": "^11.
|
|
144
|
+
"jszip": "^3.10.1",
|
|
145
|
+
"mocha": "^10.8.2",
|
|
146
|
+
"multer": "^2.0.0",
|
|
147
|
+
"nock": "^11.9.1",
|
|
147
148
|
"nyc": "^15.1.0",
|
|
148
149
|
"proxyquire": "^1.8.0",
|
|
149
|
-
"rimraf": "^3.0.
|
|
150
|
-
"semver": "^7.
|
|
151
|
-
"sinon": "^
|
|
150
|
+
"rimraf": "^3.0.2",
|
|
151
|
+
"semver": "^7.7.2",
|
|
152
|
+
"sinon": "^18.0.1",
|
|
152
153
|
"sinon-chai": "^3.7.0",
|
|
153
|
-
"tap": "^16.3.
|
|
154
|
-
"tiktoken": "^1.0.
|
|
155
|
-
"yaml": "^2.
|
|
154
|
+
"tap": "^16.3.10",
|
|
155
|
+
"tiktoken": "^1.0.21",
|
|
156
|
+
"yaml": "^2.8.0",
|
|
157
|
+
"yarn-deduplicate": "^6.0.2"
|
|
156
158
|
}
|
|
157
159
|
}
|
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
module.exports = str
|
|
3
|
+
module.exports = function kebabcase (str) {
|
|
4
4
|
if (typeof str !== 'string') {
|
|
5
5
|
throw new TypeError('Expected a string')
|
|
6
6
|
}
|
|
7
7
|
|
|
8
8
|
return str
|
|
9
9
|
.trim()
|
|
10
|
-
.replace(/([a-z])([A-Z])/g, '$1-$2')
|
|
11
|
-
.replace(
|
|
12
|
-
.replace(/^-+|-+$/g, '')
|
|
13
|
-
.replace(/_/g, '-')
|
|
14
|
-
.replace(/-{2,}/g, '-')
|
|
10
|
+
.replace(/([a-z])([A-Z])/g, '$1-$2') // Convert camelCase to kebab-case
|
|
11
|
+
.replace(/[\s_]+/g, '-') // Replace spaces and underscores with a single dash
|
|
12
|
+
.replace(/^-+|-+$/g, '') // Trim leading and trailing dashes
|
|
15
13
|
.toLowerCase()
|
|
16
14
|
}
|
|
@@ -11,7 +11,7 @@ const digitRegex = /^\d+$/
|
|
|
11
11
|
* @param {Object} tags - Key/value pairs of tags
|
|
12
12
|
* @returns Object - Parsed tags
|
|
13
13
|
*/
|
|
14
|
-
module.exports = tags
|
|
14
|
+
module.exports = function parseTags (tags) {
|
|
15
15
|
const parsedTags = {}
|
|
16
16
|
for (const [tag, value] of Object.entries(tags)) {
|
|
17
17
|
const keys = tag.split('.')
|
|
@@ -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 shimmer = require('../../datadog-shimmer')
|
|
9
8
|
|
|
@@ -15,9 +14,9 @@ addHook({ name: 'amqp10', file: 'lib/sender_link.js', versions: ['>=3'] }, Sende
|
|
|
15
14
|
if (!startCh.hasSubscribers) {
|
|
16
15
|
return send.apply(this, arguments)
|
|
17
16
|
}
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
|
|
17
|
+
const ctx = { link: this }
|
|
18
|
+
|
|
19
|
+
return startCh.runStores(ctx, () => {
|
|
21
20
|
try {
|
|
22
21
|
const promise = send.apply(this, arguments)
|
|
23
22
|
|
|
@@ -26,12 +25,13 @@ addHook({ name: 'amqp10', file: 'lib/sender_link.js', versions: ['>=3'] }, Sende
|
|
|
26
25
|
return promise
|
|
27
26
|
}
|
|
28
27
|
|
|
29
|
-
promise.then(
|
|
30
|
-
|
|
31
|
-
|
|
28
|
+
promise.then(
|
|
29
|
+
() => finish(finishCh, errorCh, null, ctx),
|
|
30
|
+
e => finish(finishCh, errorCh, e, ctx)
|
|
31
|
+
)
|
|
32
32
|
return promise
|
|
33
33
|
} catch (err) {
|
|
34
|
-
finish(finishCh, errorCh, err)
|
|
34
|
+
finish(finishCh, errorCh, err, ctx)
|
|
35
35
|
throw err
|
|
36
36
|
}
|
|
37
37
|
})
|
|
@@ -47,25 +47,27 @@ addHook({ name: 'amqp10', file: 'lib/receiver_link.js', versions: ['>=3'] }, Rec
|
|
|
47
47
|
if (!transferFrame || transferFrame.aborted || transferFrame.more) {
|
|
48
48
|
return messageReceived.apply(this, arguments)
|
|
49
49
|
}
|
|
50
|
-
const
|
|
51
|
-
|
|
52
|
-
|
|
50
|
+
const ctx = { link: this }
|
|
51
|
+
|
|
52
|
+
return startCh.runStores(ctx, () => {
|
|
53
53
|
try {
|
|
54
54
|
return messageReceived.apply(this, arguments)
|
|
55
55
|
} catch (err) {
|
|
56
|
-
|
|
56
|
+
ctx.error = err
|
|
57
|
+
errorCh.publish(ctx)
|
|
57
58
|
throw err
|
|
58
59
|
} finally {
|
|
59
|
-
finishCh.publish()
|
|
60
|
+
finishCh.publish(ctx)
|
|
60
61
|
}
|
|
61
62
|
})
|
|
62
63
|
})
|
|
63
64
|
return ReceiverLink
|
|
64
65
|
})
|
|
65
66
|
|
|
66
|
-
function finish (finishCh, errorCh, error) {
|
|
67
|
+
function finish (finishCh, errorCh, error, ctx) {
|
|
67
68
|
if (error) {
|
|
68
|
-
|
|
69
|
+
ctx.error = error
|
|
70
|
+
errorCh.publish(ctx)
|
|
69
71
|
}
|
|
70
|
-
finishCh.publish()
|
|
72
|
+
finishCh.publish(ctx)
|
|
71
73
|
}
|
|
@@ -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()
|