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
|
@@ -29,7 +29,7 @@ class GraphQLResolvePlugin extends TracingPlugin {
|
|
|
29
29
|
const document = context.source
|
|
30
30
|
const fieldNode = info.fieldNodes.find(fieldNode => fieldNode.kind === 'Field')
|
|
31
31
|
const loc = this.config.source && document && fieldNode && fieldNode.loc
|
|
32
|
-
const source = loc && document.
|
|
32
|
+
const source = loc && document.slice(loc.start, loc.end)
|
|
33
33
|
|
|
34
34
|
const span = this.startSpan('graphql.resolve', {
|
|
35
35
|
service: this.config.service,
|
|
@@ -122,7 +122,7 @@ function getResolverInfo (info, args) {
|
|
|
122
122
|
let resolverInfo = null
|
|
123
123
|
const resolverVars = {}
|
|
124
124
|
|
|
125
|
-
if (args
|
|
125
|
+
if (args) {
|
|
126
126
|
Object.assign(resolverVars, args)
|
|
127
127
|
}
|
|
128
128
|
|
|
@@ -87,8 +87,8 @@ class GrpcClientPlugin extends ClientPlugin {
|
|
|
87
87
|
// more are supported by the library
|
|
88
88
|
// https://github.com/grpc/grpc/blob/v1.60.0/doc/naming.md
|
|
89
89
|
const parts = peer.split(':')
|
|
90
|
-
if (parts
|
|
91
|
-
const port = parts
|
|
90
|
+
if (/^\d+/.test(parts.at(-1))) {
|
|
91
|
+
const port = parts.at(-1)
|
|
92
92
|
const ip = parts.slice(0, -1).join(':')
|
|
93
93
|
span.setTag('network.destination.ip', ip)
|
|
94
94
|
span.setTag('network.destination.port', port)
|
|
@@ -27,7 +27,7 @@ module.exports = {
|
|
|
27
27
|
tags.service = service
|
|
28
28
|
tags.package = pkg
|
|
29
29
|
} else {
|
|
30
|
-
tags.name = methodParts
|
|
30
|
+
tags.name = methodParts.at(-1)
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
return tags
|
|
@@ -49,7 +49,7 @@ module.exports = {
|
|
|
49
49
|
return config[filter]
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
-
if (config[filter]
|
|
52
|
+
if (Array.isArray(config[filter])) {
|
|
53
53
|
return element => pick(element, config[filter])
|
|
54
54
|
}
|
|
55
55
|
|
|
@@ -49,7 +49,7 @@ class HttpClientPlugin extends ClientPlugin {
|
|
|
49
49
|
'out.host': hostname
|
|
50
50
|
},
|
|
51
51
|
metrics: {
|
|
52
|
-
[CLIENT_PORT_KEY]: parseInt(options.port)
|
|
52
|
+
[CLIENT_PORT_KEY]: Number.parseInt(options.port)
|
|
53
53
|
}
|
|
54
54
|
}, false)
|
|
55
55
|
|
|
@@ -202,15 +202,26 @@ function getFilter (config) {
|
|
|
202
202
|
function getHeaders (config) {
|
|
203
203
|
if (!Array.isArray(config.headers)) return []
|
|
204
204
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
205
|
+
const result = []
|
|
206
|
+
for (const header of config.headers) {
|
|
207
|
+
if (typeof header === 'string') {
|
|
208
|
+
const separatorIndex = header.indexOf(':')
|
|
209
|
+
result.push(separatorIndex === -1
|
|
210
|
+
? [header, undefined]
|
|
211
|
+
: [
|
|
212
|
+
header.slice(0, separatorIndex).toLowerCase(),
|
|
213
|
+
header.slice(separatorIndex + 1)
|
|
214
|
+
]
|
|
215
|
+
)
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
return result
|
|
209
219
|
}
|
|
210
220
|
|
|
221
|
+
const noop = () => {}
|
|
222
|
+
|
|
211
223
|
function getHooks (config) {
|
|
212
|
-
const
|
|
213
|
-
const request = (config.hooks && config.hooks.request) || noop
|
|
224
|
+
const request = config.hooks?.request ?? noop
|
|
214
225
|
|
|
215
226
|
return { request }
|
|
216
227
|
}
|
|
@@ -51,7 +51,7 @@ class Http2ClientPlugin extends ClientPlugin {
|
|
|
51
51
|
'out.host': sessionDetails.host
|
|
52
52
|
},
|
|
53
53
|
metrics: {
|
|
54
|
-
[CLIENT_PORT_KEY]: parseInt(sessionDetails.port)
|
|
54
|
+
[CLIENT_PORT_KEY]: Number.parseInt(sessionDetails.port)
|
|
55
55
|
}
|
|
56
56
|
}, false)
|
|
57
57
|
|
|
@@ -124,9 +124,9 @@ function extractSessionDetails (authority, options) {
|
|
|
124
124
|
}
|
|
125
125
|
|
|
126
126
|
const protocol = authority.protocol || options.protocol || 'https:'
|
|
127
|
-
let port = '' + (authority.port
|
|
128
|
-
? authority.
|
|
129
|
-
:
|
|
127
|
+
let port = '' + (authority.port === ''
|
|
128
|
+
? (authority.protocol === 'http:' ? 80 : 443)
|
|
129
|
+
: authority.port)
|
|
130
130
|
let host = authority.hostname || authority.host || 'localhost'
|
|
131
131
|
|
|
132
132
|
if (protocol === 'https:' && options) {
|
|
@@ -138,26 +138,26 @@ function extractSessionDetails (authority, options) {
|
|
|
138
138
|
}
|
|
139
139
|
|
|
140
140
|
function hasAmazonSignature (headers, path) {
|
|
141
|
-
if (
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
[next.toLowerCase()]: headers[next]
|
|
145
|
-
}), {})
|
|
146
|
-
|
|
147
|
-
if (headers['x-amz-signature']) {
|
|
148
|
-
return true
|
|
149
|
-
}
|
|
141
|
+
if (path?.toLowerCase().includes('x-amz-signature=')) {
|
|
142
|
+
return true
|
|
143
|
+
}
|
|
150
144
|
|
|
151
|
-
|
|
152
|
-
|
|
145
|
+
if (headers) {
|
|
146
|
+
for (const [key, value] of Object.entries(headers)) {
|
|
147
|
+
const lowerCaseKey = key.toLowerCase()
|
|
148
|
+
if (lowerCaseKey === 'x-amz-signature' && value) {
|
|
149
|
+
return true
|
|
150
|
+
}
|
|
151
|
+
if (lowerCaseKey === 'authorization' && value) {
|
|
152
|
+
const authorization = Array.isArray(value) ? value : [value]
|
|
153
|
+
if (authorization.some((val) => val.startsWith('AWS4-HMAC-SHA256'))) {
|
|
154
|
+
return true
|
|
155
|
+
}
|
|
156
|
+
}
|
|
153
157
|
}
|
|
154
158
|
}
|
|
155
159
|
|
|
156
|
-
return
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
function startsWith (searchString) {
|
|
160
|
-
return value => String(value).startsWith(searchString)
|
|
160
|
+
return false
|
|
161
161
|
}
|
|
162
162
|
|
|
163
163
|
function getStatusValidator (config) {
|
|
@@ -31,7 +31,8 @@ const {
|
|
|
31
31
|
TEST_MANAGEMENT_IS_ATTEMPT_TO_FIX,
|
|
32
32
|
TEST_MANAGEMENT_ATTEMPT_TO_FIX_PASSED,
|
|
33
33
|
TEST_HAS_FAILED_ALL_RETRIES,
|
|
34
|
-
TEST_RETRY_REASON_TYPES
|
|
34
|
+
TEST_RETRY_REASON_TYPES,
|
|
35
|
+
TEST_IS_MODIFIED
|
|
35
36
|
} = require('../../dd-trace/src/plugins/util/test')
|
|
36
37
|
const { COMPONENT } = require('../../dd-trace/src/constants')
|
|
37
38
|
const id = require('../../dd-trace/src/id')
|
|
@@ -185,6 +186,7 @@ class JestPlugin extends CiPlugin {
|
|
|
185
186
|
config._ddFlakyTestRetriesCount = this.libraryConfig?.flakyTestRetriesCount
|
|
186
187
|
config._ddIsDiEnabled = this.libraryConfig?.isDiEnabled ?? false
|
|
187
188
|
config._ddIsKnownTestsEnabled = this.libraryConfig?.isKnownTestsEnabled ?? false
|
|
189
|
+
config._ddIsImpactedTestsEnabled = this.libraryConfig?.isImpactedTestsEnabled ?? false
|
|
188
190
|
})
|
|
189
191
|
})
|
|
190
192
|
|
|
@@ -393,16 +395,14 @@ class JestPlugin extends CiPlugin {
|
|
|
393
395
|
})
|
|
394
396
|
|
|
395
397
|
this.addSub('ci:jest:test:err', ({ span, error, shouldSetProbe, promises }) => {
|
|
396
|
-
if (error) {
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
promises.isProbeReady = withTimeout(setProbePromise, 2000)
|
|
405
|
-
}
|
|
398
|
+
if (error && span) {
|
|
399
|
+
span.setTag(TEST_STATUS, 'fail')
|
|
400
|
+
span.setTag('error', getFormattedError(error, this.repositoryRoot))
|
|
401
|
+
if (shouldSetProbe) {
|
|
402
|
+
const probeInformation = this.addDiProbe(error)
|
|
403
|
+
if (probeInformation) {
|
|
404
|
+
const { setProbePromise } = probeInformation
|
|
405
|
+
promises.isProbeReady = withTimeout(setProbePromise, 2000)
|
|
406
406
|
}
|
|
407
407
|
}
|
|
408
408
|
}
|
|
@@ -438,7 +438,8 @@ class JestPlugin extends CiPlugin {
|
|
|
438
438
|
isAttemptToFixRetry,
|
|
439
439
|
isJestRetry,
|
|
440
440
|
isDisabled,
|
|
441
|
-
isQuarantined
|
|
441
|
+
isQuarantined,
|
|
442
|
+
isModified
|
|
442
443
|
} = test
|
|
443
444
|
|
|
444
445
|
const extraTags = {
|
|
@@ -463,6 +464,12 @@ class JestPlugin extends CiPlugin {
|
|
|
463
464
|
if (isAttemptToFixRetry) {
|
|
464
465
|
extraTags[TEST_IS_RETRY] = 'true'
|
|
465
466
|
extraTags[TEST_RETRY_REASON] = TEST_RETRY_REASON_TYPES.atf
|
|
467
|
+
} else if (isEfdRetry) {
|
|
468
|
+
extraTags[TEST_IS_RETRY] = 'true'
|
|
469
|
+
extraTags[TEST_RETRY_REASON] = TEST_RETRY_REASON_TYPES.efd
|
|
470
|
+
} else if (isJestRetry) {
|
|
471
|
+
extraTags[TEST_IS_RETRY] = 'true'
|
|
472
|
+
extraTags[TEST_RETRY_REASON] = TEST_RETRY_REASON_TYPES.ext
|
|
466
473
|
}
|
|
467
474
|
|
|
468
475
|
if (isDisabled) {
|
|
@@ -473,17 +480,12 @@ class JestPlugin extends CiPlugin {
|
|
|
473
480
|
extraTags[TEST_MANAGEMENT_IS_QUARANTINED] = 'true'
|
|
474
481
|
}
|
|
475
482
|
|
|
476
|
-
if (
|
|
477
|
-
extraTags[
|
|
478
|
-
if (isEfdRetry) {
|
|
479
|
-
extraTags[TEST_IS_RETRY] = 'true'
|
|
480
|
-
extraTags[TEST_RETRY_REASON] = TEST_RETRY_REASON_TYPES.efd
|
|
481
|
-
}
|
|
483
|
+
if (isModified) {
|
|
484
|
+
extraTags[TEST_IS_MODIFIED] = 'true'
|
|
482
485
|
}
|
|
483
486
|
|
|
484
|
-
if (
|
|
485
|
-
extraTags[
|
|
486
|
-
extraTags[TEST_RETRY_REASON] = TEST_RETRY_REASON_TYPES.ext
|
|
487
|
+
if (isNew) {
|
|
488
|
+
extraTags[TEST_IS_NEW] = 'true'
|
|
487
489
|
}
|
|
488
490
|
|
|
489
491
|
return super.startTestSpan(name, suite, this.testSuiteSpan, extraTags)
|
|
@@ -25,15 +25,15 @@ function getFormattedJestTestParameters (testParameters) {
|
|
|
25
25
|
// Way 2.
|
|
26
26
|
const parameterKeys = parameterArray[0].split('|').map(key => key.trim())
|
|
27
27
|
const formattedParameters = []
|
|
28
|
+
let lastFormattedParameter = {}
|
|
28
29
|
for (let index = 0; index < parameterValues.length; index++) {
|
|
29
|
-
const parameterValue = parameterValues[index]
|
|
30
30
|
const parameterIndex = index % parameterKeys.length
|
|
31
|
-
if (
|
|
32
|
-
|
|
31
|
+
if (parameterIndex === 0) {
|
|
32
|
+
lastFormattedParameter = {}
|
|
33
|
+
formattedParameters.push(lastFormattedParameter)
|
|
33
34
|
}
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
lastFormattedParameter[parameterKey] = parameterValue
|
|
35
|
+
const key = parameterKeys[parameterIndex]
|
|
36
|
+
lastFormattedParameter[key] = parameterValues[index]
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
return formattedParameters
|
|
@@ -57,7 +57,7 @@ function isMarkedAsUnskippable (test) {
|
|
|
57
57
|
try {
|
|
58
58
|
const testSource = readFileSync(test.path, 'utf8')
|
|
59
59
|
docblocks = parse(extract(testSource))
|
|
60
|
-
} catch
|
|
60
|
+
} catch {
|
|
61
61
|
// If we have issues parsing the file, we'll assume no unskippable was passed
|
|
62
62
|
return false
|
|
63
63
|
}
|
|
@@ -69,7 +69,7 @@ function isMarkedAsUnskippable (test) {
|
|
|
69
69
|
|
|
70
70
|
try {
|
|
71
71
|
return JSON.parse(docblocks.datadog).unskippable
|
|
72
|
-
} catch
|
|
72
|
+
} catch {
|
|
73
73
|
// If the @datadog block comment is present but malformed, we'll run the suite
|
|
74
74
|
log.warn('@datadog block comment is malformed.')
|
|
75
75
|
return true
|
|
@@ -6,7 +6,9 @@ class KafkajsBatchConsumerPlugin extends ConsumerPlugin {
|
|
|
6
6
|
static get id () { return 'kafkajs' }
|
|
7
7
|
static get operation () { return 'consume-batch' }
|
|
8
8
|
|
|
9
|
-
start (
|
|
9
|
+
start (ctx) {
|
|
10
|
+
const { topic, messages, groupId, clusterId } = ctx.extractedArgs || ctx
|
|
11
|
+
|
|
10
12
|
if (!this.config.dsmEnabled) return
|
|
11
13
|
for (const message of messages) {
|
|
12
14
|
if (!message || !message.headers) continue
|
|
@@ -64,7 +64,9 @@ class KafkajsConsumerPlugin extends ConsumerPlugin {
|
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
-
|
|
67
|
+
bindStart (ctx) {
|
|
68
|
+
const { topic, partition, message, groupId, clusterId } = ctx.extractedArgs || ctx
|
|
69
|
+
|
|
68
70
|
let childOf
|
|
69
71
|
const headers = convertToTextMap(message?.headers)
|
|
70
72
|
if (headers) {
|
|
@@ -83,7 +85,7 @@ class KafkajsConsumerPlugin extends ConsumerPlugin {
|
|
|
83
85
|
metrics: {
|
|
84
86
|
'kafka.partition': partition
|
|
85
87
|
}
|
|
86
|
-
})
|
|
88
|
+
}, ctx)
|
|
87
89
|
if (message?.offset) span.setTag('kafka.message.offset', message?.offset)
|
|
88
90
|
|
|
89
91
|
if (this.config.dsmEnabled && headers) {
|
|
@@ -97,16 +99,18 @@ class KafkajsConsumerPlugin extends ConsumerPlugin {
|
|
|
97
99
|
}
|
|
98
100
|
|
|
99
101
|
if (afterStartCh.hasSubscribers) {
|
|
100
|
-
afterStartCh.publish({ topic, partition, message, groupId })
|
|
102
|
+
afterStartCh.publish({ topic, partition, message, groupId, currentStore: ctx.currentStore })
|
|
101
103
|
}
|
|
104
|
+
|
|
105
|
+
return ctx.currentStore
|
|
102
106
|
}
|
|
103
107
|
|
|
104
|
-
finish () {
|
|
108
|
+
finish (ctx) {
|
|
105
109
|
if (beforeFinishCh.hasSubscribers) {
|
|
106
110
|
beforeFinishCh.publish()
|
|
107
111
|
}
|
|
108
112
|
|
|
109
|
-
super.finish()
|
|
113
|
+
super.finish(ctx)
|
|
110
114
|
}
|
|
111
115
|
}
|
|
112
116
|
|
|
@@ -52,7 +52,9 @@ class KafkajsProducerPlugin extends ProducerPlugin {
|
|
|
52
52
|
* @param {ProducerResponseItem[]} commitList
|
|
53
53
|
* @returns {void}
|
|
54
54
|
*/
|
|
55
|
-
commit (
|
|
55
|
+
commit (ctx) {
|
|
56
|
+
const commitList = ctx.result
|
|
57
|
+
|
|
56
58
|
if (!this.config.dsmEnabled) return
|
|
57
59
|
if (!commitList || !Array.isArray(commitList)) return
|
|
58
60
|
const keys = [
|
|
@@ -67,7 +69,8 @@ class KafkajsProducerPlugin extends ProducerPlugin {
|
|
|
67
69
|
}
|
|
68
70
|
}
|
|
69
71
|
|
|
70
|
-
|
|
72
|
+
bindStart (ctx) {
|
|
73
|
+
const { topic, messages, bootstrapServers, clusterId, disableHeaderInjection } = ctx
|
|
71
74
|
const span = this.startSpan({
|
|
72
75
|
resource: topic,
|
|
73
76
|
meta: {
|
|
@@ -79,7 +82,7 @@ class KafkajsProducerPlugin extends ProducerPlugin {
|
|
|
79
82
|
metrics: {
|
|
80
83
|
'kafka.batch_size': messages.length
|
|
81
84
|
}
|
|
82
|
-
})
|
|
85
|
+
}, ctx)
|
|
83
86
|
if (bootstrapServers) {
|
|
84
87
|
span.setTag(BOOTSTRAP_SERVERS_KEY, bootstrapServers)
|
|
85
88
|
}
|
|
@@ -105,6 +108,8 @@ class KafkajsProducerPlugin extends ProducerPlugin {
|
|
|
105
108
|
}
|
|
106
109
|
}
|
|
107
110
|
}
|
|
111
|
+
|
|
112
|
+
return ctx.currentStore
|
|
108
113
|
}
|
|
109
114
|
}
|
|
110
115
|
|
|
@@ -4,7 +4,7 @@ function convertToTextMap (bufferMap) {
|
|
|
4
4
|
if (!bufferMap) return null
|
|
5
5
|
|
|
6
6
|
// rdKafka returns an array of header maps
|
|
7
|
-
if (bufferMap
|
|
7
|
+
if (Array.isArray(bufferMap)) {
|
|
8
8
|
const headers = {}
|
|
9
9
|
for (const headerMap of bufferMap) {
|
|
10
10
|
for (const key of Object.keys(headerMap)) {
|
|
@@ -3,35 +3,35 @@
|
|
|
3
3
|
const LangChainHandler = require('./default')
|
|
4
4
|
|
|
5
5
|
class LangChainChainHandler extends LangChainHandler {
|
|
6
|
-
getSpanStartTags (ctx) {
|
|
6
|
+
getSpanStartTags (ctx, provider, span) {
|
|
7
7
|
const tags = {}
|
|
8
8
|
|
|
9
|
-
if (!this.isPromptCompletionSampled()) return tags
|
|
9
|
+
if (!this.isPromptCompletionSampled(span)) return tags
|
|
10
10
|
|
|
11
11
|
let inputs = ctx.args?.[0]
|
|
12
12
|
inputs = Array.isArray(inputs) ? inputs : [inputs]
|
|
13
13
|
|
|
14
14
|
for (const idx in inputs) {
|
|
15
15
|
const input = inputs[idx]
|
|
16
|
-
if (typeof input
|
|
17
|
-
tags[`langchain.request.inputs.${idx}`] = this.normalize(input)
|
|
18
|
-
} else {
|
|
16
|
+
if (typeof input === 'object') {
|
|
19
17
|
for (const [key, value] of Object.entries(input)) {
|
|
20
18
|
// these are mappings to the python client names, ie lc_kwargs
|
|
21
19
|
// only present on BaseMessage types
|
|
22
20
|
if (key.includes('lc_')) continue
|
|
23
21
|
tags[`langchain.request.inputs.${idx}.${key}`] = this.normalize(value)
|
|
24
22
|
}
|
|
23
|
+
} else {
|
|
24
|
+
tags[`langchain.request.inputs.${idx}`] = this.normalize(input)
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
return tags
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
-
getSpanEndTags (ctx) {
|
|
31
|
+
getSpanEndTags (ctx, span) {
|
|
32
32
|
const tags = {}
|
|
33
33
|
|
|
34
|
-
if (!this.isPromptCompletionSampled()) return tags
|
|
34
|
+
if (!this.isPromptCompletionSampled(span)) return tags
|
|
35
35
|
|
|
36
36
|
let outputs = ctx.result
|
|
37
37
|
outputs = Array.isArray(outputs) ? outputs : [outputs]
|
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
const LangChainHandler = require('./default')
|
|
4
4
|
|
|
5
5
|
class LangChainEmbeddingHandler extends LangChainHandler {
|
|
6
|
-
getSpanStartTags (ctx) {
|
|
6
|
+
getSpanStartTags (ctx, provider, span) {
|
|
7
7
|
const tags = {}
|
|
8
8
|
|
|
9
9
|
const inputTexts = ctx.args?.[0]
|
|
10
10
|
|
|
11
|
-
const sampled = this.isPromptCompletionSampled()
|
|
11
|
+
const sampled = this.isPromptCompletionSampled(span)
|
|
12
12
|
if (typeof inputTexts === 'string') {
|
|
13
13
|
// embed query
|
|
14
14
|
if (sampled) {
|
|
@@ -5,7 +5,7 @@ const LangChainLanguageModelHandler = require('.')
|
|
|
5
5
|
const COMPLETIONS = 'langchain.response.completions'
|
|
6
6
|
|
|
7
7
|
class LangChainChatModelHandler extends LangChainLanguageModelHandler {
|
|
8
|
-
getSpanStartTags (ctx, provider) {
|
|
8
|
+
getSpanStartTags (ctx, provider, span) {
|
|
9
9
|
const tags = {}
|
|
10
10
|
|
|
11
11
|
const inputs = ctx.args?.[0]
|
|
@@ -15,7 +15,7 @@ class LangChainChatModelHandler extends LangChainLanguageModelHandler {
|
|
|
15
15
|
|
|
16
16
|
for (const messageIndex in messageSet) {
|
|
17
17
|
const message = messageSet[messageIndex]
|
|
18
|
-
if (this.isPromptCompletionSampled()) {
|
|
18
|
+
if (this.isPromptCompletionSampled(span)) {
|
|
19
19
|
tags[`langchain.request.messages.${messageSetIndex}.${messageIndex}.content`] =
|
|
20
20
|
this.normalize(message.content) || ''
|
|
21
21
|
}
|
|
@@ -39,11 +39,13 @@ class LangChainChatModelHandler extends LangChainLanguageModelHandler {
|
|
|
39
39
|
return tags
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
getSpanEndTags (ctx) {
|
|
42
|
+
getSpanEndTags (ctx, span) {
|
|
43
43
|
const { result } = ctx
|
|
44
44
|
|
|
45
45
|
const tags = {}
|
|
46
46
|
|
|
47
|
+
const sampled = this.isPromptCompletionSampled(span)
|
|
48
|
+
|
|
47
49
|
this.extractTokenMetrics(ctx.currentStore?.span, result)
|
|
48
50
|
|
|
49
51
|
for (const messageSetIdx in result?.generations) {
|
|
@@ -56,7 +58,7 @@ class LangChainChatModelHandler extends LangChainLanguageModelHandler {
|
|
|
56
58
|
const message = chatCompletion.message
|
|
57
59
|
let toolCalls = message.tool_calls
|
|
58
60
|
|
|
59
|
-
if (text &&
|
|
61
|
+
if (text && sampled) {
|
|
60
62
|
tags[
|
|
61
63
|
`${COMPLETIONS}.${messageSetIdx}.${chatCompletionIdx}.content`
|
|
62
64
|
] = this.normalize(text)
|
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
const LangChainLanguageModelHandler = require('.')
|
|
4
4
|
|
|
5
5
|
class LangChainLLMHandler extends LangChainLanguageModelHandler {
|
|
6
|
-
getSpanStartTags (ctx, provider) {
|
|
6
|
+
getSpanStartTags (ctx, provider, span) {
|
|
7
7
|
const tags = {}
|
|
8
8
|
|
|
9
9
|
const prompts = ctx.args?.[0]
|
|
10
10
|
for (const promptIdx in prompts) {
|
|
11
|
-
if (!this.isPromptCompletionSampled()) continue
|
|
11
|
+
if (!this.isPromptCompletionSampled(span)) continue
|
|
12
12
|
|
|
13
13
|
const prompt = prompts[promptIdx]
|
|
14
14
|
tags[`langchain.request.prompts.${promptIdx}.content`] = this.normalize(prompt) || ''
|
|
@@ -30,16 +30,17 @@ class LangChainLLMHandler extends LangChainLanguageModelHandler {
|
|
|
30
30
|
return tags
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
getSpanEndTags (ctx) {
|
|
33
|
+
getSpanEndTags (ctx, span) {
|
|
34
34
|
const { result } = ctx
|
|
35
35
|
|
|
36
36
|
const tags = {}
|
|
37
|
+
const sampled = this.isPromptCompletionSampled(span)
|
|
37
38
|
|
|
38
39
|
this.extractTokenMetrics(ctx.currentStore?.span, result)
|
|
39
40
|
|
|
40
41
|
for (const completionIdx in result?.generations) {
|
|
41
42
|
const completion = result.generations[completionIdx]
|
|
42
|
-
if (
|
|
43
|
+
if (sampled) {
|
|
43
44
|
tags[`langchain.response.completions.${completionIdx}.text`] = this.normalize(completion[0].text) || ''
|
|
44
45
|
}
|
|
45
46
|
|
|
@@ -49,23 +49,24 @@ class BaseLangChainTracingPlugin extends TracingPlugin {
|
|
|
49
49
|
const provider = handler.extractProvider(instance)
|
|
50
50
|
const model = handler.extractModel(instance)
|
|
51
51
|
|
|
52
|
-
const tags = handler.getSpanStartTags(ctx, provider) || []
|
|
53
|
-
|
|
54
|
-
if (apiKey) tags[API_KEY] = apiKey
|
|
55
|
-
if (provider) tags[PROVIDER] = provider
|
|
56
|
-
if (model) tags[MODEL] = model
|
|
57
|
-
if (type) tags[TYPE] = type
|
|
58
|
-
|
|
59
52
|
const span = this.startSpan('langchain.request', {
|
|
60
53
|
service: this.config.service,
|
|
61
54
|
resource,
|
|
62
55
|
kind: 'client',
|
|
63
56
|
meta: {
|
|
64
|
-
[MEASURED]: 1
|
|
65
|
-
...tags
|
|
57
|
+
[MEASURED]: 1
|
|
66
58
|
}
|
|
67
59
|
}, false)
|
|
68
60
|
|
|
61
|
+
const tags = handler.getSpanStartTags(ctx, provider, span) || []
|
|
62
|
+
|
|
63
|
+
if (apiKey) tags[API_KEY] = apiKey
|
|
64
|
+
if (provider) tags[PROVIDER] = provider
|
|
65
|
+
if (model) tags[MODEL] = model
|
|
66
|
+
if (type) tags[TYPE] = type
|
|
67
|
+
|
|
68
|
+
span.addTags(tags)
|
|
69
|
+
|
|
69
70
|
const store = storage('legacy').getStore() || {}
|
|
70
71
|
ctx.currentStore = { ...store, span }
|
|
71
72
|
|
|
@@ -78,7 +79,7 @@ class BaseLangChainTracingPlugin extends TracingPlugin {
|
|
|
78
79
|
const { type } = ctx
|
|
79
80
|
|
|
80
81
|
const handler = this.handlers[type]
|
|
81
|
-
const tags = handler.getSpanEndTags(ctx) || {}
|
|
82
|
+
const tags = handler.getSpanEndTags(ctx, span) || {}
|
|
82
83
|
|
|
83
84
|
span.addTags(tags)
|
|
84
85
|
|
|
@@ -3,8 +3,6 @@
|
|
|
3
3
|
const { storage } = require('../../datadog-core')
|
|
4
4
|
const MySQLPlugin = require('../../datadog-plugin-mysql/src')
|
|
5
5
|
|
|
6
|
-
let skippedStore
|
|
7
|
-
|
|
8
6
|
class MariadbPlugin extends MySQLPlugin {
|
|
9
7
|
static get id () { return 'mariadb' }
|
|
10
8
|
static get system () { return 'mariadb' }
|
|
@@ -12,14 +10,10 @@ class MariadbPlugin extends MySQLPlugin {
|
|
|
12
10
|
constructor (...args) {
|
|
13
11
|
super(...args)
|
|
14
12
|
|
|
15
|
-
this.
|
|
16
|
-
skippedStore = storage('legacy').getStore()
|
|
17
|
-
storage('legacy').enterWith({ noop: true })
|
|
18
|
-
})
|
|
13
|
+
this.addBind(`apm:${this.component}:pool:skip`, () => ({ noop: true }))
|
|
19
14
|
|
|
20
|
-
this.addSub(`apm:${this.component}:
|
|
21
|
-
storage('legacy').
|
|
22
|
-
skippedStore = undefined
|
|
15
|
+
this.addSub(`apm:${this.component}:command:add`, ctx => {
|
|
16
|
+
ctx.parentStore = storage('legacy').getStore()
|
|
23
17
|
})
|
|
24
18
|
}
|
|
25
19
|
}
|