dd-trace 5.53.0 → 5.55.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/ci/cypress/plugin.js +8 -0
- package/ci/cypress/polyfills.js +23 -0
- package/ci/init.js +8 -7
- package/index.d.ts +33 -16
- package/initialize.mjs +5 -6
- package/package.json +40 -38
- package/packages/datadog-code-origin/index.js +22 -4
- 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 +10 -10
- package/packages/datadog-instrumentations/src/child_process.js +1 -2
- package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +89 -75
- package/packages/datadog-instrumentations/src/cookie-parser.js +1 -1
- package/packages/datadog-instrumentations/src/couchbase.js +6 -9
- package/packages/datadog-instrumentations/src/cucumber.js +108 -68
- package/packages/datadog-instrumentations/src/cypress.js +2 -1
- package/packages/datadog-instrumentations/src/dns.js +5 -5
- package/packages/datadog-instrumentations/src/elasticsearch.js +9 -10
- package/packages/datadog-instrumentations/src/fastify.js +7 -9
- package/packages/datadog-instrumentations/src/fs.js +1 -1
- package/packages/datadog-instrumentations/src/google-cloud-pubsub.js +35 -43
- 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/hapi.js +10 -11
- package/packages/datadog-instrumentations/src/helpers/extract-package-and-module-path.js +16 -10
- package/packages/datadog-instrumentations/src/helpers/fetch.js +4 -5
- package/packages/datadog-instrumentations/src/helpers/hook.js +2 -3
- 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 +11 -12
- package/packages/datadog-instrumentations/src/http/client.js +14 -20
- package/packages/datadog-instrumentations/src/jest.js +201 -143
- package/packages/datadog-instrumentations/src/kafkajs.js +52 -44
- package/packages/datadog-instrumentations/src/knex.js +4 -4
- package/packages/datadog-instrumentations/src/koa.js +2 -3
- package/packages/datadog-instrumentations/src/ldapjs.js +3 -4
- package/packages/datadog-instrumentations/src/mariadb.js +49 -65
- package/packages/datadog-instrumentations/src/mocha/main.js +116 -73
- 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/mocha.js +3 -1
- package/packages/datadog-instrumentations/src/mongodb-core.js +1 -1
- package/packages/datadog-instrumentations/src/mysql.js +30 -37
- 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 +3 -2
- package/packages/datadog-instrumentations/src/openai.js +22 -24
- package/packages/datadog-instrumentations/src/oracledb.js +1 -1
- package/packages/datadog-instrumentations/src/otel-sdk-trace.js +4 -3
- package/packages/datadog-instrumentations/src/pg.js +3 -5
- package/packages/datadog-instrumentations/src/playwright.js +123 -83
- package/packages/datadog-instrumentations/src/protobufjs.js +3 -4
- package/packages/datadog-instrumentations/src/redis.js +4 -4
- package/packages/datadog-instrumentations/src/restify.js +9 -13
- package/packages/datadog-instrumentations/src/rhea.js +42 -54
- package/packages/datadog-instrumentations/src/router.js +30 -32
- package/packages/datadog-instrumentations/src/tedious.js +2 -3
- package/packages/datadog-instrumentations/src/vitest.js +87 -52
- 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-avsc/src/schema_iterator.js +12 -12
- package/packages/datadog-plugin-aws-sdk/src/base.js +15 -10
- 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/cloudwatchlogs.js +3 -5
- package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +28 -43
- package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +2 -2
- package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +10 -11
- package/packages/datadog-plugin-aws-sdk/src/services/lambda.js +4 -6
- package/packages/datadog-plugin-aws-sdk/src/services/redshift.js +3 -5
- package/packages/datadog-plugin-aws-sdk/src/services/s3.js +3 -5
- package/packages/datadog-plugin-aws-sdk/src/services/sns.js +2 -3
- package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +11 -15
- 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 +60 -4
- package/packages/datadog-plugin-cypress/src/cypress-plugin.js +99 -28
- package/packages/datadog-plugin-cypress/src/plugin.js +11 -1
- package/packages/datadog-plugin-cypress/src/support.js +24 -5
- package/packages/datadog-plugin-dd-trace-api/src/index.js +2 -1
- package/packages/datadog-plugin-elasticsearch/src/index.js +1 -1
- 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 +27 -10
- package/packages/datadog-plugin-graphql/src/execute.js +2 -2
- package/packages/datadog-plugin-graphql/src/index.js +10 -8
- package/packages/datadog-plugin-graphql/src/resolve.js +19 -12
- 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 +23 -13
- package/packages/datadog-plugin-http2/src/client.js +24 -25
- package/packages/datadog-plugin-jest/src/index.js +26 -23
- 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 +39 -14
- package/packages/datadog-plugin-mongodb-core/src/index.js +3 -2
- package/packages/datadog-plugin-mysql/src/index.js +22 -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 +7 -6
- package/packages/datadog-plugin-openai/src/services.js +6 -10
- package/packages/datadog-plugin-openai/src/tracing.js +12 -18
- package/packages/datadog-plugin-oracledb/src/index.js +1 -1
- package/packages/datadog-plugin-playwright/src/index.js +25 -4
- package/packages/datadog-plugin-protobufjs/src/schema_iterator.js +8 -9
- package/packages/datadog-plugin-redis/src/index.js +2 -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 +52 -35
- 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/analyzers.js +0 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-password-rules.js +0 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secret-rules.js +0 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secrets-rules.js +0 -1
- 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 +5 -8
- 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 +16 -24
- 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 +2 -8
- 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 +7 -8
- 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 +7 -7
- package/packages/dd-trace/src/appsec/iast/telemetry/verbosity.js +2 -3
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/range-utils.js +10 -11
- 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 -28
- 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/vulnerabilities.js +0 -1
- package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +9 -11
- package/packages/dd-trace/src/appsec/index.js +5 -5
- 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 +232 -41
- package/packages/dd-trace/src/appsec/rule_manager.js +2 -2
- package/packages/dd-trace/src/appsec/sdk/set_user.js +2 -2
- package/packages/dd-trace/src/appsec/sdk/track_event.js +3 -3
- package/packages/dd-trace/src/appsec/stack_trace.js +2 -4
- package/packages/dd-trace/src/appsec/telemetry/index.js +31 -1
- 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 +8 -4
- package/packages/dd-trace/src/azure_metadata.js +9 -9
- package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/index.js +9 -8
- 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 +3 -2
- 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 +3 -2
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +3 -2
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +3 -2
- 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 +6 -5
- package/packages/dd-trace/src/ci-visibility/exporters/test-worker/index.js +7 -6
- 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 +3 -2
- package/packages/dd-trace/src/ci-visibility/log-submission/log-submission-plugin.js +5 -4
- package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +12 -8
- 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 +3 -2
- package/packages/dd-trace/src/config-helper.js +89 -0
- package/packages/dd-trace/src/config.js +159 -129
- package/packages/dd-trace/src/config_stable.js +10 -7
- package/packages/dd-trace/src/datastreams/encoding.js +9 -9
- package/packages/dd-trace/src/datastreams/fnv.js +2 -2
- 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 +7 -7
- 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 +75 -69
- package/packages/dd-trace/src/debugger/devtools_client/condition.js +7 -10
- package/packages/dd-trace/src/debugger/devtools_client/defaults.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/index.js +9 -2
- package/packages/dd-trace/src/debugger/devtools_client/remote_config.js +18 -38
- package/packages/dd-trace/src/debugger/devtools_client/send.js +3 -2
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/collector.js +1 -2
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/index.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/processor.js +11 -14
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/redaction.js +4 -4
- 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/debugger/index.js +1 -0
- package/packages/dd-trace/src/dogstatsd.js +7 -6
- package/packages/dd-trace/src/encode/0.4.js +14 -11
- package/packages/dd-trace/src/encode/0.5.js +4 -6
- package/packages/dd-trace/src/encode/agentless-ci-visibility.js +8 -8
- 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 +7 -6
- package/packages/dd-trace/src/exporters/agent/writer.js +1 -5
- package/packages/dd-trace/src/exporters/common/docker.js +4 -3
- package/packages/dd-trace/src/exporters/common/form-data.js +6 -4
- package/packages/dd-trace/src/exporters/common/request.js +5 -2
- package/packages/dd-trace/src/exporters/common/util.js +4 -2
- 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 +15 -9
- package/packages/dd-trace/src/iitm.js +10 -22
- package/packages/dd-trace/src/index.js +4 -3
- package/packages/dd-trace/src/lambda/handler.js +7 -6
- package/packages/dd-trace/src/lambda/index.js +2 -1
- package/packages/dd-trace/src/lambda/runtime/patch.js +7 -6
- package/packages/dd-trace/src/lambda/runtime/ritm.js +4 -3
- package/packages/dd-trace/src/llmobs/constants/tags.js +1 -0
- package/packages/dd-trace/src/llmobs/index.js +21 -5
- package/packages/dd-trace/src/llmobs/noop.js +18 -20
- 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/handlers/index.js +11 -13
- package/packages/dd-trace/src/llmobs/plugins/langchain/index.js +6 -6
- package/packages/dd-trace/src/llmobs/plugins/openai.js +2 -3
- package/packages/dd-trace/src/llmobs/sdk.js +4 -3
- package/packages/dd-trace/src/llmobs/span_processor.js +1 -1
- package/packages/dd-trace/src/llmobs/tagger.js +129 -102
- 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 +9 -8
- package/packages/dd-trace/src/log/log.js +1 -1
- package/packages/dd-trace/src/log/writer.js +3 -4
- package/packages/dd-trace/src/msgpack/chunk.js +3 -3
- package/packages/dd-trace/src/msgpack/encoder.js +31 -31
- package/packages/dd-trace/src/noop/dogstatsd.js +6 -6
- package/packages/dd-trace/src/noop/span.js +4 -6
- 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 +7 -6
- package/packages/dd-trace/src/opentracing/propagation/log.js +10 -13
- package/packages/dd-trace/src/opentracing/propagation/text_map.js +40 -37
- package/packages/dd-trace/src/opentracing/propagation/tracestate.js +8 -4
- package/packages/dd-trace/src/opentracing/span.js +16 -20
- package/packages/dd-trace/src/opentracing/tracer.js +9 -6
- package/packages/dd-trace/src/payload-tagging/config/index.js +17 -21
- 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/plugin_manager.js +4 -3
- package/packages/dd-trace/src/plugins/ci_plugin.js +87 -11
- 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 +28 -20
- package/packages/dd-trace/src/plugins/util/git.js +166 -12
- 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 +9 -2
- package/packages/dd-trace/src/plugins/util/test.js +315 -51
- 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 +14 -4
- package/packages/dd-trace/src/plugins/util/web.js +8 -8
- package/packages/dd-trace/src/priority_sampler.js +64 -53
- package/packages/dd-trace/src/profiling/config.js +51 -35
- package/packages/dd-trace/src/profiling/exporter_cli.js +20 -20
- package/packages/dd-trace/src/profiling/exporters/agent.js +1 -1
- package/packages/dd-trace/src/profiling/exporters/event_serializer.js +7 -6
- package/packages/dd-trace/src/profiling/exporters/file.js +2 -1
- package/packages/dd-trace/src/profiling/index.js +2 -1
- package/packages/dd-trace/src/profiling/profiler.js +44 -6
- 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/ssi-telemetry-mock-profiler.js +3 -1
- package/packages/dd-trace/src/profiling/tagger.js +21 -13
- package/packages/dd-trace/src/profiling/webspan-utils.js +1 -1
- package/packages/dd-trace/src/proxy.js +9 -10
- 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 +8 -8
- package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +5 -4
- package/packages/dd-trace/src/sampler.js +41 -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 +11 -4
- 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 +5 -4
- package/packages/dd-trace/src/span_sampler.js +4 -1
- package/packages/dd-trace/src/standalone/tracesource.js +2 -3
- package/packages/dd-trace/src/standalone/tracesource_priority_sampler.js +1 -2
- package/packages/dd-trace/src/startup-log.js +6 -18
- package/packages/dd-trace/src/supported-configurations.json +439 -0
- package/packages/dd-trace/src/telemetry/dependencies.js +64 -59
- 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 +8 -7
- package/packages/dd-trace/src/telemetry/telemetry.js +31 -45
- package/packages/dd-trace/src/tracer.js +3 -7
- package/packages/dd-trace/src/util.js +1 -6
- package/version.js +1 -0
- package/packages/datadog-instrumentations/src/paperplane.js +0 -77
- package/packages/datadog-plugin-paperplane/src/index.js +0 -25
- package/packages/datadog-plugin-paperplane/src/logger.js +0 -11
- package/packages/datadog-plugin-paperplane/src/server.js +0 -24
- package/packages/dd-trace/src/appsec/iast/analyzers/header-injection-analyzer.js +0 -122
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/header-sensitive-analyzer.js +0 -20
|
@@ -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')
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
3
|
const { isFalse } = require('./util')
|
|
4
|
+
const { getEnvironmentVariable } = require('../../dd-trace/src/config-helper')
|
|
4
5
|
|
|
5
6
|
// Global `jest` is only present in Jest workers.
|
|
6
7
|
const inJestWorker = typeof jest !== 'undefined'
|
|
7
8
|
|
|
8
|
-
const ddTraceDisabled =
|
|
9
|
-
? isFalse(
|
|
10
|
-
: String(
|
|
9
|
+
const ddTraceDisabled = getEnvironmentVariable('DD_TRACE_ENABLED')
|
|
10
|
+
? isFalse(getEnvironmentVariable('DD_TRACE_ENABLED'))
|
|
11
|
+
: String(getEnvironmentVariable('OTEL_TRACES_EXPORTER')).toLowerCase() === 'none'
|
|
11
12
|
|
|
12
13
|
module.exports = ddTraceDisabled || inJestWorker
|
|
13
14
|
? require('./noop/proxy')
|
|
@@ -4,6 +4,7 @@ const log = require('../log')
|
|
|
4
4
|
const { channel } = require('../../../datadog-instrumentations/src/helpers/instrument')
|
|
5
5
|
const { ERROR_MESSAGE, ERROR_TYPE } = require('../constants')
|
|
6
6
|
const { ImpendingTimeout } = require('./runtime/errors')
|
|
7
|
+
const { getEnvironmentVariable } = require('../config-helper')
|
|
7
8
|
|
|
8
9
|
const globalTracer = global._ddtrace
|
|
9
10
|
const tracer = globalTracer._tracer
|
|
@@ -25,11 +26,11 @@ let __lambdaTimeout
|
|
|
25
26
|
function checkTimeout (context) {
|
|
26
27
|
const remainingTimeInMillis = context.getRemainingTimeInMillis()
|
|
27
28
|
|
|
28
|
-
let apmFlushDeadline = parseInt(
|
|
29
|
+
let apmFlushDeadline = Number.parseInt(getEnvironmentVariable('DD_APM_FLUSH_DEADLINE_MILLISECONDS')) || 100
|
|
29
30
|
apmFlushDeadline = apmFlushDeadline < 0 ? 100 : apmFlushDeadline
|
|
30
31
|
|
|
31
32
|
__lambdaTimeout = setTimeout(() => {
|
|
32
|
-
timeoutChannel.publish(
|
|
33
|
+
timeoutChannel.publish()
|
|
33
34
|
}, remainingTimeInMillis - apmFlushDeadline)
|
|
34
35
|
}
|
|
35
36
|
|
|
@@ -43,14 +44,14 @@ function checkTimeout (context) {
|
|
|
43
44
|
*/
|
|
44
45
|
function crashFlush () {
|
|
45
46
|
const activeSpan = tracer.scope().active()
|
|
46
|
-
if (activeSpan
|
|
47
|
+
if (activeSpan === null) {
|
|
48
|
+
log.debug('An impending timeout was reached, but no root span was found. No error will be tagged.')
|
|
49
|
+
} else {
|
|
47
50
|
const error = new ImpendingTimeout('Datadog detected an impending timeout')
|
|
48
51
|
activeSpan.addTags({
|
|
49
52
|
[ERROR_MESSAGE]: error.message,
|
|
50
53
|
[ERROR_TYPE]: error.name
|
|
51
54
|
})
|
|
52
|
-
} else {
|
|
53
|
-
log.debug('An impending timeout was reached, but no root span was found. No error will be tagged.')
|
|
54
55
|
}
|
|
55
56
|
|
|
56
57
|
tracer._processor.killAll()
|
|
@@ -70,7 +71,7 @@ function extractContext (args) {
|
|
|
70
71
|
if (context === undefined || context.getRemainingTimeInMillis === undefined) {
|
|
71
72
|
context = args.length > 2 ? args[2] : undefined
|
|
72
73
|
if (context === undefined || context.getRemainingTimeInMillis === undefined) {
|
|
73
|
-
throw Error('Could not extract context')
|
|
74
|
+
throw new Error('Could not extract context')
|
|
74
75
|
}
|
|
75
76
|
}
|
|
76
77
|
return context
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
3
|
const { registerLambdaHook } = require('./runtime/ritm')
|
|
4
|
+
const { getEnvironmentVariable } = require('../config-helper')
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* It is safe to do it this way, since customers will never be expected to disable
|
|
7
8
|
* this specific instrumentation through the init config object.
|
|
8
9
|
*/
|
|
9
|
-
const _DD_TRACE_DISABLED_INSTRUMENTATIONS =
|
|
10
|
+
const _DD_TRACE_DISABLED_INSTRUMENTATIONS = getEnvironmentVariable('DD_TRACE_DISABLED_INSTRUMENTATIONS') || ''
|
|
10
11
|
const _disabledInstrumentations = new Set(
|
|
11
12
|
_DD_TRACE_DISABLED_INSTRUMENTATIONS ? _DD_TRACE_DISABLED_INSTRUMENTATIONS.split(',') : []
|
|
12
13
|
)
|
|
@@ -6,6 +6,7 @@ const { _extractModuleNameAndHandlerPath, _extractModuleRootAndHandler, _getLamb
|
|
|
6
6
|
const { datadog } = require('../handler')
|
|
7
7
|
const { addHook } = require('../../../../datadog-instrumentations/src/helpers/instrument')
|
|
8
8
|
const shimmer = require('../../../../datadog-shimmer')
|
|
9
|
+
const { getEnvironmentVariable } = require('../../config-helper')
|
|
9
10
|
|
|
10
11
|
/**
|
|
11
12
|
* Patches a Datadog Lambda module by calling `patchDatadogLambdaHandler`
|
|
@@ -57,10 +58,13 @@ function patchLambdaHandler (lambdaHandler) {
|
|
|
57
58
|
return datadog(lambdaHandler)
|
|
58
59
|
}
|
|
59
60
|
|
|
60
|
-
const lambdaTaskRoot =
|
|
61
|
-
const originalLambdaHandler =
|
|
61
|
+
const lambdaTaskRoot = getEnvironmentVariable('LAMBDA_TASK_ROOT')
|
|
62
|
+
const originalLambdaHandler = getEnvironmentVariable('DD_LAMBDA_HANDLER')
|
|
62
63
|
|
|
63
|
-
if (originalLambdaHandler
|
|
64
|
+
if (originalLambdaHandler === undefined) {
|
|
65
|
+
// Instrumentation is done manually.
|
|
66
|
+
addHook({ name: 'datadog-lambda-js' }, patchDatadogLambdaModule)
|
|
67
|
+
} else {
|
|
64
68
|
const [moduleRoot, moduleAndHandler] = _extractModuleRootAndHandler(originalLambdaHandler)
|
|
65
69
|
const [_module, handlerPath] = _extractModuleNameAndHandlerPath(moduleAndHandler)
|
|
66
70
|
|
|
@@ -70,7 +74,4 @@ if (originalLambdaHandler !== undefined) {
|
|
|
70
74
|
for (const lambdaFilePath of lambdaFilePaths) {
|
|
71
75
|
addHook({ name: lambdaFilePath }, patchLambdaModule(handlerPath))
|
|
72
76
|
}
|
|
73
|
-
} else {
|
|
74
|
-
// Instrumentation is done manually.
|
|
75
|
-
addHook({ name: 'datadog-lambda-js' }, patchDatadogLambdaModule)
|
|
76
77
|
}
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
const path = require('path')
|
|
11
11
|
|
|
12
12
|
const log = require('../../log')
|
|
13
|
+
const { getEnvironmentVariable } = require('../../config-helper')
|
|
13
14
|
const Hook = require('../../../../datadog-instrumentations/src/helpers/hook')
|
|
14
15
|
const instrumentations = require('../../../../datadog-instrumentations/src/helpers/instrumentations')
|
|
15
16
|
const {
|
|
@@ -31,7 +32,7 @@ const {
|
|
|
31
32
|
*/
|
|
32
33
|
function _extractModuleRootAndHandler (fullHandler) {
|
|
33
34
|
const handlerString = path.basename(fullHandler)
|
|
34
|
-
const moduleRoot = fullHandler.
|
|
35
|
+
const moduleRoot = fullHandler.slice(0, Math.max(0, fullHandler.indexOf(handlerString)))
|
|
35
36
|
|
|
36
37
|
return [moduleRoot, handlerString]
|
|
37
38
|
}
|
|
@@ -78,8 +79,8 @@ function _getLambdaFilePaths (lambdaStylePath) {
|
|
|
78
79
|
* the file is required.
|
|
79
80
|
*/
|
|
80
81
|
const registerLambdaHook = () => {
|
|
81
|
-
const lambdaTaskRoot =
|
|
82
|
-
const originalLambdaHandler =
|
|
82
|
+
const lambdaTaskRoot = getEnvironmentVariable('LAMBDA_TASK_ROOT')
|
|
83
|
+
const originalLambdaHandler = getEnvironmentVariable('DD_LAMBDA_HANDLER')
|
|
83
84
|
|
|
84
85
|
if (originalLambdaHandler !== undefined && lambdaTaskRoot !== undefined) {
|
|
85
86
|
const [moduleRoot, moduleAndHandler] = _extractModuleRootAndHandler(originalLambdaHandler)
|
|
@@ -10,6 +10,7 @@ module.exports = {
|
|
|
10
10
|
METRICS: '_ml_obs.metrics',
|
|
11
11
|
ML_APP: '_ml_obs.meta.ml_app',
|
|
12
12
|
PROPAGATED_PARENT_ID_KEY: '_dd.p.llmobs_parent_id',
|
|
13
|
+
PROPAGATED_ML_APP_KEY: '_dd.p.llmobs_ml_app',
|
|
13
14
|
PARENT_ID_KEY: '_ml_obs.llmobs_parent_id',
|
|
14
15
|
TAGS: '_ml_obs.tags',
|
|
15
16
|
NAME: '_ml_obs.name',
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
3
|
const log = require('../log')
|
|
4
|
-
const {
|
|
4
|
+
const {
|
|
5
|
+
ML_APP,
|
|
6
|
+
PROPAGATED_ML_APP_KEY,
|
|
7
|
+
PROPAGATED_PARENT_ID_KEY
|
|
8
|
+
} = require('./constants/tags')
|
|
5
9
|
const { storage } = require('./storage')
|
|
6
10
|
|
|
7
11
|
const telemetry = require('./telemetry')
|
|
@@ -14,6 +18,7 @@ const flushCh = channel('llmobs:writers:flush')
|
|
|
14
18
|
const injectCh = channel('dd-trace:span:inject')
|
|
15
19
|
|
|
16
20
|
const LLMObsEvalMetricsWriter = require('./writers/evaluations')
|
|
21
|
+
const LLMObsTagger = require('./tagger')
|
|
17
22
|
const LLMObsSpanWriter = require('./writers/spans')
|
|
18
23
|
const { setAgentStrategy } = require('./writers/util')
|
|
19
24
|
|
|
@@ -35,7 +40,12 @@ let spanWriter
|
|
|
35
40
|
/** @type {LLMObsEvalMetricsWriter | null} */
|
|
36
41
|
let evalWriter
|
|
37
42
|
|
|
43
|
+
/** @type {import('../config')} */
|
|
44
|
+
let globalTracerConfig
|
|
45
|
+
|
|
38
46
|
function enable (config) {
|
|
47
|
+
globalTracerConfig = config
|
|
48
|
+
|
|
39
49
|
const startTime = performance.now()
|
|
40
50
|
// create writers and eval writer append and flush channels
|
|
41
51
|
// span writer append is handled by the span processor
|
|
@@ -83,14 +93,20 @@ function disable () {
|
|
|
83
93
|
}
|
|
84
94
|
|
|
85
95
|
// since LLMObs traces can extend between services and be the same trace,
|
|
86
|
-
// we need to
|
|
96
|
+
// we need to propagate the parent id and mlApp.
|
|
87
97
|
function handleLLMObsParentIdInjection ({ carrier }) {
|
|
88
98
|
const parent = storage.getStore()?.span
|
|
89
|
-
|
|
99
|
+
const mlObsSpanTags = LLMObsTagger.tagMap.get(parent)
|
|
90
100
|
|
|
91
|
-
const
|
|
101
|
+
const parentContext = parent?.context()
|
|
102
|
+
const parentId = parentContext?.toSpanId()
|
|
103
|
+
const mlApp =
|
|
104
|
+
mlObsSpanTags?.[ML_APP] ||
|
|
105
|
+
parentContext?._trace?.tags?.[PROPAGATED_ML_APP_KEY] ||
|
|
106
|
+
globalTracerConfig.llmobs.mlApp
|
|
92
107
|
|
|
93
|
-
carrier['x-datadog-tags'] += `,${PROPAGATED_PARENT_ID_KEY}=${parentId}`
|
|
108
|
+
if (parentId) carrier['x-datadog-tags'] += `,${PROPAGATED_PARENT_ID_KEY}=${parentId}`
|
|
109
|
+
if (mlApp) carrier['x-datadog-tags'] += `,${PROPAGATED_ML_APP_KEY}=${mlApp}`
|
|
94
110
|
}
|
|
95
111
|
|
|
96
112
|
function handleFlush () {
|
|
@@ -44,27 +44,25 @@ class NoopLLMObs {
|
|
|
44
44
|
if (ctx.kind !== 'method') return target
|
|
45
45
|
|
|
46
46
|
return llmobs.wrap({ name: ctx.name, _decorator: true, ...options }, target)
|
|
47
|
-
} else {
|
|
48
|
-
const propertyKey = ctxOrPropertyKey
|
|
49
|
-
if (descriptor) {
|
|
50
|
-
if (typeof descriptor.value !== 'function') return descriptor
|
|
51
|
-
|
|
52
|
-
const original = descriptor.value
|
|
53
|
-
descriptor.value = llmobs.wrap({ name: propertyKey, _decorator: true, ...options }, original)
|
|
54
|
-
|
|
55
|
-
return descriptor
|
|
56
|
-
} else {
|
|
57
|
-
if (typeof target[propertyKey] !== 'function') return target[propertyKey]
|
|
58
|
-
|
|
59
|
-
const original = target[propertyKey]
|
|
60
|
-
Object.defineProperty(target, propertyKey, {
|
|
61
|
-
...Object.getOwnPropertyDescriptor(target, propertyKey),
|
|
62
|
-
value: llmobs.wrap({ name: propertyKey, _decorator: true, ...options }, original)
|
|
63
|
-
})
|
|
64
|
-
|
|
65
|
-
return target
|
|
66
|
-
}
|
|
67
47
|
}
|
|
48
|
+
const propertyKey = ctxOrPropertyKey
|
|
49
|
+
if (descriptor) {
|
|
50
|
+
if (typeof descriptor.value !== 'function') return descriptor
|
|
51
|
+
|
|
52
|
+
const original = descriptor.value
|
|
53
|
+
descriptor.value = llmobs.wrap({ name: propertyKey, _decorator: true, ...options }, original)
|
|
54
|
+
|
|
55
|
+
return descriptor
|
|
56
|
+
}
|
|
57
|
+
if (typeof target[propertyKey] !== 'function') return target[propertyKey]
|
|
58
|
+
|
|
59
|
+
const original = target[propertyKey]
|
|
60
|
+
Object.defineProperty(target, propertyKey, {
|
|
61
|
+
...Object.getOwnPropertyDescriptor(target, propertyKey),
|
|
62
|
+
value: llmobs.wrap({ name: propertyKey, _decorator: true, ...options }, original)
|
|
63
|
+
})
|
|
64
|
+
|
|
65
|
+
return target
|
|
68
66
|
}
|
|
69
67
|
}
|
|
70
68
|
|
|
@@ -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
|
}
|
|
@@ -23,26 +23,24 @@ class LangChainLLMObsHandler {
|
|
|
23
23
|
return formatted
|
|
24
24
|
} else if (Array.isArray(messages)) {
|
|
25
25
|
return messages.map(message => this.formatIO(message))
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
}
|
|
26
|
+
} // either a BaseMesage type or a string
|
|
27
|
+
return this.getContentFromMessage(messages)
|
|
29
28
|
}
|
|
30
29
|
|
|
31
30
|
getContentFromMessage (message) {
|
|
32
31
|
if (typeof message === 'string') {
|
|
33
32
|
return message
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
33
|
+
}
|
|
34
|
+
try {
|
|
35
|
+
const messageContent = {}
|
|
36
|
+
messageContent.content = message.content || ''
|
|
38
37
|
|
|
39
|
-
|
|
40
|
-
|
|
38
|
+
const role = this.getRole(message)
|
|
39
|
+
if (role) messageContent.role = role
|
|
41
40
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
}
|
|
41
|
+
return messageContent
|
|
42
|
+
} catch {
|
|
43
|
+
return JSON.stringify(message)
|
|
46
44
|
}
|
|
47
45
|
}
|
|
48
46
|
|
|
@@ -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
|
|
|
@@ -68,9 +68,8 @@ class OpenAiLLMObsPlugin extends LLMObsPlugin {
|
|
|
68
68
|
return { modelProvider: 'azure_openai', client: 'AzureOpenAI' }
|
|
69
69
|
} else if (baseUrl.includes('deepseek')) {
|
|
70
70
|
return { modelProvider: 'deepseek', client: 'DeepSeek' }
|
|
71
|
-
} else {
|
|
72
|
-
return { modelProvider: 'openai', client: 'OpenAI' }
|
|
73
71
|
}
|
|
72
|
+
return { modelProvider: 'openai', client: 'OpenAI' }
|
|
74
73
|
}
|
|
75
74
|
|
|
76
75
|
_extractMetrics (response) {
|
|
@@ -105,7 +104,7 @@ class OpenAiLLMObsPlugin extends LLMObsPlugin {
|
|
|
105
104
|
const embeddingInput = embeddingInputs.map(input => ({ text: input }))
|
|
106
105
|
|
|
107
106
|
if (error) {
|
|
108
|
-
this._tagger.tagEmbeddingIO(span, embeddingInput
|
|
107
|
+
this._tagger.tagEmbeddingIO(span, embeddingInput)
|
|
109
108
|
return
|
|
110
109
|
}
|
|
111
110
|
|
|
@@ -14,6 +14,7 @@ const Span = require('../opentracing/span')
|
|
|
14
14
|
|
|
15
15
|
const tracerVersion = require('../../../../package.json').version
|
|
16
16
|
const logger = require('../log')
|
|
17
|
+
const { getEnvironmentVariable } = require('../config-helper')
|
|
17
18
|
const telemetry = require('./telemetry')
|
|
18
19
|
|
|
19
20
|
const LLMObsTagger = require('./tagger')
|
|
@@ -47,7 +48,7 @@ class LLMObs extends NoopLLMObs {
|
|
|
47
48
|
|
|
48
49
|
const { mlApp, agentlessEnabled } = options
|
|
49
50
|
|
|
50
|
-
const
|
|
51
|
+
const DD_LLMOBS_ENABLED = getEnvironmentVariable('DD_LLMOBS_ENABLED')
|
|
51
52
|
|
|
52
53
|
const llmobsConfig = {
|
|
53
54
|
mlApp,
|
|
@@ -121,7 +122,7 @@ class LLMObs extends NoopLLMObs {
|
|
|
121
122
|
}
|
|
122
123
|
|
|
123
124
|
const kind = validateKind(options.kind) // will throw if kind is undefined or not an expected kind
|
|
124
|
-
let name = options.name ||
|
|
125
|
+
let name = options.name || fn?.name || kind
|
|
125
126
|
|
|
126
127
|
if (!name) {
|
|
127
128
|
logger.warn('No span name provided for `wrap`. Defaulting to "unnamed-anonymous-function".')
|
|
@@ -285,7 +286,7 @@ class LLMObs extends NoopLLMObs {
|
|
|
285
286
|
}
|
|
286
287
|
if (!(span instanceof Span)) {
|
|
287
288
|
err = 'invalid_span'
|
|
288
|
-
throw new
|
|
289
|
+
throw new TypeError('Span must be a valid Span object.')
|
|
289
290
|
}
|
|
290
291
|
if (!LLMObsTagger.tagMap.has(span)) {
|
|
291
292
|
err = 'invalid_span'
|
|
@@ -158,7 +158,7 @@ class LLMObsSpanProcessor {
|
|
|
158
158
|
const add = (obj, carrier) => {
|
|
159
159
|
for (const key in obj) {
|
|
160
160
|
const value = obj[key]
|
|
161
|
-
if (!Object.
|
|
161
|
+
if (!Object.hasOwn(obj, key)) continue
|
|
162
162
|
if (typeof value === 'bigint' || isCircular(value)) {
|
|
163
163
|
// mark as unserializable instead of dropping
|
|
164
164
|
logger.warn(`Unserializable property found in metadata: ${key}`)
|