dd-trace 5.101.0 → 5.103.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 (235) hide show
  1. package/ext/exporters.js +1 -0
  2. package/package.json +20 -17
  3. package/packages/datadog-esbuild/src/utils.js +2 -2
  4. package/packages/datadog-instrumentations/src/aerospike.js +2 -2
  5. package/packages/datadog-instrumentations/src/ai.js +9 -9
  6. package/packages/datadog-instrumentations/src/amqplib.js +6 -7
  7. package/packages/datadog-instrumentations/src/anthropic.js +10 -10
  8. package/packages/datadog-instrumentations/src/apollo-server-core.js +3 -3
  9. package/packages/datadog-instrumentations/src/apollo-server.js +5 -5
  10. package/packages/datadog-instrumentations/src/avsc.js +6 -6
  11. package/packages/datadog-instrumentations/src/aws-sdk.js +151 -67
  12. package/packages/datadog-instrumentations/src/azure-durable-functions.js +8 -8
  13. package/packages/datadog-instrumentations/src/bluebird.js +2 -2
  14. package/packages/datadog-instrumentations/src/body-parser.js +2 -2
  15. package/packages/datadog-instrumentations/src/cassandra-driver.js +7 -7
  16. package/packages/datadog-instrumentations/src/child_process.js +12 -12
  17. package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +41 -24
  18. package/packages/datadog-instrumentations/src/connect.js +7 -7
  19. package/packages/datadog-instrumentations/src/cookie-parser.js +4 -4
  20. package/packages/datadog-instrumentations/src/cookie.js +2 -2
  21. package/packages/datadog-instrumentations/src/couchbase.js +73 -238
  22. package/packages/datadog-instrumentations/src/crypto.js +4 -4
  23. package/packages/datadog-instrumentations/src/cucumber.js +78 -17
  24. package/packages/datadog-instrumentations/src/dns.js +0 -3
  25. package/packages/datadog-instrumentations/src/elasticsearch.js +8 -11
  26. package/packages/datadog-instrumentations/src/electron/preload.js +42 -0
  27. package/packages/datadog-instrumentations/src/electron.js +240 -0
  28. package/packages/datadog-instrumentations/src/express-mongo-sanitize.js +6 -6
  29. package/packages/datadog-instrumentations/src/express-session.js +4 -4
  30. package/packages/datadog-instrumentations/src/express.js +10 -11
  31. package/packages/datadog-instrumentations/src/fastify.js +2 -2
  32. package/packages/datadog-instrumentations/src/fetch.js +5 -5
  33. package/packages/datadog-instrumentations/src/fs.js +14 -14
  34. package/packages/datadog-instrumentations/src/google-cloud-pubsub.js +5 -7
  35. package/packages/datadog-instrumentations/src/google-genai.js +4 -4
  36. package/packages/datadog-instrumentations/src/graphql.js +13 -12
  37. package/packages/datadog-instrumentations/src/grpc/server.js +2 -2
  38. package/packages/datadog-instrumentations/src/hapi.js +2 -2
  39. package/packages/datadog-instrumentations/src/helpers/callback-instrumentor.js +9 -9
  40. package/packages/datadog-instrumentations/src/helpers/hook.js +4 -1
  41. package/packages/datadog-instrumentations/src/helpers/hooks.js +1 -0
  42. package/packages/datadog-instrumentations/src/helpers/instrument.js +2 -2
  43. package/packages/datadog-instrumentations/src/helpers/kafka.js +41 -0
  44. package/packages/datadog-instrumentations/src/helpers/promise.js +2 -2
  45. package/packages/datadog-instrumentations/src/hono.js +2 -2
  46. package/packages/datadog-instrumentations/src/http/client.js +6 -6
  47. package/packages/datadog-instrumentations/src/http/server.js +9 -9
  48. package/packages/datadog-instrumentations/src/ioredis.js +16 -12
  49. package/packages/datadog-instrumentations/src/jest.js +382 -81
  50. package/packages/datadog-instrumentations/src/kafkajs.js +165 -174
  51. package/packages/datadog-instrumentations/src/knex.js +17 -17
  52. package/packages/datadog-instrumentations/src/koa.js +12 -12
  53. package/packages/datadog-instrumentations/src/ldapjs.js +5 -5
  54. package/packages/datadog-instrumentations/src/light-my-request.js +2 -2
  55. package/packages/datadog-instrumentations/src/limitd-client.js +4 -4
  56. package/packages/datadog-instrumentations/src/lodash.js +4 -4
  57. package/packages/datadog-instrumentations/src/mariadb.js +13 -13
  58. package/packages/datadog-instrumentations/src/memcached.js +2 -2
  59. package/packages/datadog-instrumentations/src/microgateway-core.js +2 -2
  60. package/packages/datadog-instrumentations/src/mocha/common.js +3 -3
  61. package/packages/datadog-instrumentations/src/mocha/main.js +85 -11
  62. package/packages/datadog-instrumentations/src/mocha/utils.js +133 -16
  63. package/packages/datadog-instrumentations/src/mocha/worker.js +7 -5
  64. package/packages/datadog-instrumentations/src/mongodb-core.js +42 -30
  65. package/packages/datadog-instrumentations/src/mongodb.js +5 -5
  66. package/packages/datadog-instrumentations/src/mongoose.js +21 -21
  67. package/packages/datadog-instrumentations/src/mquery.js +5 -5
  68. package/packages/datadog-instrumentations/src/multer.js +4 -4
  69. package/packages/datadog-instrumentations/src/mysql.js +16 -16
  70. package/packages/datadog-instrumentations/src/mysql2.js +4 -4
  71. package/packages/datadog-instrumentations/src/net.js +14 -8
  72. package/packages/datadog-instrumentations/src/nyc.js +5 -5
  73. package/packages/datadog-instrumentations/src/openai.js +19 -19
  74. package/packages/datadog-instrumentations/src/oracledb.js +6 -6
  75. package/packages/datadog-instrumentations/src/passport-utils.js +5 -5
  76. package/packages/datadog-instrumentations/src/pg.js +39 -25
  77. package/packages/datadog-instrumentations/src/pino.js +6 -10
  78. package/packages/datadog-instrumentations/src/playwright.js +445 -68
  79. package/packages/datadog-instrumentations/src/protobufjs.js +16 -16
  80. package/packages/datadog-instrumentations/src/redis.js +20 -12
  81. package/packages/datadog-instrumentations/src/restify.js +2 -2
  82. package/packages/datadog-instrumentations/src/router.js +12 -12
  83. package/packages/datadog-instrumentations/src/stripe.js +12 -12
  84. package/packages/datadog-instrumentations/src/vitest.js +107 -26
  85. package/packages/datadog-instrumentations/src/winston.js +4 -4
  86. package/packages/datadog-instrumentations/src/ws.js +7 -7
  87. package/packages/datadog-plugin-apollo/src/gateway/request.js +1 -21
  88. package/packages/datadog-plugin-aws-sdk/src/base.js +70 -28
  89. package/packages/datadog-plugin-aws-sdk/src/services/cloudwatchlogs.js +1 -1
  90. package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +20 -13
  91. package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +46 -36
  92. package/packages/datadog-plugin-aws-sdk/src/services/lambda.js +34 -23
  93. package/packages/datadog-plugin-aws-sdk/src/services/redshift.js +1 -1
  94. package/packages/datadog-plugin-aws-sdk/src/services/s3.js +1 -1
  95. package/packages/datadog-plugin-aws-sdk/src/services/sns.js +14 -15
  96. package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +74 -55
  97. package/packages/datadog-plugin-aws-sdk/src/services/stepfunctions.js +20 -18
  98. package/packages/datadog-plugin-aws-sdk/src/util.js +22 -0
  99. package/packages/datadog-plugin-child_process/src/scrub-cmd-params.js +6 -6
  100. package/packages/datadog-plugin-couchbase/src/index.js +58 -52
  101. package/packages/datadog-plugin-cucumber/src/index.js +5 -0
  102. package/packages/datadog-plugin-cypress/src/cypress-plugin.js +215 -26
  103. package/packages/datadog-plugin-cypress/src/support.js +13 -1
  104. package/packages/datadog-plugin-electron/src/index.js +17 -0
  105. package/packages/datadog-plugin-electron/src/ipc.js +143 -0
  106. package/packages/datadog-plugin-electron/src/net.js +82 -0
  107. package/packages/datadog-plugin-google-cloud-pubsub/src/consumer.js +1 -5
  108. package/packages/datadog-plugin-google-cloud-pubsub/src/producer.js +27 -18
  109. package/packages/datadog-plugin-google-cloud-pubsub/src/pubsub-push-subscription.js +3 -1
  110. package/packages/datadog-plugin-graphql/src/execute.js +6 -28
  111. package/packages/datadog-plugin-graphql/src/resolve.js +30 -35
  112. package/packages/datadog-plugin-graphql/src/tools/signature.js +32 -7
  113. package/packages/datadog-plugin-graphql/src/tools/transforms.js +118 -100
  114. package/packages/datadog-plugin-graphql/src/utils.js +29 -0
  115. package/packages/datadog-plugin-grpc/src/client.js +6 -7
  116. package/packages/datadog-plugin-grpc/src/util.js +57 -22
  117. package/packages/datadog-plugin-http/src/client.js +3 -7
  118. package/packages/datadog-plugin-jest/src/index.js +92 -50
  119. package/packages/datadog-plugin-jest/src/util.js +1 -2
  120. package/packages/datadog-plugin-mocha/src/index.js +5 -0
  121. package/packages/datadog-plugin-mongodb-core/src/index.js +36 -69
  122. package/packages/datadog-plugin-mysql/src/index.js +1 -1
  123. package/packages/datadog-plugin-openai/src/services.js +2 -1
  124. package/packages/datadog-plugin-openai/src/tracing.js +12 -23
  125. package/packages/datadog-plugin-pg/src/index.js +3 -3
  126. package/packages/datadog-plugin-playwright/src/index.js +5 -1
  127. package/packages/datadog-plugin-redis/src/index.js +18 -23
  128. package/packages/datadog-plugin-vitest/src/index.js +8 -1
  129. package/packages/datadog-shimmer/src/shimmer.js +7 -1
  130. package/packages/dd-trace/src/aiguard/index.js +3 -1
  131. package/packages/dd-trace/src/aiguard/sdk.js +36 -30
  132. package/packages/dd-trace/src/aiguard/tags.js +20 -11
  133. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-password-rules.js +1 -1
  134. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secret-rules.js +81 -81
  135. package/packages/dd-trace/src/appsec/iast/security-controls/index.js +2 -2
  136. package/packages/dd-trace/src/appsec/iast/taint-tracking/plugins/kafka.js +2 -2
  137. package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +4 -4
  138. package/packages/dd-trace/src/appsec/iast/taint-tracking/taint-tracking-impl.js +2 -2
  139. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-handler.js +2 -0
  140. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/index.js +1 -3
  141. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/utils.js +83 -48
  142. package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +1 -1
  143. package/packages/dd-trace/src/appsec/index.js +21 -24
  144. package/packages/dd-trace/src/appsec/reporter.js +3 -1
  145. package/packages/dd-trace/src/appsec/rule_manager.js +4 -2
  146. package/packages/dd-trace/src/appsec/waf/waf_context_wrapper.js +31 -16
  147. package/packages/dd-trace/src/azure_metadata.js +17 -6
  148. package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/index.js +4 -4
  149. package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +4 -2
  150. package/packages/dd-trace/src/ci-visibility/exporters/test-worker/index.js +6 -4
  151. package/packages/dd-trace/src/ci-visibility/requests/fs-cache.js +1 -1
  152. package/packages/dd-trace/src/config/defaults.js +3 -14
  153. package/packages/dd-trace/src/config/generated-config-types.d.ts +3 -1
  154. package/packages/dd-trace/src/config/git_properties.js +2 -2
  155. package/packages/dd-trace/src/config/helper.js +4 -0
  156. package/packages/dd-trace/src/config/index.js +2 -2
  157. package/packages/dd-trace/src/config/major-overrides.js +98 -0
  158. package/packages/dd-trace/src/config/parsers.js +7 -1
  159. package/packages/dd-trace/src/config/supported-configurations.json +51 -38
  160. package/packages/dd-trace/src/datastreams/checkpointer.js +2 -2
  161. package/packages/dd-trace/src/datastreams/index.js +2 -1
  162. package/packages/dd-trace/src/datastreams/manager.js +1 -1
  163. package/packages/dd-trace/src/datastreams/processor.js +3 -4
  164. package/packages/dd-trace/src/debugger/devtools_client/snapshot/collector.js +2 -2
  165. package/packages/dd-trace/src/debugger/devtools_client/snapshot-pruner.js +1 -0
  166. package/packages/dd-trace/src/debugger/devtools_client/source-maps.js +1 -1
  167. package/packages/dd-trace/src/debugger/devtools_client/state.js +2 -1
  168. package/packages/dd-trace/src/debugger/index.js +7 -7
  169. package/packages/dd-trace/src/dogstatsd.js +2 -2
  170. package/packages/dd-trace/src/encode/0.4.js +748 -232
  171. package/packages/dd-trace/src/encode/0.5.js +47 -10
  172. package/packages/dd-trace/src/encode/agentless-json.js +1 -1
  173. package/packages/dd-trace/src/exporter.js +2 -0
  174. package/packages/dd-trace/src/exporters/agent/index.js +2 -1
  175. package/packages/dd-trace/src/exporters/agentless/index.js +3 -2
  176. package/packages/dd-trace/src/exporters/agentless/writer.js +2 -2
  177. package/packages/dd-trace/src/exporters/common/buffering-exporter.js +2 -1
  178. package/packages/dd-trace/src/exporters/common/request.js +1 -1
  179. package/packages/dd-trace/src/exporters/electron/index.js +49 -0
  180. package/packages/dd-trace/src/external-logger/src/index.js +2 -1
  181. package/packages/dd-trace/src/git_metadata.js +10 -8
  182. package/packages/dd-trace/src/lambda/handler-paths.js +52 -0
  183. package/packages/dd-trace/src/lambda/index.js +62 -14
  184. package/packages/dd-trace/src/lambda/runtime/patch.js +21 -46
  185. package/packages/dd-trace/src/llmobs/index.js +13 -2
  186. package/packages/dd-trace/src/llmobs/plugins/ai/util.js +1 -2
  187. package/packages/dd-trace/src/llmobs/plugins/bedrockruntime.js +45 -15
  188. package/packages/dd-trace/src/llmobs/plugins/genai/util.js +6 -3
  189. package/packages/dd-trace/src/llmobs/sdk.js +24 -26
  190. package/packages/dd-trace/src/llmobs/span_processor.js +25 -5
  191. package/packages/dd-trace/src/llmobs/util.js +1 -0
  192. package/packages/dd-trace/src/llmobs/writers/base.js +2 -1
  193. package/packages/dd-trace/src/msgpack/chunk.js +6 -3
  194. package/packages/dd-trace/src/openfeature/noop.js +40 -36
  195. package/packages/dd-trace/src/openfeature/writers/base.js +2 -1
  196. package/packages/dd-trace/src/openfeature/writers/exposures.js +33 -52
  197. package/packages/dd-trace/src/opentelemetry/metrics/periodic_metric_reader.js +2 -1
  198. package/packages/dd-trace/src/opentelemetry/otlp/otlp_transformer_base.js +1 -2
  199. package/packages/dd-trace/src/opentelemetry/tracer.js +0 -22
  200. package/packages/dd-trace/src/opentracing/propagation/text_map.js +20 -9
  201. package/packages/dd-trace/src/opentracing/propagation/text_map_dsm.js +2 -11
  202. package/packages/dd-trace/src/payload-tagging/config/index.js +2 -2
  203. package/packages/dd-trace/src/plugins/ci_plugin.js +49 -4
  204. package/packages/dd-trace/src/plugins/database.js +54 -12
  205. package/packages/dd-trace/src/plugins/index.js +1 -0
  206. package/packages/dd-trace/src/plugins/plugin.js +2 -4
  207. package/packages/dd-trace/src/plugins/util/ci.js +9 -9
  208. package/packages/dd-trace/src/plugins/util/git-cache.js +23 -23
  209. package/packages/dd-trace/src/plugins/util/stacktrace.js +2 -2
  210. package/packages/dd-trace/src/plugins/util/test.js +56 -12
  211. package/packages/dd-trace/src/plugins/util/url.js +1 -3
  212. package/packages/dd-trace/src/plugins/util/user-provided-git.js +18 -16
  213. package/packages/dd-trace/src/plugins/util/web.js +5 -7
  214. package/packages/dd-trace/src/priority_sampler.js +1 -1
  215. package/packages/dd-trace/src/profiling/profiler.js +1 -1
  216. package/packages/dd-trace/src/profiling/profilers/events.js +3 -23
  217. package/packages/dd-trace/src/profiling/profilers/wall.js +5 -6
  218. package/packages/dd-trace/src/profiling/ssi-heuristics.js +1 -1
  219. package/packages/dd-trace/src/rate_limiter.js +1 -1
  220. package/packages/dd-trace/src/remote_config/scheduler.js +1 -1
  221. package/packages/dd-trace/src/ritm.js +2 -1
  222. package/packages/dd-trace/src/runtime_metrics/index.js +2 -2
  223. package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +5 -8
  224. package/packages/dd-trace/src/scope.js +3 -10
  225. package/packages/dd-trace/src/serverless.js +6 -6
  226. package/packages/dd-trace/src/service-naming/schemas/v0/messaging.js +27 -1
  227. package/packages/dd-trace/src/service-naming/schemas/v0/web.js +4 -0
  228. package/packages/dd-trace/src/service-naming/schemas/v1/messaging.js +24 -0
  229. package/packages/dd-trace/src/service-naming/schemas/v1/web.js +4 -0
  230. package/packages/dd-trace/src/span_stats.js +1 -1
  231. package/packages/dd-trace/src/telemetry/dependencies.js +1 -1
  232. package/packages/dd-trace/src/telemetry/endpoints.js +1 -1
  233. package/packages/dd-trace/src/telemetry/telemetry.js +2 -2
  234. package/packages/dd-trace/src/tracer.js +7 -7
  235. package/packages/dd-trace/src/lambda/runtime/ritm.js +0 -133
@@ -1,6 +1,6 @@
1
1
  'use strict'
2
2
 
3
- const { getValueFromEnvSources } = require('../../config/helper')
3
+ const getConfig = require('../../config')
4
4
  const {
5
5
  GIT_COMMIT_SHA,
6
6
  GIT_BRANCH,
@@ -36,7 +36,7 @@ function removeEmptyValues (tagsAndValues) {
36
36
  // https://github.com/jonschlinkert/is-git-url/blob/396965ffabf2f46656c8af4c47bef1d69f09292e/index.js#L9C15-L9C87
37
37
  // The `.git` suffix is optional in this version
38
38
  function validateGitRepositoryUrl (repoUrl) {
39
- return /(?:git|ssh|https?|git@[-\w.]+):(\/\/)?(.*?)(\/?|#[-\d\w._]+?)$/.test(repoUrl)
39
+ return /(?:git|ssh|https?|git@[-\w.]+):(\/\/)?(.*?)(\/?|#[-\w.]+?)$/.test(repoUrl)
40
40
  }
41
41
 
42
42
  function validateGitCommitSha (gitCommitSha) {
@@ -46,20 +46,22 @@ function validateGitCommitSha (gitCommitSha) {
46
46
  }
47
47
 
48
48
  function getUserProviderGitMetadata () {
49
- const DD_GIT_COMMIT_SHA = getValueFromEnvSources('DD_GIT_COMMIT_SHA')
50
- const DD_GIT_BRANCH = getValueFromEnvSources('DD_GIT_BRANCH')
51
- const DD_GIT_REPOSITORY_URL = getValueFromEnvSources('DD_GIT_REPOSITORY_URL')
52
- const DD_GIT_TAG = getValueFromEnvSources('DD_GIT_TAG')
53
- const DD_GIT_COMMIT_MESSAGE = getValueFromEnvSources('DD_GIT_COMMIT_MESSAGE')
54
- const DD_GIT_COMMIT_COMMITTER_NAME = getValueFromEnvSources('DD_GIT_COMMIT_COMMITTER_NAME')
55
- const DD_GIT_COMMIT_COMMITTER_EMAIL = getValueFromEnvSources('DD_GIT_COMMIT_COMMITTER_EMAIL')
56
- const DD_GIT_COMMIT_COMMITTER_DATE = getValueFromEnvSources('DD_GIT_COMMIT_COMMITTER_DATE')
57
- const DD_GIT_COMMIT_AUTHOR_NAME = getValueFromEnvSources('DD_GIT_COMMIT_AUTHOR_NAME')
58
- const DD_GIT_COMMIT_AUTHOR_EMAIL = getValueFromEnvSources('DD_GIT_COMMIT_AUTHOR_EMAIL')
59
- const DD_GIT_COMMIT_AUTHOR_DATE = getValueFromEnvSources('DD_GIT_COMMIT_AUTHOR_DATE')
60
- const DD_GIT_PULL_REQUEST_BASE_BRANCH = getValueFromEnvSources('DD_GIT_PULL_REQUEST_BASE_BRANCH')
61
- const DD_GIT_PULL_REQUEST_BASE_BRANCH_SHA = getValueFromEnvSources('DD_GIT_PULL_REQUEST_BASE_BRANCH_SHA')
62
- const DD_GIT_COMMIT_HEAD_SHA = getValueFromEnvSources('DD_GIT_COMMIT_HEAD_SHA')
49
+ const {
50
+ DD_GIT_COMMIT_SHA,
51
+ DD_GIT_BRANCH,
52
+ DD_GIT_REPOSITORY_URL,
53
+ DD_GIT_TAG,
54
+ DD_GIT_COMMIT_MESSAGE,
55
+ DD_GIT_COMMIT_COMMITTER_NAME,
56
+ DD_GIT_COMMIT_COMMITTER_EMAIL,
57
+ DD_GIT_COMMIT_COMMITTER_DATE,
58
+ DD_GIT_COMMIT_AUTHOR_NAME,
59
+ DD_GIT_COMMIT_AUTHOR_EMAIL,
60
+ DD_GIT_COMMIT_AUTHOR_DATE,
61
+ DD_GIT_PULL_REQUEST_BASE_BRANCH,
62
+ DD_GIT_PULL_REQUEST_BASE_BRANCH_SHA,
63
+ DD_GIT_COMMIT_HEAD_SHA,
64
+ } = getConfig()
63
65
 
64
66
  const branch = normalizeRef(DD_GIT_BRANCH)
65
67
  let tag = normalizeRef(DD_GIT_TAG)
@@ -217,9 +217,7 @@ const web = {
217
217
  }
218
218
  }
219
219
 
220
- const span = startSpanHelper(tracer, name, { childOf }, traceCtx, config)
221
-
222
- return span
220
+ return startSpanHelper(tracer, name, { childOf }, traceCtx, config)
223
221
  },
224
222
 
225
223
  // Validate a request's status code and then add error tags if necessary
@@ -309,10 +307,10 @@ const web = {
309
307
  return contexts.get(req)
310
308
  },
311
309
  wrapRes (context, req, res, end) {
312
- return function () {
310
+ return function (...args) {
313
311
  web.finishAll(context)
314
312
 
315
- return end.apply(res, arguments)
313
+ return end.apply(res, args)
316
314
  }
317
315
  },
318
316
  wrapEnd (context) {
@@ -330,8 +328,8 @@ const web = {
330
328
  return ends.get(this)
331
329
  },
332
330
  set (value) {
333
- ends.set(this, function () {
334
- return storage('legacy').run(context.store, value, ...arguments)
331
+ ends.set(this, function (...args) {
332
+ return storage('legacy').run(context.store, value, ...args)
335
333
  })
336
334
  },
337
335
  })
@@ -110,7 +110,7 @@ class PrioritySampler {
110
110
  * Assigns a sampling priority to a span if not already set.
111
111
  *
112
112
  * @param {DatadogSpan} span
113
- * @param {boolean} [auto=true] - Whether to use automatic sampling if no manual tags are present.
113
+ * @param {boolean} [auto] - Whether to use automatic sampling if no manual tags are present.
114
114
  * @returns {void}
115
115
  */
116
116
  sample (span, auto = true) {
@@ -260,7 +260,7 @@ class Profiler extends EventEmitter {
260
260
  this.#lastStart = start
261
261
  if (!this.#timer || timeout !== this._timeoutInterval) {
262
262
  this.#timer = setTimeout(() => this._collect(snapshotKinds.PERIODIC), timeout)
263
- this.#timer.unref()
263
+ this.#timer.unref?.()
264
264
  } else {
265
265
  this.#timer.refresh()
266
266
  }
@@ -174,7 +174,7 @@ class NetDecorator {
174
174
  }
175
175
  }
176
176
 
177
- class FilesystemDecorator {
177
+ class KeyValueDecorator {
178
178
  constructor (stringTable) {
179
179
  this.stringTable = stringTable
180
180
  }
@@ -205,31 +205,11 @@ class ZlibDecorator {
205
205
  }
206
206
  }
207
207
 
208
- class CryptoDecorator {
209
- constructor (stringTable) {
210
- this.stringTable = stringTable
211
- }
212
-
213
- decorateSample (sampleInput, item) {
214
- const labels = sampleInput.label
215
- const stringTable = this.stringTable
216
- for (const [key, value] of Object.entries(item.detail)) {
217
- switch (typeof value) {
218
- case 'string':
219
- labels.push(labelFromStrStr(stringTable, key, value))
220
- break
221
- case 'number':
222
- labels.push(new Label({ key: stringTable.dedup(key), num: value }))
223
- }
224
- }
225
- }
226
- }
227
-
228
208
  // Keys correspond to PerformanceEntry.entryType, values are constructor
229
209
  // functions for type-specific decorators.
230
210
  const decoratorTypes = {
231
- crypto: CryptoDecorator,
232
- fs: FilesystemDecorator,
211
+ crypto: KeyValueDecorator,
212
+ fs: KeyValueDecorator,
233
213
  dns: DNSDecorator,
234
214
  gc: GCDecorator,
235
215
  net: NetDecorator,
@@ -223,7 +223,7 @@ class NativeWallProfiler {
223
223
  asyncContextsLiveGauge.mark(totalAsyncContextCount)
224
224
  asyncContextsUsedGauge.mark(usedAsyncContextCount)
225
225
  }, this.#telemetryHeartbeatIntervalMillis)
226
- this._contextCountGaugeUpdater.unref()
226
+ this._contextCountGaugeUpdater.unref?.()
227
227
  }
228
228
 
229
229
  #enter () {
@@ -317,11 +317,10 @@ class NativeWallProfiler {
317
317
  }
318
318
 
319
319
  #setNewContext () {
320
- this.#pprof.time.setContext(
321
- this._currentContext = {
322
- ref: {},
323
- }
324
- )
320
+ this._currentContext = {
321
+ ref: {},
322
+ }
323
+ this.#pprof.time.setContext(this._currentContext)
325
324
  }
326
325
 
327
326
  #spanFinished (span) {
@@ -39,7 +39,7 @@ class SSIHeuristics {
39
39
  setTimeout(() => {
40
40
  this.shortLived = false
41
41
  this._maybeTriggered()
42
- }, this.longLivedThreshold).unref()
42
+ }, this.longLivedThreshold).unref?.()
43
43
 
44
44
  this._onSpanCreated = this._onSpanCreated.bind(this)
45
45
  dc.subscribe('dd-trace:span:start', this._onSpanCreated)
@@ -5,7 +5,7 @@ const limiter = require('../../../vendor/dist/limiter')
5
5
  class RateLimiter {
6
6
  /**
7
7
  * @param {number} rateLimit - Allowed units per interval. Negative means unlimited, 0 disables.
8
- * @param {'second'|'minute'|'hour'|'day'} [interval='second'] - Time window for the limiter.
8
+ * @param {'second'|'minute'|'hour'|'day'} [interval] - Time window for the limiter.
9
9
  */
10
10
  constructor (rateLimit, interval = 'second') {
11
11
  // TODO: Change rateLimit to integers. Right now these are sometimes strings, sometimes numbers.
@@ -17,7 +17,7 @@ class Scheduler {
17
17
  runAfterDelay (interval = this._interval) {
18
18
  this._timer = setTimeout(this._callback, interval, () => this.runAfterDelay())
19
19
 
20
- this._timer.unref()
20
+ this._timer.unref?.()
21
21
  }
22
22
 
23
23
  stop () {
@@ -31,6 +31,7 @@ const builtinModules = new Set(Module.builtinModules.map(stripNodePrefix))
31
31
 
32
32
  function isBuiltinModuleName (name) {
33
33
  if (typeof name !== 'string') return false
34
+ if (name === 'electron') return true
34
35
  return builtinModules.has(stripNodePrefix(name))
35
36
  }
36
37
 
@@ -101,7 +102,7 @@ function Hook (modules, options, onrequire) {
101
102
  if (cache[moduleId]) {
102
103
  // require.cache was potentially altered externally
103
104
  const cacheEntry = require.cache[filename]
104
- if (cacheEntry && cacheEntry.exports !== cache[filename].original) {
105
+ if (cacheEntry && cacheEntry.exports !== cache[moduleId].original) {
105
106
  return cacheEntry.exports
106
107
  }
107
108
 
@@ -29,8 +29,8 @@ module.exports = {
29
29
 
30
30
  stop () {
31
31
  runtimeMetrics.stop()
32
-
33
- Object.setPrototypeOf(module.exports, runtimeMetrics = noop)
32
+ runtimeMetrics = noop
33
+ Object.setPrototypeOf(module.exports, noop)
34
34
  },
35
35
  }
36
36
 
@@ -8,14 +8,9 @@ const process = require('process')
8
8
  const { performance, PerformanceObserver, monitorEventLoopDelay } = require('perf_hooks')
9
9
  const { DogStatsDClient, MetricsAggregationClient } = require('../dogstatsd')
10
10
  const log = require('../log')
11
- const { getValueFromEnvSources } = require('../config/helper')
12
11
 
13
12
  const { NODE_MAJOR } = require('../../../../version')
14
13
  const processTags = require('../process-tags')
15
- // TODO: This environment variable may not be changed, since the agent expects a flush every ten seconds.
16
- // It is only a variable for testing. Think about alternatives.
17
- const DD_RUNTIME_METRICS_FLUSH_INTERVAL = getValueFromEnvSources('DD_RUNTIME_METRICS_FLUSH_INTERVAL') ?? '10000'
18
- const INTERVAL = Number.parseInt(DD_RUNTIME_METRICS_FLUSH_INTERVAL, 10)
19
14
 
20
15
  const eventLoopDelayResolution = 4
21
16
 
@@ -40,6 +35,8 @@ module.exports = {
40
35
  */
41
36
  start (config) {
42
37
  this.stop()
38
+ // The agent expects a flush every ten seconds, so this is for tests only.
39
+ const flushIntervalMs = config.DD_RUNTIME_METRICS_FLUSH_INTERVAL
43
40
  const clientConfig = DogStatsDClient.generateClientConfig(config)
44
41
 
45
42
  if (config.DD_EXPERIMENTAL_PROPAGATE_PROCESS_TAGS_ENABLED) {
@@ -81,7 +78,7 @@ module.exports = {
81
78
  captureNativeMetrics(trackEventLoop, trackGc)
82
79
  captureCommonMetrics(trackEventLoop)
83
80
  client.flush()
84
- }, INTERVAL)
81
+ }, flushIntervalMs)
85
82
  } else {
86
83
  lastCpuUsage = process.cpuUsage()
87
84
 
@@ -103,10 +100,10 @@ module.exports = {
103
100
  captureEventLoopDelay()
104
101
  }
105
102
  client.flush()
106
- }, INTERVAL)
103
+ }, flushIntervalMs)
107
104
  }
108
105
 
109
- interval.unref()
106
+ interval.unref?.()
110
107
  },
111
108
 
112
109
  stop () {
@@ -3,14 +3,11 @@
3
3
  const { storage } = require('../../datadog-core')
4
4
 
5
5
  // TODO: refactor bind to use shimmer once the new internal tracer lands
6
-
7
- const originals = new WeakMap()
8
-
9
6
  class Scope {
10
7
  active () {
11
8
  const store = storage('legacy').getStore()
12
9
 
13
- return (store && store.span) || null
10
+ return store?.span ?? null
14
11
  }
15
12
 
16
13
  activate (span, callback) {
@@ -40,15 +37,11 @@ class Scope {
40
37
  const scope = this
41
38
  const spanOrActive = this._spanOrActive(span)
42
39
 
43
- const bound = function () {
40
+ return function (...args) {
44
41
  return scope.activate(spanOrActive, () => {
45
- return fn.apply(this, arguments)
42
+ return fn.apply(this, args)
46
43
  })
47
44
  }
48
-
49
- originals.set(bound, fn)
50
-
51
- return bound
52
45
  }
53
46
 
54
47
  _spanOrActive (span) {
@@ -17,18 +17,18 @@ function getIsGCPFunction () {
17
17
  /**
18
18
  * Enable GCP Pub/Sub PUSH subscription tracing for Cloud Run (K_SERVICE present).
19
19
  * PUSH: GCP sends HTTP POST requests to the service with message data in headers.
20
+ *
21
+ * Stays on the env helper to avoid closing the
22
+ * `config -> serverless -> config` import cycle.
20
23
  */
21
24
  function enableGCPPubSubPushSubscription () {
22
- const isGCPPubSubPushSubscriptionEnabled = getValueFromEnvSources('DD_TRACE_GCP_PUBSUB_PUSH_ENABLED')
23
- return getEnvironmentVariable('K_SERVICE') !== undefined && !isFalse(isGCPPubSubPushSubscriptionEnabled)
25
+ return getEnvironmentVariable('K_SERVICE') !== undefined &&
26
+ !isFalse(getValueFromEnvSources('DD_TRACE_GCP_PUBSUB_PUSH_ENABLED'))
24
27
  }
25
28
 
26
29
  function getIsAzureFunction () {
27
- const isAzureFunction =
28
- getEnvironmentVariable('FUNCTIONS_EXTENSION_VERSION') !== undefined &&
30
+ return getEnvironmentVariable('FUNCTIONS_EXTENSION_VERSION') !== undefined &&
29
31
  getEnvironmentVariable('FUNCTIONS_WORKER_RUNTIME') !== undefined
30
-
31
- return isAzureFunction
32
32
  }
33
33
 
34
34
  function getIsFlexConsumptionAzureFunction () {
@@ -32,6 +32,14 @@ const messaging = {
32
32
  serviceName: ({ tracerService }) => `${tracerService}-azure-service-bus`,
33
33
  serviceSource: integrationSource('azure-service-bus'),
34
34
  },
35
+ 'electron:ipc:main:send': {
36
+ opName: () => 'electron.main.send',
37
+ serviceName: identityService,
38
+ },
39
+ 'electron:ipc:renderer:send': {
40
+ opName: () => 'electron.renderer.send',
41
+ serviceName: identityService,
42
+ },
35
43
  'google-cloud-pubsub': {
36
44
  opName: () => 'pubsub.request',
37
45
  serviceName: ({ tracerService }) => `${tracerService}-pubsub`,
@@ -79,9 +87,27 @@ const messaging = {
79
87
  serviceName: amqpServiceName,
80
88
  serviceSource: integrationSource('amqp'),
81
89
  },
90
+ 'electron:ipc:main:receive': {
91
+ opName: () => 'electron.main.receive',
92
+ serviceName: identityService,
93
+ },
94
+ 'electron:ipc:main:handle': {
95
+ opName: () => 'electron.main.handle',
96
+ serviceName: identityService,
97
+ },
98
+ 'electron:ipc:renderer:receive': {
99
+ opName: () => 'electron.renderer.receive',
100
+ serviceName: identityService,
101
+ },
82
102
  'google-cloud-pubsub': {
83
103
  opName: () => 'pubsub.receive',
84
- serviceName: identityService,
104
+ serviceName: ({ tracerService }) => `${tracerService}-pubsub`,
105
+ serviceSource: integrationSource('google-cloud-pubsub'),
106
+ },
107
+ 'google-cloud-pubsub-push-subscription': {
108
+ opName: () => 'pubsub.receive',
109
+ serviceName: ({ tracerService }) => `${tracerService}-pubsub`,
110
+ serviceSource: integrationSource('google-cloud-pubsub'),
85
111
  },
86
112
  kafkajs: {
87
113
  opName: () => 'kafka.consume',
@@ -54,6 +54,10 @@ const web = {
54
54
  serviceName: httpPluginClientService,
55
55
  serviceSource: optionServiceSource,
56
56
  },
57
+ 'electron:net:request': {
58
+ opName: () => 'http.request',
59
+ serviceName: httpPluginClientService,
60
+ },
57
61
  },
58
62
  server: {
59
63
  'apollo.gateway.request': {
@@ -24,6 +24,14 @@ const messaging = {
24
24
  opName: () => 'azure.eventhubs.send',
25
25
  serviceName: identityService,
26
26
  },
27
+ 'electron:ipc:main:send': {
28
+ opName: () => 'electron.main.send',
29
+ serviceName: identityService,
30
+ },
31
+ 'electron:ipc:renderer:send': {
32
+ opName: () => 'electron.renderer.send',
33
+ serviceName: identityService,
34
+ },
27
35
  'google-cloud-pubsub': {
28
36
  opName: () => 'gcp.pubsub.send',
29
37
  serviceName: identityService,
@@ -53,10 +61,26 @@ const messaging = {
53
61
  consumer: {
54
62
  amqplib: amqpInbound,
55
63
  amqp10: amqpInbound,
64
+ 'electron:ipc:main:receive': {
65
+ opName: () => 'electron.main.receive',
66
+ serviceName: identityService,
67
+ },
68
+ 'electron:ipc:main:handle': {
69
+ opName: () => 'electron.main.handle',
70
+ serviceName: identityService,
71
+ },
72
+ 'electron:ipc:renderer:receive': {
73
+ opName: () => 'electron.renderer.receive',
74
+ serviceName: identityService,
75
+ },
56
76
  'google-cloud-pubsub': {
57
77
  opName: () => 'gcp.pubsub.process',
58
78
  serviceName: identityService,
59
79
  },
80
+ 'google-cloud-pubsub-push-subscription': {
81
+ opName: () => 'gcp.pubsub.process',
82
+ serviceName: identityService,
83
+ },
60
84
  kafkajs: {
61
85
  opName: () => 'kafka.process',
62
86
  serviceName: identityService,
@@ -48,6 +48,10 @@ const web = {
48
48
  opName: () => 'undici.request',
49
49
  serviceName: httpPluginClientService,
50
50
  },
51
+ 'electron:net:request': {
52
+ opName: () => 'http.client.request',
53
+ serviceName: httpPluginClientService,
54
+ },
51
55
  },
52
56
  server: {
53
57
  'apollo.gateway.request': {
@@ -165,7 +165,7 @@ class SpanStatsProcessor {
165
165
 
166
166
  if (this.enabled) {
167
167
  this.timer = setInterval(this.onInterval.bind(this), interval * 1e3)
168
- this.timer.unref()
168
+ this.timer.unref?.()
169
169
  }
170
170
  }
171
171
 
@@ -75,7 +75,7 @@ function waitAndSend (config, application, host) {
75
75
  if (savedDependenciesToSend.size > 0) {
76
76
  waitAndSend(config, application, host)
77
77
  }
78
- }).unref()
78
+ }).unref?.()
79
79
  }
80
80
 
81
81
  function loadAllTheLoadedModules () {
@@ -63,7 +63,7 @@ function scheduleFlush () {
63
63
  flushScheduled = true
64
64
  // this used to be setImmediate() instead, but it was making the system test flaky
65
65
  // don't ask me why
66
- setTimeout(flushAndSend).unref()
66
+ setTimeout(flushAndSend).unref?.()
67
67
  }
68
68
 
69
69
  /**
@@ -291,7 +291,7 @@ function heartbeat (config, application) {
291
291
 
292
292
  const { reqType, payload } = createPayload('app-heartbeat')
293
293
  sendData(config, application, host, reqType, payload, updateRetryData)
294
- }, config.telemetry.heartbeatInterval).unref()
294
+ }, config.telemetry.heartbeatInterval).unref?.()
295
295
  }
296
296
 
297
297
  /** @param {import('../config/config-base')} config */
@@ -307,7 +307,7 @@ function extendedHeartbeat (config) {
307
307
  heartbeatFailedDependencies = []
308
308
  }
309
309
  sendData(config, application, host, 'app-extended-heartbeat', appPayload)
310
- }, config.telemetry.extendedHeartbeatInterval).unref()
310
+ }, config.telemetry.extendedHeartbeatInterval).unref?.()
311
311
  }
312
312
 
313
313
  /**
@@ -100,27 +100,27 @@ class DatadogTracer extends Tracer {
100
100
  wrap (name, options, fn) {
101
101
  const tracer = this
102
102
 
103
- return function () {
103
+ return function (...args) {
104
104
  let optionsObj = options
105
105
  if (typeof optionsObj === 'function' && typeof fn === 'function') {
106
- optionsObj = optionsObj.apply(this, arguments)
106
+ optionsObj = optionsObj.apply(this, args)
107
107
  }
108
108
 
109
- const lastArgId = arguments.length - 1
110
- const cb = arguments[lastArgId]
109
+ const lastArgId = args.length - 1
110
+ const cb = args[lastArgId]
111
111
 
112
112
  if (typeof cb === 'function') {
113
113
  const scopeBoundCb = tracer.scope().bind(cb)
114
114
  return tracer.trace(name, optionsObj, (span, done) => {
115
- arguments[lastArgId] = function (err) {
115
+ args[lastArgId] = function (err) {
116
116
  done(err)
117
117
  return scopeBoundCb.apply(this, arguments)
118
118
  }
119
119
 
120
- return fn.apply(this, arguments)
120
+ return fn.apply(this, args)
121
121
  })
122
122
  }
123
- return tracer.trace(name, optionsObj, () => fn.apply(this, arguments))
123
+ return tracer.trace(name, optionsObj, () => fn.apply(this, args))
124
124
  }
125
125
  }
126
126