dd-trace 5.52.0 → 5.54.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE-3rdparty.csv +2 -1
- package/README.md +5 -0
- package/index.d.ts +87 -22
- package/initialize.mjs +3 -4
- package/package.json +36 -34
- package/packages/datadog-core/src/utils/src/get.js +1 -1
- package/packages/datadog-core/src/utils/src/has.js +1 -1
- package/packages/datadog-core/src/utils/src/kebabcase.js +4 -6
- package/packages/datadog-core/src/utils/src/parse-tags.js +1 -1
- package/packages/datadog-core/src/utils/src/pick.js +2 -2
- package/packages/datadog-core/src/utils/src/set.js +1 -1
- package/packages/datadog-core/src/utils/src/uniq.js +1 -1
- package/packages/datadog-instrumentations/src/amqp10.js +19 -17
- package/packages/datadog-instrumentations/src/amqplib.js +57 -37
- package/packages/datadog-instrumentations/src/apollo.js +2 -2
- package/packages/datadog-instrumentations/src/aws-sdk.js +1 -1
- package/packages/datadog-instrumentations/src/cassandra-driver.js +5 -4
- package/packages/datadog-instrumentations/src/child_process.js +3 -3
- package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +92 -62
- package/packages/datadog-instrumentations/src/couchbase.js +5 -4
- package/packages/datadog-instrumentations/src/cucumber.js +126 -84
- package/packages/datadog-instrumentations/src/cypress.js +2 -1
- package/packages/datadog-instrumentations/src/dns.js +1 -1
- package/packages/datadog-instrumentations/src/express.js +2 -6
- package/packages/datadog-instrumentations/src/fs.js +7 -6
- package/packages/datadog-instrumentations/src/google-cloud-pubsub.js +28 -34
- package/packages/datadog-instrumentations/src/graphql.js +7 -10
- package/packages/datadog-instrumentations/src/grpc/client.js +11 -23
- package/packages/datadog-instrumentations/src/grpc/server.js +7 -20
- package/packages/datadog-instrumentations/src/helpers/extract-package-and-module-path.js +16 -10
- package/packages/datadog-instrumentations/src/helpers/hook.js +1 -1
- package/packages/datadog-instrumentations/src/helpers/hooks.js +1 -1
- package/packages/datadog-instrumentations/src/helpers/instrument.js +1 -41
- package/packages/datadog-instrumentations/src/helpers/register.js +21 -18
- package/packages/datadog-instrumentations/src/http/client.js +16 -21
- package/packages/datadog-instrumentations/src/iovalkey.js +51 -0
- package/packages/datadog-instrumentations/src/jest.js +184 -87
- package/packages/datadog-instrumentations/src/kafkajs.js +65 -44
- package/packages/datadog-instrumentations/src/knex.js +4 -4
- package/packages/datadog-instrumentations/src/ldapjs.js +3 -4
- package/packages/datadog-instrumentations/src/mariadb.js +38 -61
- package/packages/datadog-instrumentations/src/mocha/main.js +85 -59
- package/packages/datadog-instrumentations/src/mocha/utils.js +103 -82
- package/packages/datadog-instrumentations/src/mocha/worker.js +6 -0
- package/packages/datadog-instrumentations/src/mongodb-core.js +1 -1
- package/packages/datadog-instrumentations/src/mysql.js +20 -36
- package/packages/datadog-instrumentations/src/mysql2.js +55 -47
- package/packages/datadog-instrumentations/src/net.js +4 -2
- package/packages/datadog-instrumentations/src/next.js +7 -14
- package/packages/datadog-instrumentations/src/nyc.js +1 -1
- package/packages/datadog-instrumentations/src/openai.js +21 -23
- package/packages/datadog-instrumentations/src/oracledb.js +1 -1
- package/packages/datadog-instrumentations/src/pg.js +6 -13
- package/packages/datadog-instrumentations/src/playwright.js +170 -136
- package/packages/datadog-instrumentations/src/redis.js +3 -3
- package/packages/datadog-instrumentations/src/restify.js +2 -2
- package/packages/datadog-instrumentations/src/rhea.js +42 -54
- package/packages/datadog-instrumentations/src/router.js +22 -25
- package/packages/datadog-instrumentations/src/tedious.js +1 -1
- package/packages/datadog-instrumentations/src/url.js +9 -17
- package/packages/datadog-instrumentations/src/vitest.js +126 -97
- package/packages/datadog-plugin-amqp10/src/consumer.js +7 -3
- package/packages/datadog-plugin-amqp10/src/producer.js +7 -3
- package/packages/datadog-plugin-amqplib/src/client.js +6 -2
- package/packages/datadog-plugin-amqplib/src/consumer.js +7 -3
- package/packages/datadog-plugin-amqplib/src/producer.js +7 -3
- package/packages/datadog-plugin-amqplib/src/util.js +1 -1
- package/packages/datadog-plugin-apollo/src/gateway/request.js +5 -6
- package/packages/datadog-plugin-apollo/src/gateway/validate.js +2 -3
- package/packages/datadog-plugin-aws-sdk/src/base.js +3 -2
- package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/tracing.js +2 -2
- package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/utils.js +13 -13
- package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +24 -31
- package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +2 -2
- package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +6 -6
- package/packages/datadog-plugin-aws-sdk/src/services/lambda.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/services/sns.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +4 -5
- package/packages/datadog-plugin-aws-sdk/src/services/stepfunctions.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/util.js +5 -6
- package/packages/datadog-plugin-cassandra-driver/src/index.js +1 -1
- package/packages/datadog-plugin-child_process/src/index.js +4 -4
- package/packages/datadog-plugin-child_process/src/scrub-cmd-params.js +23 -23
- package/packages/datadog-plugin-cucumber/src/index.js +86 -20
- package/packages/datadog-plugin-cypress/src/cypress-plugin.js +97 -27
- package/packages/datadog-plugin-cypress/src/plugin.js +11 -1
- package/packages/datadog-plugin-cypress/src/support.js +24 -5
- package/packages/datadog-plugin-express/src/code_origin.js +30 -0
- package/packages/datadog-plugin-express/src/index.js +10 -12
- package/packages/datadog-plugin-express/src/tracing.js +19 -0
- package/packages/datadog-plugin-google-cloud-pubsub/src/client.js +7 -3
- package/packages/datadog-plugin-google-cloud-pubsub/src/consumer.js +12 -7
- package/packages/datadog-plugin-google-cloud-pubsub/src/producer.js +6 -2
- package/packages/datadog-plugin-google-cloud-vertexai/src/tracing.js +26 -9
- package/packages/datadog-plugin-graphql/src/execute.js +2 -2
- package/packages/datadog-plugin-graphql/src/index.js +7 -6
- package/packages/datadog-plugin-graphql/src/resolve.js +2 -2
- package/packages/datadog-plugin-graphql/src/tools/index.js +1 -0
- package/packages/datadog-plugin-graphql/src/tools/signature.js +1 -0
- package/packages/datadog-plugin-graphql/src/tools/transforms.js +1 -0
- package/packages/datadog-plugin-grpc/src/client.js +2 -2
- package/packages/datadog-plugin-grpc/src/util.js +2 -2
- package/packages/datadog-plugin-http/src/client.js +18 -7
- package/packages/datadog-plugin-http2/src/client.js +20 -20
- package/packages/datadog-plugin-iovalkey/src/index.js +18 -0
- package/packages/datadog-plugin-jest/src/index.js +36 -28
- package/packages/datadog-plugin-jest/src/util.js +8 -8
- package/packages/datadog-plugin-kafkajs/src/batch-consumer.js +3 -1
- package/packages/datadog-plugin-kafkajs/src/consumer.js +9 -5
- package/packages/datadog-plugin-kafkajs/src/producer.js +15 -7
- package/packages/datadog-plugin-kafkajs/src/utils.js +1 -1
- package/packages/datadog-plugin-langchain/src/handlers/chain.js +7 -7
- package/packages/datadog-plugin-langchain/src/handlers/embedding.js +2 -2
- package/packages/datadog-plugin-langchain/src/handlers/language_models/chat_model.js +6 -4
- package/packages/datadog-plugin-langchain/src/handlers/language_models/llm.js +5 -4
- package/packages/datadog-plugin-langchain/src/tracing.js +11 -10
- package/packages/datadog-plugin-mariadb/src/index.js +3 -9
- package/packages/datadog-plugin-mocha/src/index.js +88 -48
- package/packages/datadog-plugin-mongodb-core/src/index.js +1 -1
- package/packages/datadog-plugin-mysql/src/index.js +11 -9
- package/packages/datadog-plugin-mysql2/src/index.js +16 -0
- package/packages/datadog-plugin-net/src/tcp.js +1 -1
- package/packages/datadog-plugin-next/src/index.js +6 -5
- package/packages/datadog-plugin-openai/src/services.js +6 -10
- package/packages/datadog-plugin-openai/src/tracing.js +10 -14
- package/packages/datadog-plugin-oracledb/src/index.js +1 -1
- package/packages/datadog-plugin-playwright/src/index.js +48 -22
- package/packages/datadog-plugin-redis/src/index.js +9 -4
- package/packages/datadog-plugin-rhea/src/consumer.js +8 -6
- package/packages/datadog-plugin-rhea/src/producer.js +5 -2
- package/packages/datadog-plugin-router/src/index.js +1 -1
- package/packages/datadog-plugin-selenium/src/index.js +1 -6
- package/packages/datadog-plugin-vitest/src/index.js +99 -72
- package/packages/datadog-shimmer/src/shimmer.js +163 -36
- package/packages/dd-trace/src/appsec/api_security_sampler.js +2 -2
- package/packages/dd-trace/src/appsec/blocked_templates.js +1 -1
- package/packages/dd-trace/src/appsec/blocking.js +6 -20
- package/packages/dd-trace/src/appsec/graphql.js +2 -2
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-password-rules.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secret-rules.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secrets-rules.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/header-injection-analyzer.js +4 -6
- package/packages/dd-trace/src/appsec/iast/analyzers/hsts-header-missing-analyzer.js +7 -12
- package/packages/dd-trace/src/appsec/iast/analyzers/missing-header-analyzer.js +4 -6
- package/packages/dd-trace/src/appsec/iast/analyzers/nosql-injection-mongodb-analyzer.js +4 -0
- package/packages/dd-trace/src/appsec/iast/analyzers/path-traversal-analyzer.js +9 -12
- package/packages/dd-trace/src/appsec/iast/analyzers/vulnerability-analyzer.js +5 -4
- package/packages/dd-trace/src/appsec/iast/context/context-plugin.js +2 -3
- package/packages/dd-trace/src/appsec/iast/iast-plugin.js +3 -3
- package/packages/dd-trace/src/appsec/iast/index.js +1 -0
- package/packages/dd-trace/src/appsec/iast/overhead-controller.js +102 -7
- package/packages/dd-trace/src/appsec/iast/path-line.js +7 -8
- package/packages/dd-trace/src/appsec/iast/security-controls/index.js +6 -13
- package/packages/dd-trace/src/appsec/iast/security-controls/parser.js +6 -6
- package/packages/dd-trace/src/appsec/iast/taint-tracking/filter.js +2 -2
- package/packages/dd-trace/src/appsec/iast/taint-tracking/operations-taint-object.js +3 -3
- package/packages/dd-trace/src/appsec/iast/taint-tracking/operations.js +4 -28
- package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +1 -7
- package/packages/dd-trace/src/appsec/iast/taint-tracking/plugins/kafka.js +3 -4
- package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter-esm.mjs +1 -1
- package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +5 -7
- package/packages/dd-trace/src/appsec/iast/taint-tracking/taint-tracking-impl.js +2 -2
- package/packages/dd-trace/src/appsec/iast/telemetry/span-tags.js +6 -6
- package/packages/dd-trace/src/appsec/iast/telemetry/verbosity.js +1 -1
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/command-sensitive-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/ldap-sensitive-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/sql-sensitive-analyzer.js +7 -7
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-handler.js +23 -24
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-regex.js +3 -3
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/index.js +4 -4
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/utils.js +6 -11
- package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +9 -11
- package/packages/dd-trace/src/appsec/index.js +15 -12
- package/packages/dd-trace/src/appsec/rasp/index.js +19 -17
- package/packages/dd-trace/src/appsec/rasp/lfi.js +2 -1
- package/packages/dd-trace/src/appsec/rasp/utils.js +11 -6
- package/packages/dd-trace/src/appsec/reporter.js +233 -40
- package/packages/dd-trace/src/appsec/rule_manager.js +2 -2
- package/packages/dd-trace/src/appsec/sdk/user_blocking.js +2 -2
- package/packages/dd-trace/src/appsec/stack_trace.js +2 -4
- package/packages/dd-trace/src/appsec/telemetry/index.js +1 -2
- package/packages/dd-trace/src/appsec/telemetry/rasp.js +3 -14
- package/packages/dd-trace/src/appsec/telemetry/waf.js +3 -5
- package/packages/dd-trace/src/appsec/user_tracking.js +3 -5
- package/packages/dd-trace/src/appsec/waf/waf_context_wrapper.js +8 -8
- package/packages/dd-trace/src/azure_metadata.js +2 -7
- package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/index.js +1 -1
- package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/worker/index.js +2 -2
- package/packages/dd-trace/src/ci-visibility/early-flake-detection/get-known-tests.js +1 -1
- package/packages/dd-trace/src/ci-visibility/exporters/agent-proxy/index.js +3 -3
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/coverage-writer.js +1 -1
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +1 -1
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +1 -1
- package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +6 -4
- package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +2 -2
- package/packages/dd-trace/src/ci-visibility/exporters/test-worker/writer.js +0 -2
- package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +1 -1
- package/packages/dd-trace/src/ci-visibility/log-submission/log-submission-plugin.js +1 -1
- package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +8 -5
- package/packages/dd-trace/src/ci-visibility/telemetry.js +4 -0
- package/packages/dd-trace/src/ci-visibility/test-management/get-test-management-tests.js +1 -1
- package/packages/dd-trace/src/config.js +82 -51
- package/packages/dd-trace/src/config_stable.js +3 -3
- package/packages/dd-trace/src/datastreams/encoding.js +9 -9
- package/packages/dd-trace/src/datastreams/fnv.js +1 -1
- package/packages/dd-trace/src/datastreams/pathway.js +4 -4
- package/packages/dd-trace/src/datastreams/processor.js +5 -7
- package/packages/dd-trace/src/datastreams/schemas/schema_builder.js +1 -1
- package/packages/dd-trace/src/datastreams/schemas/schema_sampler.js +4 -6
- package/packages/dd-trace/src/datastreams/size.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/breakpoints.js +131 -72
- package/packages/dd-trace/src/debugger/devtools_client/condition.js +6 -8
- package/packages/dd-trace/src/debugger/devtools_client/defaults.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/index.js +17 -27
- package/packages/dd-trace/src/debugger/devtools_client/remote_config.js +18 -38
- package/packages/dd-trace/src/debugger/devtools_client/send.js +8 -7
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/index.js +16 -8
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/processor.js +8 -10
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/redaction.js +3 -3
- package/packages/dd-trace/src/debugger/devtools_client/source-maps.js +2 -10
- package/packages/dd-trace/src/debugger/devtools_client/state.js +31 -4
- package/packages/dd-trace/src/dogstatsd.js +7 -4
- package/packages/dd-trace/src/encode/0.4.js +9 -9
- package/packages/dd-trace/src/encode/0.5.js +1 -1
- package/packages/dd-trace/src/encode/agentless-ci-visibility.js +3 -3
- package/packages/dd-trace/src/encode/coverage-ci-visibility.js +1 -1
- package/packages/dd-trace/src/encode/tags-processors.js +1 -1
- package/packages/dd-trace/src/exporter.js +6 -6
- package/packages/dd-trace/src/exporters/agent/writer.js +1 -5
- package/packages/dd-trace/src/exporters/common/docker.js +1 -1
- package/packages/dd-trace/src/exporters/common/form-data.js +6 -4
- package/packages/dd-trace/src/exporters/common/request.js +1 -1
- package/packages/dd-trace/src/exporters/common/util.js +1 -1
- package/packages/dd-trace/src/external-logger/src/index.js +5 -5
- package/packages/dd-trace/src/flare/file.js +1 -5
- package/packages/dd-trace/src/format.js +1 -1
- package/packages/dd-trace/src/git_properties.js +1 -1
- package/packages/dd-trace/src/id.js +12 -6
- package/packages/dd-trace/src/iitm.js +10 -22
- package/packages/dd-trace/src/lambda/handler.js +6 -6
- package/packages/dd-trace/src/lambda/runtime/patch.js +4 -4
- package/packages/dd-trace/src/lambda/runtime/ritm.js +1 -1
- package/packages/dd-trace/src/llmobs/plugins/bedrockruntime.js +6 -6
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chain.js +2 -6
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chat_model.js +3 -3
- package/packages/dd-trace/src/llmobs/plugins/langchain/index.js +6 -6
- package/packages/dd-trace/src/llmobs/plugins/openai.js +1 -1
- package/packages/dd-trace/src/llmobs/sdk.js +2 -2
- package/packages/dd-trace/src/llmobs/tagger.js +113 -99
- package/packages/dd-trace/src/llmobs/util.js +9 -9
- package/packages/dd-trace/src/llmobs/writers/base.js +1 -1
- package/packages/dd-trace/src/llmobs/writers/util.js +1 -1
- package/packages/dd-trace/src/log/index.js +4 -4
- package/packages/dd-trace/src/log/log.js +1 -1
- package/packages/dd-trace/src/log/writer.js +2 -2
- package/packages/dd-trace/src/msgpack/chunk.js +3 -3
- package/packages/dd-trace/src/msgpack/encoder.js +28 -28
- package/packages/dd-trace/src/noop/dogstatsd.js +6 -6
- package/packages/dd-trace/src/noop/span.js +3 -5
- package/packages/dd-trace/src/noop/tracer.js +1 -2
- package/packages/dd-trace/src/opentelemetry/span_processor.js +2 -2
- package/packages/dd-trace/src/opentelemetry/tracer.js +6 -5
- package/packages/dd-trace/src/opentracing/propagation/log.js +6 -8
- package/packages/dd-trace/src/opentracing/propagation/text_map.js +27 -23
- package/packages/dd-trace/src/opentracing/propagation/tracestate.js +8 -4
- package/packages/dd-trace/src/opentracing/span.js +9 -14
- package/packages/dd-trace/src/opentracing/tracer.js +9 -6
- package/packages/dd-trace/src/payload-tagging/index.js +1 -1
- package/packages/dd-trace/src/payload-tagging/tagging.js +6 -6
- package/packages/dd-trace/src/pkg.js +1 -1
- package/packages/dd-trace/src/plugins/ci_plugin.js +62 -10
- package/packages/dd-trace/src/plugins/consumer.js +2 -2
- package/packages/dd-trace/src/plugins/inbound.js +5 -1
- package/packages/dd-trace/src/plugins/index.js +1 -1
- package/packages/dd-trace/src/plugins/outbound.js +4 -5
- package/packages/dd-trace/src/plugins/plugin.js +1 -1
- package/packages/dd-trace/src/plugins/producer.js +2 -2
- package/packages/dd-trace/src/plugins/storage.js +2 -2
- package/packages/dd-trace/src/plugins/util/ci.js +23 -15
- package/packages/dd-trace/src/plugins/util/git.js +165 -11
- package/packages/dd-trace/src/plugins/util/inferred_proxy.js +1 -1
- package/packages/dd-trace/src/plugins/util/ip_extractor.js +1 -1
- package/packages/dd-trace/src/plugins/util/llm.js +27 -10
- package/packages/dd-trace/src/plugins/util/stacktrace.js +1 -1
- package/packages/dd-trace/src/plugins/util/test.js +311 -48
- package/packages/dd-trace/src/plugins/util/url.js +1 -1
- package/packages/dd-trace/src/plugins/util/urlfilter.js +13 -17
- package/packages/dd-trace/src/plugins/util/user-provided-git.js +12 -3
- package/packages/dd-trace/src/plugins/util/web.js +5 -4
- package/packages/dd-trace/src/priority_sampler.js +22 -22
- package/packages/dd-trace/src/profiling/config.js +44 -8
- package/packages/dd-trace/src/profiling/exporters/event_serializer.js +5 -5
- package/packages/dd-trace/src/profiling/exporters/file.js +2 -1
- package/packages/dd-trace/src/profiling/profiler.js +37 -2
- package/packages/dd-trace/src/profiling/profilers/events.js +14 -17
- package/packages/dd-trace/src/profiling/profilers/shared.js +6 -1
- package/packages/dd-trace/src/profiling/profilers/space.js +3 -3
- package/packages/dd-trace/src/profiling/profilers/wall.js +6 -7
- package/packages/dd-trace/src/profiling/ssi-heuristics.js +3 -5
- package/packages/dd-trace/src/profiling/tagger.js +3 -5
- package/packages/dd-trace/src/profiling/webspan-utils.js +1 -1
- package/packages/dd-trace/src/proxy.js +7 -13
- package/packages/dd-trace/src/random_sampler.js +40 -0
- package/packages/dd-trace/src/rate_limiter.js +4 -4
- package/packages/dd-trace/src/remote_config/index.js +3 -7
- package/packages/dd-trace/src/remote_config/manager.js +25 -13
- package/packages/dd-trace/src/require-package-json.js +1 -1
- package/packages/dd-trace/src/ritm.js +4 -4
- package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +2 -2
- package/packages/dd-trace/src/sampler.js +33 -4
- package/packages/dd-trace/src/sampling_rule.js +12 -3
- package/packages/dd-trace/src/scope.js +1 -1
- package/packages/dd-trace/src/serverless.js +0 -48
- package/packages/dd-trace/src/service-naming/schemas/util.js +1 -1
- package/packages/dd-trace/src/service-naming/schemas/v0/storage.js +8 -0
- package/packages/dd-trace/src/service-naming/schemas/v0/web.js +2 -3
- package/packages/dd-trace/src/service-naming/schemas/v1/storage.js +4 -0
- package/packages/dd-trace/src/span_processor.js +3 -3
- package/packages/dd-trace/src/span_sampler.js +4 -1
- package/packages/dd-trace/src/standalone/tracesource.js +1 -1
- package/packages/dd-trace/src/startup-log.js +2 -2
- package/packages/dd-trace/src/telemetry/dependencies.js +4 -4
- package/packages/dd-trace/src/telemetry/logs/log-collector.js +9 -10
- package/packages/dd-trace/src/telemetry/metrics.js +10 -5
- package/packages/dd-trace/src/telemetry/send-data.js +1 -1
- package/packages/dd-trace/src/telemetry/telemetry.js +23 -24
- package/packages/dd-trace/src/util.js +1 -1
- package/version.js +1 -0
- package/packages/datadog-instrumentations/src/paperplane.js +0 -77
- package/packages/datadog-plugin-paperplane/src/index.js +0 -25
- package/packages/datadog-plugin-paperplane/src/logger.js +0 -11
- package/packages/datadog-plugin-paperplane/src/server.js +0 -24
|
@@ -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'
|
|
@@ -86,23 +86,23 @@ class LLMObsTagger {
|
|
|
86
86
|
// TODO: similarly for the following `tag` methods,
|
|
87
87
|
// how can we transition from a span weakmap to core API functionality
|
|
88
88
|
tagLLMIO (span, inputData, outputData) {
|
|
89
|
-
this
|
|
90
|
-
this
|
|
89
|
+
this.#tagMessages(span, inputData, INPUT_MESSAGES)
|
|
90
|
+
this.#tagMessages(span, outputData, OUTPUT_MESSAGES)
|
|
91
91
|
}
|
|
92
92
|
|
|
93
93
|
tagEmbeddingIO (span, inputData, outputData) {
|
|
94
|
-
this
|
|
95
|
-
this
|
|
94
|
+
this.#tagDocuments(span, inputData, INPUT_DOCUMENTS)
|
|
95
|
+
this.#tagText(span, outputData, OUTPUT_VALUE)
|
|
96
96
|
}
|
|
97
97
|
|
|
98
98
|
tagRetrievalIO (span, inputData, outputData) {
|
|
99
|
-
this
|
|
100
|
-
this
|
|
99
|
+
this.#tagText(span, inputData, INPUT_VALUE)
|
|
100
|
+
this.#tagDocuments(span, outputData, OUTPUT_DOCUMENTS)
|
|
101
101
|
}
|
|
102
102
|
|
|
103
103
|
tagTextIO (span, inputData, outputData) {
|
|
104
|
-
this
|
|
105
|
-
this
|
|
104
|
+
this.#tagText(span, inputData, INPUT_VALUE)
|
|
105
|
+
this.#tagText(span, outputData, OUTPUT_VALUE)
|
|
106
106
|
}
|
|
107
107
|
|
|
108
108
|
tagMetadata (span, metadata) {
|
|
@@ -135,7 +135,7 @@ class LLMObsTagger {
|
|
|
135
135
|
if (typeof value === 'number') {
|
|
136
136
|
filterdMetrics[processedKey] = value
|
|
137
137
|
} else {
|
|
138
|
-
this
|
|
138
|
+
this.#handleFailure(`Value for metric '${key}' must be a number, instead got ${value}`, 'invalid_metrics')
|
|
139
139
|
}
|
|
140
140
|
}
|
|
141
141
|
|
|
@@ -148,19 +148,19 @@ class LLMObsTagger {
|
|
|
148
148
|
}
|
|
149
149
|
|
|
150
150
|
tagSpanTags (span, tags) {
|
|
151
|
-
// new tags will be merged with existing tags
|
|
152
151
|
const currentTags = registry.get(span)?.[TAGS]
|
|
153
152
|
if (currentTags) {
|
|
154
|
-
Object.assign(
|
|
153
|
+
Object.assign(currentTags, tags)
|
|
154
|
+
} else {
|
|
155
|
+
this._setTag(span, TAGS, tags)
|
|
155
156
|
}
|
|
156
|
-
this._setTag(span, TAGS, tags)
|
|
157
157
|
}
|
|
158
158
|
|
|
159
159
|
changeKind (span, newKind) {
|
|
160
160
|
this._setTag(span, SPAN_KIND, newKind)
|
|
161
161
|
}
|
|
162
162
|
|
|
163
|
-
|
|
163
|
+
#tagText (span, data, key) {
|
|
164
164
|
if (data) {
|
|
165
165
|
if (typeof data === 'string') {
|
|
166
166
|
this._setTag(span, key, data)
|
|
@@ -169,142 +169,156 @@ class LLMObsTagger {
|
|
|
169
169
|
this._setTag(span, key, JSON.stringify(data))
|
|
170
170
|
} catch {
|
|
171
171
|
const type = key === INPUT_VALUE ? 'input' : 'output'
|
|
172
|
-
this
|
|
172
|
+
this.#handleFailure(`Failed to parse ${type} value, must be JSON serializable.`, 'invalid_io_text')
|
|
173
173
|
}
|
|
174
174
|
}
|
|
175
175
|
}
|
|
176
176
|
}
|
|
177
177
|
|
|
178
|
-
|
|
179
|
-
if (data) {
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
}
|
|
178
|
+
#tagDocuments (span, data, key) {
|
|
179
|
+
if (!data) {
|
|
180
|
+
return
|
|
181
|
+
}
|
|
183
182
|
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
}
|
|
183
|
+
if (!Array.isArray(data)) {
|
|
184
|
+
data = [data]
|
|
185
|
+
}
|
|
188
186
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
}
|
|
187
|
+
const documents = []
|
|
188
|
+
for (const document of data) {
|
|
189
|
+
if (typeof document === 'string') {
|
|
190
|
+
documents.push({ text: document })
|
|
191
|
+
continue
|
|
192
|
+
}
|
|
193
193
|
|
|
194
|
-
|
|
195
|
-
|
|
194
|
+
if (document == null || typeof document !== 'object') {
|
|
195
|
+
this.#handleFailure('Documents must be a string, object, or list of objects.', 'invalid_embedding_io')
|
|
196
|
+
continue
|
|
197
|
+
}
|
|
196
198
|
|
|
197
|
-
|
|
198
|
-
this._handleFailure('Document text must be a string.', 'invalid_embedding_io')
|
|
199
|
-
validDocument = false
|
|
200
|
-
}
|
|
199
|
+
const { text, name, id, score } = document
|
|
201
200
|
|
|
202
|
-
|
|
201
|
+
const valid = typeof text === 'string'
|
|
202
|
+
if (!valid) {
|
|
203
|
+
this.#handleFailure('Document text must be a string.', 'invalid_embedding_io')
|
|
204
|
+
}
|
|
203
205
|
|
|
204
|
-
|
|
205
|
-
validDocument = this._tagConditionalString(id, 'Document ID', documentObj, 'id') && validDocument
|
|
206
|
-
validDocument = this._tagConditionalNumber(score, 'Document score', documentObj, 'score') && validDocument
|
|
206
|
+
const documentObj = { text }
|
|
207
207
|
|
|
208
|
-
|
|
209
|
-
|
|
208
|
+
const condition1 = this.#tagConditionalString(name, 'Document name', documentObj, 'name')
|
|
209
|
+
const condition2 = this.#tagConditionalString(id, 'Document ID', documentObj, 'id')
|
|
210
|
+
const condition3 = this.#tagConditionalNumber(score, 'Document score', documentObj, 'score')
|
|
210
211
|
|
|
211
|
-
if (
|
|
212
|
-
|
|
212
|
+
if (valid && condition1 && condition2 && condition3) {
|
|
213
|
+
documents.push(documentObj)
|
|
213
214
|
}
|
|
214
215
|
}
|
|
215
|
-
}
|
|
216
216
|
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
}
|
|
217
|
+
if (documents.length) {
|
|
218
|
+
this._setTag(span, key, documents)
|
|
219
|
+
}
|
|
220
|
+
}
|
|
222
221
|
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
222
|
+
#filterToolCalls (toolCalls) {
|
|
223
|
+
if (!Array.isArray(toolCalls)) {
|
|
224
|
+
toolCalls = [toolCalls]
|
|
225
|
+
}
|
|
227
226
|
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
227
|
+
const filteredToolCalls = []
|
|
228
|
+
for (const toolCall of toolCalls) {
|
|
229
|
+
if (typeof toolCall !== 'object') {
|
|
230
|
+
this.#handleFailure('Tool call must be an object.', 'invalid_io_messages')
|
|
231
|
+
continue
|
|
232
|
+
}
|
|
232
233
|
|
|
233
|
-
|
|
234
|
+
const { name, arguments: args, toolId, type } = toolCall
|
|
235
|
+
const toolCallObj = {}
|
|
234
236
|
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
237
|
+
const condition1 = this.#tagConditionalString(name, 'Tool name', toolCallObj, 'name')
|
|
238
|
+
const condition2 = this.#tagConditionalObject(args, 'Tool arguments', toolCallObj, 'arguments')
|
|
239
|
+
const condition3 = this.#tagConditionalString(toolId, 'Tool ID', toolCallObj, 'tool_id')
|
|
240
|
+
const condition4 = this.#tagConditionalString(type, 'Tool type', toolCallObj, 'type')
|
|
238
241
|
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
242
|
+
if (condition1 && condition2 && condition3 && condition4) {
|
|
243
|
+
filteredToolCalls.push(toolCallObj)
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
return filteredToolCalls
|
|
247
|
+
}
|
|
243
248
|
|
|
244
|
-
|
|
249
|
+
#tagMessages (span, data, key) {
|
|
250
|
+
if (!data) {
|
|
251
|
+
return
|
|
252
|
+
}
|
|
253
|
+
if (!Array.isArray(data)) {
|
|
254
|
+
data = [data]
|
|
255
|
+
}
|
|
245
256
|
|
|
246
|
-
|
|
247
|
-
if (!Array.isArray(toolCalls)) {
|
|
248
|
-
toolCalls = [toolCalls]
|
|
249
|
-
}
|
|
257
|
+
const messages = []
|
|
250
258
|
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
259
|
+
for (const message of data) {
|
|
260
|
+
if (typeof message === 'string') {
|
|
261
|
+
messages.push({ content: message })
|
|
262
|
+
continue
|
|
263
|
+
}
|
|
264
|
+
if (message == null || typeof message !== 'object') {
|
|
265
|
+
this.#handleFailure('Messages must be a string, object, or list of objects', 'invalid_io_messages')
|
|
266
|
+
continue
|
|
267
|
+
}
|
|
256
268
|
|
|
257
|
-
|
|
269
|
+
const { content = '', role } = message
|
|
270
|
+
const toolCalls = message.toolCalls
|
|
271
|
+
const messageObj = { content }
|
|
258
272
|
|
|
259
|
-
|
|
260
|
-
|
|
273
|
+
const valid = typeof content === 'string'
|
|
274
|
+
if (!valid) {
|
|
275
|
+
this.#handleFailure('Message content must be a string.', 'invalid_io_messages')
|
|
276
|
+
}
|
|
261
277
|
|
|
262
|
-
|
|
263
|
-
validTool = this._tagConditionalObject(args, 'Tool arguments', toolCallObj, 'arguments') && validTool
|
|
264
|
-
validTool = this._tagConditionalString(toolId, 'Tool ID', toolCallObj, 'tool_id') && validTool
|
|
265
|
-
validTool = this._tagConditionalString(type, 'Tool type', toolCallObj, 'type') && validTool
|
|
278
|
+
const condition = this.#tagConditionalString(role, 'Message role', messageObj, 'role')
|
|
266
279
|
|
|
267
|
-
|
|
268
|
-
|
|
280
|
+
if (toolCalls) {
|
|
281
|
+
const filteredToolCalls = this.#filterToolCalls(toolCalls)
|
|
269
282
|
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
}
|
|
283
|
+
if (filteredToolCalls.length) {
|
|
284
|
+
messageObj.tool_calls = filteredToolCalls
|
|
273
285
|
}
|
|
286
|
+
}
|
|
274
287
|
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
if (messages.length) {
|
|
279
|
-
this._setTag(span, key, messages)
|
|
288
|
+
if (valid && condition) {
|
|
289
|
+
messages.push(messageObj)
|
|
280
290
|
}
|
|
281
291
|
}
|
|
292
|
+
|
|
293
|
+
if (messages.length) {
|
|
294
|
+
this._setTag(span, key, messages)
|
|
295
|
+
}
|
|
282
296
|
}
|
|
283
297
|
|
|
284
|
-
|
|
298
|
+
#tagConditionalString (data, type, carrier, key) {
|
|
285
299
|
if (!data) return true
|
|
286
300
|
if (typeof data !== 'string') {
|
|
287
|
-
this
|
|
301
|
+
this.#handleFailure(`"${type}" must be a string.`)
|
|
288
302
|
return false
|
|
289
303
|
}
|
|
290
304
|
carrier[key] = data
|
|
291
305
|
return true
|
|
292
306
|
}
|
|
293
307
|
|
|
294
|
-
|
|
308
|
+
#tagConditionalNumber (data, type, carrier, key) {
|
|
295
309
|
if (!data) return true
|
|
296
310
|
if (typeof data !== 'number') {
|
|
297
|
-
this
|
|
311
|
+
this.#handleFailure(`"${type}" must be a number.`)
|
|
298
312
|
return false
|
|
299
313
|
}
|
|
300
314
|
carrier[key] = data
|
|
301
315
|
return true
|
|
302
316
|
}
|
|
303
317
|
|
|
304
|
-
|
|
318
|
+
#tagConditionalObject (data, type, carrier, key) {
|
|
305
319
|
if (!data) return true
|
|
306
320
|
if (typeof data !== 'object') {
|
|
307
|
-
this
|
|
321
|
+
this.#handleFailure(`"${type}" must be an object.`)
|
|
308
322
|
return false
|
|
309
323
|
}
|
|
310
324
|
carrier[key] = data
|
|
@@ -313,7 +327,7 @@ class LLMObsTagger {
|
|
|
313
327
|
|
|
314
328
|
// any public-facing LLMObs APIs using this tagger should not soft fail
|
|
315
329
|
// auto-instrumentation should soft fail
|
|
316
|
-
|
|
330
|
+
#handleFailure (msg, errorTag) {
|
|
317
331
|
if (this.softFail) {
|
|
318
332
|
log.warn(msg)
|
|
319
333
|
} else {
|
|
@@ -328,7 +342,7 @@ class LLMObsTagger {
|
|
|
328
342
|
_register (span) {
|
|
329
343
|
if (!this._config.llmobs.enabled) return
|
|
330
344
|
if (registry.has(span)) {
|
|
331
|
-
this
|
|
345
|
+
this.#handleFailure(`LLMObs Span "${span._name}" already registered.`)
|
|
332
346
|
return
|
|
333
347
|
}
|
|
334
348
|
|
|
@@ -338,7 +352,7 @@ class LLMObsTagger {
|
|
|
338
352
|
_setTag (span, key, value) {
|
|
339
353
|
if (!this._config.llmobs.enabled) return
|
|
340
354
|
if (!registry.has(span)) {
|
|
341
|
-
this
|
|
355
|
+
this.#handleFailure(`Span "${span._name}" must be an LLMObs generated span.`)
|
|
342
356
|
return
|
|
343
357
|
}
|
|
344
358
|
|
|
@@ -2,15 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
const { SPAN_KINDS } = require('./constants/tags')
|
|
4
4
|
|
|
5
|
-
function encodeUnicode (str) {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const code =
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
return char
|
|
13
|
-
}).join('')
|
|
5
|
+
function encodeUnicode (str = '') {
|
|
6
|
+
let result = ''
|
|
7
|
+
for (let i = 0; i < str.length; i++) {
|
|
8
|
+
const code = str.charCodeAt(i)
|
|
9
|
+
result += code > 127 ? `\\u${code.toString(16).padStart(4, '0')}` : str[i]
|
|
10
|
+
}
|
|
11
|
+
return result
|
|
14
12
|
}
|
|
15
13
|
|
|
16
14
|
function validateKind (kind) {
|
|
@@ -107,6 +105,8 @@ function findArgumentsBounds (str) {
|
|
|
107
105
|
let end = -1
|
|
108
106
|
let closerCount = 0
|
|
109
107
|
|
|
108
|
+
// TODO(BridgeAR): This "breaks" up codePoints.
|
|
109
|
+
// Investigate if this is a problem.
|
|
110
110
|
for (let i = 0; i < str.length; i++) {
|
|
111
111
|
const char = str[i]
|
|
112
112
|
|
|
@@ -157,7 +157,7 @@ class BaseLLMObsWriter {
|
|
|
157
157
|
return encodeUnicode(value) // serialize unicode characters
|
|
158
158
|
}
|
|
159
159
|
return value
|
|
160
|
-
}).replace(/\\\\u/g,
|
|
160
|
+
}).replace(/\\\\u/g, String.raw`\u`) // remove double escaping
|
|
161
161
|
}
|
|
162
162
|
}
|
|
163
163
|
|
|
@@ -27,7 +27,7 @@ function setAgentStrategy (config, setWritersAgentlessValue) {
|
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
const endpoints = agentInfo.endpoints
|
|
30
|
-
const hasEndpoint = Array.isArray(endpoints) && endpoints.
|
|
30
|
+
const hasEndpoint = Array.isArray(endpoints) && endpoints.includes(EVP_PROXY_AGENT_BASE_PATH)
|
|
31
31
|
setWritersAgentlessValue(!hasEndpoint)
|
|
32
32
|
})
|
|
33
33
|
}
|
|
@@ -95,7 +95,7 @@ const log = {
|
|
|
95
95
|
return this._deprecate(code, message)
|
|
96
96
|
},
|
|
97
97
|
|
|
98
|
-
isEnabled (fleetStableConfigValue
|
|
98
|
+
isEnabled (fleetStableConfigValue, localStableConfigValue) {
|
|
99
99
|
return isTrue(coalesce(
|
|
100
100
|
fleetStableConfigValue,
|
|
101
101
|
process.env?.DD_TRACE_DEBUG,
|
|
@@ -106,9 +106,9 @@ const log = {
|
|
|
106
106
|
},
|
|
107
107
|
|
|
108
108
|
getLogLevel (
|
|
109
|
-
optionsValue
|
|
110
|
-
fleetStableConfigValue
|
|
111
|
-
localStableConfigValue
|
|
109
|
+
optionsValue,
|
|
110
|
+
fleetStableConfigValue,
|
|
111
|
+
localStableConfigValue
|
|
112
112
|
) {
|
|
113
113
|
return coalesce(
|
|
114
114
|
optionsValue,
|
|
@@ -23,7 +23,7 @@ class Log {
|
|
|
23
23
|
static parse (...args) {
|
|
24
24
|
let message, cause, delegate
|
|
25
25
|
|
|
26
|
-
const lastArg = args
|
|
26
|
+
const lastArg = args.at(-1)
|
|
27
27
|
if (lastArg && typeof lastArg === 'object' && lastArg.stack) { // lastArg instanceof Error?
|
|
28
28
|
cause = args.pop()
|
|
29
29
|
}
|
|
@@ -42,7 +42,7 @@ function toggle (enable, level) {
|
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
function use (newLogger) {
|
|
45
|
-
if (
|
|
45
|
+
if (typeof newLogger?.debug === 'function' && typeof newLogger.error === 'function') {
|
|
46
46
|
logger = newLogger
|
|
47
47
|
}
|
|
48
48
|
}
|
|
@@ -54,7 +54,7 @@ function reset () {
|
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
function getErrorLog (err) {
|
|
57
|
-
if (
|
|
57
|
+
if (typeof err?.delegate === 'function') {
|
|
58
58
|
const result = err.delegate()
|
|
59
59
|
return Array.isArray(result) ? Log.parse(...result) : Log.parse(result)
|
|
60
60
|
} else {
|
|
@@ -21,10 +21,10 @@ class Chunk {
|
|
|
21
21
|
|
|
22
22
|
if (length < 0x20) { // fixstr
|
|
23
23
|
this.reserve(length + 1)
|
|
24
|
-
this.buffer[offset] = length |
|
|
25
|
-
} else if (length <
|
|
24
|
+
this.buffer[offset] = length | 0xA0
|
|
25
|
+
} else if (length < 0x1_00_00_00_00) { // str 32
|
|
26
26
|
this.reserve(length + 5)
|
|
27
|
-
this.buffer[offset] =
|
|
27
|
+
this.buffer[offset] = 0xDB
|
|
28
28
|
this.buffer[offset + 1] = length >> 24
|
|
29
29
|
this.buffer[offset + 2] = length >> 16
|
|
30
30
|
this.buffer[offset + 3] = length >> 8
|