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.
Files changed (332) hide show
  1. package/LICENSE-3rdparty.csv +2 -1
  2. package/README.md +5 -0
  3. package/index.d.ts +87 -22
  4. package/initialize.mjs +3 -4
  5. package/package.json +36 -34
  6. package/packages/datadog-core/src/utils/src/get.js +1 -1
  7. package/packages/datadog-core/src/utils/src/has.js +1 -1
  8. package/packages/datadog-core/src/utils/src/kebabcase.js +4 -6
  9. package/packages/datadog-core/src/utils/src/parse-tags.js +1 -1
  10. package/packages/datadog-core/src/utils/src/pick.js +2 -2
  11. package/packages/datadog-core/src/utils/src/set.js +1 -1
  12. package/packages/datadog-core/src/utils/src/uniq.js +1 -1
  13. package/packages/datadog-instrumentations/src/amqp10.js +19 -17
  14. package/packages/datadog-instrumentations/src/amqplib.js +57 -37
  15. package/packages/datadog-instrumentations/src/apollo.js +2 -2
  16. package/packages/datadog-instrumentations/src/aws-sdk.js +1 -1
  17. package/packages/datadog-instrumentations/src/cassandra-driver.js +5 -4
  18. package/packages/datadog-instrumentations/src/child_process.js +3 -3
  19. package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +92 -62
  20. package/packages/datadog-instrumentations/src/couchbase.js +5 -4
  21. package/packages/datadog-instrumentations/src/cucumber.js +126 -84
  22. package/packages/datadog-instrumentations/src/cypress.js +2 -1
  23. package/packages/datadog-instrumentations/src/dns.js +1 -1
  24. package/packages/datadog-instrumentations/src/express.js +2 -6
  25. package/packages/datadog-instrumentations/src/fs.js +7 -6
  26. package/packages/datadog-instrumentations/src/google-cloud-pubsub.js +28 -34
  27. package/packages/datadog-instrumentations/src/graphql.js +7 -10
  28. package/packages/datadog-instrumentations/src/grpc/client.js +11 -23
  29. package/packages/datadog-instrumentations/src/grpc/server.js +7 -20
  30. package/packages/datadog-instrumentations/src/helpers/extract-package-and-module-path.js +16 -10
  31. package/packages/datadog-instrumentations/src/helpers/hook.js +1 -1
  32. package/packages/datadog-instrumentations/src/helpers/hooks.js +1 -1
  33. package/packages/datadog-instrumentations/src/helpers/instrument.js +1 -41
  34. package/packages/datadog-instrumentations/src/helpers/register.js +21 -18
  35. package/packages/datadog-instrumentations/src/http/client.js +16 -21
  36. package/packages/datadog-instrumentations/src/iovalkey.js +51 -0
  37. package/packages/datadog-instrumentations/src/jest.js +184 -87
  38. package/packages/datadog-instrumentations/src/kafkajs.js +65 -44
  39. package/packages/datadog-instrumentations/src/knex.js +4 -4
  40. package/packages/datadog-instrumentations/src/ldapjs.js +3 -4
  41. package/packages/datadog-instrumentations/src/mariadb.js +38 -61
  42. package/packages/datadog-instrumentations/src/mocha/main.js +85 -59
  43. package/packages/datadog-instrumentations/src/mocha/utils.js +103 -82
  44. package/packages/datadog-instrumentations/src/mocha/worker.js +6 -0
  45. package/packages/datadog-instrumentations/src/mongodb-core.js +1 -1
  46. package/packages/datadog-instrumentations/src/mysql.js +20 -36
  47. package/packages/datadog-instrumentations/src/mysql2.js +55 -47
  48. package/packages/datadog-instrumentations/src/net.js +4 -2
  49. package/packages/datadog-instrumentations/src/next.js +7 -14
  50. package/packages/datadog-instrumentations/src/nyc.js +1 -1
  51. package/packages/datadog-instrumentations/src/openai.js +21 -23
  52. package/packages/datadog-instrumentations/src/oracledb.js +1 -1
  53. package/packages/datadog-instrumentations/src/pg.js +6 -13
  54. package/packages/datadog-instrumentations/src/playwright.js +170 -136
  55. package/packages/datadog-instrumentations/src/redis.js +3 -3
  56. package/packages/datadog-instrumentations/src/restify.js +2 -2
  57. package/packages/datadog-instrumentations/src/rhea.js +42 -54
  58. package/packages/datadog-instrumentations/src/router.js +22 -25
  59. package/packages/datadog-instrumentations/src/tedious.js +1 -1
  60. package/packages/datadog-instrumentations/src/url.js +9 -17
  61. package/packages/datadog-instrumentations/src/vitest.js +126 -97
  62. package/packages/datadog-plugin-amqp10/src/consumer.js +7 -3
  63. package/packages/datadog-plugin-amqp10/src/producer.js +7 -3
  64. package/packages/datadog-plugin-amqplib/src/client.js +6 -2
  65. package/packages/datadog-plugin-amqplib/src/consumer.js +7 -3
  66. package/packages/datadog-plugin-amqplib/src/producer.js +7 -3
  67. package/packages/datadog-plugin-amqplib/src/util.js +1 -1
  68. package/packages/datadog-plugin-apollo/src/gateway/request.js +5 -6
  69. package/packages/datadog-plugin-apollo/src/gateway/validate.js +2 -3
  70. package/packages/datadog-plugin-aws-sdk/src/base.js +3 -2
  71. package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/tracing.js +2 -2
  72. package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/utils.js +13 -13
  73. package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +24 -31
  74. package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +2 -2
  75. package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +6 -6
  76. package/packages/datadog-plugin-aws-sdk/src/services/lambda.js +1 -1
  77. package/packages/datadog-plugin-aws-sdk/src/services/sns.js +1 -1
  78. package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +4 -5
  79. package/packages/datadog-plugin-aws-sdk/src/services/stepfunctions.js +1 -1
  80. package/packages/datadog-plugin-aws-sdk/src/util.js +5 -6
  81. package/packages/datadog-plugin-cassandra-driver/src/index.js +1 -1
  82. package/packages/datadog-plugin-child_process/src/index.js +4 -4
  83. package/packages/datadog-plugin-child_process/src/scrub-cmd-params.js +23 -23
  84. package/packages/datadog-plugin-cucumber/src/index.js +86 -20
  85. package/packages/datadog-plugin-cypress/src/cypress-plugin.js +97 -27
  86. package/packages/datadog-plugin-cypress/src/plugin.js +11 -1
  87. package/packages/datadog-plugin-cypress/src/support.js +24 -5
  88. package/packages/datadog-plugin-express/src/code_origin.js +30 -0
  89. package/packages/datadog-plugin-express/src/index.js +10 -12
  90. package/packages/datadog-plugin-express/src/tracing.js +19 -0
  91. package/packages/datadog-plugin-google-cloud-pubsub/src/client.js +7 -3
  92. package/packages/datadog-plugin-google-cloud-pubsub/src/consumer.js +12 -7
  93. package/packages/datadog-plugin-google-cloud-pubsub/src/producer.js +6 -2
  94. package/packages/datadog-plugin-google-cloud-vertexai/src/tracing.js +26 -9
  95. package/packages/datadog-plugin-graphql/src/execute.js +2 -2
  96. package/packages/datadog-plugin-graphql/src/index.js +7 -6
  97. package/packages/datadog-plugin-graphql/src/resolve.js +2 -2
  98. package/packages/datadog-plugin-graphql/src/tools/index.js +1 -0
  99. package/packages/datadog-plugin-graphql/src/tools/signature.js +1 -0
  100. package/packages/datadog-plugin-graphql/src/tools/transforms.js +1 -0
  101. package/packages/datadog-plugin-grpc/src/client.js +2 -2
  102. package/packages/datadog-plugin-grpc/src/util.js +2 -2
  103. package/packages/datadog-plugin-http/src/client.js +18 -7
  104. package/packages/datadog-plugin-http2/src/client.js +20 -20
  105. package/packages/datadog-plugin-iovalkey/src/index.js +18 -0
  106. package/packages/datadog-plugin-jest/src/index.js +36 -28
  107. package/packages/datadog-plugin-jest/src/util.js +8 -8
  108. package/packages/datadog-plugin-kafkajs/src/batch-consumer.js +3 -1
  109. package/packages/datadog-plugin-kafkajs/src/consumer.js +9 -5
  110. package/packages/datadog-plugin-kafkajs/src/producer.js +15 -7
  111. package/packages/datadog-plugin-kafkajs/src/utils.js +1 -1
  112. package/packages/datadog-plugin-langchain/src/handlers/chain.js +7 -7
  113. package/packages/datadog-plugin-langchain/src/handlers/embedding.js +2 -2
  114. package/packages/datadog-plugin-langchain/src/handlers/language_models/chat_model.js +6 -4
  115. package/packages/datadog-plugin-langchain/src/handlers/language_models/llm.js +5 -4
  116. package/packages/datadog-plugin-langchain/src/tracing.js +11 -10
  117. package/packages/datadog-plugin-mariadb/src/index.js +3 -9
  118. package/packages/datadog-plugin-mocha/src/index.js +88 -48
  119. package/packages/datadog-plugin-mongodb-core/src/index.js +1 -1
  120. package/packages/datadog-plugin-mysql/src/index.js +11 -9
  121. package/packages/datadog-plugin-mysql2/src/index.js +16 -0
  122. package/packages/datadog-plugin-net/src/tcp.js +1 -1
  123. package/packages/datadog-plugin-next/src/index.js +6 -5
  124. package/packages/datadog-plugin-openai/src/services.js +6 -10
  125. package/packages/datadog-plugin-openai/src/tracing.js +10 -14
  126. package/packages/datadog-plugin-oracledb/src/index.js +1 -1
  127. package/packages/datadog-plugin-playwright/src/index.js +48 -22
  128. package/packages/datadog-plugin-redis/src/index.js +9 -4
  129. package/packages/datadog-plugin-rhea/src/consumer.js +8 -6
  130. package/packages/datadog-plugin-rhea/src/producer.js +5 -2
  131. package/packages/datadog-plugin-router/src/index.js +1 -1
  132. package/packages/datadog-plugin-selenium/src/index.js +1 -6
  133. package/packages/datadog-plugin-vitest/src/index.js +99 -72
  134. package/packages/datadog-shimmer/src/shimmer.js +163 -36
  135. package/packages/dd-trace/src/appsec/api_security_sampler.js +2 -2
  136. package/packages/dd-trace/src/appsec/blocked_templates.js +1 -1
  137. package/packages/dd-trace/src/appsec/blocking.js +6 -20
  138. package/packages/dd-trace/src/appsec/graphql.js +2 -2
  139. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-password-rules.js +1 -1
  140. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secret-rules.js +1 -1
  141. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secrets-rules.js +1 -1
  142. package/packages/dd-trace/src/appsec/iast/analyzers/header-injection-analyzer.js +4 -6
  143. package/packages/dd-trace/src/appsec/iast/analyzers/hsts-header-missing-analyzer.js +7 -12
  144. package/packages/dd-trace/src/appsec/iast/analyzers/missing-header-analyzer.js +4 -6
  145. package/packages/dd-trace/src/appsec/iast/analyzers/nosql-injection-mongodb-analyzer.js +4 -0
  146. package/packages/dd-trace/src/appsec/iast/analyzers/path-traversal-analyzer.js +9 -12
  147. package/packages/dd-trace/src/appsec/iast/analyzers/vulnerability-analyzer.js +5 -4
  148. package/packages/dd-trace/src/appsec/iast/context/context-plugin.js +2 -3
  149. package/packages/dd-trace/src/appsec/iast/iast-plugin.js +3 -3
  150. package/packages/dd-trace/src/appsec/iast/index.js +1 -0
  151. package/packages/dd-trace/src/appsec/iast/overhead-controller.js +102 -7
  152. package/packages/dd-trace/src/appsec/iast/path-line.js +7 -8
  153. package/packages/dd-trace/src/appsec/iast/security-controls/index.js +6 -13
  154. package/packages/dd-trace/src/appsec/iast/security-controls/parser.js +6 -6
  155. package/packages/dd-trace/src/appsec/iast/taint-tracking/filter.js +2 -2
  156. package/packages/dd-trace/src/appsec/iast/taint-tracking/operations-taint-object.js +3 -3
  157. package/packages/dd-trace/src/appsec/iast/taint-tracking/operations.js +4 -28
  158. package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +1 -7
  159. package/packages/dd-trace/src/appsec/iast/taint-tracking/plugins/kafka.js +3 -4
  160. package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter-esm.mjs +1 -1
  161. package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +5 -7
  162. package/packages/dd-trace/src/appsec/iast/taint-tracking/taint-tracking-impl.js +2 -2
  163. package/packages/dd-trace/src/appsec/iast/telemetry/span-tags.js +6 -6
  164. package/packages/dd-trace/src/appsec/iast/telemetry/verbosity.js +1 -1
  165. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/command-sensitive-analyzer.js +1 -1
  166. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/ldap-sensitive-analyzer.js +1 -1
  167. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/sql-sensitive-analyzer.js +7 -7
  168. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-handler.js +23 -24
  169. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-regex.js +3 -3
  170. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/index.js +4 -4
  171. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/utils.js +6 -11
  172. package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +9 -11
  173. package/packages/dd-trace/src/appsec/index.js +15 -12
  174. package/packages/dd-trace/src/appsec/rasp/index.js +19 -17
  175. package/packages/dd-trace/src/appsec/rasp/lfi.js +2 -1
  176. package/packages/dd-trace/src/appsec/rasp/utils.js +11 -6
  177. package/packages/dd-trace/src/appsec/reporter.js +233 -40
  178. package/packages/dd-trace/src/appsec/rule_manager.js +2 -2
  179. package/packages/dd-trace/src/appsec/sdk/user_blocking.js +2 -2
  180. package/packages/dd-trace/src/appsec/stack_trace.js +2 -4
  181. package/packages/dd-trace/src/appsec/telemetry/index.js +1 -2
  182. package/packages/dd-trace/src/appsec/telemetry/rasp.js +3 -14
  183. package/packages/dd-trace/src/appsec/telemetry/waf.js +3 -5
  184. package/packages/dd-trace/src/appsec/user_tracking.js +3 -5
  185. package/packages/dd-trace/src/appsec/waf/waf_context_wrapper.js +8 -8
  186. package/packages/dd-trace/src/azure_metadata.js +2 -7
  187. package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/index.js +1 -1
  188. package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/worker/index.js +2 -2
  189. package/packages/dd-trace/src/ci-visibility/early-flake-detection/get-known-tests.js +1 -1
  190. package/packages/dd-trace/src/ci-visibility/exporters/agent-proxy/index.js +3 -3
  191. package/packages/dd-trace/src/ci-visibility/exporters/agentless/coverage-writer.js +1 -1
  192. package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +1 -1
  193. package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +1 -1
  194. package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +6 -4
  195. package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +2 -2
  196. package/packages/dd-trace/src/ci-visibility/exporters/test-worker/writer.js +0 -2
  197. package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +1 -1
  198. package/packages/dd-trace/src/ci-visibility/log-submission/log-submission-plugin.js +1 -1
  199. package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +8 -5
  200. package/packages/dd-trace/src/ci-visibility/telemetry.js +4 -0
  201. package/packages/dd-trace/src/ci-visibility/test-management/get-test-management-tests.js +1 -1
  202. package/packages/dd-trace/src/config.js +82 -51
  203. package/packages/dd-trace/src/config_stable.js +3 -3
  204. package/packages/dd-trace/src/datastreams/encoding.js +9 -9
  205. package/packages/dd-trace/src/datastreams/fnv.js +1 -1
  206. package/packages/dd-trace/src/datastreams/pathway.js +4 -4
  207. package/packages/dd-trace/src/datastreams/processor.js +5 -7
  208. package/packages/dd-trace/src/datastreams/schemas/schema_builder.js +1 -1
  209. package/packages/dd-trace/src/datastreams/schemas/schema_sampler.js +4 -6
  210. package/packages/dd-trace/src/datastreams/size.js +1 -1
  211. package/packages/dd-trace/src/debugger/devtools_client/breakpoints.js +131 -72
  212. package/packages/dd-trace/src/debugger/devtools_client/condition.js +6 -8
  213. package/packages/dd-trace/src/debugger/devtools_client/defaults.js +1 -1
  214. package/packages/dd-trace/src/debugger/devtools_client/index.js +17 -27
  215. package/packages/dd-trace/src/debugger/devtools_client/remote_config.js +18 -38
  216. package/packages/dd-trace/src/debugger/devtools_client/send.js +8 -7
  217. package/packages/dd-trace/src/debugger/devtools_client/snapshot/index.js +16 -8
  218. package/packages/dd-trace/src/debugger/devtools_client/snapshot/processor.js +8 -10
  219. package/packages/dd-trace/src/debugger/devtools_client/snapshot/redaction.js +3 -3
  220. package/packages/dd-trace/src/debugger/devtools_client/source-maps.js +2 -10
  221. package/packages/dd-trace/src/debugger/devtools_client/state.js +31 -4
  222. package/packages/dd-trace/src/dogstatsd.js +7 -4
  223. package/packages/dd-trace/src/encode/0.4.js +9 -9
  224. package/packages/dd-trace/src/encode/0.5.js +1 -1
  225. package/packages/dd-trace/src/encode/agentless-ci-visibility.js +3 -3
  226. package/packages/dd-trace/src/encode/coverage-ci-visibility.js +1 -1
  227. package/packages/dd-trace/src/encode/tags-processors.js +1 -1
  228. package/packages/dd-trace/src/exporter.js +6 -6
  229. package/packages/dd-trace/src/exporters/agent/writer.js +1 -5
  230. package/packages/dd-trace/src/exporters/common/docker.js +1 -1
  231. package/packages/dd-trace/src/exporters/common/form-data.js +6 -4
  232. package/packages/dd-trace/src/exporters/common/request.js +1 -1
  233. package/packages/dd-trace/src/exporters/common/util.js +1 -1
  234. package/packages/dd-trace/src/external-logger/src/index.js +5 -5
  235. package/packages/dd-trace/src/flare/file.js +1 -5
  236. package/packages/dd-trace/src/format.js +1 -1
  237. package/packages/dd-trace/src/git_properties.js +1 -1
  238. package/packages/dd-trace/src/id.js +12 -6
  239. package/packages/dd-trace/src/iitm.js +10 -22
  240. package/packages/dd-trace/src/lambda/handler.js +6 -6
  241. package/packages/dd-trace/src/lambda/runtime/patch.js +4 -4
  242. package/packages/dd-trace/src/lambda/runtime/ritm.js +1 -1
  243. package/packages/dd-trace/src/llmobs/plugins/bedrockruntime.js +6 -6
  244. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chain.js +2 -6
  245. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chat_model.js +3 -3
  246. package/packages/dd-trace/src/llmobs/plugins/langchain/index.js +6 -6
  247. package/packages/dd-trace/src/llmobs/plugins/openai.js +1 -1
  248. package/packages/dd-trace/src/llmobs/sdk.js +2 -2
  249. package/packages/dd-trace/src/llmobs/tagger.js +113 -99
  250. package/packages/dd-trace/src/llmobs/util.js +9 -9
  251. package/packages/dd-trace/src/llmobs/writers/base.js +1 -1
  252. package/packages/dd-trace/src/llmobs/writers/util.js +1 -1
  253. package/packages/dd-trace/src/log/index.js +4 -4
  254. package/packages/dd-trace/src/log/log.js +1 -1
  255. package/packages/dd-trace/src/log/writer.js +2 -2
  256. package/packages/dd-trace/src/msgpack/chunk.js +3 -3
  257. package/packages/dd-trace/src/msgpack/encoder.js +28 -28
  258. package/packages/dd-trace/src/noop/dogstatsd.js +6 -6
  259. package/packages/dd-trace/src/noop/span.js +3 -5
  260. package/packages/dd-trace/src/noop/tracer.js +1 -2
  261. package/packages/dd-trace/src/opentelemetry/span_processor.js +2 -2
  262. package/packages/dd-trace/src/opentelemetry/tracer.js +6 -5
  263. package/packages/dd-trace/src/opentracing/propagation/log.js +6 -8
  264. package/packages/dd-trace/src/opentracing/propagation/text_map.js +27 -23
  265. package/packages/dd-trace/src/opentracing/propagation/tracestate.js +8 -4
  266. package/packages/dd-trace/src/opentracing/span.js +9 -14
  267. package/packages/dd-trace/src/opentracing/tracer.js +9 -6
  268. package/packages/dd-trace/src/payload-tagging/index.js +1 -1
  269. package/packages/dd-trace/src/payload-tagging/tagging.js +6 -6
  270. package/packages/dd-trace/src/pkg.js +1 -1
  271. package/packages/dd-trace/src/plugins/ci_plugin.js +62 -10
  272. package/packages/dd-trace/src/plugins/consumer.js +2 -2
  273. package/packages/dd-trace/src/plugins/inbound.js +5 -1
  274. package/packages/dd-trace/src/plugins/index.js +1 -1
  275. package/packages/dd-trace/src/plugins/outbound.js +4 -5
  276. package/packages/dd-trace/src/plugins/plugin.js +1 -1
  277. package/packages/dd-trace/src/plugins/producer.js +2 -2
  278. package/packages/dd-trace/src/plugins/storage.js +2 -2
  279. package/packages/dd-trace/src/plugins/util/ci.js +23 -15
  280. package/packages/dd-trace/src/plugins/util/git.js +165 -11
  281. package/packages/dd-trace/src/plugins/util/inferred_proxy.js +1 -1
  282. package/packages/dd-trace/src/plugins/util/ip_extractor.js +1 -1
  283. package/packages/dd-trace/src/plugins/util/llm.js +27 -10
  284. package/packages/dd-trace/src/plugins/util/stacktrace.js +1 -1
  285. package/packages/dd-trace/src/plugins/util/test.js +311 -48
  286. package/packages/dd-trace/src/plugins/util/url.js +1 -1
  287. package/packages/dd-trace/src/plugins/util/urlfilter.js +13 -17
  288. package/packages/dd-trace/src/plugins/util/user-provided-git.js +12 -3
  289. package/packages/dd-trace/src/plugins/util/web.js +5 -4
  290. package/packages/dd-trace/src/priority_sampler.js +22 -22
  291. package/packages/dd-trace/src/profiling/config.js +44 -8
  292. package/packages/dd-trace/src/profiling/exporters/event_serializer.js +5 -5
  293. package/packages/dd-trace/src/profiling/exporters/file.js +2 -1
  294. package/packages/dd-trace/src/profiling/profiler.js +37 -2
  295. package/packages/dd-trace/src/profiling/profilers/events.js +14 -17
  296. package/packages/dd-trace/src/profiling/profilers/shared.js +6 -1
  297. package/packages/dd-trace/src/profiling/profilers/space.js +3 -3
  298. package/packages/dd-trace/src/profiling/profilers/wall.js +6 -7
  299. package/packages/dd-trace/src/profiling/ssi-heuristics.js +3 -5
  300. package/packages/dd-trace/src/profiling/tagger.js +3 -5
  301. package/packages/dd-trace/src/profiling/webspan-utils.js +1 -1
  302. package/packages/dd-trace/src/proxy.js +7 -13
  303. package/packages/dd-trace/src/random_sampler.js +40 -0
  304. package/packages/dd-trace/src/rate_limiter.js +4 -4
  305. package/packages/dd-trace/src/remote_config/index.js +3 -7
  306. package/packages/dd-trace/src/remote_config/manager.js +25 -13
  307. package/packages/dd-trace/src/require-package-json.js +1 -1
  308. package/packages/dd-trace/src/ritm.js +4 -4
  309. package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +2 -2
  310. package/packages/dd-trace/src/sampler.js +33 -4
  311. package/packages/dd-trace/src/sampling_rule.js +12 -3
  312. package/packages/dd-trace/src/scope.js +1 -1
  313. package/packages/dd-trace/src/serverless.js +0 -48
  314. package/packages/dd-trace/src/service-naming/schemas/util.js +1 -1
  315. package/packages/dd-trace/src/service-naming/schemas/v0/storage.js +8 -0
  316. package/packages/dd-trace/src/service-naming/schemas/v0/web.js +2 -3
  317. package/packages/dd-trace/src/service-naming/schemas/v1/storage.js +4 -0
  318. package/packages/dd-trace/src/span_processor.js +3 -3
  319. package/packages/dd-trace/src/span_sampler.js +4 -1
  320. package/packages/dd-trace/src/standalone/tracesource.js +1 -1
  321. package/packages/dd-trace/src/startup-log.js +2 -2
  322. package/packages/dd-trace/src/telemetry/dependencies.js +4 -4
  323. package/packages/dd-trace/src/telemetry/logs/log-collector.js +9 -10
  324. package/packages/dd-trace/src/telemetry/metrics.js +10 -5
  325. package/packages/dd-trace/src/telemetry/send-data.js +1 -1
  326. package/packages/dd-trace/src/telemetry/telemetry.js +23 -24
  327. package/packages/dd-trace/src/util.js +1 -1
  328. package/version.js +1 -0
  329. package/packages/datadog-instrumentations/src/paperplane.js +0 -77
  330. package/packages/datadog-plugin-paperplane/src/index.js +0 -25
  331. package/packages/datadog-plugin-paperplane/src/logger.js +0 -11
  332. package/packages/datadog-plugin-paperplane/src/server.js +0 -24
@@ -2,11 +2,12 @@
2
2
 
3
3
  const {
4
4
  channel,
5
- addHook,
6
- AsyncResource
5
+ addHook
7
6
  } = require('./helpers/instrument')
8
7
  const shimmer = require('../../datadog-shimmer')
9
8
 
9
+ const log = require('../../dd-trace/src/log')
10
+
10
11
  const producerStartCh = channel('apm:kafkajs:produce:start')
11
12
  const producerCommitCh = channel('apm:kafkajs:produce:commit')
12
13
  const producerFinishCh = channel('apm:kafkajs:produce:finish')
@@ -21,6 +22,8 @@ const batchConsumerStartCh = channel('apm:kafkajs:consume-batch:start')
21
22
  const batchConsumerFinishCh = channel('apm:kafkajs:consume-batch:finish')
22
23
  const batchConsumerErrorCh = channel('apm:kafkajs:consume-batch:error')
23
24
 
25
+ const disabledHeaderWeakSet = new WeakSet()
26
+
24
27
  function commitsFromEvent (event) {
25
28
  const { payload: { groupId, topics } } = event
26
29
  const commitList = []
@@ -56,55 +59,68 @@ addHook({ name: 'kafkajs', file: 'src/index.js', versions: ['>=1.4'] }, (BaseKaf
56
59
 
57
60
  producer.send = function () {
58
61
  const wrappedSend = (clusterId) => {
59
- const innerAsyncResource = new AsyncResource('bound-anonymous-fn')
62
+ const { topic, messages = [] } = arguments[0]
63
+
64
+ const ctx = {
65
+ bootstrapServers,
66
+ clusterId,
67
+ disableHeaderInjection: disabledHeaderWeakSet.has(producer),
68
+ messages,
69
+ topic
70
+ }
60
71
 
61
- return innerAsyncResource.runInAsyncScope(() => {
62
- if (!producerStartCh.hasSubscribers) {
63
- return send.apply(this, arguments)
72
+ for (const message of messages) {
73
+ if (message !== null && typeof message === 'object' && !ctx.disableHeaderInjection) {
74
+ message.headers = message.headers || {}
64
75
  }
76
+ }
65
77
 
78
+ return producerStartCh.runStores(ctx, () => {
66
79
  try {
67
- const { topic, messages = [] } = arguments[0]
68
- for (const message of messages) {
69
- if (message !== null && typeof message === 'object') {
70
- message.headers = message.headers || {}
71
- }
72
- }
73
- producerStartCh.publish({ topic, messages, bootstrapServers, clusterId })
74
-
75
80
  const result = send.apply(this, arguments)
76
-
77
81
  result.then(
78
- innerAsyncResource.bind(res => {
79
- producerFinishCh.publish(undefined)
80
- producerCommitCh.publish(res)
81
- }),
82
- innerAsyncResource.bind(err => {
82
+ (res) => {
83
+ ctx.result = res
84
+ producerFinishCh.publish(ctx)
85
+ producerCommitCh.publish(ctx)
86
+ },
87
+ (err) => {
88
+ ctx.error = err
83
89
  if (err) {
90
+ // Fixes bug where we would inject message headers for kafka brokers that don't support headers
91
+ // (version <0.11). On the error, we disable header injection.
92
+ // Unfortunately the error name / type is not more specific.
93
+ // This approach is implemented by other tracers as well.
94
+ if (err.name === 'KafkaJSProtocolError' && err.type === 'UNKNOWN') {
95
+ disabledHeaderWeakSet.add(producer)
96
+ log.error('Kafka Broker responded with UNKNOWN_SERVER_ERROR (-1). ' +
97
+ 'Please look at broker logs for more information. ' +
98
+ 'Tracer message header injection for Kafka is disabled.')
99
+ }
84
100
  producerErrorCh.publish(err)
85
101
  }
86
- producerFinishCh.publish(undefined)
102
+ producerFinishCh.publish(ctx)
87
103
  })
88
- )
89
104
 
90
105
  return result
91
106
  } catch (e) {
92
- producerErrorCh.publish(e)
93
- producerFinishCh.publish(undefined)
107
+ ctx.error = e
108
+ producerErrorCh.publish(ctx)
109
+ producerFinishCh.publish(ctx)
94
110
  throw e
95
111
  }
96
112
  })
97
113
  }
98
114
 
99
- if (!isPromise(kafkaClusterIdPromise)) {
100
- // promise is already resolved
101
- return wrappedSend(kafkaClusterIdPromise)
102
- } else {
115
+ if (isPromise(kafkaClusterIdPromise)) {
103
116
  // promise is not resolved
104
117
  return kafkaClusterIdPromise.then((clusterId) => {
105
118
  return wrappedSend(clusterId)
106
119
  })
107
120
  }
121
+
122
+ // promise is already resolved
123
+ return wrappedSend(kafkaClusterIdPromise)
108
124
  }
109
125
  return producer
110
126
  })
@@ -157,15 +173,15 @@ addHook({ name: 'kafkajs', file: 'src/index.js', versions: ['>=1.4'] }, (BaseKaf
157
173
  })
158
174
  }
159
175
 
160
- if (!isPromise(kafkaClusterIdPromise)) {
161
- // promise is already resolved
162
- return wrapConsume(kafkaClusterIdPromise)
163
- } else {
176
+ if (isPromise(kafkaClusterIdPromise)) {
164
177
  // promise is not resolved
165
178
  return kafkaClusterIdPromise.then((clusterId) => {
166
179
  return wrapConsume(clusterId)
167
180
  })
168
181
  }
182
+
183
+ // promise is already resolved
184
+ return wrapConsume(kafkaClusterIdPromise)
169
185
  }
170
186
  return consumer
171
187
  })
@@ -175,30 +191,35 @@ addHook({ name: 'kafkajs', file: 'src/index.js', versions: ['>=1.4'] }, (BaseKaf
175
191
  const wrappedCallback = (fn, startCh, finishCh, errorCh, extractArgs, clusterId) => {
176
192
  return typeof fn === 'function'
177
193
  ? function (...args) {
178
- const innerAsyncResource = new AsyncResource('bound-anonymous-fn')
179
- return innerAsyncResource.runInAsyncScope(() => {
180
- const extractedArgs = extractArgs(args, clusterId)
194
+ const extractedArgs = extractArgs(args, clusterId)
195
+ const ctx = {
196
+ extractedArgs
197
+ }
181
198
 
182
- startCh.publish(extractedArgs)
199
+ return startCh.runStores(ctx, () => {
183
200
  try {
184
201
  const result = fn.apply(this, args)
185
202
  if (result && typeof result.then === 'function') {
186
203
  result.then(
187
- innerAsyncResource.bind(() => finishCh.publish(undefined)),
188
- innerAsyncResource.bind(err => {
204
+ (res) => {
205
+ ctx.result = res
206
+ finishCh.publish(ctx)
207
+ },
208
+ (err) => {
209
+ ctx.error = err
189
210
  if (err) {
190
- errorCh.publish(err)
211
+ errorCh.publish(ctx)
191
212
  }
192
- finishCh.publish(undefined)
213
+ finishCh.publish(ctx)
193
214
  })
194
- )
195
215
  } else {
196
- finishCh.publish(undefined)
216
+ finishCh.publish(ctx)
197
217
  }
198
218
  return result
199
219
  } catch (e) {
200
- errorCh.publish(e)
201
- finishCh.publish(undefined)
220
+ ctx.error = e
221
+ errorCh.publish(ctx)
222
+ finishCh.publish(ctx)
202
223
  throw e
203
224
  }
204
225
  })
@@ -22,6 +22,10 @@ function patch (file) {
22
22
  })
23
23
  }
24
24
 
25
+ function finish () {
26
+ finishRawQueryCh.publish()
27
+ }
28
+
25
29
  addHook({
26
30
  name: 'knex',
27
31
  versions: ['>=2'],
@@ -41,10 +45,6 @@ addHook({
41
45
 
42
46
  const asyncResource = new AsyncResource('bound-anonymous-fn')
43
47
 
44
- function finish () {
45
- finishRawQueryCh.publish()
46
- }
47
-
48
48
  return asyncResource.runInAsyncScope(() => {
49
49
  startRawQueryCh.publish({ sql, dialect: this.dialect })
50
50
 
@@ -8,6 +8,7 @@ const {
8
8
  const shimmer = require('../../datadog-shimmer')
9
9
 
10
10
  function isString (value) {
11
+ // eslint-disable-next-line unicorn/no-instanceof-builtins
11
12
  return typeof value === 'string' || value instanceof String
12
13
  }
13
14
 
@@ -61,10 +62,8 @@ addHook({ name: 'ldapjs', versions: ['>=2'] }, ldapjs => {
61
62
  let filter
62
63
  if (isString(options)) {
63
64
  filter = options
64
- } else if (options !== null && typeof options === 'object' && options.filter) {
65
- if (isString(options.filter)) {
66
- filter = options.filter
67
- }
65
+ } else if (options !== null && typeof options === 'object' && options.filter && isString(options.filter)) {
66
+ filter = options.filter
68
67
  }
69
68
  ldapSearchCh.publish({ base, filter })
70
69
  }
@@ -4,46 +4,34 @@ const { channel, addHook, AsyncResource } = require('./helpers/instrument')
4
4
 
5
5
  const shimmer = require('../../datadog-shimmer')
6
6
 
7
+ const commandAddCh = channel('apm:mariadb:command:add')
7
8
  const startCh = channel('apm:mariadb:query:start')
8
9
  const finishCh = channel('apm:mariadb:query:finish')
9
10
  const errorCh = channel('apm:mariadb:query:error')
10
11
  const skipCh = channel('apm:mariadb:pool:skip')
11
- const unskipCh = channel('apm:mariadb:pool:unskip')
12
12
 
13
- function wrapCommandStart (start, callbackResource) {
13
+ function wrapCommandStart (start, ctx) {
14
14
  return shimmer.wrapFunction(start, start => function () {
15
15
  if (!startCh.hasSubscribers) return start.apply(this, arguments)
16
16
 
17
- const resolve = callbackResource.bind(this.resolve)
18
- const reject = callbackResource.bind(this.reject)
19
-
20
- const asyncResource = callbackResource.runInAsyncScope(() => new AsyncResource('bound-anonymous-fn'))
21
-
17
+ const { reject, resolve } = this
22
18
  shimmer.wrap(this, 'resolve', function wrapResolve () {
23
19
  return function () {
24
- asyncResource.runInAsyncScope(() => {
25
- finishCh.publish()
26
- })
27
-
28
- return resolve.apply(this, arguments)
20
+ return finishCh.runStores(ctx, resolve, this, ...arguments)
29
21
  }
30
22
  })
31
23
 
32
24
  shimmer.wrap(this, 'reject', function wrapReject () {
33
25
  return function (error) {
34
- asyncResource.runInAsyncScope(() => {
35
- errorCh.publish(error)
36
- finishCh.publish()
37
- })
26
+ ctx.error = error
27
+
28
+ errorCh.publish(ctx)
38
29
 
39
- return reject.apply(this, arguments)
30
+ return finishCh.runStores(ctx, reject, this, ...arguments)
40
31
  }
41
32
  })
42
33
 
43
- return asyncResource.runInAsyncScope(() => {
44
- startCh.publish({ sql: this.sql, conf: this.opts })
45
- return start.apply(this, arguments)
46
- })
34
+ return startCh.runStores(ctx, start, this, ...arguments)
47
35
  })
48
36
  }
49
37
 
@@ -52,11 +40,13 @@ function wrapCommand (Command) {
52
40
  constructor (...args) {
53
41
  super(...args)
54
42
 
55
- const callbackResource = new AsyncResource('bound-anonymous-fn')
43
+ if (!this.start) return
56
44
 
57
- if (this.start) {
58
- this.start = wrapCommandStart(this.start, callbackResource)
59
- }
45
+ const ctx = { sql: this.sql, conf: this.opts }
46
+
47
+ commandAddCh.publish(ctx)
48
+
49
+ this.start = wrapCommandStart(this.start, ctx)
60
50
  }
61
51
  }
62
52
  }
@@ -66,21 +56,19 @@ function createWrapQuery (options) {
66
56
  return function (sql) {
67
57
  if (!startCh.hasSubscribers) return query.apply(this, arguments)
68
58
 
69
- const asyncResource = new AsyncResource('bound-anonymous-fn')
70
-
71
- return asyncResource.runInAsyncScope(() => {
72
- startCh.publish({ sql, conf: options })
73
-
74
- return query.apply(this, arguments)
75
- .then(result => {
76
- finishCh.publish()
77
- return result
78
- }, error => {
79
- errorCh.publish(error)
80
- finishCh.publish()
81
- throw error
82
- })
83
- }, 'bound-anonymous-fn')
59
+ const ctx = { sql, conf: options }
60
+
61
+ return startCh.runStores(ctx, query, this, ...arguments)
62
+ .then(result => {
63
+ ctx.result = result
64
+ finishCh.publish(ctx)
65
+ return result
66
+ }, error => {
67
+ ctx.error
68
+ errorCh.publish(ctx)
69
+ finishCh.publish(ctx)
70
+ throw error
71
+ })
84
72
  }
85
73
  }
86
74
  }
@@ -91,30 +79,24 @@ function createWrapQueryCallback (options) {
91
79
  if (!startCh.hasSubscribers) return query.apply(this, arguments)
92
80
 
93
81
  const cb = arguments[arguments.length - 1]
94
- const asyncResource = new AsyncResource('bound-anonymous-fn')
95
- const callbackResource = new AsyncResource('bound-anonymous-fn')
82
+ const ctx = { sql, conf: options }
96
83
 
97
84
  if (typeof cb !== 'function') {
98
85
  arguments.length = arguments.length + 1
99
86
  }
100
87
 
101
- arguments[arguments.length - 1] = shimmer.wrapFunction(cb, cb => asyncResource.bind(function (err) {
88
+ arguments[arguments.length - 1] = shimmer.wrapFunction(cb, cb => function (err) {
102
89
  if (err) {
103
- errorCh.publish(err)
90
+ ctx.error = err
91
+ errorCh.publish(ctx)
104
92
  }
105
93
 
106
- finishCh.publish()
94
+ return typeof cb === 'function'
95
+ ? finishCh.runStores(ctx, cb, this, ...arguments)
96
+ : finishCh.publish(ctx)
97
+ })
107
98
 
108
- if (typeof cb === 'function') {
109
- return callbackResource.runInAsyncScope(() => cb.apply(this, arguments))
110
- }
111
- }))
112
-
113
- return asyncResource.runInAsyncScope(() => {
114
- startCh.publish({ sql, conf: options })
115
-
116
- return query.apply(this, arguments)
117
- }, 'bound-anonymous-fn')
99
+ return startCh.runStores(ctx, query, this, ...arguments)
118
100
  }
119
101
  }
120
102
  }
@@ -144,12 +126,7 @@ function wrapPoolBase (PoolBase) {
144
126
  // and/or orphan spans.
145
127
  function wrapPoolMethod (createConnection) {
146
128
  return function () {
147
- skipCh.publish()
148
- try {
149
- return createConnection.apply(this, arguments)
150
- } finally {
151
- unskipCh.publish()
152
- }
129
+ return skipCh.runStores({}, createConnection, this, ...arguments)
153
130
  }
154
131
  }
155
132