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
|
@@ -238,16 +238,14 @@ function toArrayBuffer (type, bytes, maxLength) {
|
|
|
238
238
|
|
|
239
239
|
const size = bytes.length
|
|
240
240
|
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
return { type, value: arrayBufferToString(bytes, size) }
|
|
250
|
-
}
|
|
241
|
+
return size > maxLength
|
|
242
|
+
? {
|
|
243
|
+
type,
|
|
244
|
+
value: arrayBufferToString(bytes, maxLength),
|
|
245
|
+
truncated: true,
|
|
246
|
+
size: bytes.length
|
|
247
|
+
}
|
|
248
|
+
: { type, value: arrayBufferToString(bytes, size) }
|
|
251
249
|
}
|
|
252
250
|
|
|
253
251
|
function arrayBufferToString (bytes, size) {
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
const config = require('../config')
|
|
4
4
|
|
|
5
|
-
const excludedIdentifiers = config.dynamicInstrumentation.redactionExcludedIdentifiers
|
|
6
|
-
.map((name) => normalizeName(name))
|
|
5
|
+
const excludedIdentifiers = new Set(config.dynamicInstrumentation.redactionExcludedIdentifiers
|
|
6
|
+
.map((name) => normalizeName(name)))
|
|
7
7
|
|
|
8
8
|
const REDACTED_IDENTIFIERS = new Set(
|
|
9
9
|
[
|
|
@@ -98,7 +98,7 @@ const REDACTED_IDENTIFIERS = new Set(
|
|
|
98
98
|
...config.dynamicInstrumentation.redactedIdentifiers
|
|
99
99
|
]
|
|
100
100
|
.map((name) => normalizeName(name))
|
|
101
|
-
.filter((name) => excludedIdentifiers.
|
|
101
|
+
.filter((name) => excludedIdentifiers.has(name) === false)
|
|
102
102
|
)
|
|
103
103
|
|
|
104
104
|
function normalizeName (name, isSymbol) {
|
|
@@ -4,7 +4,6 @@ const { join, dirname } = require('path')
|
|
|
4
4
|
const { readFileSync } = require('fs')
|
|
5
5
|
const { readFile } = require('fs/promises')
|
|
6
6
|
const { SourceMapConsumer } = require('source-map')
|
|
7
|
-
const { NODE_MAJOR } = require('../../../../../version')
|
|
8
7
|
|
|
9
8
|
const cache = new Map()
|
|
10
9
|
let cacheTimer = null
|
|
@@ -35,14 +34,7 @@ const self = module.exports = {
|
|
|
35
34
|
}
|
|
36
35
|
}
|
|
37
36
|
|
|
38
|
-
// The version check inside this function is to guard against a bug Node.js version 18, in which calls to `setTimeout`
|
|
39
|
-
// might throw an uncatchable error from within `AsyncLocalStorage._propagate` with the following error message:
|
|
40
|
-
//
|
|
41
|
-
// TypeError: Cannot read properties of undefined (reading 'Symbol(kResourceStore)')
|
|
42
|
-
//
|
|
43
|
-
// Source: https://github.com/nodejs/node/blob/v18.20.6/lib/async_hooks.js#L312
|
|
44
37
|
function cacheIt (key, value) {
|
|
45
|
-
if (NODE_MAJOR < 20) return value
|
|
46
38
|
cacheTime = Date.now()
|
|
47
39
|
setCacheTTL()
|
|
48
40
|
cache.set(key, value)
|
|
@@ -54,7 +46,7 @@ function setCacheTTL () {
|
|
|
54
46
|
|
|
55
47
|
cacheTimer = setTimeout(function () {
|
|
56
48
|
cacheTimer = null
|
|
57
|
-
if (Date.now() - cacheTime <
|
|
49
|
+
if (Date.now() - cacheTime < 2500) {
|
|
58
50
|
// If the last cache entry was added recently, keep the cache alive
|
|
59
51
|
setCacheTTL()
|
|
60
52
|
} else {
|
|
@@ -62,7 +54,7 @@ function setCacheTTL () {
|
|
|
62
54
|
// Clear cache a few seconds after it was last used
|
|
63
55
|
cache.clear()
|
|
64
56
|
}
|
|
65
|
-
},
|
|
57
|
+
}, 5000).unref()
|
|
66
58
|
}
|
|
67
59
|
|
|
68
60
|
function loadInlineSourceMap (data) {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
3
|
const { join, dirname } = require('path')
|
|
4
|
+
const { normalize } = require('source-map/lib/util')
|
|
4
5
|
const { loadSourceMapSync } = require('./source-maps')
|
|
5
6
|
const session = require('./session')
|
|
6
7
|
const log = require('../../log')
|
|
@@ -9,12 +10,16 @@ const WINDOWS_DRIVE_LETTER_REGEX = /[a-zA-Z]/
|
|
|
9
10
|
|
|
10
11
|
const loadedScripts = []
|
|
11
12
|
const scriptUrls = new Map()
|
|
13
|
+
let reEvaluateProbesTimer = null
|
|
12
14
|
|
|
13
15
|
module.exports = {
|
|
14
16
|
locationToBreakpoint: new Map(),
|
|
15
17
|
breakpointToProbes: new Map(),
|
|
16
18
|
probeToLocation: new Map(),
|
|
17
19
|
|
|
20
|
+
_loadedScripts: loadedScripts, // Only exposed for testing
|
|
21
|
+
_scriptUrls: scriptUrls, // Only exposed for testing
|
|
22
|
+
|
|
18
23
|
/**
|
|
19
24
|
* Find the script to inspect based on a partial or absolute path. Handles both Windows and POSIX paths.
|
|
20
25
|
*
|
|
@@ -88,13 +93,17 @@ module.exports = {
|
|
|
88
93
|
}
|
|
89
94
|
}
|
|
90
95
|
|
|
91
|
-
return maxMatchLength
|
|
96
|
+
return maxMatchLength === -1 ? null : bestMatch
|
|
92
97
|
},
|
|
93
98
|
|
|
94
99
|
getStackFromCallFrames (callFrames) {
|
|
95
100
|
return callFrames.map((frame) => {
|
|
101
|
+
// TODO: Possible race condition: If the breakpoint is in the process of being removed, and this is the last
|
|
102
|
+
// breakpoint, it will also stop the debugging session, which in turn will clear the state, which means clearing
|
|
103
|
+
// the `scriptUrls` map. That might result in this the `scriptUrls.get` call above returning `undefined`, which
|
|
104
|
+
// will throw when `startsWith` is called on it.
|
|
96
105
|
let fileName = scriptUrls.get(frame.location.scriptId)
|
|
97
|
-
if (fileName.startsWith('file://')) fileName = fileName.
|
|
106
|
+
if (fileName.startsWith('file://')) fileName = fileName.slice(7) // TODO: This might not be required
|
|
98
107
|
return {
|
|
99
108
|
fileName,
|
|
100
109
|
function: frame.functionName,
|
|
@@ -102,6 +111,14 @@ module.exports = {
|
|
|
102
111
|
columnNumber: frame.location.columnNumber + 1 // Beware! columnNumber is zero-indexed
|
|
103
112
|
}
|
|
104
113
|
})
|
|
114
|
+
},
|
|
115
|
+
|
|
116
|
+
// The maps locationToBreakpoint, breakpointToProbes, and probeToLocation are always updated when breakpoints are
|
|
117
|
+
// removed. Therefore they do not need to get manually cleared. Only the state internal to this file needs to be
|
|
118
|
+
// cleared.
|
|
119
|
+
clearState () {
|
|
120
|
+
loadedScripts.length = 0
|
|
121
|
+
scriptUrls.clear()
|
|
105
122
|
}
|
|
106
123
|
}
|
|
107
124
|
|
|
@@ -112,7 +129,6 @@ module.exports = {
|
|
|
112
129
|
// Unknown params.url values:
|
|
113
130
|
// - `structured-stack` - Not sure what this is, but should just be ignored
|
|
114
131
|
// - `` - Not sure what this is, but should just be ignored
|
|
115
|
-
// TODO: Event fired for all files, every time debugger is enabled. So when we disable it, we need to reset the state
|
|
116
132
|
session.on('Debugger.scriptParsed', ({ params }) => {
|
|
117
133
|
scriptUrls.set(params.scriptId, params.url)
|
|
118
134
|
if (params.url.startsWith('file:')) {
|
|
@@ -136,11 +152,22 @@ session.on('Debugger.scriptParsed', ({ params }) => {
|
|
|
136
152
|
...params,
|
|
137
153
|
sourceUrl: params.url,
|
|
138
154
|
url: new URL(join(dir, source), 'file:').href,
|
|
139
|
-
source
|
|
155
|
+
// The source url provided by V8 unfortunately doesn't always match the source url used internally in the
|
|
156
|
+
// `source-map` dependency. Both read the same source maps, but the `source-map` dependency iterates over all
|
|
157
|
+
// the `sources` and normalize them using an internal `normalize` function. If these two strings don't match,
|
|
158
|
+
// the `source-map` dependency will not be able to find the generated position. Below we use the same
|
|
159
|
+
// internal `normalize` function, to ensure compatibility.
|
|
160
|
+
// TODO: Consider swapping out the `source-map` dependency for something better so we don't have to do this.
|
|
161
|
+
source: normalize(source)
|
|
140
162
|
})
|
|
141
163
|
}
|
|
142
164
|
} else {
|
|
143
165
|
loadedScripts.push(params)
|
|
144
166
|
}
|
|
167
|
+
|
|
168
|
+
clearTimeout(reEvaluateProbesTimer)
|
|
169
|
+
reEvaluateProbesTimer = setTimeout(() => {
|
|
170
|
+
session.emit('scriptLoadingStabilized')
|
|
171
|
+
}, 500)
|
|
145
172
|
}
|
|
146
173
|
})
|
|
@@ -94,13 +94,13 @@ class DogStatsDClient {
|
|
|
94
94
|
}
|
|
95
95
|
|
|
96
96
|
_sendUdp (queue) {
|
|
97
|
-
if (this._family
|
|
98
|
-
this._sendUdpFromQueue(queue, this._host, this._family)
|
|
99
|
-
} else {
|
|
97
|
+
if (this._family === 0) {
|
|
100
98
|
lookup(this._host, (err, address, family) => {
|
|
101
99
|
if (err) return log.error('DogStatsDClient: Host not found', err)
|
|
102
100
|
this._sendUdpFromQueue(queue, address, family)
|
|
103
101
|
})
|
|
102
|
+
} else {
|
|
103
|
+
this._sendUdpFromQueue(queue, this._host, this._family)
|
|
104
104
|
}
|
|
105
105
|
}
|
|
106
106
|
|
|
@@ -116,7 +116,8 @@ class DogStatsDClient {
|
|
|
116
116
|
_add (stat, value, type, tags) {
|
|
117
117
|
const message = `${this._prefix + stat}:${value}|${type}`
|
|
118
118
|
|
|
119
|
-
|
|
119
|
+
// Don't manipulate this._tags as it is still used
|
|
120
|
+
tags = tags ? [...this._tags, ...tags] : this._tags
|
|
120
121
|
|
|
121
122
|
if (tags.length > 0) {
|
|
122
123
|
this._write(`${message}|#${tags.join(',')}\n`)
|
|
@@ -392,6 +393,8 @@ class CustomMetrics {
|
|
|
392
393
|
* These are translated into [ 'tagName:tagValue' ] for internal use
|
|
393
394
|
*/
|
|
394
395
|
static tagTranslator (objTags) {
|
|
396
|
+
if (Array.isArray(objTags)) return objTags
|
|
397
|
+
|
|
395
398
|
const arrTags = []
|
|
396
399
|
|
|
397
400
|
if (!objTags) return arrTags
|
|
@@ -13,11 +13,11 @@ function formatSpan (span, config) {
|
|
|
13
13
|
span = normalizeSpan(truncateSpan(span, false))
|
|
14
14
|
if (span.span_events) {
|
|
15
15
|
// ensure span events are encoded as tags if agent doesn't support native top level span events
|
|
16
|
-
if (
|
|
16
|
+
if (config?.trace?.nativeSpanEvents) {
|
|
17
|
+
formatSpanEvents(span)
|
|
18
|
+
} else {
|
|
17
19
|
span.meta.events = JSON.stringify(span.span_events)
|
|
18
20
|
delete span.span_events
|
|
19
|
-
} else {
|
|
20
|
-
formatSpanEvents(span)
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
23
|
return span
|
|
@@ -175,7 +175,7 @@ class AgentEncoder {
|
|
|
175
175
|
|
|
176
176
|
id = id.toArray()
|
|
177
177
|
|
|
178
|
-
bytes.buffer[offset] =
|
|
178
|
+
bytes.buffer[offset] = 0xCF
|
|
179
179
|
bytes.buffer[offset + 1] = id[0]
|
|
180
180
|
bytes.buffer[offset + 2] = id[1]
|
|
181
181
|
bytes.buffer[offset + 3] = id[2]
|
|
@@ -266,7 +266,7 @@ class AgentEncoder {
|
|
|
266
266
|
|
|
267
267
|
// we should do it after encoding the object to know the real length
|
|
268
268
|
const length = bytes.length - offset - prefixLength
|
|
269
|
-
bytes.buffer[offset] =
|
|
269
|
+
bytes.buffer[offset] = 0xC6
|
|
270
270
|
bytes.buffer[offset + 1] = length >> 24
|
|
271
271
|
bytes.buffer[offset + 2] = length >> 16
|
|
272
272
|
bytes.buffer[offset + 3] = length >> 8
|
|
@@ -326,7 +326,7 @@ class AgentEncoder {
|
|
|
326
326
|
}
|
|
327
327
|
|
|
328
328
|
_writeArrayPrefix (buffer, offset, count) {
|
|
329
|
-
buffer[offset++] =
|
|
329
|
+
buffer[offset++] = 0xDD
|
|
330
330
|
buffer.writeUInt32BE(count, offset)
|
|
331
331
|
|
|
332
332
|
return offset + 4
|
|
@@ -351,10 +351,10 @@ function formatSpanEvents (span) {
|
|
|
351
351
|
if (spanEvent.attributes) {
|
|
352
352
|
for (const [key, value] of Object.entries(spanEvent.attributes)) {
|
|
353
353
|
const newValue = convertSpanEventAttributeValues(key, value)
|
|
354
|
-
if (newValue
|
|
355
|
-
spanEvent.attributes[key] = newValue
|
|
356
|
-
} else {
|
|
354
|
+
if (newValue === undefined) {
|
|
357
355
|
delete spanEvent.attributes[key] // delete from attributes if undefined
|
|
356
|
+
} else {
|
|
357
|
+
spanEvent.attributes[key] = newValue
|
|
358
358
|
}
|
|
359
359
|
}
|
|
360
360
|
if (Object.keys(spanEvent.attributes).length === 0) {
|
|
@@ -4,7 +4,7 @@ const { truncateSpan, normalizeSpan } = require('./tags-processors')
|
|
|
4
4
|
const { AgentEncoder: BaseEncoder } = require('./0.4')
|
|
5
5
|
|
|
6
6
|
const ARRAY_OF_TWO = 0x92
|
|
7
|
-
const ARRAY_OF_TWELVE =
|
|
7
|
+
const ARRAY_OF_TWELVE = 0x9C
|
|
8
8
|
|
|
9
9
|
function formatSpan (span) {
|
|
10
10
|
span = normalizeSpan(truncateSpan(span, false))
|
|
@@ -11,7 +11,7 @@ const {
|
|
|
11
11
|
} = require('../ci-visibility/telemetry')
|
|
12
12
|
|
|
13
13
|
const ENCODING_VERSION = 1
|
|
14
|
-
const ALLOWED_CONTENT_TYPES = ['test_session_end', 'test_module_end', 'test_suite_end', 'test']
|
|
14
|
+
const ALLOWED_CONTENT_TYPES = new Set(['test_session_end', 'test_module_end', 'test_suite_end', 'test'])
|
|
15
15
|
|
|
16
16
|
const TEST_SUITE_KEYS_LENGTH = 12
|
|
17
17
|
const TEST_MODULE_KEYS_LENGTH = 11
|
|
@@ -26,7 +26,7 @@ function formatSpan (span) {
|
|
|
26
26
|
encodingVersion = 2
|
|
27
27
|
}
|
|
28
28
|
return {
|
|
29
|
-
type: ALLOWED_CONTENT_TYPES.
|
|
29
|
+
type: ALLOWED_CONTENT_TYPES.has(span.type) ? span.type : 'span',
|
|
30
30
|
version: encodingVersion,
|
|
31
31
|
content: normalizeSpan(truncateSpan(span))
|
|
32
32
|
}
|
|
@@ -292,7 +292,7 @@ class AgentlessCiVisibilityEncoder extends AgentEncoder {
|
|
|
292
292
|
const eventsOffset = this._eventsOffset
|
|
293
293
|
const eventsCount = this._eventCount
|
|
294
294
|
|
|
295
|
-
bytes.buffer[eventsOffset] =
|
|
295
|
+
bytes.buffer[eventsOffset] = 0xDD
|
|
296
296
|
bytes.buffer[eventsOffset + 1] = eventsCount >> 24
|
|
297
297
|
bytes.buffer[eventsOffset + 2] = eventsCount >> 16
|
|
298
298
|
bytes.buffer[eventsOffset + 3] = eventsCount >> 8
|
|
@@ -92,7 +92,7 @@ class CoverageCIVisibilityEncoder extends AgentEncoder {
|
|
|
92
92
|
const coveragesCount = this._coveragesCount
|
|
93
93
|
|
|
94
94
|
// update with number of coverages
|
|
95
|
-
bytes.buffer[coveragesOffset] =
|
|
95
|
+
bytes.buffer[coveragesOffset] = 0xDD
|
|
96
96
|
bytes.buffer[coveragesOffset + 1] = coveragesCount >> 24
|
|
97
97
|
bytes.buffer[coveragesOffset + 2] = coveragesCount >> 16
|
|
98
98
|
bytes.buffer[coveragesOffset + 3] = coveragesCount >> 8
|
|
@@ -6,7 +6,7 @@ const MAX_RESOURCE_NAME_LENGTH = 5000
|
|
|
6
6
|
// MAX_META_KEY_LENGTH the maximum length of metadata key
|
|
7
7
|
const MAX_META_KEY_LENGTH = 200
|
|
8
8
|
// MAX_META_VALUE_LENGTH the maximum length of metadata value
|
|
9
|
-
const MAX_META_VALUE_LENGTH =
|
|
9
|
+
const MAX_META_VALUE_LENGTH = 25_000
|
|
10
10
|
// MAX_METRIC_KEY_LENGTH the maximum length of a metric name key
|
|
11
11
|
const MAX_METRIC_KEY_LENGTH = MAX_META_KEY_LENGTH
|
|
12
12
|
|
|
@@ -4,10 +4,7 @@ const exporters = require('../../../ext/exporters')
|
|
|
4
4
|
const fs = require('fs')
|
|
5
5
|
const constants = require('./constants')
|
|
6
6
|
|
|
7
|
-
module.exports = name
|
|
8
|
-
const inAWSLambda = process.env.AWS_LAMBDA_FUNCTION_NAME !== undefined
|
|
9
|
-
const usingLambdaExtension = inAWSLambda && fs.existsSync(constants.DATADOG_LAMBDA_EXTENSION_PATH)
|
|
10
|
-
|
|
7
|
+
module.exports = function getExporter (name) {
|
|
11
8
|
switch (name) {
|
|
12
9
|
case exporters.LOG:
|
|
13
10
|
return require('./exporters/log')
|
|
@@ -22,7 +19,10 @@ module.exports = name => {
|
|
|
22
19
|
case exporters.MOCHA_WORKER:
|
|
23
20
|
case exporters.PLAYWRIGHT_WORKER:
|
|
24
21
|
return require('./ci-visibility/exporters/test-worker')
|
|
25
|
-
default:
|
|
26
|
-
|
|
22
|
+
default: {
|
|
23
|
+
const inAWSLambda = process.env.AWS_LAMBDA_FUNCTION_NAME !== undefined
|
|
24
|
+
const usingLambdaExtension = inAWSLambda && fs.existsSync(constants.DATADOG_LAMBDA_EXTENSION_PATH)
|
|
25
|
+
return require(inAWSLambda && !usingLambdaExtension ? './exporters/log' : './exporters/agent')
|
|
26
|
+
}
|
|
27
27
|
}
|
|
28
28
|
}
|
|
@@ -69,11 +69,7 @@ function setHeader (headers, key, value) {
|
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
function getEncoder (protocolVersion) {
|
|
72
|
-
|
|
73
|
-
return require('../../encode/0.5').AgentEncoder
|
|
74
|
-
} else {
|
|
75
|
-
return require('../../encode/0.4').AgentEncoder
|
|
76
|
-
}
|
|
72
|
+
return require(`../../encode/${protocolVersion === '0.5' ? '0.5' : '0.4'}`).AgentEncoder
|
|
77
73
|
}
|
|
78
74
|
|
|
79
75
|
function makeRequest (version, data, count, url, headers, lookup, needsStartupLog, cb) {
|
|
@@ -9,7 +9,7 @@ const { DD_EXTERNAL_ENV } = process.env
|
|
|
9
9
|
const uuidSource =
|
|
10
10
|
'[0-9a-f]{8}[-_][0-9a-f]{4}[-_][0-9a-f]{4}[-_][0-9a-f]{4}[-_][0-9a-f]{12}|[0-9a-f]{8}(?:-[0-9a-f]{4}){4}$'
|
|
11
11
|
const containerSource = '[0-9a-f]{64}'
|
|
12
|
-
const taskSource =
|
|
12
|
+
const taskSource = String.raw`[0-9a-f]{32}-\d+`
|
|
13
13
|
const lineReg = /^(\d+):([^:]*):(.+)$/m
|
|
14
14
|
const entityReg = new RegExp(`.*(${uuidSource}|${containerSource}|${taskSource})(?:\\.scope)?$`, 'm')
|
|
15
15
|
|
|
@@ -38,10 +38,12 @@ class FormData extends Readable {
|
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
_appendFile (key, value, { filename, contentType = 'application/octet-stream' }) {
|
|
41
|
-
this._data.push(
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
41
|
+
this._data.push(
|
|
42
|
+
`Content-Disposition: form-data; name="${key}"; filename="${filename}"\r\n`,
|
|
43
|
+
`Content-Type: ${contentType}\r\n\r\n`,
|
|
44
|
+
value,
|
|
45
|
+
'\r\n'
|
|
46
|
+
)
|
|
45
47
|
}
|
|
46
48
|
|
|
47
49
|
_read () {
|
|
@@ -100,7 +100,7 @@ function request (data, options, callback) {
|
|
|
100
100
|
options.url || options.hostname || `http://localhost:${options.port}`
|
|
101
101
|
).href
|
|
102
102
|
errorMessage = `Error from ${fullUrl}: ${res.statusCode} ${http.STATUS_CODES[res.statusCode]}.`
|
|
103
|
-
} catch
|
|
103
|
+
} catch {
|
|
104
104
|
// ignore error
|
|
105
105
|
}
|
|
106
106
|
const responseData = buffer.toString()
|
|
@@ -5,7 +5,7 @@ const https = require('https')
|
|
|
5
5
|
class ExternalLogger {
|
|
6
6
|
// Note: these attribute names match the corresponding entry in the JSON payload.
|
|
7
7
|
constructor ({
|
|
8
|
-
ddsource, hostname, service, apiKey, site = 'datadoghq.com', interval =
|
|
8
|
+
ddsource, hostname, service, apiKey, site = 'datadoghq.com', interval = 10_000, timeout = 2000, limit = 1000
|
|
9
9
|
}) {
|
|
10
10
|
this.enabled = !!apiKey
|
|
11
11
|
|
|
@@ -128,10 +128,10 @@ class ExternalLogger {
|
|
|
128
128
|
}
|
|
129
129
|
|
|
130
130
|
class NoopExternalLogger {
|
|
131
|
-
log () {
|
|
132
|
-
enqueue () {
|
|
133
|
-
shutdown () {
|
|
134
|
-
flush () {
|
|
131
|
+
log () {}
|
|
132
|
+
enqueue () {}
|
|
133
|
+
shutdown () {}
|
|
134
|
+
flush () {}
|
|
135
135
|
}
|
|
136
136
|
|
|
137
137
|
module.exports.ExternalLogger = ExternalLogger
|
|
@@ -22,11 +22,7 @@ class FlareFile extends Writable {
|
|
|
22
22
|
|
|
23
23
|
this._reserve(length)
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
this.length += chunk.copy(this._buffer, this.length)
|
|
27
|
-
} else {
|
|
28
|
-
this.length += this._buffer.write(chunk, encoding)
|
|
29
|
-
}
|
|
25
|
+
this.length += Buffer.isBuffer(chunk) ? chunk.copy(this._buffer, this.length) : this._buffer.write(chunk, encoding)
|
|
30
26
|
|
|
31
27
|
callback()
|
|
32
28
|
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
const { randomFillSync } = require('crypto')
|
|
4
4
|
|
|
5
|
-
const UINT_MAX =
|
|
5
|
+
const UINT_MAX = 4_294_967_296
|
|
6
6
|
|
|
7
7
|
const data = new Uint8Array(8 * 8192)
|
|
8
8
|
const zeroId = new Uint8Array(8)
|
|
@@ -26,6 +26,10 @@ class Identifier {
|
|
|
26
26
|
: toNumberString(this._buffer, radix)
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
+
toBigInt () {
|
|
30
|
+
return Buffer.from(this._buffer).readBigUInt64BE(0)
|
|
31
|
+
}
|
|
32
|
+
|
|
29
33
|
toBuffer () {
|
|
30
34
|
return this._buffer
|
|
31
35
|
}
|
|
@@ -61,12 +65,12 @@ function createBuffer (value) {
|
|
|
61
65
|
|
|
62
66
|
const size = Math.ceil(value.length / 16) * 16
|
|
63
67
|
const bytes = size / 2
|
|
64
|
-
const buffer =
|
|
68
|
+
const buffer = []
|
|
65
69
|
|
|
66
70
|
value = value.padStart(size, '0')
|
|
67
71
|
|
|
68
72
|
for (let i = 0; i < bytes; i++) {
|
|
69
|
-
buffer[i] = parseInt(value.
|
|
73
|
+
buffer[i] = Number.parseInt(value.slice(i * 2, i * 2 + 2), 16)
|
|
70
74
|
}
|
|
71
75
|
|
|
72
76
|
return buffer
|
|
@@ -86,7 +90,7 @@ function fromString (str, raddix) {
|
|
|
86
90
|
const sign = pos
|
|
87
91
|
|
|
88
92
|
while (pos < len) {
|
|
89
|
-
const chr = parseInt(str[pos++], raddix)
|
|
93
|
+
const chr = Number.parseInt(str[pos++], raddix)
|
|
90
94
|
|
|
91
95
|
if (!(chr >= 0)) break // NaN
|
|
92
96
|
|
|
@@ -161,7 +165,7 @@ function pseudoRandom () {
|
|
|
161
165
|
|
|
162
166
|
// Read a buffer to unsigned integer bytes.
|
|
163
167
|
function readInt32 (buffer, offset) {
|
|
164
|
-
return (buffer[offset + 0] *
|
|
168
|
+
return (buffer[offset + 0] * 16_777_216) +
|
|
165
169
|
(buffer[offset + 1] << 16) +
|
|
166
170
|
(buffer[offset + 2] << 8) +
|
|
167
171
|
buffer[offset + 3]
|
|
@@ -178,4 +182,6 @@ function writeUInt32BE (buffer, value, offset) {
|
|
|
178
182
|
buffer[0 + offset] = value & 255
|
|
179
183
|
}
|
|
180
184
|
|
|
181
|
-
module.exports =
|
|
185
|
+
module.exports = function createIdentifier (value, radix) {
|
|
186
|
+
return new Identifier(value, radix)
|
|
187
|
+
}
|
|
@@ -1,27 +1,15 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const satisfies = require('semifies')
|
|
4
|
-
const logger = require('./log')
|
|
5
3
|
const { addHook } = require('import-in-the-middle')
|
|
6
4
|
const dc = require('dc-polyfill')
|
|
7
5
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
module.exports = require('import-in-the-middle')
|
|
19
|
-
} else {
|
|
20
|
-
logger.warn('ESM is not fully supported by this version of Node.js, ' +
|
|
21
|
-
'so dd-trace will not intercept ESM loading.')
|
|
22
|
-
module.exports = () => ({
|
|
23
|
-
unhook: () => {}
|
|
24
|
-
})
|
|
25
|
-
module.exports.addHook = () => {}
|
|
26
|
-
module.exports.removeHook = () => {}
|
|
27
|
-
}
|
|
6
|
+
const moduleLoadStartChannel = dc.channel('dd-trace:moduleLoadStart')
|
|
7
|
+
addHook((name, namespace) => {
|
|
8
|
+
if (moduleLoadStartChannel.hasSubscribers) {
|
|
9
|
+
moduleLoadStartChannel.publish({
|
|
10
|
+
filename: name,
|
|
11
|
+
module: namespace
|
|
12
|
+
})
|
|
13
|
+
}
|
|
14
|
+
})
|
|
15
|
+
module.exports = require('import-in-the-middle')
|
|
@@ -25,11 +25,11 @@ let __lambdaTimeout
|
|
|
25
25
|
function checkTimeout (context) {
|
|
26
26
|
const remainingTimeInMillis = context.getRemainingTimeInMillis()
|
|
27
27
|
|
|
28
|
-
let apmFlushDeadline = parseInt(process.env.DD_APM_FLUSH_DEADLINE_MILLISECONDS) || 100
|
|
28
|
+
let apmFlushDeadline = Number.parseInt(process.env.DD_APM_FLUSH_DEADLINE_MILLISECONDS) || 100
|
|
29
29
|
apmFlushDeadline = apmFlushDeadline < 0 ? 100 : apmFlushDeadline
|
|
30
30
|
|
|
31
31
|
__lambdaTimeout = setTimeout(() => {
|
|
32
|
-
timeoutChannel.publish(
|
|
32
|
+
timeoutChannel.publish()
|
|
33
33
|
}, remainingTimeInMillis - apmFlushDeadline)
|
|
34
34
|
}
|
|
35
35
|
|
|
@@ -43,14 +43,14 @@ function checkTimeout (context) {
|
|
|
43
43
|
*/
|
|
44
44
|
function crashFlush () {
|
|
45
45
|
const activeSpan = tracer.scope().active()
|
|
46
|
-
if (activeSpan
|
|
46
|
+
if (activeSpan === null) {
|
|
47
|
+
log.debug('An impending timeout was reached, but no root span was found. No error will be tagged.')
|
|
48
|
+
} else {
|
|
47
49
|
const error = new ImpendingTimeout('Datadog detected an impending timeout')
|
|
48
50
|
activeSpan.addTags({
|
|
49
51
|
[ERROR_MESSAGE]: error.message,
|
|
50
52
|
[ERROR_TYPE]: error.name
|
|
51
53
|
})
|
|
52
|
-
} else {
|
|
53
|
-
log.debug('An impending timeout was reached, but no root span was found. No error will be tagged.')
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
tracer._processor.killAll()
|
|
@@ -70,7 +70,7 @@ function extractContext (args) {
|
|
|
70
70
|
if (context === undefined || context.getRemainingTimeInMillis === undefined) {
|
|
71
71
|
context = args.length > 2 ? args[2] : undefined
|
|
72
72
|
if (context === undefined || context.getRemainingTimeInMillis === undefined) {
|
|
73
|
-
throw Error('Could not extract context')
|
|
73
|
+
throw new Error('Could not extract context')
|
|
74
74
|
}
|
|
75
75
|
}
|
|
76
76
|
return context
|
|
@@ -60,7 +60,10 @@ function patchLambdaHandler (lambdaHandler) {
|
|
|
60
60
|
const lambdaTaskRoot = process.env.LAMBDA_TASK_ROOT
|
|
61
61
|
const originalLambdaHandler = process.env.DD_LAMBDA_HANDLER
|
|
62
62
|
|
|
63
|
-
if (originalLambdaHandler
|
|
63
|
+
if (originalLambdaHandler === undefined) {
|
|
64
|
+
// Instrumentation is done manually.
|
|
65
|
+
addHook({ name: 'datadog-lambda-js' }, patchDatadogLambdaModule)
|
|
66
|
+
} else {
|
|
64
67
|
const [moduleRoot, moduleAndHandler] = _extractModuleRootAndHandler(originalLambdaHandler)
|
|
65
68
|
const [_module, handlerPath] = _extractModuleNameAndHandlerPath(moduleAndHandler)
|
|
66
69
|
|
|
@@ -70,7 +73,4 @@ if (originalLambdaHandler !== undefined) {
|
|
|
70
73
|
for (const lambdaFilePath of lambdaFilePaths) {
|
|
71
74
|
addHook({ name: lambdaFilePath }, patchLambdaModule(handlerPath))
|
|
72
75
|
}
|
|
73
|
-
} else {
|
|
74
|
-
// Instrumentation is done manually.
|
|
75
|
-
addHook({ name: 'datadog-lambda-js' }, patchDatadogLambdaModule)
|
|
76
76
|
}
|
|
@@ -31,7 +31,7 @@ const {
|
|
|
31
31
|
*/
|
|
32
32
|
function _extractModuleRootAndHandler (fullHandler) {
|
|
33
33
|
const handlerString = path.basename(fullHandler)
|
|
34
|
-
const moduleRoot = fullHandler.
|
|
34
|
+
const moduleRoot = fullHandler.slice(0, Math.max(0, fullHandler.indexOf(handlerString)))
|
|
35
35
|
|
|
36
36
|
return [moduleRoot, handlerString]
|
|
37
37
|
}
|