dd-trace 5.81.0 → 5.83.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 (371) hide show
  1. package/LICENSE-3rdparty.csv +78 -79
  2. package/ci/init.js +6 -6
  3. package/index.d.ts +159 -3
  4. package/loader-hook.mjs +8 -3
  5. package/package.json +64 -66
  6. package/packages/datadog-core/src/storage.js +7 -7
  7. package/packages/datadog-core/src/utils/src/parse-tags.js +1 -1
  8. package/packages/datadog-esbuild/index.js +14 -7
  9. package/packages/datadog-esbuild/src/utils.js +14 -2
  10. package/packages/datadog-instrumentations/src/aerospike.js +3 -2
  11. package/packages/datadog-instrumentations/src/ai.js +9 -5
  12. package/packages/datadog-instrumentations/src/amqp10.js +1 -1
  13. package/packages/datadog-instrumentations/src/amqplib.js +4 -4
  14. package/packages/datadog-instrumentations/src/anthropic.js +2 -2
  15. package/packages/datadog-instrumentations/src/apollo-server-core.js +2 -2
  16. package/packages/datadog-instrumentations/src/apollo-server.js +1 -1
  17. package/packages/datadog-instrumentations/src/apollo.js +3 -2
  18. package/packages/datadog-instrumentations/src/avsc.js +1 -1
  19. package/packages/datadog-instrumentations/src/aws-sdk.js +1 -1
  20. package/packages/datadog-instrumentations/src/azure-event-hubs.js +4 -3
  21. package/packages/datadog-instrumentations/src/azure-functions.js +2 -2
  22. package/packages/datadog-instrumentations/src/azure-service-bus.js +3 -4
  23. package/packages/datadog-instrumentations/src/bluebird.js +1 -1
  24. package/packages/datadog-instrumentations/src/bullmq.js +11 -0
  25. package/packages/datadog-instrumentations/src/bunyan.js +1 -1
  26. package/packages/datadog-instrumentations/src/cassandra-driver.js +1 -1
  27. package/packages/datadog-instrumentations/src/child_process.js +3 -3
  28. package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +3 -3
  29. package/packages/datadog-instrumentations/src/couchbase.js +1 -1
  30. package/packages/datadog-instrumentations/src/crypto.js +1 -1
  31. package/packages/datadog-instrumentations/src/cucumber.js +13 -14
  32. package/packages/datadog-instrumentations/src/cypress.js +1 -1
  33. package/packages/datadog-instrumentations/src/dns.js +1 -1
  34. package/packages/datadog-instrumentations/src/elasticsearch.js +1 -1
  35. package/packages/datadog-instrumentations/src/express-mongo-sanitize.js +1 -1
  36. package/packages/datadog-instrumentations/src/express.js +1 -1
  37. package/packages/datadog-instrumentations/src/fs.js +1 -1
  38. package/packages/datadog-instrumentations/src/generic-pool.js +1 -1
  39. package/packages/datadog-instrumentations/src/google-cloud-pubsub.js +137 -15
  40. package/packages/datadog-instrumentations/src/google-cloud-vertexai.js +2 -3
  41. package/packages/datadog-instrumentations/src/google-genai.js +3 -3
  42. package/packages/datadog-instrumentations/src/graphql.js +2 -2
  43. package/packages/datadog-instrumentations/src/grpc/client.js +1 -1
  44. package/packages/datadog-instrumentations/src/grpc/server.js +1 -1
  45. package/packages/datadog-instrumentations/src/helpers/bundler-register.js +1 -1
  46. package/packages/datadog-instrumentations/src/helpers/hook.js +1 -1
  47. package/packages/datadog-instrumentations/src/helpers/hooks.js +4 -1
  48. package/packages/datadog-instrumentations/src/helpers/instrument.js +1 -1
  49. package/packages/datadog-instrumentations/src/helpers/instrumentations.js +4 -3
  50. package/packages/datadog-instrumentations/src/helpers/register.js +9 -11
  51. package/packages/datadog-instrumentations/src/helpers/rewriter/index.js +2 -2
  52. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/bullmq.json +106 -0
  53. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/index.js +2 -1
  54. package/packages/datadog-instrumentations/src/helpers/router-helper.js +1 -1
  55. package/packages/datadog-instrumentations/src/helpers/shared-utils.js +9 -0
  56. package/packages/datadog-instrumentations/src/hono.js +55 -10
  57. package/packages/datadog-instrumentations/src/http/client.js +2 -2
  58. package/packages/datadog-instrumentations/src/ioredis.js +1 -1
  59. package/packages/datadog-instrumentations/src/iovalkey.js +1 -1
  60. package/packages/datadog-instrumentations/src/jest.js +37 -16
  61. package/packages/datadog-instrumentations/src/kafkajs.js +3 -3
  62. package/packages/datadog-instrumentations/src/knex.js +1 -1
  63. package/packages/datadog-instrumentations/src/koa.js +2 -1
  64. package/packages/datadog-instrumentations/src/ldapjs.js +1 -1
  65. package/packages/datadog-instrumentations/src/light-my-request.js +93 -0
  66. package/packages/datadog-instrumentations/src/limitd-client.js +1 -1
  67. package/packages/datadog-instrumentations/src/lodash.js +1 -2
  68. package/packages/datadog-instrumentations/src/mariadb.js +1 -2
  69. package/packages/datadog-instrumentations/src/memcached.js +1 -1
  70. package/packages/datadog-instrumentations/src/mocha/main.js +2 -2
  71. package/packages/datadog-instrumentations/src/mocha/worker.js +1 -1
  72. package/packages/datadog-instrumentations/src/mocha.js +1 -1
  73. package/packages/datadog-instrumentations/src/mongodb-core.js +1 -1
  74. package/packages/datadog-instrumentations/src/mongodb.js +1 -1
  75. package/packages/datadog-instrumentations/src/mongoose.js +1 -1
  76. package/packages/datadog-instrumentations/src/mquery.js +1 -1
  77. package/packages/datadog-instrumentations/src/mysql.js +2 -2
  78. package/packages/datadog-instrumentations/src/mysql2.js +3 -3
  79. package/packages/datadog-instrumentations/src/net.js +14 -6
  80. package/packages/datadog-instrumentations/src/next.js +1 -1
  81. package/packages/datadog-instrumentations/src/nyc.js +2 -2
  82. package/packages/datadog-instrumentations/src/openai.js +2 -2
  83. package/packages/datadog-instrumentations/src/opensearch.js +1 -1
  84. package/packages/datadog-instrumentations/src/oracledb.js +1 -1
  85. package/packages/datadog-instrumentations/src/otel-sdk-trace.js +5 -5
  86. package/packages/datadog-instrumentations/src/pg.js +7 -5
  87. package/packages/datadog-instrumentations/src/pino.js +1 -1
  88. package/packages/datadog-instrumentations/src/playwright.js +4 -4
  89. package/packages/datadog-instrumentations/src/prisma.js +52 -37
  90. package/packages/datadog-instrumentations/src/process.js +1 -1
  91. package/packages/datadog-instrumentations/src/promise-js.js +1 -1
  92. package/packages/datadog-instrumentations/src/promise.js +1 -1
  93. package/packages/datadog-instrumentations/src/protobufjs.js +1 -1
  94. package/packages/datadog-instrumentations/src/q.js +1 -1
  95. package/packages/datadog-instrumentations/src/redis.js +1 -1
  96. package/packages/datadog-instrumentations/src/rhea.js +1 -1
  97. package/packages/datadog-instrumentations/src/selenium.js +3 -3
  98. package/packages/datadog-instrumentations/src/sequelize.js +1 -2
  99. package/packages/datadog-instrumentations/src/sharedb.js +1 -1
  100. package/packages/datadog-instrumentations/src/tedious.js +1 -1
  101. package/packages/datadog-instrumentations/src/undici.js +15 -4
  102. package/packages/datadog-instrumentations/src/url.js +1 -1
  103. package/packages/datadog-instrumentations/src/vitest.js +1 -1
  104. package/packages/datadog-instrumentations/src/vm.js +1 -1
  105. package/packages/datadog-instrumentations/src/when.js +1 -1
  106. package/packages/datadog-instrumentations/src/winston.js +1 -1
  107. package/packages/datadog-instrumentations/src/ws.js +3 -2
  108. package/packages/datadog-plugin-amqp10/src/index.js +1 -1
  109. package/packages/datadog-plugin-amqplib/src/index.js +1 -1
  110. package/packages/datadog-plugin-anthropic/src/index.js +1 -1
  111. package/packages/datadog-plugin-aws-sdk/src/base.js +4 -4
  112. package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/index.js +1 -1
  113. package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +4 -4
  114. package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +2 -2
  115. package/packages/datadog-plugin-aws-sdk/src/util.js +3 -3
  116. package/packages/datadog-plugin-azure-event-hubs/src/index.js +1 -1
  117. package/packages/datadog-plugin-azure-event-hubs/src/producer.js +21 -7
  118. package/packages/datadog-plugin-azure-service-bus/src/index.js +1 -1
  119. package/packages/datadog-plugin-azure-service-bus/src/producer.js +6 -2
  120. package/packages/datadog-plugin-bullmq/src/consumer.js +60 -0
  121. package/packages/datadog-plugin-bullmq/src/index.js +18 -0
  122. package/packages/datadog-plugin-bullmq/src/producer.js +178 -0
  123. package/packages/datadog-plugin-confluentinc-kafka-javascript/src/index.js +1 -1
  124. package/packages/datadog-plugin-cucumber/src/index.js +2 -2
  125. package/packages/datadog-plugin-cypress/src/cypress-plugin.js +2 -2
  126. package/packages/datadog-plugin-cypress/src/plugin.js +1 -1
  127. package/packages/datadog-plugin-dd-trace-api/src/index.js +2 -2
  128. package/packages/datadog-plugin-express/src/code_origin.js +21 -15
  129. package/packages/datadog-plugin-express/src/index.js +1 -1
  130. package/packages/datadog-plugin-fastify/src/code_origin.js +17 -4
  131. package/packages/datadog-plugin-fastify/src/index.js +1 -1
  132. package/packages/datadog-plugin-google-cloud-pubsub/src/client.js +13 -3
  133. package/packages/datadog-plugin-google-cloud-pubsub/src/consumer.js +171 -12
  134. package/packages/datadog-plugin-google-cloud-pubsub/src/index.js +1 -2
  135. package/packages/datadog-plugin-google-cloud-pubsub/src/producer.js +160 -13
  136. package/packages/datadog-plugin-google-cloud-pubsub/src/pubsub-push-subscription.js +217 -0
  137. package/packages/datadog-plugin-google-cloud-vertexai/src/index.js +1 -1
  138. package/packages/datadog-plugin-google-genai/src/index.js +1 -1
  139. package/packages/datadog-plugin-graphql/src/resolve.js +1 -1
  140. package/packages/datadog-plugin-grpc/src/index.js +1 -1
  141. package/packages/datadog-plugin-http/src/client.js +2 -1
  142. package/packages/datadog-plugin-http/src/index.js +25 -5
  143. package/packages/datadog-plugin-http2/src/client.js +2 -2
  144. package/packages/datadog-plugin-http2/src/index.js +1 -1
  145. package/packages/datadog-plugin-jest/src/index.js +2 -2
  146. package/packages/datadog-plugin-kafkajs/src/index.js +1 -1
  147. package/packages/datadog-plugin-langchain/src/index.js +1 -1
  148. package/packages/datadog-plugin-mocha/src/index.js +2 -2
  149. package/packages/datadog-plugin-moleculer/src/index.js +1 -1
  150. package/packages/datadog-plugin-mongodb-core/src/index.js +8 -4
  151. package/packages/datadog-plugin-openai/src/index.js +1 -1
  152. package/packages/datadog-plugin-openai/src/stream-helpers.js +30 -10
  153. package/packages/datadog-plugin-openai/src/tracing.js +2 -2
  154. package/packages/datadog-plugin-playwright/src/index.js +3 -3
  155. package/packages/datadog-plugin-rhea/src/index.js +1 -1
  156. package/packages/datadog-plugin-undici/src/index.js +305 -2
  157. package/packages/datadog-plugin-vitest/src/index.js +5 -5
  158. package/packages/datadog-plugin-ws/src/close.js +56 -3
  159. package/packages/datadog-plugin-ws/src/index.js +4 -0
  160. package/packages/datadog-plugin-ws/src/producer.js +39 -4
  161. package/packages/datadog-plugin-ws/src/receiver.js +39 -3
  162. package/packages/datadog-plugin-ws/src/server.js +13 -1
  163. package/packages/datadog-plugin-ws/src/util.js +107 -0
  164. package/packages/datadog-shimmer/src/shimmer.js +2 -2
  165. package/packages/dd-trace/index.js +19 -0
  166. package/packages/dd-trace/src/aiguard/sdk.js +3 -3
  167. package/packages/dd-trace/src/appsec/graphql.js +2 -2
  168. package/packages/dd-trace/src/appsec/iast/analyzers/code-injection-analyzer.js +1 -1
  169. package/packages/dd-trace/src/appsec/iast/analyzers/command-injection-analyzer.js +1 -1
  170. package/packages/dd-trace/src/appsec/iast/analyzers/cookie-analyzer.js +1 -1
  171. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-base-analyzer.js +1 -1
  172. package/packages/dd-trace/src/appsec/iast/analyzers/injection-analyzer.js +1 -1
  173. package/packages/dd-trace/src/appsec/iast/analyzers/ldap-injection-analyzer.js +1 -1
  174. package/packages/dd-trace/src/appsec/iast/analyzers/nosql-injection-mongodb-analyzer.js +3 -3
  175. package/packages/dd-trace/src/appsec/iast/analyzers/path-traversal-analyzer.js +1 -1
  176. package/packages/dd-trace/src/appsec/iast/analyzers/ssrf-analyzer.js +1 -1
  177. package/packages/dd-trace/src/appsec/iast/analyzers/untrusted-deserialization-analyzer.js +1 -1
  178. package/packages/dd-trace/src/appsec/iast/analyzers/unvalidated-redirect-analyzer.js +1 -1
  179. package/packages/dd-trace/src/appsec/iast/analyzers/weak-cipher-analyzer.js +1 -1
  180. package/packages/dd-trace/src/appsec/iast/analyzers/weak-hash-analyzer.js +3 -2
  181. package/packages/dd-trace/src/appsec/iast/analyzers/weak-randomness-analyzer.js +1 -1
  182. package/packages/dd-trace/src/appsec/iast/iast-plugin.js +3 -3
  183. package/packages/dd-trace/src/appsec/iast/index.js +5 -5
  184. package/packages/dd-trace/src/appsec/iast/security-controls/index.js +1 -1
  185. package/packages/dd-trace/src/appsec/iast/taint-tracking/index.js +1 -2
  186. package/packages/dd-trace/src/appsec/iast/taint-tracking/operations-taint-object.js +1 -1
  187. package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +1 -1
  188. package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +11 -15
  189. package/packages/dd-trace/src/appsec/iast/taint-tracking/taint-tracking-impl.js +1 -1
  190. package/packages/dd-trace/src/appsec/iast/telemetry/namespaces.js +1 -1
  191. package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +3 -3
  192. package/packages/dd-trace/src/appsec/index.js +8 -8
  193. package/packages/dd-trace/src/appsec/rasp/command_injection.js +1 -1
  194. package/packages/dd-trace/src/appsec/rasp/index.js +3 -5
  195. package/packages/dd-trace/src/appsec/rasp/lfi.js +1 -1
  196. package/packages/dd-trace/src/appsec/rc-products.js +10 -0
  197. package/packages/dd-trace/src/appsec/recommended.json +230 -3
  198. package/packages/dd-trace/src/appsec/remote_config.js +177 -0
  199. package/packages/dd-trace/src/appsec/reporter.js +3 -3
  200. package/packages/dd-trace/src/appsec/rule_manager.js +37 -20
  201. package/packages/dd-trace/src/appsec/sdk/index.js +1 -1
  202. package/packages/dd-trace/src/appsec/sdk/set_user.js +1 -1
  203. package/packages/dd-trace/src/appsec/sdk/track_event.js +2 -2
  204. package/packages/dd-trace/src/appsec/sdk/user_blocking.js +2 -2
  205. package/packages/dd-trace/src/appsec/user_tracking.js +2 -2
  206. package/packages/dd-trace/src/appsec/waf/index.js +17 -3
  207. package/packages/dd-trace/src/appsec/waf/waf_manager.js +11 -0
  208. package/packages/dd-trace/src/azure_metadata.js +15 -4
  209. package/packages/dd-trace/src/baggage.js +36 -11
  210. package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/index.js +5 -1
  211. package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/worker/index.js +6 -0
  212. package/packages/dd-trace/src/ci-visibility/early-flake-detection/get-known-tests.js +2 -2
  213. package/packages/dd-trace/src/ci-visibility/exporters/agentless/coverage-writer.js +2 -2
  214. package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +2 -2
  215. package/packages/dd-trace/src/ci-visibility/exporters/agentless/index.js +2 -2
  216. package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +2 -2
  217. package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +4 -3
  218. package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +3 -3
  219. package/packages/dd-trace/src/ci-visibility/exporters/test-worker/index.js +5 -5
  220. package/packages/dd-trace/src/ci-visibility/exporters/test-worker/writer.js +1 -1
  221. package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +2 -2
  222. package/packages/dd-trace/src/ci-visibility/log-submission/log-submission-plugin.js +4 -4
  223. package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +4 -4
  224. package/packages/dd-trace/src/ci-visibility/test-management/get-test-management-tests.js +2 -2
  225. package/packages/dd-trace/src/{config_defaults.js → config/defaults.js} +5 -4
  226. package/packages/dd-trace/src/{config-helper.js → config/helper.js} +88 -15
  227. package/packages/dd-trace/src/{config.js → config/index.js} +115 -67
  228. package/packages/dd-trace/src/config/remote_config.js +202 -0
  229. package/packages/dd-trace/src/{config_stable.js → config/stable.js} +20 -32
  230. package/packages/dd-trace/src/{supported-configurations.json → config/supported-configurations.json} +5 -0
  231. package/packages/dd-trace/src/constants.js +5 -0
  232. package/packages/dd-trace/src/crashtracking/crashtracker.js +11 -2
  233. package/packages/dd-trace/src/datastreams/checkpointer.js +2 -2
  234. package/packages/dd-trace/src/datastreams/index.js +1 -1
  235. package/packages/dd-trace/src/datastreams/pathway.js +7 -7
  236. package/packages/dd-trace/src/datastreams/processor.js +3 -3
  237. package/packages/dd-trace/src/datastreams/writer.js +3 -3
  238. package/packages/dd-trace/src/debugger/config.js +1 -0
  239. package/packages/dd-trace/src/debugger/devtools_client/condition.js +1 -1
  240. package/packages/dd-trace/src/debugger/devtools_client/config.js +1 -1
  241. package/packages/dd-trace/src/debugger/devtools_client/index.js +7 -2
  242. package/packages/dd-trace/src/debugger/devtools_client/send.js +6 -6
  243. package/packages/dd-trace/src/debugger/devtools_client/session.js +1 -1
  244. package/packages/dd-trace/src/debugger/devtools_client/snapshot/collector.js +5 -5
  245. package/packages/dd-trace/src/debugger/devtools_client/snapshot/constants.js +1 -1
  246. package/packages/dd-trace/src/debugger/devtools_client/snapshot/index.js +2 -2
  247. package/packages/dd-trace/src/debugger/devtools_client/state.js +1 -1
  248. package/packages/dd-trace/src/debugger/devtools_client/status.js +2 -2
  249. package/packages/dd-trace/src/debugger/index.js +84 -16
  250. package/packages/dd-trace/src/dogstatsd.js +5 -4
  251. package/packages/dd-trace/src/encode/0.4.js +3 -3
  252. package/packages/dd-trace/src/encode/agentless-ci-visibility.js +2 -2
  253. package/packages/dd-trace/src/encode/coverage-ci-visibility.js +1 -1
  254. package/packages/dd-trace/src/encode/span-stats.js +6 -1
  255. package/packages/dd-trace/src/exporter.js +2 -2
  256. package/packages/dd-trace/src/exporters/agent/index.js +2 -4
  257. package/packages/dd-trace/src/exporters/agent/writer.js +9 -14
  258. package/packages/dd-trace/src/exporters/common/agent-info-exporter.js +2 -2
  259. package/packages/dd-trace/src/exporters/common/docker.js +2 -2
  260. package/packages/dd-trace/src/exporters/common/request.js +3 -3
  261. package/packages/dd-trace/src/exporters/common/util.js +2 -2
  262. package/packages/dd-trace/src/exporters/common/writer.js +1 -1
  263. package/packages/dd-trace/src/exporters/span-stats/index.js +1 -1
  264. package/packages/dd-trace/src/external-logger/src/index.js +1 -2
  265. package/packages/dd-trace/src/flare/index.js +2 -2
  266. package/packages/dd-trace/src/guardrails/index.js +6 -3
  267. package/packages/dd-trace/src/guardrails/telemetry.js +1 -1
  268. package/packages/dd-trace/src/id.js +1 -1
  269. package/packages/dd-trace/src/index.js +4 -4
  270. package/packages/dd-trace/src/lambda/handler.js +5 -5
  271. package/packages/dd-trace/src/lambda/index.js +2 -2
  272. package/packages/dd-trace/src/lambda/runtime/patch.js +6 -6
  273. package/packages/dd-trace/src/lambda/runtime/ritm.js +3 -3
  274. package/packages/dd-trace/src/llmobs/constants/tags.js +14 -1
  275. package/packages/dd-trace/src/llmobs/index.js +10 -11
  276. package/packages/dd-trace/src/llmobs/noop.js +2 -0
  277. package/packages/dd-trace/src/llmobs/plugins/ai/index.js +38 -7
  278. package/packages/dd-trace/src/llmobs/plugins/ai/util.js +30 -9
  279. package/packages/dd-trace/src/llmobs/plugins/bedrockruntime.js +3 -3
  280. package/packages/dd-trace/src/llmobs/plugins/genai/util.js +2 -2
  281. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chain.js +1 -1
  282. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chat_model.js +1 -1
  283. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/embedding.js +1 -1
  284. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/llm.js +1 -1
  285. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/vectorstore.js +1 -1
  286. package/packages/dd-trace/src/llmobs/plugins/openai/constants.js +16 -0
  287. package/packages/dd-trace/src/llmobs/plugins/openai/index.js +19 -5
  288. package/packages/dd-trace/src/llmobs/plugins/openai/utils.js +22 -10
  289. package/packages/dd-trace/src/llmobs/plugins/vertexai.js +1 -1
  290. package/packages/dd-trace/src/llmobs/sdk.js +46 -26
  291. package/packages/dd-trace/src/llmobs/span_processor.js +26 -20
  292. package/packages/dd-trace/src/llmobs/tagger.js +175 -1
  293. package/packages/dd-trace/src/llmobs/telemetry.js +3 -4
  294. package/packages/dd-trace/src/llmobs/writers/base.js +117 -38
  295. package/packages/dd-trace/src/llmobs/writers/spans.js +5 -5
  296. package/packages/dd-trace/src/log/index.js +5 -5
  297. package/packages/dd-trace/src/noop/proxy.js +5 -5
  298. package/packages/dd-trace/src/noop/span.js +1 -1
  299. package/packages/dd-trace/src/openfeature/index.js +2 -2
  300. package/packages/dd-trace/src/openfeature/noop.js +14 -14
  301. package/packages/dd-trace/src/openfeature/remote_config.js +31 -0
  302. package/packages/dd-trace/src/openfeature/writers/base.js +12 -13
  303. package/packages/dd-trace/src/openfeature/writers/exposures.js +9 -9
  304. package/packages/dd-trace/src/opentelemetry/context_manager.js +2 -2
  305. package/packages/dd-trace/src/opentelemetry/logs/logger.js +1 -1
  306. package/packages/dd-trace/src/opentelemetry/logs/logger_provider.js +4 -4
  307. package/packages/dd-trace/src/opentelemetry/logs/otlp_transformer.js +9 -8
  308. package/packages/dd-trace/src/opentelemetry/metrics/instruments.js +3 -3
  309. package/packages/dd-trace/src/opentelemetry/metrics/meter.js +2 -2
  310. package/packages/dd-trace/src/opentelemetry/metrics/otlp_transformer.js +4 -4
  311. package/packages/dd-trace/src/opentelemetry/metrics/periodic_metric_reader.js +36 -11
  312. package/packages/dd-trace/src/opentelemetry/otlp/otlp_http_exporter_base.js +2 -2
  313. package/packages/dd-trace/src/opentelemetry/otlp/otlp_transformer_base.js +11 -10
  314. package/packages/dd-trace/src/opentelemetry/otlp/protobuf_loader.js +1 -1
  315. package/packages/dd-trace/src/opentelemetry/span.js +2 -2
  316. package/packages/dd-trace/src/opentelemetry/tracer.js +51 -9
  317. package/packages/dd-trace/src/opentracing/propagation/text_map.js +68 -28
  318. package/packages/dd-trace/src/opentracing/span.js +7 -7
  319. package/packages/dd-trace/src/opentracing/tracer.js +5 -5
  320. package/packages/dd-trace/src/payload-tagging/index.js +6 -2
  321. package/packages/dd-trace/src/plugin_manager.js +8 -6
  322. package/packages/dd-trace/src/plugins/apollo.js +1 -1
  323. package/packages/dd-trace/src/plugins/ci_plugin.js +27 -27
  324. package/packages/dd-trace/src/plugins/database.js +1 -1
  325. package/packages/dd-trace/src/plugins/index.js +5 -1
  326. package/packages/dd-trace/src/plugins/log_plugin.js +1 -1
  327. package/packages/dd-trace/src/plugins/outbound.js +1 -1
  328. package/packages/dd-trace/src/plugins/tracing.js +1 -1
  329. package/packages/dd-trace/src/plugins/util/ci.js +5 -8
  330. package/packages/dd-trace/src/plugins/util/git-cache.js +3 -3
  331. package/packages/dd-trace/src/plugins/util/git.js +8 -8
  332. package/packages/dd-trace/src/plugins/util/stacktrace.js +1 -1
  333. package/packages/dd-trace/src/plugins/util/test.js +25 -25
  334. package/packages/dd-trace/src/plugins/util/user-provided-git.js +41 -43
  335. package/packages/dd-trace/src/plugins/util/web.js +8 -5
  336. package/packages/dd-trace/src/priority_sampler.js +15 -16
  337. package/packages/dd-trace/src/process-tags/index.js +31 -29
  338. package/packages/dd-trace/src/profiler.js +4 -39
  339. package/packages/dd-trace/src/profiling/config.js +104 -50
  340. package/packages/dd-trace/src/profiling/exporter_cli.js +8 -8
  341. package/packages/dd-trace/src/profiling/exporters/agent.js +6 -6
  342. package/packages/dd-trace/src/profiling/exporters/event_serializer.js +9 -2
  343. package/packages/dd-trace/src/profiling/index.js +1 -1
  344. package/packages/dd-trace/src/profiling/libuv-size.js +1 -1
  345. package/packages/dd-trace/src/profiling/profiler.js +61 -7
  346. package/packages/dd-trace/src/profiling/profilers/event_plugins/event.js +1 -1
  347. package/packages/dd-trace/src/profiling/profilers/events.js +2 -2
  348. package/packages/dd-trace/src/profiling/profilers/wall.js +4 -4
  349. package/packages/dd-trace/src/proxy.js +43 -20
  350. package/packages/dd-trace/src/remote_config/capabilities.js +3 -0
  351. package/packages/dd-trace/src/remote_config/index.js +541 -137
  352. package/packages/dd-trace/src/require-package-json.js +1 -1
  353. package/packages/dd-trace/src/ritm.js +58 -31
  354. package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +3 -3
  355. package/packages/dd-trace/src/serverless.js +17 -1
  356. package/packages/dd-trace/src/service-naming/schemas/v0/messaging.js +8 -0
  357. package/packages/dd-trace/src/service-naming/schemas/v1/messaging.js +8 -0
  358. package/packages/dd-trace/src/span_format.js +1 -1
  359. package/packages/dd-trace/src/span_processor.js +4 -4
  360. package/packages/dd-trace/src/span_stats.js +6 -4
  361. package/packages/dd-trace/src/standalone/index.js +1 -1
  362. package/packages/dd-trace/src/startup-log.js +7 -16
  363. package/packages/dd-trace/src/telemetry/dependencies.js +3 -3
  364. package/packages/dd-trace/src/telemetry/endpoints.js +75 -13
  365. package/packages/dd-trace/src/telemetry/logs/index.js +1 -1
  366. package/packages/dd-trace/src/telemetry/send-data.js +103 -4
  367. package/packages/dd-trace/src/telemetry/telemetry.js +238 -114
  368. package/packages/dd-trace/src/tracer.js +3 -3
  369. package/packages/dd-trace/src/tracer_metadata.js +19 -15
  370. package/packages/dd-trace/src/remote_config/manager.js +0 -368
  371. /package/packages/dd-trace/src/{git_properties.js → config/git_properties.js} +0 -0
@@ -1,13 +1,14 @@
1
1
  'use strict'
2
2
 
3
3
  const lookup = require('dns').lookup // cache to avoid instrumentation
4
- const request = require('./exporters/common/request')
5
4
  const dgram = require('dgram')
6
5
  const isIP = require('net').isIP
7
- const log = require('./log')
8
6
  const { URL, format } = require('url')
7
+
8
+ const request = require('./exporters/common/request')
9
+ const log = require('./log')
9
10
  const Histogram = require('./histogram')
10
- const defaults = require('./config_defaults')
11
+ const defaults = require('./config/defaults')
11
12
 
12
13
  const MAX_BUFFER_SIZE = 1024 // limit from the agent
13
14
 
@@ -359,7 +360,7 @@ class CustomMetrics {
359
360
  // TODO(bengl) this magic number should be configurable
360
361
  setInterval(flush, 10 * 1000).unref()
361
362
 
362
- process.once('beforeExit', flush)
363
+ globalThis[Symbol.for('dd-trace')].beforeExitHandlers.add(flush)
363
364
  }
364
365
 
365
366
  increment (stat, value = 1, tags) {
@@ -1,11 +1,11 @@
1
1
  'use strict'
2
2
 
3
- const { truncateSpan, normalizeSpan } = require('./tags-processors')
4
3
  const { MsgpackChunk, MsgpackEncoder } = require('../msgpack')
5
4
  const log = require('../log')
6
5
  const { isTrue } = require('../util')
7
6
  const { memoize } = require('../log/utils')
8
- const { getEnvironmentVariable } = require('../config-helper')
7
+ const { getValueFromEnvSources } = require('../config/helper')
8
+ const { truncateSpan, normalizeSpan } = require('./tags-processors')
9
9
 
10
10
  const SOFT_LIMIT = 8 * 1024 * 1024 // 8MB
11
11
 
@@ -31,7 +31,7 @@ class AgentEncoder {
31
31
  this._stringBytes = new MsgpackChunk()
32
32
  this._writer = writer
33
33
  this._reset()
34
- this._debugEncoding = isTrue(getEnvironmentVariable('DD_TRACE_ENCODING_DEBUG'))
34
+ this._debugEncoding = isTrue(getValueFromEnvSources('DD_TRACE_ENCODING_DEBUG'))
35
35
  this._config = this._writer?._config
36
36
  }
37
37
 
@@ -1,6 +1,4 @@
1
1
  'use strict'
2
- const { truncateSpan, normalizeSpan } = require('./tags-processors')
3
- const { AgentEncoder } = require('./0.4')
4
2
  const { version: ddTraceVersion } = require('../../../../package.json')
5
3
  const { ITR_CORRELATION_ID } = require('../../src/plugins/util/test')
6
4
  const id = require('../../src/id')
@@ -9,6 +7,8 @@ const {
9
7
  TELEMETRY_ENDPOINT_PAYLOAD_SERIALIZATION_MS,
10
8
  TELEMETRY_ENDPOINT_PAYLOAD_EVENTS_COUNT
11
9
  } = require('../ci-visibility/telemetry')
10
+ const { AgentEncoder } = require('./0.4')
11
+ const { truncateSpan, normalizeSpan } = require('./tags-processors')
12
12
 
13
13
  const ENCODING_VERSION = 1
14
14
  const ALLOWED_CONTENT_TYPES = new Set(['test_session_end', 'test_module_end', 'test_suite_end', 'test'])
@@ -1,5 +1,4 @@
1
1
  'use strict'
2
- const { AgentEncoder } = require('./0.4')
3
2
  const { MsgpackChunk } = require('../msgpack')
4
3
 
5
4
  const {
@@ -8,6 +7,7 @@ const {
8
7
  TELEMETRY_ENDPOINT_PAYLOAD_EVENTS_COUNT
9
8
  } = require('../ci-visibility/telemetry')
10
9
  const FormData = require('../exporters/common/form-data')
10
+ const { AgentEncoder } = require('./0.4')
11
11
 
12
12
  const COVERAGE_PAYLOAD_VERSION = 2
13
13
  const COVERAGE_KEYS_LENGTH = 2
@@ -95,7 +95,7 @@ class SpanStatsEncoder extends AgentEncoder {
95
95
  }
96
96
 
97
97
  _encode (bytes, stats) {
98
- this._encodeMapPrefix(bytes, 8)
98
+ this._encodeMapPrefix(bytes, stats.ProcessTags ? 9 : 8)
99
99
 
100
100
  this._encodeString(bytes, 'Hostname')
101
101
  this._encodeString(bytes, stats.Hostname)
@@ -123,6 +123,11 @@ class SpanStatsEncoder extends AgentEncoder {
123
123
 
124
124
  this._encodeString(bytes, 'Sequence')
125
125
  this._encodeLong(bytes, stats.Sequence)
126
+
127
+ if (stats.ProcessTags) {
128
+ this._encodeString(bytes, 'ProcessTags')
129
+ this._encodeString(bytes, stats.ProcessTags)
130
+ }
126
131
  }
127
132
  }
128
133
 
@@ -1,9 +1,9 @@
1
1
  'use strict'
2
2
 
3
- const exporters = require('../../../ext/exporters')
4
3
  const fs = require('fs')
4
+ const exporters = require('../../../ext/exporters')
5
+ const { getEnvironmentVariable } = require('../../dd-trace/src/config/helper')
5
6
  const constants = require('./constants')
6
- const { getEnvironmentVariable } = require('../../dd-trace/src/config-helper')
7
7
 
8
8
  module.exports = function getExporter (name) {
9
9
  switch (name) {
@@ -2,8 +2,8 @@
2
2
 
3
3
  const { URL, format } = require('url')
4
4
  const log = require('../../log')
5
+ const defaults = require('../../config/defaults')
5
6
  const Writer = require('./writer')
6
- const defaults = require('../../config_defaults')
7
7
 
8
8
  class AgentExporter {
9
9
  #timer
@@ -31,9 +31,7 @@ class AgentExporter {
31
31
  config
32
32
  })
33
33
 
34
- process.once('beforeExit', () => {
35
- this.flush()
36
- })
34
+ globalThis[Symbol.for('dd-trace')].beforeExitHandlers.add(this.flush.bind(this))
37
35
  }
38
36
 
39
37
  setUrl (url) {
@@ -1,5 +1,7 @@
1
1
  'use strict'
2
2
 
3
+ const { inspect } = require('util')
4
+
3
5
  const request = require('../common/request')
4
6
  const { startupLog } = require('../../startup-log')
5
7
  const runtimeMetrics = require('../../runtime_metrics')
@@ -26,7 +28,10 @@ class AgentWriter extends BaseWriter {
26
28
  runtimeMetrics.increment(`${METRIC_PREFIX}.requests`, true)
27
29
 
28
30
  const { _headers, _lookup, _protocolVersion, _url } = this
29
- makeRequest(_protocolVersion, data, count, _url, _headers, _lookup, true, (err, res, status) => {
31
+ makeRequest(_protocolVersion, data, count, _url, _headers, _lookup, (err, res, status) => {
32
+ // Note that logging will only happen once, regardless of how many times this is called.
33
+ startupLog(status !== 404 && status !== 200 ? { status, message: err?.message ?? inspect(err) } : undefined)
34
+
30
35
  if (status) {
31
36
  runtimeMetrics.increment(`${METRIC_PREFIX}.responses`, true)
32
37
  runtimeMetrics.increment(`${METRIC_PREFIX}.responses.by.status`, `status:${status}`, true)
@@ -39,8 +44,6 @@ class AgentWriter extends BaseWriter {
39
44
  }
40
45
  }
41
46
 
42
- startupLog({ agentError: err })
43
-
44
47
  if (err) {
45
48
  log.errorWithoutTelemetry('Error sending payload to the agent (status code: %s)', err.status, err)
46
49
  done()
@@ -68,7 +71,7 @@ function getEncoder (protocolVersion) {
68
71
  : require('../../encode/0.4').AgentEncoder
69
72
  }
70
73
 
71
- function makeRequest (version, data, count, url, headers, lookup, needsStartupLog, cb) {
74
+ function makeRequest (version, data, count, url, headers, lookup, cb) {
72
75
  const options = {
73
76
  path: `/v${version}/traces`,
74
77
  method: 'PUT',
@@ -79,7 +82,7 @@ function makeRequest (version, data, count, url, headers, lookup, needsStartupLo
79
82
  'X-Datadog-Trace-Count': String(count),
80
83
  'Datadog-Meta-Lang': 'nodejs',
81
84
  'Datadog-Meta-Lang-Version': process.version,
82
- 'Datadog-Meta-Lang-Interpreter': process.jsEngine || 'v8'
85
+ 'Datadog-Meta-Lang-Interpreter': process.versions.bun ? 'JavaScriptCore' : 'v8'
83
86
  },
84
87
  lookup,
85
88
  url
@@ -87,15 +90,7 @@ function makeRequest (version, data, count, url, headers, lookup, needsStartupLo
87
90
 
88
91
  log.debug('Request to the agent: %j', options)
89
92
 
90
- request(data, options, (err, res, status) => {
91
- if (needsStartupLog) {
92
- // Note that logging will only happen once, regardless of how many times this is called.
93
- startupLog({
94
- agentError: status !== 404 && status !== 200 ? err : undefined
95
- })
96
- }
97
- cb(err, res, status)
98
- })
93
+ request(data, options, cb)
99
94
  }
100
95
 
101
96
  module.exports = AgentWriter
@@ -2,9 +2,9 @@
2
2
 
3
3
  const { URL, format } = require('url')
4
4
 
5
- const request = require('./request')
6
- const defaults = require('../../config_defaults')
5
+ const defaults = require('../../config/defaults')
7
6
  const { incrementCountMetric, TELEMETRY_EVENTS_ENQUEUED_FOR_SERIALIZATION } = require('../../ci-visibility/telemetry')
7
+ const request = require('./request')
8
8
 
9
9
  function fetchAgentInfo (url, callback) {
10
10
  request('', {
@@ -1,9 +1,9 @@
1
1
  'use strict'
2
2
 
3
3
  const fs = require('fs')
4
- const { getEnvironmentVariable } = require('../../config-helper')
4
+ const { getValueFromEnvSources } = require('../../config/helper')
5
5
 
6
- const DD_EXTERNAL_ENV = getEnvironmentVariable('DD_EXTERNAL_ENV')
6
+ const DD_EXTERNAL_ENV = getValueFromEnvSources('DD_EXTERNAL_ENV')
7
7
 
8
8
  // The second part is the PCF / Garden regexp. We currently assume no suffix($) to avoid matching pod UIDs
9
9
  // See https://github.com/DataDog/datadog-agent/blob/7.40.x/pkg/util/cgroups/reader.go#L50
@@ -8,11 +8,11 @@ const http = require('http')
8
8
  const https = require('https')
9
9
  const zlib = require('zlib')
10
10
 
11
+ const { storage } = require('../../../../datadog-core')
12
+ const log = require('../../log')
11
13
  const { urlToHttpOptions } = require('./url-to-http-options-polyfill')
12
14
  const docker = require('./docker')
13
15
  const { httpAgent, httpsAgent } = require('./agents')
14
- const { storage } = require('../../../../datadog-core')
15
- const log = require('../../log')
16
16
 
17
17
  const maxActiveRequests = 8
18
18
 
@@ -77,7 +77,7 @@ function request (data, options, callback) {
77
77
  res.on('data', chunk => {
78
78
  chunks.push(chunk)
79
79
  })
80
- res.on('end', () => {
80
+ res.once('end', () => {
81
81
  activeRequests--
82
82
  const buffer = Buffer.concat(chunks)
83
83
 
@@ -1,12 +1,12 @@
1
1
  'use strict'
2
2
 
3
- const { getEnvironmentVariable } = require('../../config-helper')
3
+ const { getValueFromEnvSources } = require('../../config/helper')
4
4
 
5
5
  function safeJSONStringify (value) {
6
6
  return JSON.stringify(
7
7
  value,
8
8
  (key, value) => key === 'dd-api-key' ? undefined : value,
9
- getEnvironmentVariable('DD_TRACE_BEAUTIFUL_LOGS') ? 2 : undefined
9
+ getValueFromEnvSources('DD_TRACE_BEAUTIFUL_LOGS') ? 2 : undefined
10
10
  )
11
11
  }
12
12
 
@@ -1,7 +1,7 @@
1
1
  'use strict'
2
2
 
3
- const request = require('./request')
4
3
  const log = require('../../log')
4
+ const request = require('./request')
5
5
  const { safeJSONStringify } = require('./util')
6
6
 
7
7
  class Writer {
@@ -2,8 +2,8 @@
2
2
 
3
3
  const { URL, format } = require('url')
4
4
 
5
+ const defaults = require('../../config/defaults')
5
6
  const { Writer } = require('./writer')
6
- const defaults = require('../../config_defaults')
7
7
 
8
8
  class SpanStatsExporter {
9
9
  constructor (config) {
@@ -1,8 +1,7 @@
1
1
  'use strict'
2
2
 
3
- const tracerLogger = require('../../log')// path to require tracer logger
4
-
5
3
  const https = require('https')
4
+ const tracerLogger = require('../../log')// path to require tracer logger
6
5
 
7
6
  class ExternalLogger {
8
7
  // Note: these attribute names match the corresponding entry in the JSON payload.
@@ -2,10 +2,10 @@
2
2
 
3
3
  const log = require('../log')
4
4
  const startupLog = require('../startup-log')
5
- const FlareFile = require('./file')
6
5
  const { LogChannel } = require('../log/channels')
7
6
  const request = require('../exporters/common/request')
8
7
  const FormData = require('../exporters/common/form-data')
8
+ const FlareFile = require('./file')
9
9
 
10
10
  const MAX_LOG_SIZE = 12 * 1024 * 1024 // 12MB soft limit
11
11
  const TIMEOUT = 20 * 1000 * 60
@@ -64,7 +64,7 @@ const flare = {
64
64
  },
65
65
 
66
66
  _sendFile (task, file, filename) {
67
- if (!file) return
67
+ if (!file || file.length === 0) return
68
68
 
69
69
  const form = new FormData()
70
70
 
@@ -2,10 +2,11 @@
2
2
 
3
3
  var path = require('path')
4
4
  var Module = require('module')
5
+
6
+ var nodeVersion = require('../../../../version')
5
7
  var isTrue = require('./util').isTrue
6
8
  var log = require('./log')
7
9
  var telemetry = require('./telemetry')
8
- var nodeVersion = require('../../../../version')
9
10
 
10
11
  var NODE_MAJOR = nodeVersion.NODE_MAJOR
11
12
 
@@ -14,7 +15,9 @@ function guard (fn) {
14
15
  var clobberBailout = false
15
16
  var forced = isTrue(process.env.DD_INJECT_FORCE)
16
17
  var engines = require('../../../../package.json').engines
17
- var minMajor = parseInt(engines.node.replace(/[^0-9]/g, ''))
18
+ var versions = engines.node.match(/^>=(\d+) <(\d+)$/)
19
+ var minMajor = versions[1]
20
+ var nextMajor = versions[2]
18
21
  var version = process.versions.node
19
22
 
20
23
  if (process.env.DD_INJECTION_ENABLED) {
@@ -40,7 +43,7 @@ function guard (fn) {
40
43
 
41
44
  // If the runtime doesn't match the engines field in package.json, then we
42
45
  // should not initialize the tracer.
43
- if (!clobberBailout && NODE_MAJOR < minMajor) {
46
+ if (!clobberBailout && (NODE_MAJOR < minMajor || NODE_MAJOR >= nextMajor)) {
44
47
  initBailout = true
45
48
  telemetry([
46
49
  { name: 'abort', tags: ['reason:incompatible_runtime'] },
@@ -80,7 +80,7 @@ function sendTelemetry (name, tags, resultMetadata) {
80
80
  proc.on('error', function () {
81
81
  log.error('Failed to spawn telemetry forwarder')
82
82
  })
83
- proc.on('exit', function (code) {
83
+ proc.once('exit', function (code) {
84
84
  if (code !== 0) {
85
85
  log.error('Telemetry forwarder exited with code', code)
86
86
  }
@@ -238,7 +238,7 @@ function writeUInt32BE (buffer, value, offset) {
238
238
  }
239
239
 
240
240
  /**
241
- * @param {string} value
241
+ * @param {string} [value]
242
242
  * @param {number} [radix]
243
243
  * @returns {Identifier}
244
244
  */
@@ -1,14 +1,14 @@
1
1
  'use strict'
2
2
 
3
+ const { getValueFromEnvSources } = require('./config/helper')
3
4
  const { isFalse } = require('./util')
4
- const { getEnvironmentVariable } = require('../../dd-trace/src/config-helper')
5
5
 
6
6
  // Global `jest` is only present in Jest workers.
7
7
  const inJestWorker = typeof jest !== 'undefined'
8
8
 
9
- const ddTraceDisabled = getEnvironmentVariable('DD_TRACE_ENABLED')
10
- ? isFalse(getEnvironmentVariable('DD_TRACE_ENABLED'))
11
- : String(getEnvironmentVariable('OTEL_TRACES_EXPORTER')).toLowerCase() === 'none'
9
+ const ddTraceDisabled = getValueFromEnvSources('DD_TRACE_ENABLED')
10
+ ? isFalse(getValueFromEnvSources('DD_TRACE_ENABLED'))
11
+ : String(getValueFromEnvSources('OTEL_TRACES_EXPORTER')).toLowerCase() === 'none'
12
12
 
13
13
  module.exports = ddTraceDisabled || inJestWorker
14
14
  ? require('./noop/proxy')
@@ -3,8 +3,8 @@
3
3
  const log = require('../log')
4
4
  const { channel } = require('../../../datadog-instrumentations/src/helpers/instrument')
5
5
  const { ERROR_MESSAGE, ERROR_TYPE } = require('../constants')
6
+ const { getValueFromEnvSources } = require('../config/helper')
6
7
  const { ImpendingTimeout } = require('./runtime/errors')
7
- const { getEnvironmentVariable } = require('../config-helper')
8
8
 
9
9
  const globalTracer = global._ddtrace
10
10
  const tracer = globalTracer._tracer
@@ -21,12 +21,12 @@ let __lambdaTimeout
21
21
  * Publishes to the `apm:aws:lambda:timeout` channel when
22
22
  * the AWS Lambda run time is about to end.
23
23
  *
24
- * @param {*} context AWS Lambda context object.
24
+ * @param {object} context AWS Lambda context object.
25
25
  */
26
26
  function checkTimeout (context) {
27
27
  const remainingTimeInMillis = context.getRemainingTimeInMillis()
28
28
 
29
- let apmFlushDeadline = Number.parseInt(getEnvironmentVariable('DD_APM_FLUSH_DEADLINE_MILLISECONDS')) || 100
29
+ let apmFlushDeadline = Number.parseInt(getValueFromEnvSources('DD_APM_FLUSH_DEADLINE_MILLISECONDS')) || 100
30
30
  apmFlushDeadline = apmFlushDeadline < 0 ? 100 : apmFlushDeadline
31
31
 
32
32
  __lambdaTimeout = setTimeout(() => {
@@ -63,7 +63,7 @@ function crashFlush () {
63
63
  /**
64
64
  * Extracts the context from the given Lambda handler arguments.
65
65
  *
66
- * @param {*} args any amount of arguments
66
+ * @param {unknown[]} args any amount of arguments
67
67
  * @returns the context, if extraction was succesful.
68
68
  */
69
69
  function extractContext (args) {
@@ -80,7 +80,7 @@ function extractContext (args) {
80
80
  /**
81
81
  * Patches your AWS Lambda handler function to add some tracing support.
82
82
  *
83
- * @param {*} lambdaHandler a Lambda handler function.
83
+ * @param {Function} lambdaHandler a Lambda handler function.
84
84
  */
85
85
  exports.datadog = function datadog (lambdaHandler) {
86
86
  return (...args) => {
@@ -1,13 +1,13 @@
1
1
  'use strict'
2
2
 
3
+ const { getValueFromEnvSources } = require('../config/helper')
3
4
  const { registerLambdaHook } = require('./runtime/ritm')
4
- const { getEnvironmentVariable } = require('../config-helper')
5
5
 
6
6
  /**
7
7
  * It is safe to do it this way, since customers will never be expected to disable
8
8
  * this specific instrumentation through the init config object.
9
9
  */
10
- const _DD_TRACE_DISABLED_INSTRUMENTATIONS = getEnvironmentVariable('DD_TRACE_DISABLED_INSTRUMENTATIONS') || ''
10
+ const _DD_TRACE_DISABLED_INSTRUMENTATIONS = getValueFromEnvSources('DD_TRACE_DISABLED_INSTRUMENTATIONS') || ''
11
11
  const _disabledInstrumentations = new Set(
12
12
  _DD_TRACE_DISABLED_INSTRUMENTATIONS ? _DD_TRACE_DISABLED_INSTRUMENTATIONS.split(',') : []
13
13
  )
@@ -2,17 +2,17 @@
2
2
 
3
3
  const path = require('path')
4
4
 
5
- const { _extractModuleNameAndHandlerPath, _extractModuleRootAndHandler, _getLambdaFilePaths } = require('./ritm')
6
5
  const { datadog } = require('../handler')
7
6
  const { addHook } = require('../../../../datadog-instrumentations/src/helpers/instrument')
8
7
  const shimmer = require('../../../../datadog-shimmer')
9
- const { getEnvironmentVariable } = require('../../config-helper')
8
+ const { getEnvironmentVariable, getValueFromEnvSources } = require('../../config/helper')
9
+ const { _extractModuleNameAndHandlerPath, _extractModuleRootAndHandler, _getLambdaFilePaths } = require('./ritm')
10
10
 
11
11
  /**
12
12
  * Patches a Datadog Lambda module by calling `patchDatadogLambdaHandler`
13
13
  * with the handler name `datadog`.
14
14
  *
15
- * @param {*} datadogLambdaModule node module to be patched.
15
+ * @param {object} datadogLambdaModule node module to be patched.
16
16
  * @returns a Datadog Lambda module with the `datadog` function from
17
17
  * `datadog-lambda-js` patched.
18
18
  */
@@ -27,7 +27,7 @@ const patchDatadogLambdaModule = (datadogLambdaModule) => {
27
27
  * Datadog instrumentation by getting the Lambda handler from its
28
28
  * arguments.
29
29
  *
30
- * @param {*} datadogHandler the Datadog Lambda handler to destructure.
30
+ * @param {Function} datadogHandler the Datadog Lambda handler to destructure.
31
31
  * @returns the datadogHandler with its arguments patched.
32
32
  */
33
33
  function patchDatadogLambdaHandler (datadogHandler) {
@@ -51,7 +51,7 @@ const patchLambdaModule = (handlerPath) => (lambdaModule) => {
51
51
  /**
52
52
  * Patches a Lambda handler in order to do Datadog instrumentation.
53
53
  *
54
- * @param {*} lambdaHandler the Lambda handler to be patched.
54
+ * @param {Function} lambdaHandler the Lambda handler to be patched.
55
55
  * @returns a function which patches the given Lambda handler.
56
56
  */
57
57
  function patchLambdaHandler (lambdaHandler) {
@@ -59,7 +59,7 @@ function patchLambdaHandler (lambdaHandler) {
59
59
  }
60
60
 
61
61
  const lambdaTaskRoot = getEnvironmentVariable('LAMBDA_TASK_ROOT')
62
- const originalLambdaHandler = getEnvironmentVariable('DD_LAMBDA_HANDLER')
62
+ const originalLambdaHandler = getValueFromEnvSources('DD_LAMBDA_HANDLER')
63
63
 
64
64
  if (originalLambdaHandler === undefined) {
65
65
  // Instrumentation is done manually.
@@ -10,7 +10,7 @@
10
10
  const path = require('path')
11
11
 
12
12
  const log = require('../../log')
13
- const { getEnvironmentVariable } = require('../../config-helper')
13
+ const { getEnvironmentVariable, getValueFromEnvSources } = require('../../config/helper')
14
14
  const Hook = require('../../../../datadog-instrumentations/src/helpers/hook')
15
15
  const instrumentations = require('../../../../datadog-instrumentations/src/helpers/instrumentations')
16
16
  const {
@@ -61,7 +61,7 @@ function _extractModuleNameAndHandlerPath (handler) {
61
61
  /**
62
62
  * Returns all possible paths of the files to be patched when required.
63
63
  *
64
- * @param {*} lambdaStylePath the path comprised of the `LAMBDA_TASK_ROOT`,
64
+ * @param {string} lambdaStylePath the path comprised of the `LAMBDA_TASK_ROOT`,
65
65
  * the root of the module of the Lambda handler, and the module name.
66
66
  * @returns the lambdaStylePath with appropiate extensions for the hook.
67
67
  */
@@ -79,7 +79,7 @@ function _getLambdaFilePaths (lambdaStylePath) {
79
79
  */
80
80
  const registerLambdaHook = () => {
81
81
  const lambdaTaskRoot = getEnvironmentVariable('LAMBDA_TASK_ROOT')
82
- const originalLambdaHandler = getEnvironmentVariable('DD_LAMBDA_HANDLER')
82
+ const originalLambdaHandler = getValueFromEnvSources('DD_LAMBDA_HANDLER')
83
83
 
84
84
  if (originalLambdaHandler !== undefined && lambdaTaskRoot !== undefined) {
85
85
  const [moduleRoot, moduleAndHandler] = _extractModuleRootAndHandler(originalLambdaHandler)
@@ -17,6 +17,9 @@ module.exports = {
17
17
  TRACE_ID: '_ml_obs.trace_id',
18
18
  PROPAGATED_TRACE_ID_KEY: '_dd.p.llmobs_trace_id',
19
19
  ROOT_PARENT_ID: 'undefined',
20
+ DEFAULT_PROMPT_NAME: 'unnamed-prompt',
21
+ INTERNAL_CONTEXT_VARIABLE_KEYS: '_dd_context_variable_keys',
22
+ INTERNAL_QUERY_VARIABLE_KEYS: '_dd_query_variable_keys',
20
23
 
21
24
  MODEL_NAME: '_ml_obs.meta.model_name',
22
25
  MODEL_PROVIDER: '_ml_obs.meta.model_provider',
@@ -24,6 +27,7 @@ module.exports = {
24
27
  INPUT_DOCUMENTS: '_ml_obs.meta.input.documents',
25
28
  INPUT_MESSAGES: '_ml_obs.meta.input.messages',
26
29
  INPUT_VALUE: '_ml_obs.meta.input.value',
30
+ INPUT_PROMPT: '_ml_obs.meta.input.prompt',
27
31
 
28
32
  OUTPUT_DOCUMENTS: '_ml_obs.meta.output.documents',
29
33
  OUTPUT_MESSAGES: '_ml_obs.meta.output.messages',
@@ -36,5 +40,14 @@ module.exports = {
36
40
  CACHE_WRITE_INPUT_TOKENS_METRIC_KEY: 'cache_write_input_tokens',
37
41
  REASONING_OUTPUT_TOKENS_METRIC_KEY: 'reasoning_output_tokens',
38
42
 
39
- DROPPED_IO_COLLECTION_ERROR: 'dropped_io'
43
+ DROPPED_IO_COLLECTION_ERROR: 'dropped_io',
44
+
45
+ PROMPT_TRACKING_INSTRUMENTATION_METHOD: 'prompt_tracking_instrumentation_method',
46
+ PROMPT_MULTIMODAL: 'prompt_multimodal',
47
+ INSTRUMENTATION_METHOD_AUTO: 'auto',
48
+ INSTRUMENTATION_METHOD_ANNOTATED: 'annotated',
49
+ INSTRUMENTATION_METHOD_UNKNOWN: 'unknown',
50
+
51
+ ROUTING_API_KEY: '_dd.llmobs.routing.api_key',
52
+ ROUTING_SITE: '_dd.llmobs.routing.site'
40
53
  }
@@ -1,5 +1,9 @@
1
1
  'use strict'
2
2
 
3
+ const util = require('node:util')
4
+
5
+ const { channel } = require('dc-polyfill')
6
+
3
7
  const log = require('../log')
4
8
  const {
5
9
  ML_APP,
@@ -7,24 +11,19 @@ const {
7
11
  PROPAGATED_PARENT_ID_KEY
8
12
  } = require('./constants/tags')
9
13
  const { storage } = require('./storage')
10
-
11
14
  const telemetry = require('./telemetry')
12
15
  const LLMObsSpanProcessor = require('./span_processor')
16
+ const LLMObsEvalMetricsWriter = require('./writers/evaluations')
17
+ const LLMObsTagger = require('./tagger')
18
+ const LLMObsSpanWriter = require('./writers/spans')
19
+ const { setAgentStrategy } = require('./writers/util')
13
20
 
14
- const { channel } = require('dc-polyfill')
15
21
  const spanFinishCh = channel('dd-trace:span:finish')
16
22
  const evalMetricAppendCh = channel('llmobs:eval-metric:append')
17
23
  const flushCh = channel('llmobs:writers:flush')
18
24
  const injectCh = channel('dd-trace:span:inject')
19
25
  const registerUserSpanProcessorCh = channel('llmobs:register-processor')
20
26
 
21
- const LLMObsEvalMetricsWriter = require('./writers/evaluations')
22
- const LLMObsTagger = require('./tagger')
23
- const LLMObsSpanWriter = require('./writers/spans')
24
- const { setAgentStrategy } = require('./writers/util')
25
-
26
- const util = require('node:util')
27
-
28
27
  /**
29
28
  * Setting writers and processor globally when LLMObs is enabled
30
29
  * We're setting these in this module instead of on the SDK.
@@ -137,9 +136,9 @@ function handleSpanProcess (span) {
137
136
  spanProcessor.process(span)
138
137
  }
139
138
 
140
- function handleEvalMetricAppend (payload) {
139
+ function handleEvalMetricAppend ({ payload, routing }) {
141
140
  try {
142
- evalWriter.append(payload)
141
+ evalWriter.append(payload, routing)
143
142
  } catch (e) {
144
143
  log.warn(
145
144
  // eslint-disable-next-line @stylistic/max-len
@@ -81,6 +81,8 @@ class NoopLLMObs {
81
81
  deregisterProcessor () {}
82
82
 
83
83
  annotationContext (options, fn) { return fn() }
84
+
85
+ routingContext (options, fn) { return fn() }
84
86
  }
85
87
 
86
88
  module.exports = NoopLLMObs