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
|
@@ -8,6 +8,7 @@ const dc = require('dc-polyfill')
|
|
|
8
8
|
const { fileURLToPath } = require('url')
|
|
9
9
|
const { isTrue } = require('../../src/util')
|
|
10
10
|
|
|
11
|
+
/** @type {Set<string>} */
|
|
11
12
|
const savedDependenciesToSend = new Set()
|
|
12
13
|
const detectedDependencyKeys = new Set()
|
|
13
14
|
const detectedDependencyVersions = new Set()
|
|
@@ -15,63 +16,66 @@ const detectedDependencyVersions = new Set()
|
|
|
15
16
|
const FILE_URI_START = 'file://'
|
|
16
17
|
const moduleLoadStartChannel = dc.channel('dd-trace:moduleLoadStart')
|
|
17
18
|
|
|
18
|
-
let
|
|
19
|
+
let config, application, host, initialLoad
|
|
19
20
|
let isFirstModule = true
|
|
20
21
|
let getRetryData
|
|
21
22
|
let updateRetryData
|
|
22
23
|
|
|
23
|
-
function createBatchPayload (payload) {
|
|
24
|
-
const batchPayload = payload.map(item => {
|
|
25
|
-
return {
|
|
26
|
-
request_type: item.reqType,
|
|
27
|
-
payload: item.payload
|
|
28
|
-
}
|
|
29
|
-
})
|
|
30
|
-
|
|
31
|
-
return batchPayload
|
|
32
|
-
}
|
|
33
24
|
function waitAndSend (config, application, host) {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
let currPayload
|
|
55
|
-
const retryData = getRetryData()
|
|
56
|
-
if (retryData) {
|
|
57
|
-
currPayload = { reqType: 'app-dependencies-loaded', payload: { dependencies } }
|
|
58
|
-
} else {
|
|
59
|
-
if (!dependencies.length) return // no retry data and no dependencies, nothing to send
|
|
60
|
-
currPayload = { dependencies }
|
|
25
|
+
setImmediate(() => {
|
|
26
|
+
if (savedDependenciesToSend.size === 0) {
|
|
27
|
+
return
|
|
28
|
+
}
|
|
29
|
+
const dependencies = []
|
|
30
|
+
let send = 0
|
|
31
|
+
for (const dependency of savedDependenciesToSend) {
|
|
32
|
+
const [name, version, initialLoadModule] = dependency.split(' ')
|
|
33
|
+
// If a dependency is from the initial load, *always* send the event
|
|
34
|
+
// Otherwise, only send if dependencyCollection is enabled
|
|
35
|
+
const sendModule = isTrue(initialLoadModule) || config.telemetry?.dependencyCollection
|
|
36
|
+
|
|
37
|
+
savedDependenciesToSend.delete(dependency)
|
|
38
|
+
|
|
39
|
+
if (sendModule) {
|
|
40
|
+
dependencies.push({ name, version })
|
|
41
|
+
send++
|
|
42
|
+
if (send === 2000) {
|
|
43
|
+
// v2 documentation specifies up to 2000 dependencies can be sent at once
|
|
44
|
+
break
|
|
61
45
|
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
62
48
|
|
|
63
|
-
|
|
64
|
-
|
|
49
|
+
/**
|
|
50
|
+
* @type { { dependencies: typeof dependencies } | {
|
|
51
|
+
* request_type: string,
|
|
52
|
+
* payload: typeof dependencies
|
|
53
|
+
* }[]}
|
|
54
|
+
*/
|
|
55
|
+
let payload = { dependencies }
|
|
56
|
+
let reqType = 'app-dependencies-loaded'
|
|
57
|
+
const retryData = getRetryData()
|
|
58
|
+
|
|
59
|
+
if (retryData) {
|
|
60
|
+
payload = [{
|
|
61
|
+
request_type: 'app-dependencies-loaded',
|
|
62
|
+
payload
|
|
63
|
+
}, {
|
|
64
|
+
request_type: retryData.reqType,
|
|
65
|
+
payload: retryData.payload
|
|
66
|
+
}]
|
|
67
|
+
reqType = 'message-batch'
|
|
68
|
+
} else if (!dependencies.length) {
|
|
69
|
+
// No retry data and no dependencies, nothing to send
|
|
70
|
+
return
|
|
71
|
+
}
|
|
65
72
|
|
|
66
|
-
|
|
73
|
+
sendData(config, application, host, reqType, payload, updateRetryData)
|
|
67
74
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
})
|
|
73
|
-
immediate.unref()
|
|
74
|
-
}
|
|
75
|
+
if (savedDependenciesToSend.size > 0) {
|
|
76
|
+
waitAndSend(config, application, host)
|
|
77
|
+
}
|
|
78
|
+
}).unref()
|
|
75
79
|
}
|
|
76
80
|
|
|
77
81
|
function loadAllTheLoadedModules () {
|
|
@@ -91,18 +95,18 @@ function onModuleLoad (data) {
|
|
|
91
95
|
|
|
92
96
|
if (data) {
|
|
93
97
|
let filename = data.filename
|
|
94
|
-
if (filename
|
|
98
|
+
if (filename?.startsWith(FILE_URI_START)) {
|
|
95
99
|
try {
|
|
96
100
|
filename = fileURLToPath(filename)
|
|
97
|
-
} catch
|
|
101
|
+
} catch {
|
|
98
102
|
// cannot transform url to path
|
|
99
103
|
}
|
|
100
104
|
}
|
|
101
105
|
const parseResult = filename && parse(filename)
|
|
102
|
-
const request = data.request ||
|
|
103
|
-
const dependencyKey = parseResult
|
|
106
|
+
const request = data.request || parseResult?.name
|
|
107
|
+
const dependencyKey = parseResult?.basedir ?? request
|
|
104
108
|
|
|
105
|
-
if (filename && request && isDependency(
|
|
109
|
+
if (filename && request && isDependency(request) && !detectedDependencyKeys.has(dependencyKey)) {
|
|
106
110
|
detectedDependencyKeys.add(dependencyKey)
|
|
107
111
|
|
|
108
112
|
if (parseResult) {
|
|
@@ -118,7 +122,7 @@ function onModuleLoad (data) {
|
|
|
118
122
|
|
|
119
123
|
waitAndSend(config, application, host)
|
|
120
124
|
}
|
|
121
|
-
} catch
|
|
125
|
+
} catch {
|
|
122
126
|
// can not read the package.json, do nothing
|
|
123
127
|
}
|
|
124
128
|
}
|
|
@@ -135,20 +139,21 @@ function start (_config = {}, _application, _host, getRetryDataFunction, updateR
|
|
|
135
139
|
updateRetryData = updateRetryDatafunction
|
|
136
140
|
moduleLoadStartChannel.subscribe(onModuleLoad)
|
|
137
141
|
|
|
138
|
-
//
|
|
142
|
+
// Try and capture initially loaded modules in the first tick
|
|
139
143
|
// since, ideally, the tracer (and this module) should be loaded first,
|
|
140
144
|
// this should capture any first-tick dependencies
|
|
141
145
|
queueMicrotask(() => { initialLoad = false })
|
|
142
146
|
}
|
|
143
147
|
|
|
144
|
-
function isDependency (
|
|
145
|
-
const isDependencyWithSlash = isDependencyWithSeparator(
|
|
148
|
+
function isDependency (request) {
|
|
149
|
+
const isDependencyWithSlash = isDependencyWithSeparator(request, '/')
|
|
146
150
|
if (isDependencyWithSlash && process.platform === 'win32') {
|
|
147
|
-
return isDependencyWithSeparator(
|
|
151
|
+
return isDependencyWithSeparator(request, path.sep)
|
|
148
152
|
}
|
|
149
153
|
return isDependencyWithSlash
|
|
150
154
|
}
|
|
151
|
-
|
|
155
|
+
|
|
156
|
+
function isDependencyWithSeparator (request, sep) {
|
|
152
157
|
return request.indexOf(`..${sep}`) !== 0 &&
|
|
153
158
|
request.indexOf(`.${sep}`) !== 0 &&
|
|
154
159
|
request.indexOf(sep) !== 0 &&
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
3
|
const log = require('../../log')
|
|
4
|
-
const {
|
|
4
|
+
const { ddBasePath } = require('../../util')
|
|
5
5
|
|
|
6
6
|
const logs = new Map() // hash -> log
|
|
7
7
|
|
|
8
8
|
// NOTE: Is this a reasonable number?
|
|
9
|
-
let maxEntries =
|
|
9
|
+
let maxEntries = 10_000
|
|
10
10
|
let overflowedCount = 0
|
|
11
11
|
|
|
12
12
|
function hashCode (hashSource) {
|
|
@@ -20,9 +20,9 @@ function hashCode (hashSource) {
|
|
|
20
20
|
|
|
21
21
|
function createHash (logEntry) {
|
|
22
22
|
const prime = 31
|
|
23
|
-
let result =
|
|
24
|
-
result = (((prime * result) | 0) + (
|
|
25
|
-
result = (((prime * result) | 0) + (
|
|
23
|
+
let result = logEntry.level ? hashCode(logEntry.level) : 0
|
|
24
|
+
result = (((prime * result) | 0) + (logEntry.message ? hashCode(logEntry.message) : 0)) | 0
|
|
25
|
+
result = (((prime * result) | 0) + (logEntry.stack_trace ? hashCode(logEntry.stack_trace) : 0)) | 0
|
|
26
26
|
return result
|
|
27
27
|
}
|
|
28
28
|
|
|
@@ -30,7 +30,6 @@ function isValid (logEntry) {
|
|
|
30
30
|
return logEntry?.level && logEntry.message
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
const ddBasePath = calculateDDBasePath(__dirname)
|
|
34
33
|
const EOL = '\n'
|
|
35
34
|
const STACK_FRAME_LINE_REGEX = /^\s*at\s/gm
|
|
36
35
|
|
|
@@ -42,7 +41,7 @@ function sanitize (logEntry) {
|
|
|
42
41
|
|
|
43
42
|
const firstIndex = stackLines.findIndex(l => l.match(STACK_FRAME_LINE_REGEX))
|
|
44
43
|
|
|
45
|
-
const isDDCode = firstIndex
|
|
44
|
+
const isDDCode = firstIndex !== -1 && stackLines[firstIndex].includes(ddBasePath)
|
|
46
45
|
stackLines = stackLines
|
|
47
46
|
.filter((line, index) => (isDDCode && index < firstIndex) || line.includes(ddBasePath))
|
|
48
47
|
.map(line => line.replace(ddBasePath, ''))
|
|
@@ -78,11 +77,11 @@ const logCollector = {
|
|
|
78
77
|
return false
|
|
79
78
|
}
|
|
80
79
|
const hash = createHash(logEntry)
|
|
81
|
-
if (
|
|
80
|
+
if (logs.has(hash)) {
|
|
81
|
+
logs.get(hash).count++
|
|
82
|
+
} else {
|
|
82
83
|
logs.set(hash, logEntry)
|
|
83
84
|
return true
|
|
84
|
-
} else {
|
|
85
|
-
logs.get(hash).count++
|
|
86
85
|
}
|
|
87
86
|
} catch (e) {
|
|
88
87
|
log.error('Unable to add log to logCollector: %s', e.message)
|
|
@@ -19,8 +19,14 @@ function now () {
|
|
|
19
19
|
return Date.now() / 1e3
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
function mapToJsonArray (map) {
|
|
23
|
-
|
|
22
|
+
function mapToJsonArray (map, filter) {
|
|
23
|
+
const array = []
|
|
24
|
+
for (const value of map.values()) {
|
|
25
|
+
if (!filter || filter(value)) {
|
|
26
|
+
array.push(value.toJSON())
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return array
|
|
24
30
|
}
|
|
25
31
|
|
|
26
32
|
function hasPoints (metric) {
|
|
@@ -138,7 +144,7 @@ class RateMetric extends Metric {
|
|
|
138
144
|
|
|
139
145
|
track (value = 1) {
|
|
140
146
|
this.rate += value
|
|
141
|
-
const rate = this.interval ? (this.rate / this.interval) : 0
|
|
147
|
+
const rate = this.interval ? (this.rate / this.interval) : 0
|
|
142
148
|
this.points = [[now(), rate]]
|
|
143
149
|
}
|
|
144
150
|
}
|
|
@@ -169,8 +175,7 @@ class MetricsCollection extends Map {
|
|
|
169
175
|
toJSON () {
|
|
170
176
|
if (!this.size) return
|
|
171
177
|
|
|
172
|
-
const series = mapToJsonArray(this)
|
|
173
|
-
.filter(hasPoints)
|
|
178
|
+
const series = mapToJsonArray(this, hasPoints)
|
|
174
179
|
|
|
175
180
|
if (!series.length) return
|
|
176
181
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
const request = require('../exporters/common/request')
|
|
2
2
|
const log = require('../log')
|
|
3
3
|
const { isTrue } = require('../util')
|
|
4
|
+
const { getEnvironmentVariable } = require('../config-helper')
|
|
4
5
|
|
|
5
6
|
let agentTelemetry = true
|
|
6
7
|
|
|
@@ -36,10 +37,9 @@ function getPayload (payload) {
|
|
|
36
37
|
// 'logs' request type payload is meant to send library logs to Datadog’s backend.
|
|
37
38
|
if (Array.isArray(payload)) {
|
|
38
39
|
return payload
|
|
39
|
-
} else {
|
|
40
|
-
const { logger, tags, serviceMapping, ...trimmedPayload } = payload
|
|
41
|
-
return trimmedPayload
|
|
42
40
|
}
|
|
41
|
+
const { logger, tags, serviceMapping, ...trimmedPayload } = payload
|
|
42
|
+
return trimmedPayload
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
function sendData (config, application, host, reqType, payload = {}, cb = () => {}) {
|
|
@@ -51,7 +51,8 @@ function sendData (config, application, host, reqType, payload = {}, cb = () =>
|
|
|
51
51
|
|
|
52
52
|
let url = config.url
|
|
53
53
|
|
|
54
|
-
const isCiVisibilityAgentlessMode = isCiVisibility &&
|
|
54
|
+
const isCiVisibilityAgentlessMode = isCiVisibility &&
|
|
55
|
+
isTrue(getEnvironmentVariable('DD_CIVISIBILITY_AGENTLESS_ENABLED'))
|
|
55
56
|
|
|
56
57
|
if (isCiVisibilityAgentlessMode) {
|
|
57
58
|
try {
|
|
@@ -74,7 +75,7 @@ function sendData (config, application, host, reqType, payload = {}, cb = () =>
|
|
|
74
75
|
|
|
75
76
|
const data = JSON.stringify({
|
|
76
77
|
api_version: 'v2',
|
|
77
|
-
naming_schema_version: config.spanAttributeSchema
|
|
78
|
+
naming_schema_version: config.spanAttributeSchema ?? '',
|
|
78
79
|
request_type: reqType,
|
|
79
80
|
tracer_time: Math.floor(Date.now() / 1000),
|
|
80
81
|
runtime_id: config.tags['runtime-id'],
|
|
@@ -85,14 +86,14 @@ function sendData (config, application, host, reqType, payload = {}, cb = () =>
|
|
|
85
86
|
})
|
|
86
87
|
|
|
87
88
|
request(data, options, (error) => {
|
|
88
|
-
if (error &&
|
|
89
|
+
if (error && getEnvironmentVariable('DD_API_KEY') && config.site) {
|
|
89
90
|
if (agentTelemetry) {
|
|
90
91
|
log.warn('Agent telemetry failed, started agentless telemetry')
|
|
91
92
|
agentTelemetry = false
|
|
92
93
|
}
|
|
93
94
|
// figure out which data center to send to
|
|
94
95
|
const backendUrl = getAgentlessTelemetryEndpoint(config.site)
|
|
95
|
-
const backendHeader = { ...options.headers, 'DD-API-KEY':
|
|
96
|
+
const backendHeader = { ...options.headers, 'DD-API-KEY': getEnvironmentVariable('DD_API_KEY') }
|
|
96
97
|
const backendOptions = {
|
|
97
98
|
...options,
|
|
98
99
|
url: backendUrl,
|
|
@@ -22,7 +22,7 @@ let heartbeatTimeout
|
|
|
22
22
|
let heartbeatInterval
|
|
23
23
|
let extendedInterval
|
|
24
24
|
let integrations
|
|
25
|
-
|
|
25
|
+
const configWithOrigin = new Map()
|
|
26
26
|
let retryData = null
|
|
27
27
|
const extendedHeartbeatPayload = {}
|
|
28
28
|
|
|
@@ -113,7 +113,7 @@ function getInstallSignature (config) {
|
|
|
113
113
|
function appStarted (config) {
|
|
114
114
|
const app = {
|
|
115
115
|
products: getProducts(config),
|
|
116
|
-
configuration: configWithOrigin
|
|
116
|
+
configuration: [...configWithOrigin.values()]
|
|
117
117
|
}
|
|
118
118
|
const installSignature = getInstallSignature(config)
|
|
119
119
|
if (installSignature) {
|
|
@@ -282,7 +282,7 @@ function stop () {
|
|
|
282
282
|
}
|
|
283
283
|
|
|
284
284
|
function updateIntegrations () {
|
|
285
|
-
if (!config
|
|
285
|
+
if (!config?.telemetry.enabled) {
|
|
286
286
|
return
|
|
287
287
|
}
|
|
288
288
|
const integrations = getIntegrations()
|
|
@@ -303,6 +303,27 @@ function formatMapForTelemetry (map) {
|
|
|
303
303
|
: ''
|
|
304
304
|
}
|
|
305
305
|
|
|
306
|
+
const nameMapping = {
|
|
307
|
+
sampleRate: 'DD_TRACE_SAMPLE_RATE',
|
|
308
|
+
logInjection: 'DD_LOG_INJECTION',
|
|
309
|
+
headerTags: 'DD_TRACE_HEADER_TAGS',
|
|
310
|
+
tags: 'DD_TAGS',
|
|
311
|
+
'sampler.rules': 'DD_TRACE_SAMPLING_RULES',
|
|
312
|
+
traceEnabled: 'DD_TRACE_ENABLED',
|
|
313
|
+
url: 'DD_TRACE_AGENT_URL',
|
|
314
|
+
'sampler.rateLimit': 'DD_TRACE_RATE_LIMIT',
|
|
315
|
+
queryStringObfuscation: 'DD_TRACE_OBFUSCATION_QUERY_STRING_REGEXP',
|
|
316
|
+
version: 'DD_VERSION',
|
|
317
|
+
env: 'DD_ENV',
|
|
318
|
+
service: 'DD_SERVICE',
|
|
319
|
+
clientIpHeader: 'DD_TRACE_CLIENT_IP_HEADER',
|
|
320
|
+
'grpc.client.error.statuses': 'DD_GRPC_CLIENT_ERROR_STATUSES',
|
|
321
|
+
'grpc.server.error.statuses': 'DD_GRPC_SERVER_ERROR_STATUSES',
|
|
322
|
+
traceId128BitLoggingEnabled: 'DD_TRACE_128_BIT_TRACEID_LOGGING_ENABLED'
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
const namesNeedFormatting = new Set(['DD_TAGS', 'peerServiceMapping', 'serviceMapping'])
|
|
326
|
+
|
|
306
327
|
function updateConfig (changes, config) {
|
|
307
328
|
if (!config.telemetry.enabled) return
|
|
308
329
|
if (changes.length === 0) return
|
|
@@ -312,34 +333,11 @@ function updateConfig (changes, config) {
|
|
|
312
333
|
const application = createAppObject(config)
|
|
313
334
|
const host = createHostObject()
|
|
314
335
|
|
|
315
|
-
const
|
|
316
|
-
sampleRate: 'DD_TRACE_SAMPLE_RATE',
|
|
317
|
-
logInjection: 'DD_LOG_INJECTION',
|
|
318
|
-
headerTags: 'DD_TRACE_HEADER_TAGS',
|
|
319
|
-
tags: 'DD_TAGS',
|
|
320
|
-
'sampler.rules': 'DD_TRACE_SAMPLING_RULES',
|
|
321
|
-
traceEnabled: 'DD_TRACE_ENABLED',
|
|
322
|
-
url: 'DD_TRACE_AGENT_URL',
|
|
323
|
-
'sampler.rateLimit': 'DD_TRACE_RATE_LIMIT',
|
|
324
|
-
queryStringObfuscation: 'DD_TRACE_OBFUSCATION_QUERY_STRING_REGEXP',
|
|
325
|
-
version: 'DD_VERSION',
|
|
326
|
-
env: 'DD_ENV',
|
|
327
|
-
service: 'DD_SERVICE',
|
|
328
|
-
clientIpHeader: 'DD_TRACE_CLIENT_IP_HEADER',
|
|
329
|
-
'grpc.client.error.statuses': 'DD_GRPC_CLIENT_ERROR_STATUSES',
|
|
330
|
-
'grpc.server.error.statuses': 'DD_GRPC_SERVER_ERROR_STATUSES',
|
|
331
|
-
traceId128BitLoggingEnabled: 'DD_TRACE_128_BIT_TRACEID_LOGGING_ENABLED'
|
|
332
|
-
}
|
|
333
|
-
|
|
334
|
-
const namesNeedFormatting = new Set(['DD_TAGS', 'peerServiceMapping', 'serviceMapping'])
|
|
335
|
-
|
|
336
|
-
const configuration = []
|
|
337
|
-
const names = [] // list of config names whose values have been changed
|
|
336
|
+
const changed = configWithOrigin.size > 0
|
|
338
337
|
|
|
339
338
|
for (const change of changes) {
|
|
340
339
|
const name = nameMapping[change.name] || change.name
|
|
341
340
|
|
|
342
|
-
names.push(name)
|
|
343
341
|
const { origin, value } = change
|
|
344
342
|
const entry = { name, value, origin }
|
|
345
343
|
|
|
@@ -354,20 +352,14 @@ function updateConfig (changes, config) {
|
|
|
354
352
|
} else if (Array.isArray(entry.value)) {
|
|
355
353
|
entry.value = value.join(',')
|
|
356
354
|
}
|
|
357
|
-
|
|
355
|
+
configWithOrigin.set(name, entry)
|
|
358
356
|
}
|
|
359
357
|
|
|
360
|
-
|
|
361
|
-
return !names.includes(entry.name)
|
|
362
|
-
}
|
|
363
|
-
|
|
364
|
-
if (!configWithOrigin.length) {
|
|
365
|
-
configWithOrigin = configuration
|
|
366
|
-
} else {
|
|
358
|
+
if (changed) {
|
|
367
359
|
// update configWithOrigin to contain up-to-date full list of config values for app-extended-heartbeat
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
360
|
+
const { reqType, payload } = createPayload('app-client-configuration-change', {
|
|
361
|
+
configuration: [...configWithOrigin.values()]
|
|
362
|
+
})
|
|
371
363
|
sendData(config, application, host, reqType, payload, updateRetryData)
|
|
372
364
|
}
|
|
373
365
|
}
|
|
@@ -376,13 +368,7 @@ function profilingEnabledToBoolean (profilingEnabled) {
|
|
|
376
368
|
if (typeof profilingEnabled === 'boolean') {
|
|
377
369
|
return profilingEnabled
|
|
378
370
|
}
|
|
379
|
-
|
|
380
|
-
return true
|
|
381
|
-
}
|
|
382
|
-
if (profilingEnabled === 'false') {
|
|
383
|
-
return false
|
|
384
|
-
}
|
|
385
|
-
return undefined
|
|
371
|
+
return profilingEnabled === 'true' || profilingEnabled === 'auto'
|
|
386
372
|
}
|
|
387
373
|
|
|
388
374
|
module.exports = {
|
|
@@ -46,9 +46,7 @@ class DatadogTracer extends Tracer {
|
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
trace (name, options, fn) {
|
|
49
|
-
options =
|
|
50
|
-
childOf: this.scope().active()
|
|
51
|
-
}, options)
|
|
49
|
+
options = { childOf: this.scope().active(), ...options }
|
|
52
50
|
|
|
53
51
|
const span = this.startSpan(name, options)
|
|
54
52
|
|
|
@@ -76,9 +74,8 @@ class DatadogTracer extends Tracer {
|
|
|
76
74
|
throw err
|
|
77
75
|
}
|
|
78
76
|
)
|
|
79
|
-
} else {
|
|
80
|
-
span.finish()
|
|
81
77
|
}
|
|
78
|
+
span.finish()
|
|
82
79
|
|
|
83
80
|
return result
|
|
84
81
|
} catch (e) {
|
|
@@ -110,9 +107,8 @@ class DatadogTracer extends Tracer {
|
|
|
110
107
|
|
|
111
108
|
return fn.apply(this, arguments)
|
|
112
109
|
})
|
|
113
|
-
} else {
|
|
114
|
-
return tracer.trace(name, optionsObj, () => fn.apply(this, arguments))
|
|
115
110
|
}
|
|
111
|
+
return tracer.trace(name, optionsObj, () => fn.apply(this, arguments))
|
|
116
112
|
}
|
|
117
113
|
}
|
|
118
114
|
|
|
@@ -69,10 +69,6 @@ function calculateDDBasePath (dirname) {
|
|
|
69
69
|
return dirSteps.slice(0, packagesIndex + 1).join(path.sep) + path.sep
|
|
70
70
|
}
|
|
71
71
|
|
|
72
|
-
function hasOwn (object, prop) {
|
|
73
|
-
return Object.prototype.hasOwnProperty.call(object, prop)
|
|
74
|
-
}
|
|
75
|
-
|
|
76
72
|
function normalizeProfilingEnabledValue (configValue) {
|
|
77
73
|
return isTrue(configValue)
|
|
78
74
|
? 'true'
|
|
@@ -86,7 +82,6 @@ module.exports = {
|
|
|
86
82
|
isFalse,
|
|
87
83
|
isError,
|
|
88
84
|
globMatch,
|
|
89
|
-
calculateDDBasePath,
|
|
90
|
-
hasOwn,
|
|
85
|
+
ddBasePath: calculateDDBasePath(__dirname),
|
|
91
86
|
normalizeProfilingEnabledValue
|
|
92
87
|
}
|
package/version.js
CHANGED
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
'use strict'
|
|
2
|
-
|
|
3
|
-
const { addHook, channel } = require('./helpers/instrument')
|
|
4
|
-
const shimmer = require('../../datadog-shimmer')
|
|
5
|
-
|
|
6
|
-
const logChannel = channel('apm:paperplane:log')
|
|
7
|
-
const handleChannel = channel('apm:paperplane:request:handle')
|
|
8
|
-
const routeChannel = channel('apm:paperplane:request:route')
|
|
9
|
-
|
|
10
|
-
const nodeMajor = Number(process.versions.node.split('.')[0])
|
|
11
|
-
const name = 'paperplane'
|
|
12
|
-
const versions = nodeMajor <= 12 ? ['>=2.3.2'] : nodeMajor <= 14 ? ['>=3.1.1'] : []
|
|
13
|
-
|
|
14
|
-
const wrapRoute = handler => req => {
|
|
15
|
-
const { original, route } = req
|
|
16
|
-
|
|
17
|
-
if (routeChannel.hasSubscribers) {
|
|
18
|
-
routeChannel.publish({ req: original, route })
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
return handler(req)
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
const wrapLogger = logger => record => {
|
|
25
|
-
const event = { message: record }
|
|
26
|
-
|
|
27
|
-
logChannel.publish(event)
|
|
28
|
-
|
|
29
|
-
return logger(event.message)
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
const wrapMount = mount => opts => {
|
|
33
|
-
const handler = mount(opts)
|
|
34
|
-
|
|
35
|
-
return function (req, res) {
|
|
36
|
-
handleChannel.publish(req)
|
|
37
|
-
|
|
38
|
-
return handler.apply(this, arguments)
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
const wrapRoutes = routes => handlers => {
|
|
43
|
-
const traced = {}
|
|
44
|
-
|
|
45
|
-
for (const route in handlers) {
|
|
46
|
-
traced[route] = wrapRoute(handlers[route])
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
return routes(traced)
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
addHook({ name, versions, file: 'lib/logger.js' }, exports => {
|
|
53
|
-
shimmer.wrap(exports, 'logger', wrapLogger)
|
|
54
|
-
|
|
55
|
-
return exports
|
|
56
|
-
})
|
|
57
|
-
|
|
58
|
-
addHook({ name, versions, file: 'lib/mount.js' }, exports => {
|
|
59
|
-
shimmer.wrap(exports, 'mount', wrapMount)
|
|
60
|
-
|
|
61
|
-
return exports
|
|
62
|
-
})
|
|
63
|
-
|
|
64
|
-
addHook({ name, versions, file: 'lib/routes.js' }, exports => {
|
|
65
|
-
shimmer.wrap(exports, 'routes', wrapRoutes)
|
|
66
|
-
|
|
67
|
-
return exports
|
|
68
|
-
})
|
|
69
|
-
|
|
70
|
-
if (nodeMajor <= 12) {
|
|
71
|
-
addHook({ name, versions: ['2.3.0 - 2.3.1'] }, paperplane => {
|
|
72
|
-
shimmer.wrap(paperplane, 'mount', wrapMount)
|
|
73
|
-
shimmer.wrap(paperplane, 'routes', wrapRoutes)
|
|
74
|
-
|
|
75
|
-
return paperplane
|
|
76
|
-
})
|
|
77
|
-
}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
'use strict'
|
|
2
|
-
|
|
3
|
-
const Plugin = require('../../dd-trace/src/plugins/plugin')
|
|
4
|
-
const PaperplaneLoggerPlugin = require('./logger')
|
|
5
|
-
const PaperplaneServerPlugin = require('./server')
|
|
6
|
-
|
|
7
|
-
class PaperplanePlugin extends Plugin {
|
|
8
|
-
static get id () {
|
|
9
|
-
return 'paperplane'
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
constructor (...args) {
|
|
13
|
-
super(...args)
|
|
14
|
-
|
|
15
|
-
this.server = new PaperplaneServerPlugin(...args)
|
|
16
|
-
this.logger = new PaperplaneLoggerPlugin(...args)
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
configure (config) {
|
|
20
|
-
this.server.configure(config)
|
|
21
|
-
this.logger.configure(config)
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
module.exports = PaperplanePlugin
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
'use strict'
|
|
2
|
-
|
|
3
|
-
const RouterPlugin = require('../../datadog-plugin-router/src')
|
|
4
|
-
const web = require('../../dd-trace/src/plugins/util/web')
|
|
5
|
-
|
|
6
|
-
class PaperplaneServerPlugin extends RouterPlugin {
|
|
7
|
-
static get id () {
|
|
8
|
-
return 'paperplane'
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
constructor (...args) {
|
|
12
|
-
super(...args)
|
|
13
|
-
|
|
14
|
-
this.addSub('apm:paperplane:request:handle', req => {
|
|
15
|
-
this.setFramework(req, 'paperplane', this.config)
|
|
16
|
-
})
|
|
17
|
-
|
|
18
|
-
this.addSub('apm:paperplane:request:route', ({ req, route }) => {
|
|
19
|
-
web.setRoute(req, route)
|
|
20
|
-
})
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
module.exports = PaperplaneServerPlugin
|