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
|
@@ -9,7 +9,7 @@ const { DD_EXTERNAL_ENV } = process.env
|
|
|
9
9
|
const uuidSource =
|
|
10
10
|
'[0-9a-f]{8}[-_][0-9a-f]{4}[-_][0-9a-f]{4}[-_][0-9a-f]{4}[-_][0-9a-f]{12}|[0-9a-f]{8}(?:-[0-9a-f]{4}){4}$'
|
|
11
11
|
const containerSource = '[0-9a-f]{64}'
|
|
12
|
-
const taskSource =
|
|
12
|
+
const taskSource = String.raw`[0-9a-f]{32}-\d+`
|
|
13
13
|
const lineReg = /^(\d+):([^:]*):(.+)$/m
|
|
14
14
|
const entityReg = new RegExp(`.*(${uuidSource}|${containerSource}|${taskSource})(?:\\.scope)?$`, 'm')
|
|
15
15
|
|
|
@@ -38,10 +38,12 @@ class FormData extends Readable {
|
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
_appendFile (key, value, { filename, contentType = 'application/octet-stream' }) {
|
|
41
|
-
this._data.push(
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
41
|
+
this._data.push(
|
|
42
|
+
`Content-Disposition: form-data; name="${key}"; filename="${filename}"\r\n`,
|
|
43
|
+
`Content-Type: ${contentType}\r\n\r\n`,
|
|
44
|
+
value,
|
|
45
|
+
'\r\n'
|
|
46
|
+
)
|
|
45
47
|
}
|
|
46
48
|
|
|
47
49
|
_read () {
|
|
@@ -100,7 +100,7 @@ function request (data, options, callback) {
|
|
|
100
100
|
options.url || options.hostname || `http://localhost:${options.port}`
|
|
101
101
|
).href
|
|
102
102
|
errorMessage = `Error from ${fullUrl}: ${res.statusCode} ${http.STATUS_CODES[res.statusCode]}.`
|
|
103
|
-
} catch
|
|
103
|
+
} catch {
|
|
104
104
|
// ignore error
|
|
105
105
|
}
|
|
106
106
|
const responseData = buffer.toString()
|
|
@@ -5,7 +5,7 @@ const https = require('https')
|
|
|
5
5
|
class ExternalLogger {
|
|
6
6
|
// Note: these attribute names match the corresponding entry in the JSON payload.
|
|
7
7
|
constructor ({
|
|
8
|
-
ddsource, hostname, service, apiKey, site = 'datadoghq.com', interval =
|
|
8
|
+
ddsource, hostname, service, apiKey, site = 'datadoghq.com', interval = 10_000, timeout = 2000, limit = 1000
|
|
9
9
|
}) {
|
|
10
10
|
this.enabled = !!apiKey
|
|
11
11
|
|
|
@@ -128,10 +128,10 @@ class ExternalLogger {
|
|
|
128
128
|
}
|
|
129
129
|
|
|
130
130
|
class NoopExternalLogger {
|
|
131
|
-
log () {
|
|
132
|
-
enqueue () {
|
|
133
|
-
shutdown () {
|
|
134
|
-
flush () {
|
|
131
|
+
log () {}
|
|
132
|
+
enqueue () {}
|
|
133
|
+
shutdown () {}
|
|
134
|
+
flush () {}
|
|
135
135
|
}
|
|
136
136
|
|
|
137
137
|
module.exports.ExternalLogger = ExternalLogger
|
|
@@ -22,11 +22,7 @@ class FlareFile extends Writable {
|
|
|
22
22
|
|
|
23
23
|
this._reserve(length)
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
this.length += chunk.copy(this._buffer, this.length)
|
|
27
|
-
} else {
|
|
28
|
-
this.length += this._buffer.write(chunk, encoding)
|
|
29
|
-
}
|
|
25
|
+
this.length += Buffer.isBuffer(chunk) ? chunk.copy(this._buffer, this.length) : this._buffer.write(chunk, encoding)
|
|
30
26
|
|
|
31
27
|
callback()
|
|
32
28
|
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
const { randomFillSync } = require('crypto')
|
|
4
4
|
|
|
5
|
-
const UINT_MAX =
|
|
5
|
+
const UINT_MAX = 4_294_967_296
|
|
6
6
|
|
|
7
7
|
const data = new Uint8Array(8 * 8192)
|
|
8
8
|
const zeroId = new Uint8Array(8)
|
|
@@ -26,6 +26,10 @@ class Identifier {
|
|
|
26
26
|
: toNumberString(this._buffer, radix)
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
+
toBigInt () {
|
|
30
|
+
return Buffer.from(this._buffer).readBigUInt64BE(0)
|
|
31
|
+
}
|
|
32
|
+
|
|
29
33
|
toBuffer () {
|
|
30
34
|
return this._buffer
|
|
31
35
|
}
|
|
@@ -61,12 +65,12 @@ function createBuffer (value) {
|
|
|
61
65
|
|
|
62
66
|
const size = Math.ceil(value.length / 16) * 16
|
|
63
67
|
const bytes = size / 2
|
|
64
|
-
const buffer =
|
|
68
|
+
const buffer = []
|
|
65
69
|
|
|
66
70
|
value = value.padStart(size, '0')
|
|
67
71
|
|
|
68
72
|
for (let i = 0; i < bytes; i++) {
|
|
69
|
-
buffer[i] = parseInt(value.
|
|
73
|
+
buffer[i] = Number.parseInt(value.slice(i * 2, i * 2 + 2), 16)
|
|
70
74
|
}
|
|
71
75
|
|
|
72
76
|
return buffer
|
|
@@ -86,7 +90,7 @@ function fromString (str, raddix) {
|
|
|
86
90
|
const sign = pos
|
|
87
91
|
|
|
88
92
|
while (pos < len) {
|
|
89
|
-
const chr = parseInt(str[pos++], raddix)
|
|
93
|
+
const chr = Number.parseInt(str[pos++], raddix)
|
|
90
94
|
|
|
91
95
|
if (!(chr >= 0)) break // NaN
|
|
92
96
|
|
|
@@ -161,7 +165,7 @@ function pseudoRandom () {
|
|
|
161
165
|
|
|
162
166
|
// Read a buffer to unsigned integer bytes.
|
|
163
167
|
function readInt32 (buffer, offset) {
|
|
164
|
-
return (buffer[offset + 0] *
|
|
168
|
+
return (buffer[offset + 0] * 16_777_216) +
|
|
165
169
|
(buffer[offset + 1] << 16) +
|
|
166
170
|
(buffer[offset + 2] << 8) +
|
|
167
171
|
buffer[offset + 3]
|
|
@@ -178,4 +182,6 @@ function writeUInt32BE (buffer, value, offset) {
|
|
|
178
182
|
buffer[0 + offset] = value & 255
|
|
179
183
|
}
|
|
180
184
|
|
|
181
|
-
module.exports =
|
|
185
|
+
module.exports = function createIdentifier (value, radix) {
|
|
186
|
+
return new Identifier(value, radix)
|
|
187
|
+
}
|
|
@@ -1,27 +1,15 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const satisfies = require('semifies')
|
|
4
|
-
const logger = require('./log')
|
|
5
3
|
const { addHook } = require('import-in-the-middle')
|
|
6
4
|
const dc = require('dc-polyfill')
|
|
7
5
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
module.exports = require('import-in-the-middle')
|
|
19
|
-
} else {
|
|
20
|
-
logger.warn('ESM is not fully supported by this version of Node.js, ' +
|
|
21
|
-
'so dd-trace will not intercept ESM loading.')
|
|
22
|
-
module.exports = () => ({
|
|
23
|
-
unhook: () => {}
|
|
24
|
-
})
|
|
25
|
-
module.exports.addHook = () => {}
|
|
26
|
-
module.exports.removeHook = () => {}
|
|
27
|
-
}
|
|
6
|
+
const moduleLoadStartChannel = dc.channel('dd-trace:moduleLoadStart')
|
|
7
|
+
addHook((name, namespace) => {
|
|
8
|
+
if (moduleLoadStartChannel.hasSubscribers) {
|
|
9
|
+
moduleLoadStartChannel.publish({
|
|
10
|
+
filename: name,
|
|
11
|
+
module: namespace
|
|
12
|
+
})
|
|
13
|
+
}
|
|
14
|
+
})
|
|
15
|
+
module.exports = require('import-in-the-middle')
|
|
@@ -25,11 +25,11 @@ let __lambdaTimeout
|
|
|
25
25
|
function checkTimeout (context) {
|
|
26
26
|
const remainingTimeInMillis = context.getRemainingTimeInMillis()
|
|
27
27
|
|
|
28
|
-
let apmFlushDeadline = parseInt(process.env.DD_APM_FLUSH_DEADLINE_MILLISECONDS) || 100
|
|
28
|
+
let apmFlushDeadline = Number.parseInt(process.env.DD_APM_FLUSH_DEADLINE_MILLISECONDS) || 100
|
|
29
29
|
apmFlushDeadline = apmFlushDeadline < 0 ? 100 : apmFlushDeadline
|
|
30
30
|
|
|
31
31
|
__lambdaTimeout = setTimeout(() => {
|
|
32
|
-
timeoutChannel.publish(
|
|
32
|
+
timeoutChannel.publish()
|
|
33
33
|
}, remainingTimeInMillis - apmFlushDeadline)
|
|
34
34
|
}
|
|
35
35
|
|
|
@@ -43,14 +43,14 @@ function checkTimeout (context) {
|
|
|
43
43
|
*/
|
|
44
44
|
function crashFlush () {
|
|
45
45
|
const activeSpan = tracer.scope().active()
|
|
46
|
-
if (activeSpan
|
|
46
|
+
if (activeSpan === null) {
|
|
47
|
+
log.debug('An impending timeout was reached, but no root span was found. No error will be tagged.')
|
|
48
|
+
} else {
|
|
47
49
|
const error = new ImpendingTimeout('Datadog detected an impending timeout')
|
|
48
50
|
activeSpan.addTags({
|
|
49
51
|
[ERROR_MESSAGE]: error.message,
|
|
50
52
|
[ERROR_TYPE]: error.name
|
|
51
53
|
})
|
|
52
|
-
} else {
|
|
53
|
-
log.debug('An impending timeout was reached, but no root span was found. No error will be tagged.')
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
tracer._processor.killAll()
|
|
@@ -70,7 +70,7 @@ function extractContext (args) {
|
|
|
70
70
|
if (context === undefined || context.getRemainingTimeInMillis === undefined) {
|
|
71
71
|
context = args.length > 2 ? args[2] : undefined
|
|
72
72
|
if (context === undefined || context.getRemainingTimeInMillis === undefined) {
|
|
73
|
-
throw Error('Could not extract context')
|
|
73
|
+
throw new Error('Could not extract context')
|
|
74
74
|
}
|
|
75
75
|
}
|
|
76
76
|
return context
|
|
@@ -60,7 +60,10 @@ function patchLambdaHandler (lambdaHandler) {
|
|
|
60
60
|
const lambdaTaskRoot = process.env.LAMBDA_TASK_ROOT
|
|
61
61
|
const originalLambdaHandler = process.env.DD_LAMBDA_HANDLER
|
|
62
62
|
|
|
63
|
-
if (originalLambdaHandler
|
|
63
|
+
if (originalLambdaHandler === undefined) {
|
|
64
|
+
// Instrumentation is done manually.
|
|
65
|
+
addHook({ name: 'datadog-lambda-js' }, patchDatadogLambdaModule)
|
|
66
|
+
} else {
|
|
64
67
|
const [moduleRoot, moduleAndHandler] = _extractModuleRootAndHandler(originalLambdaHandler)
|
|
65
68
|
const [_module, handlerPath] = _extractModuleNameAndHandlerPath(moduleAndHandler)
|
|
66
69
|
|
|
@@ -70,7 +73,4 @@ if (originalLambdaHandler !== undefined) {
|
|
|
70
73
|
for (const lambdaFilePath of lambdaFilePaths) {
|
|
71
74
|
addHook({ name: lambdaFilePath }, patchLambdaModule(handlerPath))
|
|
72
75
|
}
|
|
73
|
-
} else {
|
|
74
|
-
// Instrumentation is done manually.
|
|
75
|
-
addHook({ name: 'datadog-lambda-js' }, patchDatadogLambdaModule)
|
|
76
76
|
}
|
|
@@ -31,7 +31,7 @@ const {
|
|
|
31
31
|
*/
|
|
32
32
|
function _extractModuleRootAndHandler (fullHandler) {
|
|
33
33
|
const handlerString = path.basename(fullHandler)
|
|
34
|
-
const moduleRoot = fullHandler.
|
|
34
|
+
const moduleRoot = fullHandler.slice(0, Math.max(0, fullHandler.indexOf(handlerString)))
|
|
35
35
|
|
|
36
36
|
return [moduleRoot, handlerString]
|
|
37
37
|
}
|
|
@@ -9,7 +9,7 @@ const {
|
|
|
9
9
|
parseModelId
|
|
10
10
|
} = require('../../../../datadog-plugin-aws-sdk/src/services/bedrockruntime/utils')
|
|
11
11
|
|
|
12
|
-
const ENABLED_OPERATIONS = ['invokeModel']
|
|
12
|
+
const ENABLED_OPERATIONS = new Set(['invokeModel'])
|
|
13
13
|
|
|
14
14
|
const requestIdsToTokens = {}
|
|
15
15
|
|
|
@@ -21,7 +21,7 @@ class BedrockRuntimeLLMObsPlugin extends BaseLLMObsPlugin {
|
|
|
21
21
|
const request = response.request
|
|
22
22
|
const operation = request.operation
|
|
23
23
|
// avoids instrumenting other non supported runtime operations
|
|
24
|
-
if (!ENABLED_OPERATIONS.
|
|
24
|
+
if (!ENABLED_OPERATIONS.has(operation)) {
|
|
25
25
|
return
|
|
26
26
|
}
|
|
27
27
|
const { modelProvider, modelName } = parseModelId(request.params.modelId)
|
|
@@ -40,8 +40,8 @@ class BedrockRuntimeLLMObsPlugin extends BaseLLMObsPlugin {
|
|
|
40
40
|
const outputTokenCount = headers['x-amzn-bedrock-output-token-count']
|
|
41
41
|
|
|
42
42
|
requestIdsToTokens[requestId] = {
|
|
43
|
-
inputTokensFromHeaders: inputTokenCount && parseInt(inputTokenCount),
|
|
44
|
-
outputTokensFromHeaders: outputTokenCount && parseInt(outputTokenCount)
|
|
43
|
+
inputTokensFromHeaders: inputTokenCount && Number.parseInt(inputTokenCount),
|
|
44
|
+
outputTokensFromHeaders: outputTokenCount && Number.parseInt(outputTokenCount)
|
|
45
45
|
}
|
|
46
46
|
})
|
|
47
47
|
}
|
|
@@ -64,8 +64,8 @@ class BedrockRuntimeLLMObsPlugin extends BaseLLMObsPlugin {
|
|
|
64
64
|
|
|
65
65
|
// add metadata tags
|
|
66
66
|
this._tagger.tagMetadata(span, {
|
|
67
|
-
temperature: parseFloat(requestParams.temperature) || 0
|
|
68
|
-
max_tokens: parseInt(requestParams.maxTokens) || 0
|
|
67
|
+
temperature: Number.parseFloat(requestParams.temperature) || 0,
|
|
68
|
+
max_tokens: Number.parseInt(requestParams.maxTokens) || 0
|
|
69
69
|
})
|
|
70
70
|
|
|
71
71
|
// add I/O tags
|
|
@@ -5,16 +5,12 @@ const { spanHasError } = require('../../../util')
|
|
|
5
5
|
|
|
6
6
|
class LangChainLLMObsChainHandler extends LangChainLLMObsHandler {
|
|
7
7
|
setMetaTags ({ span, inputs, results }) {
|
|
8
|
-
let input
|
|
8
|
+
let input
|
|
9
9
|
if (inputs) {
|
|
10
10
|
input = this.formatIO(inputs)
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
output = ''
|
|
15
|
-
} else {
|
|
16
|
-
output = this.formatIO(results)
|
|
17
|
-
}
|
|
13
|
+
const output = !results || spanHasError(span) ? '' : this.formatIO(results)
|
|
18
14
|
|
|
19
15
|
// chain spans will always be workflows
|
|
20
16
|
this._tagger.tagTextIO(span, input, output)
|
|
@@ -61,12 +61,12 @@ class LangChainLLMObsChatModelHandler extends LangChainLLMObsHandler {
|
|
|
61
61
|
|
|
62
62
|
if (!isWorkflow && !tokensSetTopLevel) {
|
|
63
63
|
const { tokens, runId } = this.checkTokenUsageFromAIMessage(chatCompletionMessage)
|
|
64
|
-
if (
|
|
65
|
-
tokensPerRunId[runId] = tokens
|
|
66
|
-
} else {
|
|
64
|
+
if (tokensPerRunId[runId]) {
|
|
67
65
|
tokensPerRunId[runId].inputTokens += tokens.inputTokens
|
|
68
66
|
tokensPerRunId[runId].outputTokens += tokens.outputTokens
|
|
69
67
|
tokensPerRunId[runId].totalTokens += tokens.totalTokens
|
|
68
|
+
} else {
|
|
69
|
+
tokensPerRunId[runId] = tokens
|
|
70
70
|
}
|
|
71
71
|
}
|
|
72
72
|
}
|
|
@@ -9,8 +9,8 @@ const ANTHROPIC_PROVIDER_NAME = 'anthropic'
|
|
|
9
9
|
const BEDROCK_PROVIDER_NAME = 'amazon_bedrock'
|
|
10
10
|
const OPENAI_PROVIDER_NAME = 'openai'
|
|
11
11
|
|
|
12
|
-
const SUPPORTED_INTEGRATIONS = ['openai']
|
|
13
|
-
const LLM_SPAN_TYPES = ['llm', 'chat_model', 'embedding']
|
|
12
|
+
const SUPPORTED_INTEGRATIONS = new Set(['openai'])
|
|
13
|
+
const LLM_SPAN_TYPES = new Set(['llm', 'chat_model', 'embedding'])
|
|
14
14
|
const LLM = 'llm'
|
|
15
15
|
const WORKFLOW = 'workflow'
|
|
16
16
|
const EMBEDDING = 'embedding'
|
|
@@ -94,18 +94,18 @@ class BaseLangChainLLMObsPlugin extends LLMObsPlugin {
|
|
|
94
94
|
span?.context()._tags[`langchain.request.${provider}.parameters.model_kwargs.max_tokens`]
|
|
95
95
|
|
|
96
96
|
if (temperature) {
|
|
97
|
-
metadata.temperature = parseFloat(temperature)
|
|
97
|
+
metadata.temperature = Number.parseFloat(temperature)
|
|
98
98
|
}
|
|
99
99
|
|
|
100
100
|
if (maxTokens) {
|
|
101
|
-
metadata.maxTokens = parseInt(maxTokens)
|
|
101
|
+
metadata.maxTokens = Number.parseInt(maxTokens)
|
|
102
102
|
}
|
|
103
103
|
|
|
104
104
|
this._tagger.tagMetadata(span, metadata)
|
|
105
105
|
}
|
|
106
106
|
|
|
107
107
|
getKind (type, provider) {
|
|
108
|
-
if (LLM_SPAN_TYPES.
|
|
108
|
+
if (LLM_SPAN_TYPES.has(type)) {
|
|
109
109
|
const llmobsIntegration = this.getIntegrationName(type, provider)
|
|
110
110
|
|
|
111
111
|
if (!this.isLLMIntegrationEnabled(llmobsIntegration)) {
|
|
@@ -129,7 +129,7 @@ class BaseLangChainLLMObsPlugin extends LLMObsPlugin {
|
|
|
129
129
|
}
|
|
130
130
|
|
|
131
131
|
isLLMIntegrationEnabled (integration) {
|
|
132
|
-
return SUPPORTED_INTEGRATIONS.
|
|
132
|
+
return SUPPORTED_INTEGRATIONS.has(integration) && pluginManager?._pluginsByName[integration]?.llmobs?._enabled
|
|
133
133
|
}
|
|
134
134
|
}
|
|
135
135
|
|
|
@@ -105,7 +105,7 @@ class OpenAiLLMObsPlugin extends LLMObsPlugin {
|
|
|
105
105
|
const embeddingInput = embeddingInputs.map(input => ({ text: input }))
|
|
106
106
|
|
|
107
107
|
if (error) {
|
|
108
|
-
this._tagger.tagEmbeddingIO(span, embeddingInput
|
|
108
|
+
this._tagger.tagEmbeddingIO(span, embeddingInput)
|
|
109
109
|
return
|
|
110
110
|
}
|
|
111
111
|
|
|
@@ -121,7 +121,7 @@ class LLMObs extends NoopLLMObs {
|
|
|
121
121
|
}
|
|
122
122
|
|
|
123
123
|
const kind = validateKind(options.kind) // will throw if kind is undefined or not an expected kind
|
|
124
|
-
let name = options.name ||
|
|
124
|
+
let name = options.name || fn?.name || kind
|
|
125
125
|
|
|
126
126
|
if (!name) {
|
|
127
127
|
logger.warn('No span name provided for `wrap`. Defaulting to "unnamed-anonymous-function".')
|
|
@@ -285,7 +285,7 @@ class LLMObs extends NoopLLMObs {
|
|
|
285
285
|
}
|
|
286
286
|
if (!(span instanceof Span)) {
|
|
287
287
|
err = 'invalid_span'
|
|
288
|
-
throw new
|
|
288
|
+
throw new TypeError('Span must be a valid Span object.')
|
|
289
289
|
}
|
|
290
290
|
if (!LLMObsTagger.tagMap.has(span)) {
|
|
291
291
|
err = 'invalid_span'
|