dd-trace 5.81.0 → 5.82.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 (321) hide show
  1. package/index.d.ts +7 -0
  2. package/loader-hook.mjs +7 -2
  3. package/package.json +13 -18
  4. package/packages/datadog-core/src/utils/src/parse-tags.js +1 -1
  5. package/packages/datadog-esbuild/index.js +8 -7
  6. package/packages/datadog-esbuild/src/utils.js +14 -2
  7. package/packages/datadog-instrumentations/src/aerospike.js +3 -2
  8. package/packages/datadog-instrumentations/src/ai.js +2 -2
  9. package/packages/datadog-instrumentations/src/amqp10.js +1 -1
  10. package/packages/datadog-instrumentations/src/amqplib.js +4 -4
  11. package/packages/datadog-instrumentations/src/anthropic.js +2 -2
  12. package/packages/datadog-instrumentations/src/apollo-server-core.js +2 -2
  13. package/packages/datadog-instrumentations/src/apollo-server.js +1 -1
  14. package/packages/datadog-instrumentations/src/apollo.js +3 -2
  15. package/packages/datadog-instrumentations/src/avsc.js +1 -1
  16. package/packages/datadog-instrumentations/src/aws-sdk.js +1 -1
  17. package/packages/datadog-instrumentations/src/azure-event-hubs.js +4 -3
  18. package/packages/datadog-instrumentations/src/azure-functions.js +2 -2
  19. package/packages/datadog-instrumentations/src/azure-service-bus.js +3 -4
  20. package/packages/datadog-instrumentations/src/bluebird.js +1 -1
  21. package/packages/datadog-instrumentations/src/bullmq.js +11 -0
  22. package/packages/datadog-instrumentations/src/bunyan.js +1 -1
  23. package/packages/datadog-instrumentations/src/cassandra-driver.js +1 -1
  24. package/packages/datadog-instrumentations/src/child_process.js +2 -2
  25. package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +3 -3
  26. package/packages/datadog-instrumentations/src/couchbase.js +1 -1
  27. package/packages/datadog-instrumentations/src/crypto.js +1 -1
  28. package/packages/datadog-instrumentations/src/cucumber.js +12 -13
  29. package/packages/datadog-instrumentations/src/cypress.js +1 -1
  30. package/packages/datadog-instrumentations/src/dns.js +1 -1
  31. package/packages/datadog-instrumentations/src/elasticsearch.js +1 -1
  32. package/packages/datadog-instrumentations/src/express-mongo-sanitize.js +1 -1
  33. package/packages/datadog-instrumentations/src/express.js +1 -1
  34. package/packages/datadog-instrumentations/src/fs.js +1 -1
  35. package/packages/datadog-instrumentations/src/generic-pool.js +1 -1
  36. package/packages/datadog-instrumentations/src/google-cloud-pubsub.js +137 -15
  37. package/packages/datadog-instrumentations/src/google-cloud-vertexai.js +2 -3
  38. package/packages/datadog-instrumentations/src/google-genai.js +3 -3
  39. package/packages/datadog-instrumentations/src/graphql.js +1 -1
  40. package/packages/datadog-instrumentations/src/grpc/client.js +1 -1
  41. package/packages/datadog-instrumentations/src/grpc/server.js +1 -1
  42. package/packages/datadog-instrumentations/src/helpers/bundler-register.js +1 -1
  43. package/packages/datadog-instrumentations/src/helpers/hook.js +1 -1
  44. package/packages/datadog-instrumentations/src/helpers/hooks.js +4 -1
  45. package/packages/datadog-instrumentations/src/helpers/instrument.js +1 -1
  46. package/packages/datadog-instrumentations/src/helpers/register.js +6 -4
  47. package/packages/datadog-instrumentations/src/helpers/rewriter/index.js +2 -2
  48. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/bullmq.json +106 -0
  49. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/index.js +2 -1
  50. package/packages/datadog-instrumentations/src/helpers/router-helper.js +1 -1
  51. package/packages/datadog-instrumentations/src/helpers/shared-utils.js +9 -0
  52. package/packages/datadog-instrumentations/src/hono.js +55 -10
  53. package/packages/datadog-instrumentations/src/ioredis.js +1 -1
  54. package/packages/datadog-instrumentations/src/iovalkey.js +1 -1
  55. package/packages/datadog-instrumentations/src/jest.js +2 -2
  56. package/packages/datadog-instrumentations/src/kafkajs.js +3 -3
  57. package/packages/datadog-instrumentations/src/knex.js +1 -1
  58. package/packages/datadog-instrumentations/src/ldapjs.js +1 -1
  59. package/packages/datadog-instrumentations/src/light-my-request.js +93 -0
  60. package/packages/datadog-instrumentations/src/limitd-client.js +1 -1
  61. package/packages/datadog-instrumentations/src/lodash.js +1 -2
  62. package/packages/datadog-instrumentations/src/mariadb.js +1 -2
  63. package/packages/datadog-instrumentations/src/memcached.js +1 -1
  64. package/packages/datadog-instrumentations/src/mongodb-core.js +1 -1
  65. package/packages/datadog-instrumentations/src/mongodb.js +1 -1
  66. package/packages/datadog-instrumentations/src/mongoose.js +1 -1
  67. package/packages/datadog-instrumentations/src/mquery.js +1 -1
  68. package/packages/datadog-instrumentations/src/mysql.js +1 -1
  69. package/packages/datadog-instrumentations/src/mysql2.js +1 -1
  70. package/packages/datadog-instrumentations/src/net.js +1 -1
  71. package/packages/datadog-instrumentations/src/next.js +1 -1
  72. package/packages/datadog-instrumentations/src/nyc.js +1 -1
  73. package/packages/datadog-instrumentations/src/openai.js +2 -2
  74. package/packages/datadog-instrumentations/src/opensearch.js +1 -1
  75. package/packages/datadog-instrumentations/src/oracledb.js +1 -1
  76. package/packages/datadog-instrumentations/src/otel-sdk-trace.js +1 -1
  77. package/packages/datadog-instrumentations/src/pg.js +3 -3
  78. package/packages/datadog-instrumentations/src/pino.js +1 -1
  79. package/packages/datadog-instrumentations/src/playwright.js +1 -1
  80. package/packages/datadog-instrumentations/src/prisma.js +52 -37
  81. package/packages/datadog-instrumentations/src/process.js +1 -1
  82. package/packages/datadog-instrumentations/src/promise-js.js +1 -1
  83. package/packages/datadog-instrumentations/src/promise.js +1 -1
  84. package/packages/datadog-instrumentations/src/protobufjs.js +1 -1
  85. package/packages/datadog-instrumentations/src/q.js +1 -1
  86. package/packages/datadog-instrumentations/src/redis.js +1 -1
  87. package/packages/datadog-instrumentations/src/rhea.js +1 -1
  88. package/packages/datadog-instrumentations/src/selenium.js +1 -1
  89. package/packages/datadog-instrumentations/src/sequelize.js +1 -2
  90. package/packages/datadog-instrumentations/src/sharedb.js +1 -1
  91. package/packages/datadog-instrumentations/src/tedious.js +1 -1
  92. package/packages/datadog-instrumentations/src/undici.js +4 -4
  93. package/packages/datadog-instrumentations/src/url.js +1 -1
  94. package/packages/datadog-instrumentations/src/vitest.js +1 -1
  95. package/packages/datadog-instrumentations/src/vm.js +1 -1
  96. package/packages/datadog-instrumentations/src/when.js +1 -1
  97. package/packages/datadog-instrumentations/src/winston.js +1 -1
  98. package/packages/datadog-instrumentations/src/ws.js +3 -2
  99. package/packages/datadog-plugin-amqp10/src/index.js +1 -1
  100. package/packages/datadog-plugin-amqplib/src/index.js +1 -1
  101. package/packages/datadog-plugin-anthropic/src/index.js +1 -1
  102. package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/index.js +1 -1
  103. package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +4 -4
  104. package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +2 -2
  105. package/packages/datadog-plugin-aws-sdk/src/util.js +3 -3
  106. package/packages/datadog-plugin-azure-event-hubs/src/index.js +1 -1
  107. package/packages/datadog-plugin-azure-event-hubs/src/producer.js +19 -5
  108. package/packages/datadog-plugin-azure-service-bus/src/index.js +1 -1
  109. package/packages/datadog-plugin-azure-service-bus/src/producer.js +4 -0
  110. package/packages/datadog-plugin-bullmq/src/consumer.js +60 -0
  111. package/packages/datadog-plugin-bullmq/src/index.js +18 -0
  112. package/packages/datadog-plugin-bullmq/src/producer.js +178 -0
  113. package/packages/datadog-plugin-confluentinc-kafka-javascript/src/index.js +1 -1
  114. package/packages/datadog-plugin-cypress/src/plugin.js +1 -1
  115. package/packages/datadog-plugin-express/src/index.js +1 -1
  116. package/packages/datadog-plugin-fastify/src/index.js +1 -1
  117. package/packages/datadog-plugin-google-cloud-pubsub/src/client.js +13 -3
  118. package/packages/datadog-plugin-google-cloud-pubsub/src/consumer.js +171 -12
  119. package/packages/datadog-plugin-google-cloud-pubsub/src/index.js +1 -2
  120. package/packages/datadog-plugin-google-cloud-pubsub/src/producer.js +160 -13
  121. package/packages/datadog-plugin-google-cloud-pubsub/src/pubsub-push-subscription.js +217 -0
  122. package/packages/datadog-plugin-google-cloud-vertexai/src/index.js +1 -1
  123. package/packages/datadog-plugin-google-genai/src/index.js +1 -1
  124. package/packages/datadog-plugin-graphql/src/resolve.js +1 -1
  125. package/packages/datadog-plugin-grpc/src/index.js +1 -1
  126. package/packages/datadog-plugin-http/src/client.js +2 -1
  127. package/packages/datadog-plugin-http/src/index.js +25 -5
  128. package/packages/datadog-plugin-http2/src/client.js +2 -2
  129. package/packages/datadog-plugin-http2/src/index.js +1 -1
  130. package/packages/datadog-plugin-kafkajs/src/index.js +1 -1
  131. package/packages/datadog-plugin-langchain/src/index.js +1 -1
  132. package/packages/datadog-plugin-moleculer/src/index.js +1 -1
  133. package/packages/datadog-plugin-mongodb-core/src/index.js +6 -2
  134. package/packages/datadog-plugin-openai/src/index.js +1 -1
  135. package/packages/datadog-plugin-openai/src/stream-helpers.js +30 -10
  136. package/packages/datadog-plugin-openai/src/tracing.js +2 -2
  137. package/packages/datadog-plugin-rhea/src/index.js +1 -1
  138. package/packages/datadog-plugin-ws/src/close.js +56 -3
  139. package/packages/datadog-plugin-ws/src/index.js +4 -0
  140. package/packages/datadog-plugin-ws/src/producer.js +39 -4
  141. package/packages/datadog-plugin-ws/src/receiver.js +39 -3
  142. package/packages/datadog-plugin-ws/src/server.js +13 -1
  143. package/packages/datadog-plugin-ws/src/util.js +107 -0
  144. package/packages/datadog-shimmer/src/shimmer.js +2 -2
  145. package/packages/dd-trace/src/aiguard/sdk.js +3 -3
  146. package/packages/dd-trace/src/appsec/graphql.js +2 -2
  147. package/packages/dd-trace/src/appsec/iast/analyzers/code-injection-analyzer.js +1 -1
  148. package/packages/dd-trace/src/appsec/iast/analyzers/command-injection-analyzer.js +1 -1
  149. package/packages/dd-trace/src/appsec/iast/analyzers/cookie-analyzer.js +1 -1
  150. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-base-analyzer.js +1 -1
  151. package/packages/dd-trace/src/appsec/iast/analyzers/injection-analyzer.js +1 -1
  152. package/packages/dd-trace/src/appsec/iast/analyzers/ldap-injection-analyzer.js +1 -1
  153. package/packages/dd-trace/src/appsec/iast/analyzers/nosql-injection-mongodb-analyzer.js +3 -3
  154. package/packages/dd-trace/src/appsec/iast/analyzers/path-traversal-analyzer.js +1 -1
  155. package/packages/dd-trace/src/appsec/iast/analyzers/ssrf-analyzer.js +1 -1
  156. package/packages/dd-trace/src/appsec/iast/analyzers/untrusted-deserialization-analyzer.js +1 -1
  157. package/packages/dd-trace/src/appsec/iast/analyzers/unvalidated-redirect-analyzer.js +1 -1
  158. package/packages/dd-trace/src/appsec/iast/analyzers/weak-cipher-analyzer.js +1 -1
  159. package/packages/dd-trace/src/appsec/iast/analyzers/weak-hash-analyzer.js +3 -2
  160. package/packages/dd-trace/src/appsec/iast/analyzers/weak-randomness-analyzer.js +1 -1
  161. package/packages/dd-trace/src/appsec/iast/iast-plugin.js +3 -3
  162. package/packages/dd-trace/src/appsec/iast/index.js +5 -5
  163. package/packages/dd-trace/src/appsec/iast/security-controls/index.js +1 -1
  164. package/packages/dd-trace/src/appsec/iast/taint-tracking/index.js +1 -2
  165. package/packages/dd-trace/src/appsec/iast/taint-tracking/operations-taint-object.js +1 -1
  166. package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +1 -1
  167. package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +10 -14
  168. package/packages/dd-trace/src/appsec/iast/taint-tracking/taint-tracking-impl.js +1 -1
  169. package/packages/dd-trace/src/appsec/iast/telemetry/namespaces.js +1 -1
  170. package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +3 -3
  171. package/packages/dd-trace/src/appsec/index.js +8 -8
  172. package/packages/dd-trace/src/appsec/rasp/command_injection.js +1 -1
  173. package/packages/dd-trace/src/appsec/rasp/index.js +1 -1
  174. package/packages/dd-trace/src/appsec/rasp/lfi.js +1 -1
  175. package/packages/dd-trace/src/appsec/rc-products.js +10 -0
  176. package/packages/dd-trace/src/appsec/recommended.json +230 -3
  177. package/packages/dd-trace/src/appsec/remote_config.js +177 -0
  178. package/packages/dd-trace/src/appsec/reporter.js +3 -3
  179. package/packages/dd-trace/src/appsec/rule_manager.js +37 -20
  180. package/packages/dd-trace/src/appsec/sdk/index.js +1 -1
  181. package/packages/dd-trace/src/appsec/sdk/set_user.js +1 -1
  182. package/packages/dd-trace/src/appsec/sdk/track_event.js +2 -2
  183. package/packages/dd-trace/src/appsec/sdk/user_blocking.js +2 -2
  184. package/packages/dd-trace/src/appsec/user_tracking.js +2 -2
  185. package/packages/dd-trace/src/appsec/waf/index.js +17 -3
  186. package/packages/dd-trace/src/appsec/waf/waf_manager.js +11 -0
  187. package/packages/dd-trace/src/azure_metadata.js +8 -2
  188. package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/worker/index.js +6 -0
  189. package/packages/dd-trace/src/ci-visibility/exporters/agentless/index.js +2 -2
  190. package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +1 -1
  191. package/packages/dd-trace/src/ci-visibility/exporters/test-worker/index.js +1 -1
  192. package/packages/dd-trace/src/config/remote_config.js +34 -0
  193. package/packages/dd-trace/src/config.js +29 -28
  194. package/packages/dd-trace/src/config_defaults.js +2 -1
  195. package/packages/dd-trace/src/constants.js +5 -0
  196. package/packages/dd-trace/src/crashtracking/crashtracker.js +10 -1
  197. package/packages/dd-trace/src/datastreams/checkpointer.js +2 -2
  198. package/packages/dd-trace/src/datastreams/index.js +1 -1
  199. package/packages/dd-trace/src/datastreams/pathway.js +7 -7
  200. package/packages/dd-trace/src/datastreams/processor.js +2 -2
  201. package/packages/dd-trace/src/datastreams/writer.js +2 -2
  202. package/packages/dd-trace/src/debugger/config.js +1 -0
  203. package/packages/dd-trace/src/debugger/devtools_client/config.js +1 -1
  204. package/packages/dd-trace/src/debugger/devtools_client/index.js +7 -2
  205. package/packages/dd-trace/src/debugger/devtools_client/send.js +3 -3
  206. package/packages/dd-trace/src/debugger/devtools_client/session.js +1 -1
  207. package/packages/dd-trace/src/debugger/devtools_client/snapshot/collector.js +5 -5
  208. package/packages/dd-trace/src/debugger/devtools_client/snapshot/index.js +2 -2
  209. package/packages/dd-trace/src/debugger/devtools_client/state.js +1 -1
  210. package/packages/dd-trace/src/debugger/devtools_client/status.js +2 -2
  211. package/packages/dd-trace/src/debugger/index.js +1 -1
  212. package/packages/dd-trace/src/dogstatsd.js +3 -2
  213. package/packages/dd-trace/src/encode/0.4.js +1 -1
  214. package/packages/dd-trace/src/encode/agentless-ci-visibility.js +2 -2
  215. package/packages/dd-trace/src/encode/coverage-ci-visibility.js +1 -1
  216. package/packages/dd-trace/src/encode/span-stats.js +6 -1
  217. package/packages/dd-trace/src/exporter.js +2 -2
  218. package/packages/dd-trace/src/exporters/agent/index.js +1 -1
  219. package/packages/dd-trace/src/exporters/common/agent-info-exporter.js +1 -1
  220. package/packages/dd-trace/src/exporters/common/request.js +2 -2
  221. package/packages/dd-trace/src/exporters/common/writer.js +1 -1
  222. package/packages/dd-trace/src/exporters/span-stats/index.js +1 -1
  223. package/packages/dd-trace/src/external-logger/src/index.js +1 -2
  224. package/packages/dd-trace/src/flare/index.js +1 -1
  225. package/packages/dd-trace/src/guardrails/index.js +6 -3
  226. package/packages/dd-trace/src/id.js +1 -1
  227. package/packages/dd-trace/src/index.js +1 -1
  228. package/packages/dd-trace/src/lambda/handler.js +4 -4
  229. package/packages/dd-trace/src/lambda/index.js +1 -1
  230. package/packages/dd-trace/src/lambda/runtime/patch.js +4 -4
  231. package/packages/dd-trace/src/lambda/runtime/ritm.js +1 -1
  232. package/packages/dd-trace/src/llmobs/constants/tags.js +7 -1
  233. package/packages/dd-trace/src/llmobs/index.js +8 -9
  234. package/packages/dd-trace/src/llmobs/plugins/ai/index.js +38 -7
  235. package/packages/dd-trace/src/llmobs/plugins/ai/util.js +30 -9
  236. package/packages/dd-trace/src/llmobs/plugins/bedrockruntime.js +3 -3
  237. package/packages/dd-trace/src/llmobs/plugins/genai/util.js +2 -2
  238. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chain.js +1 -1
  239. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chat_model.js +1 -1
  240. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/embedding.js +1 -1
  241. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/llm.js +1 -1
  242. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/vectorstore.js +1 -1
  243. package/packages/dd-trace/src/llmobs/plugins/openai/constants.js +16 -0
  244. package/packages/dd-trace/src/llmobs/plugins/openai/index.js +16 -1
  245. package/packages/dd-trace/src/llmobs/plugins/openai/utils.js +22 -10
  246. package/packages/dd-trace/src/llmobs/plugins/vertexai.js +1 -1
  247. package/packages/dd-trace/src/llmobs/sdk.js +15 -22
  248. package/packages/dd-trace/src/llmobs/span_processor.js +9 -13
  249. package/packages/dd-trace/src/llmobs/telemetry.js +3 -4
  250. package/packages/dd-trace/src/llmobs/writers/base.js +2 -2
  251. package/packages/dd-trace/src/llmobs/writers/spans.js +1 -2
  252. package/packages/dd-trace/src/log/index.js +1 -1
  253. package/packages/dd-trace/src/noop/proxy.js +2 -2
  254. package/packages/dd-trace/src/noop/span.js +1 -1
  255. package/packages/dd-trace/src/openfeature/index.js +2 -2
  256. package/packages/dd-trace/src/openfeature/noop.js +14 -14
  257. package/packages/dd-trace/src/openfeature/remote_config.js +31 -0
  258. package/packages/dd-trace/src/openfeature/writers/base.js +5 -5
  259. package/packages/dd-trace/src/openfeature/writers/exposures.js +9 -9
  260. package/packages/dd-trace/src/opentelemetry/context_manager.js +2 -2
  261. package/packages/dd-trace/src/opentelemetry/logs/logger.js +1 -1
  262. package/packages/dd-trace/src/opentelemetry/logs/logger_provider.js +4 -4
  263. package/packages/dd-trace/src/opentelemetry/logs/otlp_transformer.js +9 -8
  264. package/packages/dd-trace/src/opentelemetry/metrics/instruments.js +3 -3
  265. package/packages/dd-trace/src/opentelemetry/metrics/meter.js +2 -2
  266. package/packages/dd-trace/src/opentelemetry/metrics/otlp_transformer.js +4 -4
  267. package/packages/dd-trace/src/opentelemetry/metrics/periodic_metric_reader.js +36 -11
  268. package/packages/dd-trace/src/opentelemetry/otlp/otlp_transformer_base.js +11 -10
  269. package/packages/dd-trace/src/opentelemetry/otlp/protobuf_loader.js +1 -1
  270. package/packages/dd-trace/src/opentelemetry/span.js +2 -2
  271. package/packages/dd-trace/src/opentelemetry/tracer.js +3 -3
  272. package/packages/dd-trace/src/opentracing/propagation/text_map.js +24 -8
  273. package/packages/dd-trace/src/opentracing/span.js +3 -3
  274. package/packages/dd-trace/src/opentracing/tracer.js +5 -5
  275. package/packages/dd-trace/src/payload-tagging/index.js +6 -2
  276. package/packages/dd-trace/src/plugin_manager.js +1 -1
  277. package/packages/dd-trace/src/plugins/apollo.js +1 -1
  278. package/packages/dd-trace/src/plugins/ci_plugin.js +27 -27
  279. package/packages/dd-trace/src/plugins/database.js +1 -1
  280. package/packages/dd-trace/src/plugins/index.js +5 -1
  281. package/packages/dd-trace/src/plugins/log_plugin.js +1 -1
  282. package/packages/dd-trace/src/plugins/outbound.js +1 -1
  283. package/packages/dd-trace/src/plugins/tracing.js +1 -1
  284. package/packages/dd-trace/src/plugins/util/ci.js +1 -1
  285. package/packages/dd-trace/src/plugins/util/git.js +8 -8
  286. package/packages/dd-trace/src/plugins/util/stacktrace.js +1 -1
  287. package/packages/dd-trace/src/plugins/util/test.js +24 -24
  288. package/packages/dd-trace/src/plugins/util/user-provided-git.js +1 -1
  289. package/packages/dd-trace/src/plugins/util/web.js +8 -5
  290. package/packages/dd-trace/src/priority_sampler.js +15 -16
  291. package/packages/dd-trace/src/process-tags/index.js +31 -29
  292. package/packages/dd-trace/src/profiling/config.js +32 -21
  293. package/packages/dd-trace/src/profiling/exporter_cli.js +4 -4
  294. package/packages/dd-trace/src/profiling/exporters/agent.js +5 -5
  295. package/packages/dd-trace/src/profiling/index.js +1 -1
  296. package/packages/dd-trace/src/profiling/libuv-size.js +1 -1
  297. package/packages/dd-trace/src/profiling/profiler.js +4 -5
  298. package/packages/dd-trace/src/profiling/profilers/event_plugins/event.js +1 -1
  299. package/packages/dd-trace/src/profiling/profilers/events.js +2 -2
  300. package/packages/dd-trace/src/profiling/profilers/wall.js +4 -4
  301. package/packages/dd-trace/src/proxy.js +12 -18
  302. package/packages/dd-trace/src/remote_config/index.js +541 -137
  303. package/packages/dd-trace/src/require-package-json.js +1 -1
  304. package/packages/dd-trace/src/ritm.js +50 -27
  305. package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +1 -1
  306. package/packages/dd-trace/src/serverless.js +16 -0
  307. package/packages/dd-trace/src/service-naming/schemas/v0/messaging.js +8 -0
  308. package/packages/dd-trace/src/service-naming/schemas/v1/messaging.js +8 -0
  309. package/packages/dd-trace/src/span_format.js +1 -1
  310. package/packages/dd-trace/src/span_processor.js +2 -2
  311. package/packages/dd-trace/src/span_stats.js +6 -4
  312. package/packages/dd-trace/src/standalone/index.js +1 -1
  313. package/packages/dd-trace/src/startup-log.js +3 -3
  314. package/packages/dd-trace/src/supported-configurations.json +3 -0
  315. package/packages/dd-trace/src/telemetry/dependencies.js +3 -3
  316. package/packages/dd-trace/src/telemetry/endpoints.js +8 -8
  317. package/packages/dd-trace/src/telemetry/logs/index.js +1 -1
  318. package/packages/dd-trace/src/telemetry/telemetry.js +11 -6
  319. package/packages/dd-trace/src/tracer.js +3 -3
  320. package/packages/dd-trace/src/tracer_metadata.js +19 -15
  321. package/packages/dd-trace/src/remote_config/manager.js +0 -368
@@ -1,6 +1,6 @@
1
1
  'use strict'
2
2
 
3
- module.exports = {
3
+ const plugins = {
4
4
  get '@anthropic-ai/sdk' () { return require('../../../datadog-plugin-anthropic/src') },
5
5
  get '@apollo/gateway' () { return require('../../../datadog-plugin-apollo/src') },
6
6
  get '@aws-sdk/smithy-client' () { return require('../../../datadog-plugin-aws-sdk/src') },
@@ -26,6 +26,7 @@ module.exports = {
26
26
  get '@node-redis/client' () { return require('../../../datadog-plugin-redis/src') },
27
27
  get '@opensearch-project/opensearch' () { return require('../../../datadog-plugin-opensearch/src') },
28
28
  get '@prisma/client' () { return require('../../../datadog-plugin-prisma/src') },
29
+ get './runtime/library.js' () { return require('../../../datadog-plugin-prisma/src') },
29
30
  get '@redis/client' () { return require('../../../datadog-plugin-redis/src') },
30
31
  get '@smithy/smithy-client' () { return require('../../../datadog-plugin-aws-sdk/src') },
31
32
  get '@vitest/runner' () { return require('../../../datadog-plugin-vitest/src') },
@@ -35,6 +36,7 @@ module.exports = {
35
36
  get amqplib () { return require('../../../datadog-plugin-amqplib/src') },
36
37
  get avsc () { return require('../../../datadog-plugin-avsc/src') },
37
38
  get 'aws-sdk' () { return require('../../../datadog-plugin-aws-sdk/src') },
39
+ get bullmq () { return require('../../../datadog-plugin-bullmq/src') },
38
40
  get bunyan () { return require('../../../datadog-plugin-bunyan/src') },
39
41
  get 'cassandra-driver' () { return require('../../../datadog-plugin-cassandra-driver/src') },
40
42
  get child_process () { return require('../../../datadog-plugin-child_process/src') },
@@ -110,3 +112,5 @@ module.exports = {
110
112
  get winston () { return require('../../../datadog-plugin-winston/src') },
111
113
  get ws () { return require('../../../datadog-plugin-ws/src') }
112
114
  }
115
+
116
+ module.exports = plugins
@@ -1,8 +1,8 @@
1
1
  'use strict'
2
2
 
3
3
  const { LOG } = require('../../../../ext/formats')
4
- const Plugin = require('./plugin')
5
4
  const { storage } = require('../../../datadog-core')
5
+ const Plugin = require('./plugin')
6
6
 
7
7
  function messageProxy (message, holder) {
8
8
  return new Proxy(message, {
@@ -6,9 +6,9 @@ const {
6
6
  PEER_SERVICE_SOURCE_KEY,
7
7
  PEER_SERVICE_REMAP_KEY
8
8
  } = require('../constants')
9
- const TracingPlugin = require('./tracing')
10
9
  const { exitTags } = require('../../../datadog-code-origin')
11
10
  const { storage } = require('../../../datadog-core')
11
+ const TracingPlugin = require('./tracing')
12
12
 
13
13
  const COMMON_PEER_SVC_SOURCE_TAGS = [
14
14
  'net.peer.name',
@@ -1,9 +1,9 @@
1
1
  'use strict'
2
2
 
3
- const Plugin = require('./plugin')
4
3
  const { storage } = require('../../../datadog-core')
5
4
  const analyticsSampler = require('../analytics_sampler')
6
5
  const { COMPONENT } = require('../constants')
6
+ const Plugin = require('./plugin')
7
7
 
8
8
  class TracingPlugin extends Plugin {
9
9
  constructor (...args) {
@@ -1,6 +1,7 @@
1
1
  'use strict'
2
2
 
3
3
  const { readFileSync } = require('fs')
4
+ const { getEnvironmentVariable, getEnvironmentVariables } = require('../../config-helper')
4
5
  const {
5
6
  GIT_BRANCH,
6
7
  GIT_COMMIT_SHA,
@@ -32,7 +33,6 @@ const {
32
33
  GIT_PULL_REQUEST_BASE_BRANCH_HEAD_SHA
33
34
  } = require('./tags')
34
35
  const { filterSensitiveInfoFromRepository } = require('./url')
35
- const { getEnvironmentVariable, getEnvironmentVariables } = require('../../config-helper')
36
36
 
37
37
  // Receives a string with the form 'John Doe <john.doe@gmail.com>'
38
38
  // and returns { name: 'John Doe', email: 'john.doe@gmail.com' }
@@ -5,6 +5,14 @@ const path = require('path')
5
5
  const fs = require('fs')
6
6
 
7
7
  const log = require('../../log')
8
+ const {
9
+ incrementCountMetric,
10
+ distributionMetric,
11
+ TELEMETRY_GIT_COMMAND,
12
+ TELEMETRY_GIT_COMMAND_MS,
13
+ TELEMETRY_GIT_COMMAND_ERRORS
14
+ } = require('../../ci-visibility/telemetry')
15
+ const { storage } = require('../../../../datadog-core')
8
16
  const {
9
17
  GIT_COMMIT_SHA,
10
18
  GIT_BRANCH,
@@ -26,15 +34,7 @@ const {
26
34
  GIT_COMMIT_HEAD_COMMITTER_NAME,
27
35
  GIT_COMMIT_HEAD_MESSAGE
28
36
  } = require('./tags')
29
- const {
30
- incrementCountMetric,
31
- distributionMetric,
32
- TELEMETRY_GIT_COMMAND,
33
- TELEMETRY_GIT_COMMAND_MS,
34
- TELEMETRY_GIT_COMMAND_ERRORS
35
- } = require('../../ci-visibility/telemetry')
36
37
  const { filterSensitiveInfoFromRepository } = require('./url')
37
- const { storage } = require('../../../../datadog-core')
38
38
  const { cachedExec } = require('./git-cache')
39
39
 
40
40
  const GIT_REV_LIST_MAX_BUFFER = 12 * 1024 * 1024 // 12MB
@@ -72,7 +72,7 @@ function parseUserLandFrames (stack, limit = Infinity) {
72
72
  * @param {number} end - The end index of the line to parse within the stack trace.
73
73
  * @returns {StackFrame|undefined} The parsed frame if it is a user frame, `undefined` otherwise.
74
74
  *
75
- * @typedef {Object} StackFrame
75
+ * @typedef {object} StackFrame
76
76
  * @property {string} fileName - The file name of the frame.
77
77
  * @property {string} lineNumber - The line number of the frame.
78
78
  * @property {string} columnNumber - The column number of the frame.
@@ -10,20 +10,17 @@ const satisfies = require('../../../../../vendor/dist/semifies')
10
10
  const istanbul = require('../../../../../vendor/dist/istanbul-lib-coverage')
11
11
  const ignore = require('../../../../../vendor/dist/ignore')
12
12
 
13
+ const id = require('../../id')
13
14
  const {
14
- getGitMetadata,
15
- getGitInformationDiscrepancy,
16
- getGitDiff,
17
- getGitRemoteName,
18
- getSourceBranch,
19
- checkAndFetchBranch,
20
- getLocalBranches,
21
- getMergeBase,
22
- getCounts
23
- } = require('./git')
24
- const { getUserProviderGitMetadata, validateGitRepositoryUrl, validateGitCommitSha } = require('./user-provided-git')
25
- const { getCIMetadata } = require('./ci')
26
- const { getRuntimeAndOSMetadata } = require('./env')
15
+ incrementCountMetric,
16
+ TELEMETRY_GIT_COMMIT_SHA_DISCREPANCY,
17
+ TELEMETRY_GIT_SHA_MATCH
18
+ } = require('../../ci-visibility/telemetry')
19
+
20
+ const { SPAN_TYPE, RESOURCE_NAME, SAMPLING_PRIORITY } = require('../../../../../ext/tags')
21
+ const { SAMPLING_RULE_DECISION } = require('../../constants')
22
+ const { AUTO_KEEP } = require('../../../../../ext/priority')
23
+ const { version: ddTraceVersion } = require('../../../../../package.json')
27
24
  const {
28
25
  GIT_BRANCH,
29
26
  GIT_COMMIT_SHA,
@@ -37,17 +34,20 @@ const {
37
34
  CI_JOB_NAME,
38
35
  GIT_COMMIT_HEAD_SHA
39
36
  } = require('./tags')
40
- const id = require('../../id')
37
+ const { getRuntimeAndOSMetadata } = require('./env')
38
+ const { getCIMetadata } = require('./ci')
39
+ const { getUserProviderGitMetadata, validateGitRepositoryUrl, validateGitCommitSha } = require('./user-provided-git')
41
40
  const {
42
- incrementCountMetric,
43
- TELEMETRY_GIT_COMMIT_SHA_DISCREPANCY,
44
- TELEMETRY_GIT_SHA_MATCH
45
- } = require('../../ci-visibility/telemetry')
46
-
47
- const { SPAN_TYPE, RESOURCE_NAME, SAMPLING_PRIORITY } = require('../../../../../ext/tags')
48
- const { SAMPLING_RULE_DECISION } = require('../../constants')
49
- const { AUTO_KEEP } = require('../../../../../ext/priority')
50
- const { version: ddTraceVersion } = require('../../../../../package.json')
41
+ getGitMetadata,
42
+ getGitInformationDiscrepancy,
43
+ getGitDiff,
44
+ getGitRemoteName,
45
+ getSourceBranch,
46
+ checkAndFetchBranch,
47
+ getLocalBranches,
48
+ getMergeBase,
49
+ getCounts
50
+ } = require('./git')
51
51
 
52
52
  /**
53
53
  * JSDoc types for test environment metadata helpers.
@@ -813,7 +813,7 @@ function getTestEndLine (testFn, startLine = 0) {
813
813
 
814
814
  /**
815
815
  * Gets an object of test tags from an Playwright annotations array.
816
- * @param {Object[]} annotations - Annotations from a Playwright test.
816
+ * @param {object[]} annotations - Annotations from a Playwright test.
817
817
  * @param {string} annotations[].type - Type of annotation. A string of the shape DD_TAGS[$tag_name].
818
818
  * @param {string} annotations[].description - Value of the tag.
819
819
  */
@@ -1,5 +1,6 @@
1
1
  'use strict'
2
2
 
3
+ const { getEnvironmentVariables } = require('../../config-helper')
3
4
  const {
4
5
  GIT_COMMIT_SHA,
5
6
  GIT_BRANCH,
@@ -19,7 +20,6 @@ const {
19
20
 
20
21
  const { normalizeRef } = require('./ci')
21
22
  const { filterSensitiveInfoFromRepository } = require('./url')
22
- const { getEnvironmentVariables } = require('../../config-helper')
23
23
 
24
24
  function removeEmptyValues (tags) {
25
25
  return Object.keys(tags).reduce((filteredTags, tag) => {
@@ -7,10 +7,10 @@ const log = require('../../log')
7
7
  const tags = require('../../../../../ext/tags')
8
8
  const types = require('../../../../../ext/types')
9
9
  const kinds = require('../../../../../ext/kinds')
10
- const urlFilter = require('./urlfilter')
11
10
  const { ERROR_MESSAGE, ERROR_TYPE, ERROR_STACK } = require('../../constants')
12
- const { createInferredProxySpan, finishInferredProxySpan } = require('./inferred_proxy')
13
11
  const TracingPlugin = require('../tracing')
12
+ const urlFilter = require('./urlfilter')
13
+ const { createInferredProxySpan, finishInferredProxySpan } = require('./inferred_proxy')
14
14
  const { extractURL, obfuscateQs, calculateHttpEndpoint } = require('./url')
15
15
 
16
16
  let extractIp
@@ -274,11 +274,14 @@ const web = {
274
274
  return context.middleware.at(-1)
275
275
  },
276
276
 
277
- // Extract the parent span from the headers and start a new span as its child
278
277
  startChildSpan (tracer, config, name, req, traceCtx) {
279
278
  const headers = req.headers
280
279
  const reqCtx = contexts.get(req)
281
- let childOf = tracer.extract(FORMAT_HTTP_HEADERS, headers)
280
+ const { storage } = require('../../../../datadog-core')
281
+ const store = storage('legacy').getStore()
282
+ const pubsubSpan = store?.span?._name === 'pubsub.push.receive' ? store.span : null
283
+
284
+ let childOf = pubsubSpan || tracer.extract(FORMAT_HTTP_HEADERS, headers)
282
285
 
283
286
  // we may have headers signaling a router proxy span should be created (such as for AWS API Gateway)
284
287
  if (tracer._config?.inferredProxyServicesEnabled) {
@@ -503,7 +506,7 @@ function addResourceTag (context) {
503
506
  const { req, span } = context
504
507
  const tags = span.context()._tags
505
508
 
506
- if (tags['resource.name']) return
509
+ if (tags[RESOURCE_NAME]) return
507
510
 
508
511
  const resource = [req.method, tags[HTTP_ROUTE]]
509
512
  .filter(Boolean)
@@ -1,5 +1,19 @@
1
1
  'use strict'
2
2
 
3
+ const {
4
+ tags: {
5
+ MANUAL_KEEP,
6
+ MANUAL_DROP,
7
+ SAMPLING_PRIORITY,
8
+ SERVICE_NAME
9
+ },
10
+ priority: {
11
+ AUTO_REJECT,
12
+ AUTO_KEEP,
13
+ USER_REJECT,
14
+ USER_KEEP
15
+ }
16
+ } = require('../../../ext')
3
17
  const log = require('./log')
4
18
  const RateLimiter = require('./rate_limiter')
5
19
  const Sampler = require('./sampler')
@@ -19,21 +33,6 @@ const {
19
33
  DECISION_MAKER_KEY
20
34
  } = require('./constants')
21
35
 
22
- const {
23
- tags: {
24
- MANUAL_KEEP,
25
- MANUAL_DROP,
26
- SAMPLING_PRIORITY,
27
- SERVICE_NAME
28
- },
29
- priority: {
30
- AUTO_REJECT,
31
- AUTO_KEEP,
32
- USER_REJECT,
33
- USER_KEEP
34
- }
35
- } = require('../../../ext')
36
-
37
36
  const DEFAULT_KEY = 'service:,env:'
38
37
 
39
38
  const defaultSampler = new Sampler(AUTO_KEEP)
@@ -54,7 +53,7 @@ class PrioritySampler {
54
53
  /**
55
54
  * Creates an instance of PrioritySampler.
56
55
  *
57
- * @typedef {Object} SamplingConfig
56
+ * @typedef {object} SamplingConfig
58
57
  * @property {number} [sampleRate] - The default sample rate for traces.
59
58
  * @property {string} [provenance] - Optional rule provenance ("customer" or "dynamic").
60
59
  * @property {number} [rateLimit=100] - The maximum number of traces to sample per second.
@@ -1,25 +1,10 @@
1
1
  'use strict'
2
2
 
3
3
  const path = require('node:path')
4
- const pkg = require('../pkg')
5
4
 
6
5
  const CURRENT_WORKING_DIRECTORY = process.cwd()
7
6
  const ENTRYPOINT_PATH = require.main?.filename || ''
8
7
 
9
- const TRACING_FIELD_NAME = '_dd.tags.process'
10
- const DSM_FIELD_NAME = 'ProcessTags'
11
- const PROFILING_FIELD_NAME = 'process_tags'
12
-
13
- module.exports.TRACING_FIELD_NAME = TRACING_FIELD_NAME
14
- module.exports.DSM_FIELD_NAME = DSM_FIELD_NAME
15
- module.exports.PROFILING_FIELD_NAME = PROFILING_FIELD_NAME
16
-
17
- // TODO CRASH_TRACKING_FIELD_NAME /process_tags /application/process_tags
18
- // TODO: TELEMETRY_FIELD_NAME /application/process_tags
19
- // TODO: DYNAMIC_INSTRUMENTATION_FIELD_NAME process_tags
20
- // TODO: CLIENT_TRACE_STATISTICS_FIELD_NAME process_tags
21
- // TODO: REMOTE_CONFIG_FIELD_NAME process_tags
22
-
23
8
  // $ cd /foo/bar && node baz/banana.js
24
9
  // entrypoint.workdir = bar
25
10
  // entrypoint.name = banana
@@ -27,7 +12,11 @@ module.exports.PROFILING_FIELD_NAME = PROFILING_FIELD_NAME
27
12
  // entrypoint.basedir = baz
28
13
  // package.json.name = <from package.json>
29
14
 
30
- module.exports = function getProcessTags () {
15
+ // process tags are constant throughout the lifetime of a process
16
+ function getProcessTags () {
17
+ // Lazy load pkg to avoid issues with require.main during test initialization
18
+ const pkg = require('../pkg')
19
+
31
20
  // this list is sorted alphabetically for consistent serialization
32
21
  const tags = [
33
22
  // the parent directory name of the entrypoint script, e.g. /foo/bar/baz/banana.js -> baz
@@ -46,25 +35,38 @@ module.exports = function getProcessTags () {
46
35
  ['package.json.name', pkg.name || undefined]
47
36
  ]
48
37
 
49
- const serialized = serialize(tags)
38
+ const tagsArray = []
39
+ const tagsObject = {}
50
40
 
51
- return {
52
- tags,
53
- serialized
41
+ for (const [key, value] of tags) {
42
+ if (value !== undefined) {
43
+ const sanitizedValue = sanitize(value)
44
+ tagsArray.push(`${key}:${sanitizedValue}`)
45
+ tagsObject[key] = sanitizedValue
46
+ }
54
47
  }
55
- }
56
48
 
57
- function serialize (tags) {
58
- const intermediary = []
59
- for (const [name, value] of tags) {
60
- // if we don't have a value we should send nothing at all
61
- if (value === undefined) continue
62
- intermediary.push(`${name}:${sanitize(value)}`)
49
+ const serialized = tagsArray.join(',')
50
+
51
+ return {
52
+ tags,
53
+ serialized,
54
+ tagsObject,
55
+ tagsArray
63
56
  }
64
- return intermediary.join(',')
65
57
  }
66
58
 
67
- module.exports.serialize = serialize
59
+ // Export the singleton
60
+ module.exports = getProcessTags()
61
+
62
+ module.exports.TRACING_FIELD_NAME = '_dd.tags.process'
63
+ module.exports.DSM_FIELD_NAME = 'ProcessTags'
64
+ module.exports.PROFILING_FIELD_NAME = 'process_tags'
65
+ module.exports.DYNAMIC_INSTRUMENTATION_FIELD_NAME = 'process_tags'
66
+ module.exports.TELEMETRY_FIELD_NAME = 'process_tags'
67
+ module.exports.REMOTE_CONFIG_FIELD_NAME = 'process_tags'
68
+ module.exports.CRASH_TRACKING_FIELD_NAME = 'process_tags'
69
+ module.exports.CLIENT_TRACE_STATISTICS_FIELD_NAME = 'ProcessTags'
68
70
 
69
71
  /**
70
72
  * Sanitize a process tag value
@@ -4,6 +4,12 @@ const os = require('os')
4
4
  const path = require('path')
5
5
  const { URL, format, pathToFileURL } = require('url')
6
6
  const satisfies = require('../../../../vendor/dist/semifies')
7
+ const { GIT_REPOSITORY_URL, GIT_COMMIT_SHA } = require('../plugins/util/tags')
8
+ const { getIsAzureFunction } = require('../serverless')
9
+ const { isFalse, isTrue } = require('../util')
10
+ const { getAzureTagsFromMetadata, getAzureAppMetadata, getAzureFunctionMetadata } = require('../azure_metadata')
11
+ const { getEnvironmentVariables } = require('../config-helper')
12
+ const defaults = require('../config_defaults')
7
13
  const { AgentExporter } = require('./exporters/agent')
8
14
  const { FileExporter } = require('./exporters/file')
9
15
  const { ConsoleLogger } = require('./loggers/console')
@@ -11,12 +17,7 @@ const WallProfiler = require('./profilers/wall')
11
17
  const SpaceProfiler = require('./profilers/space')
12
18
  const EventsProfiler = require('./profilers/events')
13
19
  const { oomExportStrategies, snapshotKinds } = require('./constants')
14
- const { GIT_REPOSITORY_URL, GIT_COMMIT_SHA } = require('../plugins/util/tags')
15
20
  const { tagger } = require('./tagger')
16
- const { isFalse, isTrue } = require('../util')
17
- const { getAzureTagsFromMetadata, getAzureAppMetadata } = require('../azure_metadata')
18
- const { getEnvironmentVariables } = require('../config-helper')
19
- const defaults = require('../config_defaults')
20
21
 
21
22
  class Config {
22
23
  constructor (options = {}) {
@@ -73,7 +74,7 @@ class Config {
73
74
  tagger.parse(DD_TAGS),
74
75
  tagger.parse(options.tags),
75
76
  tagger.parse({ env, host, service, version, functionname }),
76
- getAzureTagsFromMetadata(getAzureAppMetadata())
77
+ getAzureTagsFromMetadata(getIsAzureFunction() ? getAzureFunctionMetadata() : getAzureAppMetadata())
77
78
  )
78
79
 
79
80
  // Add source code integration tags if available
@@ -178,6 +179,9 @@ class Config {
178
179
 
179
180
  this.heapSamplingInterval = options.heapSamplingInterval ??
180
181
  (Number(DD_PROFILING_HEAP_SAMPLING_INTERVAL) || 512 * 1024)
182
+
183
+ const isAtLeast24 = satisfies(process.versions.node, '>=24.0.0')
184
+
181
185
  const uploadCompression0 = options.uploadCompression ?? DD_PROFILING_DEBUG_UPLOAD_COMPRESSION ?? 'on'
182
186
  let [uploadCompression, level0] = uploadCompression0.split('-')
183
187
  if (!['on', 'off', 'gzip', 'zstd'].includes(uploadCompression)) {
@@ -205,9 +209,12 @@ class Config {
205
209
  }
206
210
  }
207
211
 
208
- // Default to gzip
212
+ // Default to either zstd (on Node.js 24+) or gzip (earlier Node.js). We could default to ztsd
213
+ // everywhere as we ship a Rust zstd compressor for older Node.js versions, but on 24+ we use
214
+ // the built-in one that runs asynchronously on libuv worker threads, just as gzip does. This is
215
+ // the least disruptive choice.
209
216
  if (uploadCompression === 'on') {
210
- uploadCompression = 'gzip'
217
+ uploadCompression = isAtLeast24 ? 'zstd' : 'gzip'
211
218
  }
212
219
 
213
220
  this.uploadCompression = { method: uploadCompression, level }
@@ -221,20 +228,24 @@ class Config {
221
228
 
222
229
  const hasExecArg = (arg) => process.execArgv.includes(arg) || String(NODE_OPTIONS).includes(arg)
223
230
 
224
- this.asyncContextFrameEnabled = isTrue(options.useAsyncContextFrame ?? DD_PROFILING_ASYNC_CONTEXT_FRAME_ENABLED)
225
- if (this.asyncContextFrameEnabled) {
226
- if (satisfies(process.versions.node, '>=24.0.0')) {
227
- if (hasExecArg('--no-async-context-frame')) {
228
- turnOffAsyncContextFrame('with --no-async-context-frame')
229
- }
230
- } else if (satisfies(process.versions.node, '>=23.0.0')) {
231
- if (!hasExecArg('--experimental-async-context-frame')) {
232
- turnOffAsyncContextFrame('without --experimental-async-context-frame')
233
- }
231
+ let canUseAsyncContextFrame = false
232
+ if (samplingContextsAvailable) {
233
+ if (isAtLeast24) {
234
+ canUseAsyncContextFrame = !hasExecArg('--no-async-context-frame')
235
+ } else if (satisfies(process.versions.node, '>=22.9.0')) {
236
+ canUseAsyncContextFrame = hasExecArg('--experimental-async-context-frame')
237
+ }
238
+ }
239
+ this.asyncContextFrameEnabled = isTrue(DD_PROFILING_ASYNC_CONTEXT_FRAME_ENABLED ?? canUseAsyncContextFrame)
240
+ if (this.asyncContextFrameEnabled && !canUseAsyncContextFrame) {
241
+ if (!samplingContextsAvailable) {
242
+ turnOffAsyncContextFrame(`on ${process.platform}`)
243
+ } else if (isAtLeast24) {
244
+ turnOffAsyncContextFrame('with --no-async-context-frame')
245
+ } else if (satisfies(process.versions.node, '>=22.9.0')) {
246
+ turnOffAsyncContextFrame('without --experimental-async-context-frame')
234
247
  } else {
235
- // NOTE: technically, this should work starting with 22.7.0 which is when
236
- // AsyncContextFrame debuted, but it would require a change in pprof-nodejs too.
237
- turnOffAsyncContextFrame('but it requires at least Node.js 23')
248
+ turnOffAsyncContextFrame('but it requires at least Node.js 22.9.0')
238
249
  }
239
250
  }
240
251
 
@@ -1,14 +1,14 @@
1
1
  'use strict'
2
2
 
3
+ const fs = require('fs')
4
+ const { fileURLToPath } = require('url')
5
+ const { SourceMapper, heap, encode } = require('@datadog/pprof')
6
+ const { getEnvironmentVariable } = require('../config-helper')
3
7
  const { AgentExporter } = require('./exporters/agent')
4
8
  const { FileExporter } = require('./exporters/file')
5
9
 
6
- const { SourceMapper, heap, encode } = require('@datadog/pprof')
7
10
  const { ConsoleLogger } = require('./loggers/console')
8
11
  const { tagger } = require('./tagger')
9
- const fs = require('fs')
10
- const { fileURLToPath } = require('url')
11
- const { getEnvironmentVariable } = require('../config-helper')
12
12
 
13
13
  const logger = new ConsoleLogger()
14
14
  const timeoutMs = 15 * 1000
@@ -1,19 +1,19 @@
1
1
  'use strict'
2
2
 
3
- const retry = require('../../../../../vendor/dist/retry')
4
3
  const { request: httpRequest } = require('http')
5
4
  const { request: httpsRequest } = require('https')
6
- const { EventSerializer } = require('./event_serializer')
5
+ const perf = require('perf_hooks').performance
6
+ const { urlToHttpOptions } = require('url')
7
7
 
8
+ const retry = require('../../../../../vendor/dist/retry')
8
9
  // TODO: avoid using dd-trace internals. Make this a separate module?
9
10
  const docker = require('../../exporters/common/docker')
10
11
  const FormData = require('../../exporters/common/form-data')
11
12
  const { storage } = require('../../../../datadog-core')
12
13
  const version = require('../../../../../package.json').version
13
- const { urlToHttpOptions } = require('url')
14
- const perf = require('perf_hooks').performance
15
-
16
14
  const telemetryMetrics = require('../../telemetry/metrics')
15
+ const { EventSerializer } = require('./event_serializer')
16
+
17
17
  const profilersNamespace = telemetryMetrics.manager.namespace('profilers')
18
18
 
19
19
  const statusCodeCounters = []
@@ -1,12 +1,12 @@
1
1
  'use strict'
2
2
 
3
+ const { getEnvironmentVariable } = require('../config-helper')
3
4
  const { Profiler, ServerlessProfiler } = require('./profiler')
4
5
  const WallProfiler = require('./profilers/wall')
5
6
  const SpaceProfiler = require('./profilers/space')
6
7
  const { AgentExporter } = require('./exporters/agent')
7
8
  const { FileExporter } = require('./exporters/file')
8
9
  const { ConsoleLogger } = require('./loggers/console')
9
- const { getEnvironmentVariable } = require('../config-helper')
10
10
 
11
11
  const profiler = getEnvironmentVariable('AWS_LAMBDA_FUNCTION_NAME') ? new ServerlessProfiler() : new Profiler()
12
12
 
@@ -1,7 +1,7 @@
1
1
  'use strict'
2
2
 
3
- const { getEnvironmentVariable } = require('../config-helper')
4
3
  const os = require('node:os')
4
+ const { getEnvironmentVariable } = require('../config-helper')
5
5
 
6
6
  function getLibuvThreadPoolSize (envVar) {
7
7
  if (envVar === undefined) {
@@ -1,15 +1,14 @@
1
1
  'use strict'
2
2
 
3
3
  const { EventEmitter } = require('events')
4
+ const { promisify } = require('util')
5
+ const zlib = require('zlib')
6
+ const dc = require('dc-polyfill')
7
+ const crashtracker = require('../crashtracking')
4
8
  const { Config } = require('./config')
5
9
  const { snapshotKinds } = require('./constants')
6
10
  const { threadNamePrefix } = require('./profilers/shared')
7
11
  const { isWebServerSpan, endpointNameFromTags, getStartedSpans } = require('./webspan-utils')
8
- const dc = require('dc-polyfill')
9
- const crashtracker = require('../crashtracking')
10
-
11
- const { promisify } = require('util')
12
- const zlib = require('zlib')
13
12
 
14
13
  const profileSubmittedChannel = dc.channel('datadog:profiling:profile-submitted')
15
14
  const spanFinishedChannel = dc.channel('dd-trace:span:finish')
@@ -1,7 +1,7 @@
1
1
  'use strict'
2
2
 
3
- const TracingPlugin = require('../../../plugins/tracing')
4
3
  const { performance } = require('perf_hooks')
4
+ const TracingPlugin = require('../../../plugins/tracing')
5
5
 
6
6
  // We are leveraging the TracingPlugin class for its functionality to bind
7
7
  // start/error/finish methods to the appropriate diagnostic channels.
@@ -1,7 +1,6 @@
1
1
  'use strict'
2
2
 
3
3
  const { performance, constants, PerformanceObserver } = require('perf_hooks')
4
- const { END_TIMESTAMP_LABEL, SPAN_ID_LABEL, LOCAL_ROOT_SPAN_ID_LABEL, encodeProfileAsync } = require('./shared')
5
4
  const {
6
5
  Function,
7
6
  Label,
@@ -12,8 +11,9 @@ const {
12
11
  StringTable,
13
12
  ValueType
14
13
  } = require('../../../../../vendor/dist/pprof-format')
15
- const PoissonProcessSamplingFilter = require('./poisson')
16
14
  const { availableParallelism, effectiveLibuvThreadCount } = require('../libuv-size')
15
+ const { END_TIMESTAMP_LABEL, SPAN_ID_LABEL, LOCAL_ROOT_SPAN_ID_LABEL, encodeProfileAsync } = require('./shared')
16
+ const PoissonProcessSamplingFilter = require('./poisson')
17
17
  // perf_hooks uses millis, with fractional part representing nanos. We emit nanos into the pprof file.
18
18
  const MS_TO_NS = 1_000_000
19
19
  // The number of sampling intervals that need to pass before we reset the Poisson process sampling instant.
@@ -1,10 +1,12 @@
1
1
  'use strict'
2
2
 
3
- const { storage } = require('../../../../datadog-core')
4
-
5
3
  const dc = require('dc-polyfill')
4
+
5
+ const { storage } = require('../../../../datadog-core')
6
6
  const runtimeMetrics = require('../../runtime_metrics')
7
7
  const telemetryMetrics = require('../../telemetry/metrics')
8
+ const { isWebServerSpan, endpointNameFromTags, getStartedSpans } = require('../webspan-utils')
9
+
8
10
  const {
9
11
  END_TIMESTAMP_LABEL,
10
12
  SPAN_ID_LABEL,
@@ -15,8 +17,6 @@ const {
15
17
  } = require('./shared')
16
18
  const TRACE_ENDPOINT_LABEL = 'trace endpoint'
17
19
 
18
- const { isWebServerSpan, endpointNameFromTags, getStartedSpans } = require('../webspan-utils')
19
-
20
20
  let beforeCh
21
21
  const enterCh = dc.channel('dd-trace:storage:enter')
22
22
  const spanFinishCh = dc.channel('dd-trace:span:finish')