datadog 2.37.0 → 2.39.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 (823) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +48 -1
  3. data/bin/ddprofrb +4 -4
  4. data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +99 -15
  5. data/ext/datadog_profiling_native_extension/collectors_stack.c +19 -24
  6. data/ext/datadog_profiling_native_extension/collectors_stack.h +0 -1
  7. data/ext/datadog_profiling_native_extension/collectors_thread_context.c +155 -141
  8. data/ext/datadog_profiling_native_extension/collectors_thread_context.h +1 -0
  9. data/ext/datadog_profiling_native_extension/extconf.rb +1 -4
  10. data/ext/datadog_profiling_native_extension/private_vm_api_access.c +5 -0
  11. data/ext/datadog_profiling_native_extension/private_vm_api_access.h +2 -0
  12. data/ext/datadog_profiling_native_extension/setup_signal_handler.c +2 -0
  13. data/ext/datadog_profiling_native_extension/time_helpers.h +12 -7
  14. data/ext/libdatadog_api/extconf.rb +24 -24
  15. data/ext/libdatadog_api/feature_flags.c +26 -0
  16. data/ext/libdatadog_extconf_helpers.rb +9 -9
  17. data/lib/datadog/ai_guard/api_client.rb +2 -2
  18. data/lib/datadog/ai_guard/component.rb +10 -10
  19. data/lib/datadog/appsec/actions_handler/serializable_backtrace.rb +16 -16
  20. data/lib/datadog/appsec/actions_handler.rb +6 -6
  21. data/lib/datadog/appsec/anonymizer.rb +1 -1
  22. data/lib/datadog/appsec/api_security/endpoint_collection/grape_route_serializer.rb +1 -1
  23. data/lib/datadog/appsec/api_security/endpoint_collection/rails_collector.rb +6 -6
  24. data/lib/datadog/appsec/api_security/endpoint_collection/sinatra_route_serializer.rb +1 -1
  25. data/lib/datadog/appsec/api_security/route_extractor.rb +11 -11
  26. data/lib/datadog/appsec/api_security/sampler.rb +5 -5
  27. data/lib/datadog/appsec/api_security.rb +1 -1
  28. data/lib/datadog/appsec/assets.rb +7 -7
  29. data/lib/datadog/appsec/autoload.rb +3 -3
  30. data/lib/datadog/appsec/component.rb +15 -15
  31. data/lib/datadog/appsec/compressed_json.rb +6 -6
  32. data/lib/datadog/appsec/configuration.rb +59 -59
  33. data/lib/datadog/appsec/context.rb +6 -6
  34. data/lib/datadog/appsec/contrib/active_record/instrumentation.rb +6 -6
  35. data/lib/datadog/appsec/contrib/active_record/integration.rb +4 -4
  36. data/lib/datadog/appsec/contrib/active_record/patcher.rb +4 -4
  37. data/lib/datadog/appsec/contrib/aws_lambda/gateway/watcher.rb +7 -7
  38. data/lib/datadog/appsec/contrib/aws_lambda/integration.rb +2 -2
  39. data/lib/datadog/appsec/contrib/aws_lambda/patcher.rb +2 -2
  40. data/lib/datadog/appsec/contrib/aws_lambda/waf_addresses.rb +36 -34
  41. data/lib/datadog/appsec/contrib/devise/data_extractor.rb +3 -3
  42. data/lib/datadog/appsec/contrib/devise/ext.rb +20 -20
  43. data/lib/datadog/appsec/contrib/devise/integration.rb +4 -4
  44. data/lib/datadog/appsec/contrib/devise/patcher.rb +7 -7
  45. data/lib/datadog/appsec/contrib/devise/patches/signin_tracking_patch.rb +12 -12
  46. data/lib/datadog/appsec/contrib/devise/patches/signup_tracking_patch.rb +8 -8
  47. data/lib/datadog/appsec/contrib/devise/tracking_middleware.rb +24 -9
  48. data/lib/datadog/appsec/contrib/excon/integration.rb +4 -4
  49. data/lib/datadog/appsec/contrib/excon/patcher.rb +1 -1
  50. data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +26 -26
  51. data/lib/datadog/appsec/contrib/faraday/integration.rb +4 -4
  52. data/lib/datadog/appsec/contrib/faraday/patcher.rb +4 -4
  53. data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +22 -22
  54. data/lib/datadog/appsec/contrib/graphql/appsec_trace.rb +4 -4
  55. data/lib/datadog/appsec/contrib/graphql/gateway/multiplex.rb +2 -2
  56. data/lib/datadog/appsec/contrib/graphql/gateway/watcher.rb +7 -7
  57. data/lib/datadog/appsec/contrib/graphql/integration.rb +9 -9
  58. data/lib/datadog/appsec/contrib/graphql/patcher.rb +3 -3
  59. data/lib/datadog/appsec/contrib/rack/buffered_input.rb +1 -1
  60. data/lib/datadog/appsec/contrib/rack/ext.rb +29 -29
  61. data/lib/datadog/appsec/contrib/rack/gateway/request.rb +18 -17
  62. data/lib/datadog/appsec/contrib/rack/gateway/response.rb +1 -1
  63. data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +24 -24
  64. data/lib/datadog/appsec/contrib/rack/input_peeker.rb +6 -6
  65. data/lib/datadog/appsec/contrib/rack/integration.rb +6 -6
  66. data/lib/datadog/appsec/contrib/rack/patcher.rb +2 -2
  67. data/lib/datadog/appsec/contrib/rack/request_body_middleware.rb +5 -5
  68. data/lib/datadog/appsec/contrib/rack/request_middleware.rb +26 -26
  69. data/lib/datadog/appsec/contrib/rack/response_body.rb +1 -1
  70. data/lib/datadog/appsec/contrib/rails/gateway/request.rb +14 -9
  71. data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +10 -10
  72. data/lib/datadog/appsec/contrib/rails/integration.rb +5 -5
  73. data/lib/datadog/appsec/contrib/rails/patcher.rb +17 -17
  74. data/lib/datadog/appsec/contrib/rails/patches/process_action_patch.rb +2 -2
  75. data/lib/datadog/appsec/contrib/rails/patches/render_to_body_patch.rb +3 -3
  76. data/lib/datadog/appsec/contrib/rails/request.rb +3 -3
  77. data/lib/datadog/appsec/contrib/rest_client/integration.rb +5 -5
  78. data/lib/datadog/appsec/contrib/rest_client/patcher.rb +1 -1
  79. data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +23 -23
  80. data/lib/datadog/appsec/contrib/sinatra/gateway/request.rb +1 -1
  81. data/lib/datadog/appsec/contrib/sinatra/gateway/route_params.rb +1 -1
  82. data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +15 -15
  83. data/lib/datadog/appsec/contrib/sinatra/integration.rb +5 -5
  84. data/lib/datadog/appsec/contrib/sinatra/patcher.rb +11 -11
  85. data/lib/datadog/appsec/contrib/sinatra/patches/json_patch.rb +3 -3
  86. data/lib/datadog/appsec/counter_sampler.rb +1 -1
  87. data/lib/datadog/appsec/event.rb +14 -14
  88. data/lib/datadog/appsec/ext.rb +11 -11
  89. data/lib/datadog/appsec/extensions.rb +2 -2
  90. data/lib/datadog/appsec/instrumentation/gateway.rb +1 -1
  91. data/lib/datadog/appsec/metrics/exporter.rb +8 -8
  92. data/lib/datadog/appsec/metrics/telemetry.rb +7 -7
  93. data/lib/datadog/appsec/metrics/telemetry_exporter.rb +4 -4
  94. data/lib/datadog/appsec/metrics.rb +4 -4
  95. data/lib/datadog/appsec/monitor/gateway/watcher.rb +16 -12
  96. data/lib/datadog/appsec/monitor.rb +1 -1
  97. data/lib/datadog/appsec/processor/rule_loader.rb +26 -26
  98. data/lib/datadog/appsec/rate_limiter.rb +1 -1
  99. data/lib/datadog/appsec/remote.rb +6 -6
  100. data/lib/datadog/appsec/response.rb +21 -21
  101. data/lib/datadog/appsec/route_normalizer/rails_route_pattern.rb +11 -11
  102. data/lib/datadog/appsec/route_normalizer/route_pattern.rb +15 -15
  103. data/lib/datadog/appsec/route_normalizer/route_text.rb +3 -3
  104. data/lib/datadog/appsec/route_normalizer.rb +15 -15
  105. data/lib/datadog/appsec/security_engine/engine.rb +37 -37
  106. data/lib/datadog/appsec/security_engine/runner.rb +2 -2
  107. data/lib/datadog/appsec/security_event.rb +2 -2
  108. data/lib/datadog/appsec/utils/http/body.rb +11 -8
  109. data/lib/datadog/appsec/utils/http/body_reader.rb +1 -1
  110. data/lib/datadog/appsec/utils/http/media_range.rb +15 -15
  111. data/lib/datadog/appsec/utils/http/media_type.rb +4 -4
  112. data/lib/datadog/appsec/utils/http/url_encoded.rb +80 -25
  113. data/lib/datadog/appsec.rb +16 -16
  114. data/lib/datadog/auto_instrument.rb +2 -2
  115. data/lib/datadog/core/buffer/cruby.rb +1 -1
  116. data/lib/datadog/core/buffer/thread_safe.rb +1 -1
  117. data/lib/datadog/core/configuration/agent_settings.rb +1 -1
  118. data/lib/datadog/core/configuration/agent_settings_resolver.rb +15 -15
  119. data/lib/datadog/core/configuration/agentless_settings_resolver.rb +2 -2
  120. data/lib/datadog/core/configuration/base.rb +2 -2
  121. data/lib/datadog/core/configuration/components.rb +33 -29
  122. data/lib/datadog/core/configuration/config_helper.rb +3 -3
  123. data/lib/datadog/core/configuration/deprecations.rb +6 -6
  124. data/lib/datadog/core/configuration/ext.rb +11 -11
  125. data/lib/datadog/core/configuration/option.rb +16 -16
  126. data/lib/datadog/core/configuration/option_definition.rb +4 -4
  127. data/lib/datadog/core/configuration/options.rb +1 -1
  128. data/lib/datadog/core/configuration/settings.rb +62 -62
  129. data/lib/datadog/core/configuration/stable_config.rb +1 -1
  130. data/lib/datadog/core/configuration/supported_configurations.rb +3 -1
  131. data/lib/datadog/core/configuration.rb +8 -8
  132. data/lib/datadog/core/contrib/rails/railtie.rb +3 -3
  133. data/lib/datadog/core/crashtracking/component.rb +9 -9
  134. data/lib/datadog/core/crashtracking/tag_builder.rb +5 -5
  135. data/lib/datadog/core/deprecations.rb +1 -1
  136. data/lib/datadog/core/diagnostics/environment_logger.rb +6 -6
  137. data/lib/datadog/core/diagnostics/health.rb +2 -2
  138. data/lib/datadog/core/encoding.rb +4 -4
  139. data/lib/datadog/core/environment/agent_info.rb +2 -2
  140. data/lib/datadog/core/environment/cgroup.rb +4 -4
  141. data/lib/datadog/core/environment/container.rb +9 -9
  142. data/lib/datadog/core/environment/execution.rb +3 -3
  143. data/lib/datadog/core/environment/ext.rb +18 -18
  144. data/lib/datadog/core/environment/git.rb +2 -2
  145. data/lib/datadog/core/environment/identity.rb +10 -10
  146. data/lib/datadog/core/environment/platform.rb +8 -8
  147. data/lib/datadog/core/environment/process.rb +3 -3
  148. data/lib/datadog/core/environment/socket.rb +2 -2
  149. data/lib/datadog/core/environment/variable_helpers.rb +1 -1
  150. data/lib/datadog/core/error.rb +5 -5
  151. data/lib/datadog/core/evp.rb +2 -2
  152. data/lib/datadog/core/extensions.rb +1 -1
  153. data/lib/datadog/core/feature_flags.rb +2 -2
  154. data/lib/datadog/core/git/ext.rb +4 -4
  155. data/lib/datadog/core/knuth_sampler.rb +3 -1
  156. data/lib/datadog/core/logger.rb +3 -3
  157. data/lib/datadog/core/logging/ext.rb +1 -1
  158. data/lib/datadog/core/metrics/client.rb +21 -21
  159. data/lib/datadog/core/metrics/ext.rb +5 -5
  160. data/lib/datadog/core/metrics/logging.rb +2 -2
  161. data/lib/datadog/core/metrics/options.rb +3 -3
  162. data/lib/datadog/core/pin.rb +1 -1
  163. data/lib/datadog/core/process_discovery.rb +8 -8
  164. data/lib/datadog/core/rate_limiter.rb +1 -1
  165. data/lib/datadog/core/remote/client/capabilities.rb +36 -20
  166. data/lib/datadog/core/remote/client.rb +16 -16
  167. data/lib/datadog/core/remote/component.rb +20 -12
  168. data/lib/datadog/core/remote/configuration/content.rb +3 -3
  169. data/lib/datadog/core/remote/configuration/digest.rb +1 -1
  170. data/lib/datadog/core/remote/configuration/path.rb +9 -9
  171. data/lib/datadog/core/remote/configuration/repository.rb +2 -2
  172. data/lib/datadog/core/remote/configuration/target.rb +9 -9
  173. data/lib/datadog/core/remote/configuration.rb +4 -4
  174. data/lib/datadog/core/remote/ext.rb +3 -3
  175. data/lib/datadog/core/remote/negotiation.rb +1 -1
  176. data/lib/datadog/core/remote/tie/tracing.rb +7 -7
  177. data/lib/datadog/core/remote/transport/config.rb +4 -4
  178. data/lib/datadog/core/remote/transport/http/config.rb +7 -7
  179. data/lib/datadog/core/remote/transport/http/negotiation.rb +4 -4
  180. data/lib/datadog/core/remote/transport/http.rb +10 -10
  181. data/lib/datadog/core/remote/transport/negotiation.rb +3 -3
  182. data/lib/datadog/core/remote/worker.rb +5 -5
  183. data/lib/datadog/core/runtime/ext.rb +22 -22
  184. data/lib/datadog/core/runtime/metrics.rb +9 -9
  185. data/lib/datadog/core/tag_builder.rb +18 -18
  186. data/lib/datadog/core/tag_normalizer.rb +7 -7
  187. data/lib/datadog/core/telemetry/component.rb +13 -13
  188. data/lib/datadog/core/telemetry/emitter.rb +4 -4
  189. data/lib/datadog/core/telemetry/event/app_client_configuration_change.rb +5 -5
  190. data/lib/datadog/core/telemetry/event/app_closing.rb +2 -2
  191. data/lib/datadog/core/telemetry/event/app_dependencies_loaded.rb +2 -2
  192. data/lib/datadog/core/telemetry/event/app_endpoints_loaded.rb +2 -2
  193. data/lib/datadog/core/telemetry/event/app_extended_heartbeat.rb +2 -2
  194. data/lib/datadog/core/telemetry/event/app_heartbeat.rb +2 -2
  195. data/lib/datadog/core/telemetry/event/app_integrations_change.rb +2 -2
  196. data/lib/datadog/core/telemetry/event/app_started.rb +33 -33
  197. data/lib/datadog/core/telemetry/event/base.rb +1 -1
  198. data/lib/datadog/core/telemetry/event/distributions.rb +2 -2
  199. data/lib/datadog/core/telemetry/event/generate_metrics.rb +2 -2
  200. data/lib/datadog/core/telemetry/event/log.rb +4 -4
  201. data/lib/datadog/core/telemetry/event/message_batch.rb +1 -1
  202. data/lib/datadog/core/telemetry/event/synth_app_client_configuration_change.rb +2 -2
  203. data/lib/datadog/core/telemetry/event.rb +16 -16
  204. data/lib/datadog/core/telemetry/ext.rb +11 -11
  205. data/lib/datadog/core/telemetry/logger.rb +1 -1
  206. data/lib/datadog/core/telemetry/logging.rb +5 -5
  207. data/lib/datadog/core/telemetry/metric.rb +7 -7
  208. data/lib/datadog/core/telemetry/metrics_collection.rb +2 -2
  209. data/lib/datadog/core/telemetry/metrics_manager.rb +1 -1
  210. data/lib/datadog/core/telemetry/request.rb +4 -4
  211. data/lib/datadog/core/telemetry/transport/http/telemetry.rb +14 -14
  212. data/lib/datadog/core/telemetry/transport/http.rb +7 -7
  213. data/lib/datadog/core/telemetry/transport/telemetry.rb +3 -3
  214. data/lib/datadog/core/telemetry/worker.rb +6 -6
  215. data/lib/datadog/core/transport/ext.rb +14 -14
  216. data/lib/datadog/core/transport/http/adapters/net.rb +4 -4
  217. data/lib/datadog/core/transport/http/adapters/test.rb +1 -1
  218. data/lib/datadog/core/transport/http/adapters/unix_socket.rb +4 -4
  219. data/lib/datadog/core/transport/http/api/endpoint.rb +1 -1
  220. data/lib/datadog/core/transport/http/api/map.rb +1 -1
  221. data/lib/datadog/core/transport/http/builder.rb +6 -6
  222. data/lib/datadog/core/transport/http/client.rb +2 -2
  223. data/lib/datadog/core/transport/http/response.rb +1 -1
  224. data/lib/datadog/core/transport/http.rb +8 -8
  225. data/lib/datadog/core/transport/transport.rb +1 -1
  226. data/lib/datadog/core/utils/at_fork_monkey_patch.rb +3 -3
  227. data/lib/datadog/core/utils/base64_codec.rb +3 -3
  228. data/lib/datadog/core/utils/duration.rb +1 -1
  229. data/lib/datadog/core/utils/forking.rb +2 -2
  230. data/lib/datadog/core/utils/lru_cache.rb +3 -3
  231. data/lib/datadog/core/utils/network.rb +11 -11
  232. data/lib/datadog/core/utils/only_once_successful.rb +1 -1
  233. data/lib/datadog/core/utils/safe_dup.rb +2 -1
  234. data/lib/datadog/core/utils/spawn_monkey_patch.rb +2 -2
  235. data/lib/datadog/core/utils/time.rb +5 -1
  236. data/lib/datadog/core/utils/url.rb +1 -1
  237. data/lib/datadog/core/utils.rb +4 -4
  238. data/lib/datadog/core/workers/async.rb +1 -1
  239. data/lib/datadog/core/workers/polling.rb +2 -2
  240. data/lib/datadog/core/workers/runtime_metrics.rb +4 -4
  241. data/lib/datadog/core.rb +4 -4
  242. data/lib/datadog/data_streams/configuration.rb +3 -3
  243. data/lib/datadog/data_streams/ext.rb +1 -1
  244. data/lib/datadog/data_streams/extensions.rb +2 -2
  245. data/lib/datadog/data_streams/pathway_context.rb +5 -5
  246. data/lib/datadog/data_streams/processor.rb +52 -52
  247. data/lib/datadog/data_streams/transport/http/stats.rb +5 -5
  248. data/lib/datadog/data_streams/transport/http.rb +5 -5
  249. data/lib/datadog/data_streams/transport/stats.rb +7 -7
  250. data/lib/datadog/data_streams.rb +5 -5
  251. data/lib/datadog/di/base.rb +4 -4
  252. data/lib/datadog/di/boot.rb +25 -22
  253. data/lib/datadog/di/capture_expression.rb +21 -0
  254. data/lib/datadog/di/capture_expression_evaluator.rb +71 -0
  255. data/lib/datadog/di/capture_limits.rb +41 -0
  256. data/lib/datadog/di/code_tracker.rb +6 -6
  257. data/lib/datadog/di/component.rb +13 -5
  258. data/lib/datadog/di/configuration.rb +7 -1
  259. data/lib/datadog/di/context.rb +9 -3
  260. data/lib/datadog/di/contrib/railtie.rb +1 -1
  261. data/lib/datadog/di/contrib.rb +5 -5
  262. data/lib/datadog/di/el/compiler.rb +26 -26
  263. data/lib/datadog/di/el.rb +3 -3
  264. data/lib/datadog/di/instrumenter.rb +52 -11
  265. data/lib/datadog/di/logger.rb +1 -1
  266. data/lib/datadog/di/preload.rb +1 -1
  267. data/lib/datadog/di/probe.rb +47 -2
  268. data/lib/datadog/di/probe_builder.rb +94 -12
  269. data/lib/datadog/di/probe_file_loader/railtie.rb +1 -1
  270. data/lib/datadog/di/probe_file_loader.rb +5 -5
  271. data/lib/datadog/di/probe_manager.rb +1 -1
  272. data/lib/datadog/di/probe_notification_builder.rb +63 -22
  273. data/lib/datadog/di/probe_notifier_worker.rb +6 -6
  274. data/lib/datadog/di/probe_repository.rb +1 -1
  275. data/lib/datadog/di/remote.rb +4 -4
  276. data/lib/datadog/di/serializer.rb +35 -23
  277. data/lib/datadog/di/transport/diagnostics.rb +5 -5
  278. data/lib/datadog/di/transport/http/diagnostics.rb +3 -3
  279. data/lib/datadog/di/transport/http/input.rb +2 -2
  280. data/lib/datadog/di/transport/http.rb +10 -10
  281. data/lib/datadog/di/transport/input.rb +9 -9
  282. data/lib/datadog/di/utils.rb +4 -4
  283. data/lib/datadog/di.rb +5 -5
  284. data/lib/datadog/error_tracking/collector.rb +2 -2
  285. data/lib/datadog/error_tracking/component.rb +12 -12
  286. data/lib/datadog/error_tracking/configuration.rb +2 -2
  287. data/lib/datadog/error_tracking/ext.rb +7 -7
  288. data/lib/datadog/error_tracking/extensions.rb +2 -2
  289. data/lib/datadog/error_tracking/filters.rb +4 -4
  290. data/lib/datadog/error_tracking.rb +6 -6
  291. data/lib/datadog/kit/appsec/events/v2.rb +39 -39
  292. data/lib/datadog/kit/appsec/events.rb +25 -25
  293. data/lib/datadog/kit/enable_core_dumps.rb +2 -2
  294. data/lib/datadog/kit/identity.rb +18 -18
  295. data/lib/datadog/kit/tracing/method_tracer.rb +7 -7
  296. data/lib/datadog/kit.rb +1 -1
  297. data/lib/datadog/open_feature/component.rb +31 -22
  298. data/lib/datadog/open_feature/configuration.rb +15 -2
  299. data/lib/datadog/open_feature/evaluation_engine.rb +7 -7
  300. data/lib/datadog/open_feature/exposures/buffer.rb +1 -1
  301. data/lib/datadog/open_feature/exposures/deduplicator.rb +1 -1
  302. data/lib/datadog/open_feature/exposures/event.rb +2 -2
  303. data/lib/datadog/open_feature/exposures/reporter.rb +3 -3
  304. data/lib/datadog/open_feature/exposures/worker.rb +6 -6
  305. data/lib/datadog/open_feature/ext.rb +13 -8
  306. data/lib/datadog/open_feature/flag_evaluation/aggregator.rb +8 -8
  307. data/lib/datadog/open_feature/flag_evaluation/writer.rb +36 -36
  308. data/lib/datadog/open_feature/hooks/flag_eval_evp_hook.rb +5 -4
  309. data/lib/datadog/open_feature/hooks/flag_eval_metrics_hook.rb +3 -1
  310. data/lib/datadog/open_feature/hooks/span_enrichment_hook/codec.rb +58 -0
  311. data/lib/datadog/open_feature/hooks/span_enrichment_hook/span_enrichment_state.rb +96 -0
  312. data/lib/datadog/open_feature/hooks/span_enrichment_hook/span_enrichment_state_store.rb +49 -0
  313. data/lib/datadog/open_feature/hooks/span_enrichment_hook.rb +184 -0
  314. data/lib/datadog/open_feature/metrics/flag_eval_metrics.rb +24 -24
  315. data/lib/datadog/open_feature/native_evaluator.rb +4 -4
  316. data/lib/datadog/open_feature/noop_evaluator.rb +3 -3
  317. data/lib/datadog/open_feature/provider.rb +45 -10
  318. data/lib/datadog/open_feature/remote.rb +2 -2
  319. data/lib/datadog/open_feature/resolution_details.rb +4 -2
  320. data/lib/datadog/open_feature/transport.rb +14 -14
  321. data/lib/datadog/open_feature.rb +2 -2
  322. data/lib/datadog/opentelemetry/api/baggage.rb +3 -3
  323. data/lib/datadog/opentelemetry/api/context.rb +4 -4
  324. data/lib/datadog/opentelemetry/configuration/settings.rb +41 -41
  325. data/lib/datadog/opentelemetry/ext.rb +1 -1
  326. data/lib/datadog/opentelemetry/logs.rb +5 -5
  327. data/lib/datadog/opentelemetry/metrics.rb +7 -7
  328. data/lib/datadog/opentelemetry/sdk/configurator.rb +8 -8
  329. data/lib/datadog/opentelemetry/sdk/id_generator.rb +2 -2
  330. data/lib/datadog/opentelemetry/sdk/logs_exporter.rb +6 -6
  331. data/lib/datadog/opentelemetry/sdk/metrics_exporter.rb +5 -5
  332. data/lib/datadog/opentelemetry/sdk/propagator.rb +7 -7
  333. data/lib/datadog/opentelemetry/sdk/span_processor.rb +15 -15
  334. data/lib/datadog/opentelemetry/sdk/trace/span.rb +32 -32
  335. data/lib/datadog/opentelemetry/sdk.rb +2 -2
  336. data/lib/datadog/opentelemetry/signal_configuration.rb +11 -11
  337. data/lib/datadog/opentelemetry/trace.rb +1 -1
  338. data/lib/datadog/opentelemetry.rb +8 -8
  339. data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +5 -0
  340. data/lib/datadog/profiling/collectors/thread_context.rb +9 -1
  341. data/lib/datadog/profiling/component.rb +17 -0
  342. data/lib/datadog/profiling/exporter.rb +1 -1
  343. data/lib/datadog/profiling/http_transport.rb +1 -1
  344. data/lib/datadog/profiling/sequence_tracker.rb +1 -1
  345. data/lib/datadog/profiling/tag_builder.rb +19 -19
  346. data/lib/datadog/profiling.rb +27 -27
  347. data/lib/datadog/single_step_instrument.rb +1 -1
  348. data/lib/datadog/symbol_database/component.rb +15 -15
  349. data/lib/datadog/symbol_database/configuration.rb +3 -3
  350. data/lib/datadog/symbol_database/extensions.rb +2 -2
  351. data/lib/datadog/symbol_database/extractor.rb +53 -53
  352. data/lib/datadog/symbol_database/file_hash.rb +3 -3
  353. data/lib/datadog/symbol_database/logger.rb +1 -1
  354. data/lib/datadog/symbol_database/remote.rb +21 -6
  355. data/lib/datadog/symbol_database/scope.rb +2 -2
  356. data/lib/datadog/symbol_database/scope_batcher.rb +2 -2
  357. data/lib/datadog/symbol_database/service_version.rb +4 -4
  358. data/lib/datadog/symbol_database/symbol.rb +1 -1
  359. data/lib/datadog/symbol_database/transport/http/endpoint.rb +1 -1
  360. data/lib/datadog/symbol_database/transport/http.rb +6 -6
  361. data/lib/datadog/symbol_database/transport.rb +4 -4
  362. data/lib/datadog/symbol_database/uploader.rb +22 -22
  363. data/lib/datadog/symbol_database.rb +2 -2
  364. data/lib/datadog/tracing/analytics.rb +1 -1
  365. data/lib/datadog/tracing/buffer.rb +5 -5
  366. data/lib/datadog/tracing/client_ip.rb +4 -4
  367. data/lib/datadog/tracing/component.rb +7 -7
  368. data/lib/datadog/tracing/configuration/dynamic.rb +8 -8
  369. data/lib/datadog/tracing/configuration/ext.rb +42 -42
  370. data/lib/datadog/tracing/configuration/http.rb +2 -2
  371. data/lib/datadog/tracing/configuration/settings.rb +16 -16
  372. data/lib/datadog/tracing/context.rb +1 -1
  373. data/lib/datadog/tracing/context_provider.rb +2 -2
  374. data/lib/datadog/tracing/contrib/action_cable/configuration/settings.rb +2 -2
  375. data/lib/datadog/tracing/contrib/action_cable/event.rb +4 -4
  376. data/lib/datadog/tracing/contrib/action_cable/events/broadcast.rb +5 -5
  377. data/lib/datadog/tracing/contrib/action_cable/events/perform_action.rb +4 -4
  378. data/lib/datadog/tracing/contrib/action_cable/events/transmit.rb +5 -5
  379. data/lib/datadog/tracing/contrib/action_cable/events.rb +4 -4
  380. data/lib/datadog/tracing/contrib/action_cable/ext.rb +18 -18
  381. data/lib/datadog/tracing/contrib/action_cable/instrumentation.rb +4 -4
  382. data/lib/datadog/tracing/contrib/action_cable/integration.rb +7 -7
  383. data/lib/datadog/tracing/contrib/action_cable/patcher.rb +4 -4
  384. data/lib/datadog/tracing/contrib/action_mailer/configuration/settings.rb +2 -2
  385. data/lib/datadog/tracing/contrib/action_mailer/event.rb +3 -3
  386. data/lib/datadog/tracing/contrib/action_mailer/events/deliver.rb +8 -8
  387. data/lib/datadog/tracing/contrib/action_mailer/events/process.rb +4 -4
  388. data/lib/datadog/tracing/contrib/action_mailer/events.rb +2 -2
  389. data/lib/datadog/tracing/contrib/action_mailer/ext.rb +18 -18
  390. data/lib/datadog/tracing/contrib/action_mailer/integration.rb +7 -7
  391. data/lib/datadog/tracing/contrib/action_mailer/patcher.rb +3 -3
  392. data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +8 -8
  393. data/lib/datadog/tracing/contrib/action_pack/action_controller/patcher.rb +2 -2
  394. data/lib/datadog/tracing/contrib/action_pack/action_dispatch/instrumentation.rb +4 -4
  395. data/lib/datadog/tracing/contrib/action_pack/action_dispatch/patcher.rb +4 -4
  396. data/lib/datadog/tracing/contrib/action_pack/configuration/settings.rb +3 -3
  397. data/lib/datadog/tracing/contrib/action_pack/ext.rb +10 -10
  398. data/lib/datadog/tracing/contrib/action_pack/integration.rb +7 -7
  399. data/lib/datadog/tracing/contrib/action_pack/patcher.rb +3 -3
  400. data/lib/datadog/tracing/contrib/action_pack/utils.rb +1 -1
  401. data/lib/datadog/tracing/contrib/action_view/configuration/settings.rb +3 -3
  402. data/lib/datadog/tracing/contrib/action_view/event.rb +1 -1
  403. data/lib/datadog/tracing/contrib/action_view/events/render_partial.rb +6 -6
  404. data/lib/datadog/tracing/contrib/action_view/events/render_template.rb +6 -6
  405. data/lib/datadog/tracing/contrib/action_view/events.rb +2 -2
  406. data/lib/datadog/tracing/contrib/action_view/ext.rb +10 -10
  407. data/lib/datadog/tracing/contrib/action_view/integration.rb +11 -11
  408. data/lib/datadog/tracing/contrib/action_view/patcher.rb +5 -5
  409. data/lib/datadog/tracing/contrib/action_view/utils.rb +2 -2
  410. data/lib/datadog/tracing/contrib/active_job/configuration/settings.rb +2 -2
  411. data/lib/datadog/tracing/contrib/active_job/data_streams.rb +62 -0
  412. data/lib/datadog/tracing/contrib/active_job/event.rb +3 -3
  413. data/lib/datadog/tracing/contrib/active_job/events/discard.rb +5 -5
  414. data/lib/datadog/tracing/contrib/active_job/events/enqueue.rb +5 -5
  415. data/lib/datadog/tracing/contrib/active_job/events/enqueue_at.rb +5 -5
  416. data/lib/datadog/tracing/contrib/active_job/events/enqueue_retry.rb +5 -5
  417. data/lib/datadog/tracing/contrib/active_job/events/perform.rb +5 -5
  418. data/lib/datadog/tracing/contrib/active_job/events/retry_stopped.rb +5 -5
  419. data/lib/datadog/tracing/contrib/active_job/events.rb +6 -6
  420. data/lib/datadog/tracing/contrib/active_job/ext.rb +23 -23
  421. data/lib/datadog/tracing/contrib/active_job/integration.rb +7 -7
  422. data/lib/datadog/tracing/contrib/active_job/patcher.rb +17 -5
  423. data/lib/datadog/tracing/contrib/active_model_serializers/configuration/settings.rb +2 -2
  424. data/lib/datadog/tracing/contrib/active_model_serializers/event.rb +4 -4
  425. data/lib/datadog/tracing/contrib/active_model_serializers/events/render.rb +6 -6
  426. data/lib/datadog/tracing/contrib/active_model_serializers/events/serialize.rb +7 -8
  427. data/lib/datadog/tracing/contrib/active_model_serializers/events.rb +2 -2
  428. data/lib/datadog/tracing/contrib/active_model_serializers/ext.rb +10 -10
  429. data/lib/datadog/tracing/contrib/active_model_serializers/integration.rb +5 -5
  430. data/lib/datadog/tracing/contrib/active_model_serializers/patcher.rb +3 -3
  431. data/lib/datadog/tracing/contrib/active_record/configuration/makara_resolver.rb +1 -1
  432. data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +6 -6
  433. data/lib/datadog/tracing/contrib/active_record/configuration/settings.rb +4 -4
  434. data/lib/datadog/tracing/contrib/active_record/event.rb +1 -1
  435. data/lib/datadog/tracing/contrib/active_record/events/instantiation.rb +8 -8
  436. data/lib/datadog/tracing/contrib/active_record/events/sql.rb +9 -9
  437. data/lib/datadog/tracing/contrib/active_record/events.rb +2 -2
  438. data/lib/datadog/tracing/contrib/active_record/ext.rb +15 -15
  439. data/lib/datadog/tracing/contrib/active_record/integration.rb +11 -11
  440. data/lib/datadog/tracing/contrib/active_record/patcher.rb +2 -2
  441. data/lib/datadog/tracing/contrib/active_record/utils.rb +3 -3
  442. data/lib/datadog/tracing/contrib/active_support/cache/event.rb +1 -1
  443. data/lib/datadog/tracing/contrib/active_support/cache/events/cache.rb +11 -11
  444. data/lib/datadog/tracing/contrib/active_support/cache/events.rb +1 -1
  445. data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +4 -4
  446. data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +5 -5
  447. data/lib/datadog/tracing/contrib/active_support/cache/redis.rb +4 -4
  448. data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +3 -3
  449. data/lib/datadog/tracing/contrib/active_support/ext.rb +16 -16
  450. data/lib/datadog/tracing/contrib/active_support/integration.rb +8 -8
  451. data/lib/datadog/tracing/contrib/active_support/notifications/event.rb +1 -1
  452. data/lib/datadog/tracing/contrib/active_support/notifications/subscriber.rb +2 -2
  453. data/lib/datadog/tracing/contrib/active_support/notifications/subscription.rb +1 -1
  454. data/lib/datadog/tracing/contrib/active_support/patcher.rb +2 -2
  455. data/lib/datadog/tracing/contrib/analytics.rb +1 -1
  456. data/lib/datadog/tracing/contrib/auto_instrument.rb +4 -4
  457. data/lib/datadog/tracing/contrib/aws/configuration/settings.rb +3 -3
  458. data/lib/datadog/tracing/contrib/aws/ext.rb +25 -25
  459. data/lib/datadog/tracing/contrib/aws/instrumentation.rb +5 -5
  460. data/lib/datadog/tracing/contrib/aws/integration.rb +9 -9
  461. data/lib/datadog/tracing/contrib/aws/parsed_context.rb +1 -1
  462. data/lib/datadog/tracing/contrib/aws/patcher.rb +5 -5
  463. data/lib/datadog/tracing/contrib/aws/service/dynamodb.rb +2 -2
  464. data/lib/datadog/tracing/contrib/aws/service/eventbridge.rb +2 -2
  465. data/lib/datadog/tracing/contrib/aws/service/kinesis.rb +4 -4
  466. data/lib/datadog/tracing/contrib/aws/service/s3.rb +2 -2
  467. data/lib/datadog/tracing/contrib/aws/service/sns.rb +3 -3
  468. data/lib/datadog/tracing/contrib/aws/service/sqs.rb +3 -3
  469. data/lib/datadog/tracing/contrib/aws/service/states.rb +5 -5
  470. data/lib/datadog/tracing/contrib/aws/services.rb +14 -14
  471. data/lib/datadog/tracing/contrib/concurrent_ruby/async_patch.rb +1 -1
  472. data/lib/datadog/tracing/contrib/concurrent_ruby/configuration/settings.rb +2 -2
  473. data/lib/datadog/tracing/contrib/concurrent_ruby/context_composite_executor_service.rb +1 -1
  474. data/lib/datadog/tracing/contrib/concurrent_ruby/ext.rb +2 -2
  475. data/lib/datadog/tracing/contrib/concurrent_ruby/future_patch.rb +1 -1
  476. data/lib/datadog/tracing/contrib/concurrent_ruby/integration.rb +6 -6
  477. data/lib/datadog/tracing/contrib/concurrent_ruby/patcher.rb +4 -4
  478. data/lib/datadog/tracing/contrib/concurrent_ruby/promises_future_patch.rb +1 -1
  479. data/lib/datadog/tracing/contrib/configurable.rb +2 -2
  480. data/lib/datadog/tracing/contrib/configuration/resolvers/pattern_resolver.rb +1 -1
  481. data/lib/datadog/tracing/contrib/configuration/settings.rb +2 -2
  482. data/lib/datadog/tracing/contrib/dalli/configuration/settings.rb +2 -2
  483. data/lib/datadog/tracing/contrib/dalli/ext.rb +13 -13
  484. data/lib/datadog/tracing/contrib/dalli/instrumentation.rb +5 -5
  485. data/lib/datadog/tracing/contrib/dalli/integration.rb +7 -7
  486. data/lib/datadog/tracing/contrib/dalli/patcher.rb +3 -3
  487. data/lib/datadog/tracing/contrib/dalli/quantize.rb +2 -2
  488. data/lib/datadog/tracing/contrib/delayed_job/configuration/settings.rb +2 -2
  489. data/lib/datadog/tracing/contrib/delayed_job/ext.rb +14 -14
  490. data/lib/datadog/tracing/contrib/delayed_job/integration.rb +5 -5
  491. data/lib/datadog/tracing/contrib/delayed_job/patcher.rb +3 -3
  492. data/lib/datadog/tracing/contrib/delayed_job/plugin.rb +5 -5
  493. data/lib/datadog/tracing/contrib/elasticsearch/configuration/settings.rb +2 -2
  494. data/lib/datadog/tracing/contrib/elasticsearch/ext.rb +15 -15
  495. data/lib/datadog/tracing/contrib/elasticsearch/integration.rb +6 -6
  496. data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +10 -10
  497. data/lib/datadog/tracing/contrib/elasticsearch/quantize.rb +2 -2
  498. data/lib/datadog/tracing/contrib/ethon/configuration/settings.rb +2 -2
  499. data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +8 -8
  500. data/lib/datadog/tracing/contrib/ethon/ext.rb +13 -13
  501. data/lib/datadog/tracing/contrib/ethon/integration.rb +6 -6
  502. data/lib/datadog/tracing/contrib/ethon/multi_patch.rb +3 -3
  503. data/lib/datadog/tracing/contrib/ethon/patcher.rb +3 -3
  504. data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +5 -5
  505. data/lib/datadog/tracing/contrib/excon/ext.rb +11 -11
  506. data/lib/datadog/tracing/contrib/excon/integration.rb +6 -6
  507. data/lib/datadog/tracing/contrib/excon/middleware.rb +8 -8
  508. data/lib/datadog/tracing/contrib/excon/patcher.rb +2 -2
  509. data/lib/datadog/tracing/contrib/ext.rb +15 -15
  510. data/lib/datadog/tracing/contrib/extensions.rb +2 -2
  511. data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +4 -4
  512. data/lib/datadog/tracing/contrib/faraday/ext.rb +11 -11
  513. data/lib/datadog/tracing/contrib/faraday/integration.rb +6 -6
  514. data/lib/datadog/tracing/contrib/faraday/middleware.rb +8 -8
  515. data/lib/datadog/tracing/contrib/faraday/patcher.rb +6 -6
  516. data/lib/datadog/tracing/contrib/grape/configuration/settings.rb +4 -4
  517. data/lib/datadog/tracing/contrib/grape/endpoint.rb +20 -20
  518. data/lib/datadog/tracing/contrib/grape/ext.rb +15 -15
  519. data/lib/datadog/tracing/contrib/grape/instrumentation.rb +3 -3
  520. data/lib/datadog/tracing/contrib/grape/integration.rb +5 -5
  521. data/lib/datadog/tracing/contrib/grape/patcher.rb +5 -5
  522. data/lib/datadog/tracing/contrib/graphql/configuration/error_extension_env_parser.rb +1 -1
  523. data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +3 -3
  524. data/lib/datadog/tracing/contrib/graphql/ext.rb +9 -9
  525. data/lib/datadog/tracing/contrib/graphql/integration.rb +9 -9
  526. data/lib/datadog/tracing/contrib/graphql/patcher.rb +7 -7
  527. data/lib/datadog/tracing/contrib/graphql/unified_trace.rb +37 -37
  528. data/lib/datadog/tracing/contrib/graphql/unified_trace_patcher.rb +2 -2
  529. data/lib/datadog/tracing/contrib/grpc/configuration/settings.rb +2 -2
  530. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +7 -7
  531. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +7 -7
  532. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor.rb +6 -6
  533. data/lib/datadog/tracing/contrib/grpc/distributed/fetcher.rb +1 -1
  534. data/lib/datadog/tracing/contrib/grpc/distributed/propagation.rb +8 -8
  535. data/lib/datadog/tracing/contrib/grpc/ext.rb +14 -14
  536. data/lib/datadog/tracing/contrib/grpc/formatting.rb +7 -7
  537. data/lib/datadog/tracing/contrib/grpc/integration.rb +5 -5
  538. data/lib/datadog/tracing/contrib/grpc/intercept_with_datadog.rb +1 -1
  539. data/lib/datadog/tracing/contrib/grpc/patcher.rb +3 -3
  540. data/lib/datadog/tracing/contrib/grpc.rb +6 -6
  541. data/lib/datadog/tracing/contrib/hanami/action_tracer.rb +3 -3
  542. data/lib/datadog/tracing/contrib/hanami/configuration/settings.rb +2 -2
  543. data/lib/datadog/tracing/contrib/hanami/ext.rb +8 -8
  544. data/lib/datadog/tracing/contrib/hanami/integration.rb +6 -6
  545. data/lib/datadog/tracing/contrib/hanami/patcher.rb +5 -5
  546. data/lib/datadog/tracing/contrib/hanami/renderer_policy_tracing.rb +3 -3
  547. data/lib/datadog/tracing/contrib/hanami/router_tracing.rb +3 -3
  548. data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +1 -1
  549. data/lib/datadog/tracing/contrib/http/configuration/settings.rb +4 -4
  550. data/lib/datadog/tracing/contrib/http/distributed/fetcher.rb +3 -3
  551. data/lib/datadog/tracing/contrib/http/distributed/propagation.rb +8 -8
  552. data/lib/datadog/tracing/contrib/http/ext.rb +11 -11
  553. data/lib/datadog/tracing/contrib/http/instrumentation.rb +6 -6
  554. data/lib/datadog/tracing/contrib/http/integration.rb +7 -7
  555. data/lib/datadog/tracing/contrib/http/patcher.rb +3 -3
  556. data/lib/datadog/tracing/contrib/http.rb +6 -6
  557. data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +4 -4
  558. data/lib/datadog/tracing/contrib/httpclient/ext.rb +11 -11
  559. data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +5 -5
  560. data/lib/datadog/tracing/contrib/httpclient/integration.rb +6 -6
  561. data/lib/datadog/tracing/contrib/httpclient/patcher.rb +3 -3
  562. data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +4 -4
  563. data/lib/datadog/tracing/contrib/httprb/ext.rb +11 -11
  564. data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +6 -6
  565. data/lib/datadog/tracing/contrib/httprb/integration.rb +7 -7
  566. data/lib/datadog/tracing/contrib/httprb/patcher.rb +3 -3
  567. data/lib/datadog/tracing/contrib/integration.rb +3 -3
  568. data/lib/datadog/tracing/contrib/kafka/configuration/settings.rb +2 -2
  569. data/lib/datadog/tracing/contrib/kafka/event.rb +3 -3
  570. data/lib/datadog/tracing/contrib/kafka/events/connection/request.rb +3 -3
  571. data/lib/datadog/tracing/contrib/kafka/events/consumer/process_batch.rb +4 -4
  572. data/lib/datadog/tracing/contrib/kafka/events/consumer/process_message.rb +4 -4
  573. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/heartbeat.rb +5 -5
  574. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/join_group.rb +5 -5
  575. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/leave_group.rb +5 -5
  576. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/sync_group.rb +5 -5
  577. data/lib/datadog/tracing/contrib/kafka/events/produce_operation/send_messages.rb +3 -3
  578. data/lib/datadog/tracing/contrib/kafka/events/producer/deliver_messages.rb +3 -3
  579. data/lib/datadog/tracing/contrib/kafka/events.rb +9 -9
  580. data/lib/datadog/tracing/contrib/kafka/ext.rb +40 -40
  581. data/lib/datadog/tracing/contrib/kafka/instrumentation/consumer.rb +2 -2
  582. data/lib/datadog/tracing/contrib/kafka/instrumentation/producer.rb +4 -4
  583. data/lib/datadog/tracing/contrib/kafka/integration.rb +6 -6
  584. data/lib/datadog/tracing/contrib/kafka/patcher.rb +5 -5
  585. data/lib/datadog/tracing/contrib/karafka/configuration/settings.rb +2 -2
  586. data/lib/datadog/tracing/contrib/karafka/distributed/propagation.rb +8 -8
  587. data/lib/datadog/tracing/contrib/karafka/ext.rb +13 -13
  588. data/lib/datadog/tracing/contrib/karafka/integration.rb +5 -5
  589. data/lib/datadog/tracing/contrib/karafka/monitor.rb +14 -14
  590. data/lib/datadog/tracing/contrib/karafka/patcher.rb +8 -8
  591. data/lib/datadog/tracing/contrib/karafka.rb +6 -6
  592. data/lib/datadog/tracing/contrib/lograge/configuration/settings.rb +2 -2
  593. data/lib/datadog/tracing/contrib/lograge/ext.rb +1 -1
  594. data/lib/datadog/tracing/contrib/lograge/integration.rb +5 -5
  595. data/lib/datadog/tracing/contrib/lograge/patcher.rb +9 -9
  596. data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +2 -2
  597. data/lib/datadog/tracing/contrib/mongodb/ext.rb +18 -18
  598. data/lib/datadog/tracing/contrib/mongodb/instrumentation.rb +3 -3
  599. data/lib/datadog/tracing/contrib/mongodb/integration.rb +7 -7
  600. data/lib/datadog/tracing/contrib/mongodb/parsers.rb +5 -5
  601. data/lib/datadog/tracing/contrib/mongodb/patcher.rb +3 -3
  602. data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +13 -13
  603. data/lib/datadog/tracing/contrib/mysql2/configuration/settings.rb +3 -3
  604. data/lib/datadog/tracing/contrib/mysql2/ext.rb +11 -11
  605. data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +6 -6
  606. data/lib/datadog/tracing/contrib/mysql2/integration.rb +5 -5
  607. data/lib/datadog/tracing/contrib/mysql2/patcher.rb +2 -2
  608. data/lib/datadog/tracing/contrib/opensearch/configuration/settings.rb +2 -2
  609. data/lib/datadog/tracing/contrib/opensearch/ext.rb +22 -22
  610. data/lib/datadog/tracing/contrib/opensearch/integration.rb +6 -6
  611. data/lib/datadog/tracing/contrib/opensearch/patcher.rb +13 -13
  612. data/lib/datadog/tracing/contrib/opensearch/quantize.rb +3 -3
  613. data/lib/datadog/tracing/contrib/patcher.rb +2 -2
  614. data/lib/datadog/tracing/contrib/pg/configuration/settings.rb +3 -3
  615. data/lib/datadog/tracing/contrib/pg/ext.rb +19 -19
  616. data/lib/datadog/tracing/contrib/pg/instrumentation.rb +18 -18
  617. data/lib/datadog/tracing/contrib/pg/integration.rb +5 -5
  618. data/lib/datadog/tracing/contrib/pg/patcher.rb +2 -2
  619. data/lib/datadog/tracing/contrib/presto/configuration/settings.rb +2 -2
  620. data/lib/datadog/tracing/contrib/presto/ext.rb +21 -21
  621. data/lib/datadog/tracing/contrib/presto/instrumentation.rb +2 -2
  622. data/lib/datadog/tracing/contrib/presto/integration.rb +6 -6
  623. data/lib/datadog/tracing/contrib/presto/patcher.rb +4 -4
  624. data/lib/datadog/tracing/contrib/propagation/sql_comment/comment.rb +2 -2
  625. data/lib/datadog/tracing/contrib/propagation/sql_comment/ext.rb +17 -17
  626. data/lib/datadog/tracing/contrib/propagation/sql_comment/mode.rb +1 -1
  627. data/lib/datadog/tracing/contrib/propagation/sql_comment.rb +5 -5
  628. data/lib/datadog/tracing/contrib/que/configuration/settings.rb +2 -2
  629. data/lib/datadog/tracing/contrib/que/ext.rb +19 -19
  630. data/lib/datadog/tracing/contrib/que/integration.rb +6 -6
  631. data/lib/datadog/tracing/contrib/que/patcher.rb +1 -1
  632. data/lib/datadog/tracing/contrib/que/tracer.rb +1 -1
  633. data/lib/datadog/tracing/contrib/racecar/configuration/settings.rb +3 -3
  634. data/lib/datadog/tracing/contrib/racecar/event.rb +4 -4
  635. data/lib/datadog/tracing/contrib/racecar/events/batch.rb +3 -3
  636. data/lib/datadog/tracing/contrib/racecar/events/consume.rb +3 -3
  637. data/lib/datadog/tracing/contrib/racecar/events/message.rb +3 -3
  638. data/lib/datadog/tracing/contrib/racecar/events.rb +3 -3
  639. data/lib/datadog/tracing/contrib/racecar/ext.rb +18 -18
  640. data/lib/datadog/tracing/contrib/racecar/integration.rb +5 -5
  641. data/lib/datadog/tracing/contrib/racecar/patcher.rb +3 -3
  642. data/lib/datadog/tracing/contrib/rack/configuration/settings.rb +2 -2
  643. data/lib/datadog/tracing/contrib/rack/ext.rb +33 -33
  644. data/lib/datadog/tracing/contrib/rack/header_collection.rb +3 -3
  645. data/lib/datadog/tracing/contrib/rack/header_tagging.rb +4 -4
  646. data/lib/datadog/tracing/contrib/rack/integration.rb +6 -6
  647. data/lib/datadog/tracing/contrib/rack/middlewares.rb +24 -24
  648. data/lib/datadog/tracing/contrib/rack/patcher.rb +3 -3
  649. data/lib/datadog/tracing/contrib/rack/request_queue.rb +3 -3
  650. data/lib/datadog/tracing/contrib/rack/route_inference.rb +11 -11
  651. data/lib/datadog/tracing/contrib/rack/trace_proxy_middleware.rb +15 -15
  652. data/lib/datadog/tracing/contrib/rails/auto_instrument_railtie.rb +1 -1
  653. data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +3 -3
  654. data/lib/datadog/tracing/contrib/rails/ext.rb +15 -15
  655. data/lib/datadog/tracing/contrib/rails/framework.rb +11 -11
  656. data/lib/datadog/tracing/contrib/rails/integration.rb +5 -5
  657. data/lib/datadog/tracing/contrib/rails/middlewares.rb +1 -1
  658. data/lib/datadog/tracing/contrib/rails/patcher.rb +8 -8
  659. data/lib/datadog/tracing/contrib/rails/railtie.rb +4 -4
  660. data/lib/datadog/tracing/contrib/rails/runner.rb +1 -1
  661. data/lib/datadog/tracing/contrib/rake/configuration/settings.rb +3 -3
  662. data/lib/datadog/tracing/contrib/rake/ext.rb +12 -12
  663. data/lib/datadog/tracing/contrib/rake/instrumentation.rb +4 -4
  664. data/lib/datadog/tracing/contrib/rake/integration.rb +5 -5
  665. data/lib/datadog/tracing/contrib/rake/patcher.rb +3 -3
  666. data/lib/datadog/tracing/contrib/redis/configuration/resolver.rb +2 -2
  667. data/lib/datadog/tracing/contrib/redis/configuration/settings.rb +2 -2
  668. data/lib/datadog/tracing/contrib/redis/ext.rb +16 -16
  669. data/lib/datadog/tracing/contrib/redis/instrumentation.rb +6 -6
  670. data/lib/datadog/tracing/contrib/redis/integration.rb +7 -7
  671. data/lib/datadog/tracing/contrib/redis/patcher.rb +10 -10
  672. data/lib/datadog/tracing/contrib/redis/quantize.rb +4 -4
  673. data/lib/datadog/tracing/contrib/redis/tags.rb +5 -5
  674. data/lib/datadog/tracing/contrib/redis/trace_middleware.rb +5 -5
  675. data/lib/datadog/tracing/contrib/resque/configuration/settings.rb +2 -2
  676. data/lib/datadog/tracing/contrib/resque/ext.rb +7 -7
  677. data/lib/datadog/tracing/contrib/resque/integration.rb +5 -5
  678. data/lib/datadog/tracing/contrib/resque/patcher.rb +3 -3
  679. data/lib/datadog/tracing/contrib/resque/resque_job.rb +5 -5
  680. data/lib/datadog/tracing/contrib/rest_client/configuration/settings.rb +2 -2
  681. data/lib/datadog/tracing/contrib/rest_client/ext.rb +10 -10
  682. data/lib/datadog/tracing/contrib/rest_client/integration.rb +6 -6
  683. data/lib/datadog/tracing/contrib/rest_client/patcher.rb +2 -2
  684. data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +5 -5
  685. data/lib/datadog/tracing/contrib/roda/configuration/settings.rb +2 -2
  686. data/lib/datadog/tracing/contrib/roda/ext.rb +6 -6
  687. data/lib/datadog/tracing/contrib/roda/instrumentation.rb +4 -4
  688. data/lib/datadog/tracing/contrib/roda/integration.rb +6 -6
  689. data/lib/datadog/tracing/contrib/roda/patcher.rb +3 -3
  690. data/lib/datadog/tracing/contrib/semantic_logger/configuration/settings.rb +2 -2
  691. data/lib/datadog/tracing/contrib/semantic_logger/ext.rb +1 -1
  692. data/lib/datadog/tracing/contrib/semantic_logger/integration.rb +5 -5
  693. data/lib/datadog/tracing/contrib/semantic_logger/patcher.rb +2 -2
  694. data/lib/datadog/tracing/contrib/sequel/configuration/settings.rb +2 -2
  695. data/lib/datadog/tracing/contrib/sequel/database.rb +6 -6
  696. data/lib/datadog/tracing/contrib/sequel/dataset.rb +5 -5
  697. data/lib/datadog/tracing/contrib/sequel/ext.rb +12 -8
  698. data/lib/datadog/tracing/contrib/sequel/integration.rb +5 -5
  699. data/lib/datadog/tracing/contrib/sequel/patcher.rb +3 -3
  700. data/lib/datadog/tracing/contrib/sequel/utils.rb +115 -10
  701. data/lib/datadog/tracing/contrib/shoryuken/configuration/settings.rb +2 -2
  702. data/lib/datadog/tracing/contrib/shoryuken/ext.rb +12 -12
  703. data/lib/datadog/tracing/contrib/shoryuken/integration.rb +6 -6
  704. data/lib/datadog/tracing/contrib/shoryuken/patcher.rb +1 -1
  705. data/lib/datadog/tracing/contrib/shoryuken/tracer.rb +2 -2
  706. data/lib/datadog/tracing/contrib/sidekiq/client_tracer.rb +8 -8
  707. data/lib/datadog/tracing/contrib/sidekiq/configuration/settings.rb +2 -2
  708. data/lib/datadog/tracing/contrib/sidekiq/distributed/propagation.rb +9 -9
  709. data/lib/datadog/tracing/contrib/sidekiq/ext.rb +30 -30
  710. data/lib/datadog/tracing/contrib/sidekiq/integration.rb +7 -7
  711. data/lib/datadog/tracing/contrib/sidekiq/patcher.rb +8 -8
  712. data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +14 -14
  713. data/lib/datadog/tracing/contrib/sidekiq/utils.rb +9 -9
  714. data/lib/datadog/tracing/contrib/sidekiq.rb +6 -6
  715. data/lib/datadog/tracing/contrib/sinatra/configuration/settings.rb +2 -2
  716. data/lib/datadog/tracing/contrib/sinatra/env.rb +6 -6
  717. data/lib/datadog/tracing/contrib/sinatra/ext.rb +17 -17
  718. data/lib/datadog/tracing/contrib/sinatra/framework.rb +2 -2
  719. data/lib/datadog/tracing/contrib/sinatra/integration.rb +5 -5
  720. data/lib/datadog/tracing/contrib/sinatra/patcher.rb +5 -5
  721. data/lib/datadog/tracing/contrib/sinatra/tracer.rb +10 -10
  722. data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +8 -8
  723. data/lib/datadog/tracing/contrib/sneakers/configuration/settings.rb +1 -1
  724. data/lib/datadog/tracing/contrib/sneakers/ext.rb +12 -12
  725. data/lib/datadog/tracing/contrib/sneakers/integration.rb +7 -7
  726. data/lib/datadog/tracing/contrib/sneakers/patcher.rb +2 -2
  727. data/lib/datadog/tracing/contrib/sneakers/tracer.rb +3 -3
  728. data/lib/datadog/tracing/contrib/span_attribute_schema.rb +2 -2
  729. data/lib/datadog/tracing/contrib/status_range_env_parser.rb +2 -2
  730. data/lib/datadog/tracing/contrib/status_range_matcher.rb +1 -1
  731. data/lib/datadog/tracing/contrib/stripe/configuration/settings.rb +2 -2
  732. data/lib/datadog/tracing/contrib/stripe/ext.rb +12 -12
  733. data/lib/datadog/tracing/contrib/stripe/integration.rb +5 -5
  734. data/lib/datadog/tracing/contrib/stripe/patcher.rb +2 -2
  735. data/lib/datadog/tracing/contrib/stripe/request.rb +3 -3
  736. data/lib/datadog/tracing/contrib/sucker_punch/configuration/settings.rb +2 -2
  737. data/lib/datadog/tracing/contrib/sucker_punch/exception_handler.rb +1 -1
  738. data/lib/datadog/tracing/contrib/sucker_punch/ext.rb +13 -13
  739. data/lib/datadog/tracing/contrib/sucker_punch/instrumentation.rb +4 -4
  740. data/lib/datadog/tracing/contrib/sucker_punch/integration.rb +5 -5
  741. data/lib/datadog/tracing/contrib/sucker_punch/patcher.rb +4 -4
  742. data/lib/datadog/tracing/contrib/trilogy/configuration/settings.rb +3 -3
  743. data/lib/datadog/tracing/contrib/trilogy/ext.rb +11 -11
  744. data/lib/datadog/tracing/contrib/trilogy/instrumentation.rb +6 -6
  745. data/lib/datadog/tracing/contrib/trilogy/integration.rb +5 -5
  746. data/lib/datadog/tracing/contrib/trilogy/patcher.rb +2 -2
  747. data/lib/datadog/tracing/contrib/utils/database.rb +5 -5
  748. data/lib/datadog/tracing/contrib/utils/quantization/hash_formatter.rb +1 -1
  749. data/lib/datadog/tracing/contrib/utils/quantization/http.rb +10 -10
  750. data/lib/datadog/tracing/contrib/waterdrop/configuration/settings.rb +2 -2
  751. data/lib/datadog/tracing/contrib/waterdrop/distributed/propagation.rb +8 -8
  752. data/lib/datadog/tracing/contrib/waterdrop/ext.rb +4 -4
  753. data/lib/datadog/tracing/contrib/waterdrop/integration.rb +5 -5
  754. data/lib/datadog/tracing/contrib/waterdrop/middleware.rb +2 -2
  755. data/lib/datadog/tracing/contrib/waterdrop/patcher.rb +7 -7
  756. data/lib/datadog/tracing/contrib/waterdrop/producer.rb +3 -3
  757. data/lib/datadog/tracing/contrib/waterdrop.rb +6 -6
  758. data/lib/datadog/tracing/contrib.rb +54 -54
  759. data/lib/datadog/tracing/correlation.rb +10 -10
  760. data/lib/datadog/tracing/diagnostics/environment_logger.rb +9 -9
  761. data/lib/datadog/tracing/diagnostics/ext.rb +19 -19
  762. data/lib/datadog/tracing/diagnostics/health.rb +1 -1
  763. data/lib/datadog/tracing/distributed/b3_multi.rb +8 -8
  764. data/lib/datadog/tracing/distributed/b3_single.rb +4 -4
  765. data/lib/datadog/tracing/distributed/baggage.rb +27 -27
  766. data/lib/datadog/tracing/distributed/datadog.rb +21 -21
  767. data/lib/datadog/tracing/distributed/datadog_tags_codec.rb +3 -3
  768. data/lib/datadog/tracing/distributed/fetcher.rb +1 -1
  769. data/lib/datadog/tracing/distributed/helpers.rb +3 -3
  770. data/lib/datadog/tracing/distributed/propagation.rb +12 -12
  771. data/lib/datadog/tracing/distributed/trace_context.rb +33 -33
  772. data/lib/datadog/tracing/event.rb +1 -1
  773. data/lib/datadog/tracing/ext.rb +1 -1
  774. data/lib/datadog/tracing/metadata/analytics.rb +2 -2
  775. data/lib/datadog/tracing/metadata/errors.rb +4 -4
  776. data/lib/datadog/tracing/metadata/ext.rb +69 -69
  777. data/lib/datadog/tracing/metadata/metastruct.rb +1 -1
  778. data/lib/datadog/tracing/metadata/metastruct_tagging.rb +1 -1
  779. data/lib/datadog/tracing/metadata/tagging.rb +2 -2
  780. data/lib/datadog/tracing/metadata.rb +4 -4
  781. data/lib/datadog/tracing/pipeline/span_filter.rb +2 -2
  782. data/lib/datadog/tracing/pipeline.rb +2 -2
  783. data/lib/datadog/tracing/remote.rb +23 -16
  784. data/lib/datadog/tracing/sampling/all_sampler.rb +1 -1
  785. data/lib/datadog/tracing/sampling/ext.rb +8 -8
  786. data/lib/datadog/tracing/sampling/matcher.rb +4 -4
  787. data/lib/datadog/tracing/sampling/priority_sampler.rb +4 -4
  788. data/lib/datadog/tracing/sampling/rate_by_key_sampler.rb +3 -3
  789. data/lib/datadog/tracing/sampling/rate_by_service_sampler.rb +2 -2
  790. data/lib/datadog/tracing/sampling/rate_sampler.rb +2 -2
  791. data/lib/datadog/tracing/sampling/rule.rb +4 -4
  792. data/lib/datadog/tracing/sampling/rule_sampler.rb +12 -12
  793. data/lib/datadog/tracing/sampling/sampler.rb +2 -2
  794. data/lib/datadog/tracing/sampling/span/ext.rb +3 -3
  795. data/lib/datadog/tracing/sampling/span/matcher.rb +2 -2
  796. data/lib/datadog/tracing/sampling/span/rule.rb +1 -1
  797. data/lib/datadog/tracing/sampling/span/rule_parser.rb +8 -8
  798. data/lib/datadog/tracing/span.rb +8 -8
  799. data/lib/datadog/tracing/span_event.rb +5 -5
  800. data/lib/datadog/tracing/span_operation.rb +21 -21
  801. data/lib/datadog/tracing/sync_writer.rb +4 -4
  802. data/lib/datadog/tracing/trace_operation.rb +11 -11
  803. data/lib/datadog/tracing/trace_segment.rb +10 -10
  804. data/lib/datadog/tracing/tracer.rb +15 -15
  805. data/lib/datadog/tracing/transport/http/client.rb +4 -4
  806. data/lib/datadog/tracing/transport/http/statistics.rb +2 -2
  807. data/lib/datadog/tracing/transport/http/traces.rb +8 -8
  808. data/lib/datadog/tracing/transport/http.rb +10 -10
  809. data/lib/datadog/tracing/transport/io/client.rb +2 -2
  810. data/lib/datadog/tracing/transport/io/response.rb +1 -1
  811. data/lib/datadog/tracing/transport/io/traces.rb +4 -4
  812. data/lib/datadog/tracing/transport/io.rb +3 -3
  813. data/lib/datadog/tracing/transport/serializable_trace.rb +19 -19
  814. data/lib/datadog/tracing/transport/statistics.rb +2 -2
  815. data/lib/datadog/tracing/transport/trace_formatter.rb +9 -9
  816. data/lib/datadog/tracing/transport/traces.rb +8 -8
  817. data/lib/datadog/tracing/utils.rb +2 -2
  818. data/lib/datadog/tracing/workers.rb +2 -2
  819. data/lib/datadog/tracing/writer.rb +5 -5
  820. data/lib/datadog/tracing.rb +3 -3
  821. data/lib/datadog/version.rb +4 -4
  822. data/lib/datadog.rb +13 -13
  823. metadata +13 -5
@@ -14,6 +14,8 @@ module Datadog
14
14
  target_self: nil,
15
15
  path: nil, caller_locations: nil,
16
16
  serialized_entry_args: nil,
17
+ entry_capture_expressions: nil,
18
+ entry_capture_evaluation_errors: nil,
17
19
  return_value: nil, duration: nil, exception: nil)
18
20
  @probe = probe
19
21
  @settings = settings
@@ -23,6 +25,8 @@ module Datadog
23
25
  @path = path
24
26
  @caller_locations = caller_locations
25
27
  @serialized_entry_args = serialized_entry_args
28
+ @entry_capture_expressions = entry_capture_expressions
29
+ @entry_capture_evaluation_errors = entry_capture_evaluation_errors
26
30
  @return_value = return_value
27
31
  @duration = duration
28
32
  @exception = exception
@@ -44,6 +48,10 @@ module Datadog
44
48
 
45
49
  attr_reader :serialized_entry_args
46
50
 
51
+ attr_reader :entry_capture_expressions
52
+
53
+ attr_reader :entry_capture_evaluation_errors
54
+
47
55
  # Return value for the method, for a method probe
48
56
  attr_reader :return_value
49
57
 
@@ -55,9 +63,7 @@ module Datadog
55
63
 
56
64
  def serialized_locals
57
65
  # TODO cache?
58
- locals && serializer.serialize_vars(locals,
59
- depth: probe.max_capture_depth || settings.dynamic_instrumentation.max_capture_depth,
60
- attribute_count: probe.max_capture_attribute_count || settings.dynamic_instrumentation.max_capture_attribute_count,)
66
+ locals && serializer.serialize_vars(locals, **probe.snapshot_serializer_limits(settings))
61
67
  end
62
68
 
63
69
  def fetch(var_name)
@@ -6,7 +6,7 @@ module Datadog
6
6
  # Railtie class initializes dynamic instrumentation contrib code
7
7
  # in Rails environments.
8
8
  class Railtie < Rails::Railtie
9
- initializer 'datadog.dynamic_instrumentation.initialize' do |app|
9
+ initializer "datadog.dynamic_instrumentation.initialize" do |app|
10
10
  Contrib.load_now
11
11
  end
12
12
  end
@@ -1,14 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../core/contrib/rails/utils'
3
+ require_relative "../core/contrib/rails/utils"
4
4
 
5
5
  module Datadog
6
6
  module DI
7
7
  module Contrib
8
8
  module_function def load_now_or_later
9
9
  if Datadog::Core::Contrib::Rails::Utils.railtie_supported?
10
- Datadog.logger.debug('di: loading contrib/railtie')
11
- require_relative 'contrib/railtie'
10
+ Datadog.logger.debug("di: loading contrib/railtie")
11
+ require_relative "contrib/railtie"
12
12
  else
13
13
  load_now
14
14
  end
@@ -19,8 +19,8 @@ module Datadog
19
19
  # dependencies are loaded (or potentially loaded).
20
20
  module_function def load_now
21
21
  if defined?(ActiveRecord::Base)
22
- Datadog.logger.debug('di: loading contrib/active_record')
23
- require_relative 'contrib/active_record'
22
+ Datadog.logger.debug("di: loading contrib/active_record")
23
+ require_relative "contrib/active_record"
24
24
  end
25
25
  end
26
26
  end
@@ -24,12 +24,12 @@ module Datadog
24
24
 
25
25
  # Steep: https://github.com/soutaro/steep/issues/363
26
26
  OPERATORS = { # steep:ignore IncompatibleAssignment
27
- 'eq' => '==',
28
- 'ne' => '!=',
29
- 'ge' => '>=',
30
- 'gt' => '>',
31
- 'le' => '<=',
32
- 'lt' => '<',
27
+ "eq" => "==",
28
+ "ne" => "!=",
29
+ "ge" => ">=",
30
+ "gt" => ">",
31
+ "le" => "<=",
32
+ "lt" => "<",
33
33
  }.freeze
34
34
 
35
35
  # Steep: https://github.com/soutaro/steep/issues/363
@@ -45,8 +45,8 @@ module Datadog
45
45
 
46
46
  # Steep: https://github.com/soutaro/steep/issues/363
47
47
  MULTI_ARG_METHODS = { # steep:ignore IncompatibleAssignment
48
- 'and' => '&&',
49
- 'or' => '||',
48
+ "and" => "&&",
49
+ "or" => "||",
50
50
  }.freeze
51
51
 
52
52
  def compile_partial(ast)
@@ -57,29 +57,29 @@ module Datadog
57
57
  end
58
58
  op, target = ast.first
59
59
  case op
60
- when 'ref'
60
+ when "ref"
61
61
  unless String === target
62
62
  raise DI::Error::InvalidExpression, "Bad ref value type: #{target.class}: #{target}"
63
63
  end
64
64
  case target
65
- when '@it'
66
- 'current_item'
67
- when '@key'
68
- 'current_key'
69
- when '@value'
70
- 'current_value'
71
- when '@return'
65
+ when "@it"
66
+ "current_item"
67
+ when "@key"
68
+ "current_key"
69
+ when "@value"
70
+ "current_value"
71
+ when "@return"
72
72
  # For @return, @duration and @exception we shadow
73
73
  # instance variables.
74
74
  "context.return_value"
75
- when '@duration'
75
+ when "@duration"
76
76
  # There is no way to explicitly format the duration.
77
77
  # TODO come up with better formatting?
78
78
  # We could format to a string here but what if customer
79
79
  # has @duration as part of an expression and wants
80
80
  # to retain it as a number?
81
- "(context.duration * 1000)"
82
- when '@exception'
81
+ "(context.duration && context.duration * 1000)"
82
+ when "@exception"
83
83
  "context.exception"
84
84
  else
85
85
  # Ruby technically allows all kinds of symbols in variable
@@ -89,7 +89,7 @@ module Datadog
89
89
  unless target =~ %r{\A(@?)([a-zA-Z0-9_]+)\z}
90
90
  raise DI::Error::BadVariableName, "Bad variable name: #{target}"
91
91
  end
92
- method_name = (($1 == '@') ? 'iref' : 'ref')
92
+ method_name = (($1 == "@") ? "iref" : "ref")
93
93
  "#{method_name}('#{target}')"
94
94
  end
95
95
  when *SINGLE_ARG_METHODS
@@ -111,12 +111,12 @@ module Datadog
111
111
  end
112
112
  compiled_op = MULTI_ARG_METHODS[op]
113
113
  "(#{compiled_targets.join(" #{compiled_op} ")})"
114
- when 'substring'
114
+ when "substring"
115
115
  unless Array === target && target.length == 3
116
116
  raise DI::Error::InvalidExpression, "Improper #{op} syntax"
117
117
  end
118
118
  "#{op}(#{target.map { |arg| "(#{compile_partial(arg)})" }.join(", ")})"
119
- when 'not'
119
+ when "not"
120
120
  "!(#{compile_partial(target)})"
121
121
  when *OPERATORS.keys
122
122
  unless Array === target && target.length == 2
@@ -125,7 +125,7 @@ module Datadog
125
125
  first, second = target
126
126
  operator = OPERATORS.fetch(op)
127
127
  "(#{compile_partial(first)}) #{operator} (#{compile_partial(second)})"
128
- when 'any', 'all', 'filter'
128
+ when "any", "all", "filter"
129
129
  "#{op}(#{compile_partial(target.first)}) { |current_item, current_key, current_value| #{compile_partial(target.last)} }"
130
130
  else
131
131
  raise DI::Error::InvalidExpression, "Unknown operation: #{op}"
@@ -151,16 +151,16 @@ module Datadog
151
151
  # WARNING: the result of this method is included in eval'd code,
152
152
  # it must be sanitized to avoid injection.
153
153
  def var_name_maybe(target)
154
- if Hash === target && target.length == 1 && target.keys.first == 'ref' &&
154
+ if Hash === target && target.length == 1 && target.keys.first == "ref" &&
155
155
  String === (value = target.values.first)
156
156
  escape(value)
157
157
  else
158
- '(expression)'
158
+ "(expression)"
159
159
  end
160
160
  end
161
161
 
162
162
  def escape(needle)
163
- needle.gsub("\\") { "\\\\" }.gsub('"') { "\\\"" }.gsub('#') { "\\#" }
163
+ needle.gsub("\\") { "\\\\" }.gsub('"') { "\\\"" }.gsub("#") { "\\#" }
164
164
  end
165
165
  end
166
166
  end
data/lib/datadog/di/el.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'el/expression'
4
- require_relative 'el/compiler'
5
- require_relative 'el/evaluator'
3
+ require_relative "el/expression"
4
+ require_relative "el/compiler"
5
+ require_relative "el/evaluator"
@@ -1,8 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../core/utils/time'
4
- require_relative '../ruby_version'
5
- require_relative 'fatal_exceptions'
3
+ require_relative "../core/utils/time"
4
+ require_relative "../ruby_version"
5
+ require_relative "fatal_exceptions"
6
+ require_relative "capture_expression_evaluator"
6
7
 
7
8
  # rubocop:disable Lint/AssignmentInCondition
8
9
  # rubocop:disable Style/AndOr
@@ -84,6 +85,18 @@ module Datadog
84
85
  attr_reader :telemetry
85
86
  attr_reader :code_tracker
86
87
 
88
+ # The code tracker is a global singleton created lazily by
89
+ # DI.activate_tracking. When DI is enabled after boot via remote
90
+ # configuration this instrumenter was already built with a nil tracker;
91
+ # Component#start! assigns the now-current tracker here.
92
+ attr_writer :code_tracker
93
+
94
+ def capture_expression_evaluator
95
+ @capture_expression_evaluator ||= CaptureExpressionEvaluator.new(
96
+ settings: settings, serializer: serializer, logger: logger, telemetry: telemetry,
97
+ )
98
+ end
99
+
87
100
  # This is a substitute for Thread::Backtrace::Location
88
101
  # which does not have a public constructor.
89
102
  # Used for the fabricated stack frame for the method itself
@@ -179,7 +192,7 @@ module Datadog
179
192
  # invokes it with yield, which does not dispatch Proc#call, so a
180
193
  # user probe on Proc#call cannot intercept the trampoline, and no
181
194
  # Proc is allocated for the block.
182
- if RubyVersion.is?('>= 3')
195
+ if RubyVersion.is?(">= 3")
183
196
  define_method(method_name) do |*args, **kwargs, &target_block| # steep:ignore NoMethod
184
197
  # steep:ignore FallbackAny below: Steep cannot narrow the
185
198
  # **kwargs parameter inside this define_method block, so it
@@ -520,8 +533,27 @@ module Datadog
520
533
  # they need to be serialized prior to method invocation.
521
534
  serialized_entry_args = if probe.capture_snapshot?
522
535
  serializer.serialize_args(args, kwargs, target_self,
523
- depth: probe.max_capture_depth || settings.dynamic_instrumentation.max_capture_depth,
524
- attribute_count: probe.max_capture_attribute_count || settings.dynamic_instrumentation.max_capture_attribute_count)
536
+ **probe.snapshot_serializer_limits(settings))
537
+ end
538
+
539
+ entry_capture_expressions = nil
540
+ entry_capture_evaluation_errors = nil
541
+ if probe.capture_entry_expressions?
542
+ begin
543
+ entry_context = Context.new(
544
+ probe: probe, settings: settings, serializer: serializer,
545
+ target_self: target_self,
546
+ locals: serializer.combine_args(args, kwargs, target_self),
547
+ )
548
+ entry_capture_expressions, entry_capture_evaluation_errors =
549
+ capture_expression_evaluator.evaluate(probe, entry_context)
550
+ rescue Exception => exc # standard:disable Lint/RescueException
551
+ Datadog::DI.reraise_if_fatal(exc)
552
+ raise if settings.dynamic_instrumentation.internal.propagate_all_exceptions
553
+
554
+ logger.debug { "di: error evaluating entry-time capture expressions: #{exc.class}: #{exc.message}" }
555
+ telemetry&.report(exc, description: "Error evaluating entry-time capture expressions")
556
+ end
525
557
  end
526
558
  # We intentionally do not use Core::Utils::Time.get_time
527
559
  # here because the time provider may be overridden by the
@@ -584,9 +616,14 @@ module Datadog
584
616
  caller_locs = method_frame + (caller_locations(2) || [])
585
617
  # TODO capture arguments at exit
586
618
 
587
- context = Context.new(locals: nil, target_self: target_self,
619
+ capture_expression_locals = if probe.capture_expressions_only?
620
+ serializer.combine_args(args, kwargs, target_self)
621
+ end
622
+ context = Context.new(locals: capture_expression_locals, target_self: target_self,
588
623
  probe: probe, settings: settings, serializer: serializer,
589
624
  serialized_entry_args: serialized_entry_args,
625
+ entry_capture_expressions: entry_capture_expressions,
626
+ entry_capture_evaluation_errors: entry_capture_evaluation_errors,
590
627
  caller_locations: caller_locs,
591
628
  return_value: rv, duration: duration, exception: exc,)
592
629
 
@@ -663,7 +700,7 @@ module Datadog
663
700
  #
664
701
  # Defined only on Ruby < 3; the Ruby 3+ wrapper captures keyword
665
702
  # arguments directly and never calls this.
666
- if RubyVersion.is?('< 3')
703
+ if RubyVersion.is?("< 3")
667
704
  def kwargs_from_splat(args)
668
705
  last = args.last
669
706
  if DI.hash?(last)
@@ -829,8 +866,8 @@ module Datadog
829
866
  Utils.path_matches_suffix?(path, working_suffix, case_insensitive: case_insensitive)
830
867
  end
831
868
  break if found
832
- break unless working_suffix.include?('/')
833
- working_suffix.sub!(%r{.*/+}, '')
869
+ break unless working_suffix.include?("/")
870
+ working_suffix.sub!(%r{.*/+}, "")
834
871
  end
835
872
  break if found
836
873
  end
@@ -844,7 +881,11 @@ module Datadog
844
881
  has_per_method = code_tracker&.send(:instance_variable_defined?, :@per_method_registry) &&
845
882
  code_tracker.send(:per_method_registry).key?(loaded_path)
846
883
 
847
- if has_per_method
884
+ if code_tracker.nil?
885
+ raise Error::DITargetNotInRegistry,
886
+ "File #{loaded_path} is loaded but code tracking is not active; " \
887
+ "line probes cannot be targeted."
888
+ elsif has_per_method
848
889
  raise Error::DITargetNotInRegistry,
849
890
  "File #{loaded_path} is loaded and has per-method iseqs, " \
850
891
  "but none cover line #{line_no}. " \
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'forwardable'
3
+ require "forwardable"
4
4
 
5
5
  module Datadog
6
6
  module DI
@@ -4,7 +4,7 @@
4
4
  # enable dynamic instrumentation for third-party libraries used by the
5
5
  # application.
6
6
 
7
- require_relative 'base'
7
+ require_relative "base"
8
8
 
9
9
  # Code tracking is required for line probes to work; see the comments
10
10
  # on the activate_tracking methods in di.rb for further details.
@@ -34,11 +34,17 @@ module Datadog
34
34
  class Probe
35
35
  KNOWN_TYPES = %i[log].freeze
36
36
 
37
+ EVALUATE_AT_VALUES = %i[entry exit].freeze
38
+
37
39
  def initialize(id:, type:,
38
40
  file: nil, line_no: nil, type_name: nil, method_name: nil,
39
41
  template: nil, template_segments: nil,
40
42
  capture_snapshot: false, max_capture_depth: nil,
41
- max_capture_attribute_count: nil, condition: nil,
43
+ max_capture_attribute_count: nil,
44
+ max_capture_collection_size: nil, max_capture_string_length: nil,
45
+ capture_expressions: [],
46
+ evaluate_at: nil,
47
+ condition: nil,
42
48
  rate_limit: nil)
43
49
  # Perform some sanity checks here to detect unexpected attribute
44
50
  # combinations, in order to not do them in subsequent code.
@@ -81,9 +87,17 @@ module Datadog
81
87
  @capture_snapshot = !!capture_snapshot
82
88
  @max_capture_depth = max_capture_depth
83
89
  @max_capture_attribute_count = max_capture_attribute_count
90
+ @max_capture_collection_size = max_capture_collection_size
91
+ @max_capture_string_length = max_capture_string_length
92
+ @capture_expressions = capture_expressions || []
93
+ evaluate_at = :exit if evaluate_at.nil?
94
+ unless EVALUATE_AT_VALUES.include?(evaluate_at)
95
+ raise ArgumentError, "Unknown evaluate_at value: #{evaluate_at.inspect} (expected one of #{EVALUATE_AT_VALUES.inspect})"
96
+ end
97
+ @evaluate_at = evaluate_at
84
98
  @condition = condition
85
99
 
86
- @rate_limit = rate_limit || (@capture_snapshot ? 1 : 5000)
100
+ @rate_limit = rate_limit || ((@capture_snapshot || !@capture_expressions.empty?) ? 1 : 5000)
87
101
  @rate_limiter = Datadog::Core::TokenBucket.new(@rate_limit)
88
102
 
89
103
  # At most one report per second.
@@ -120,6 +134,14 @@ module Datadog
120
134
  # the global default will be used.
121
135
  attr_reader :max_capture_attribute_count
122
136
 
137
+ attr_reader :max_capture_collection_size
138
+
139
+ attr_reader :max_capture_string_length
140
+
141
+ attr_reader :capture_expressions
142
+
143
+ attr_reader :evaluate_at
144
+
123
145
  # Rate limit in effect, in invocations per second. Always present.
124
146
  attr_reader :rate_limit
125
147
 
@@ -140,6 +162,29 @@ module Datadog
140
162
  @capture_snapshot
141
163
  end
142
164
 
165
+ def capture_expressions?
166
+ !@capture_expressions.empty?
167
+ end
168
+
169
+ def evaluate_at_entry?
170
+ evaluate_at == :entry
171
+ end
172
+
173
+ # Capture-expression mode: the probe captures expressions but not a full
174
+ # snapshot. Snapshot capture serializes its own values, so expression
175
+ # capture only runs when a snapshot is not being taken.
176
+ def capture_expressions_only?
177
+ capture_expressions? && !capture_snapshot?
178
+ end
179
+
180
+ def capture_entry_expressions?
181
+ capture_expressions_only? && evaluate_at_entry?
182
+ end
183
+
184
+ def snapshot_serializer_limits(settings)
185
+ CaptureLimits.resolve(expr_limits: nil, probe: self, settings: settings)
186
+ end
187
+
143
188
  # Returns whether the probe is a line probe.
144
189
  #
145
190
  # Method probes may still specify a file name (to aid in locating the
@@ -3,7 +3,9 @@
3
3
  # rubocop:disable Lint/AssignmentInCondition
4
4
 
5
5
  require_relative "probe"
6
- require_relative 'el'
6
+ require_relative "capture_expression"
7
+ require_relative "capture_limits"
8
+ require_relative "el"
7
9
 
8
10
  module Datadog
9
11
  module DI
@@ -22,21 +24,36 @@ module Datadog
22
24
  module ProbeBuilder
23
25
  # Steep: https://github.com/soutaro/steep/issues/363
24
26
  PROBE_TYPES = { # steep:ignore IncompatibleAssignment
25
- 'LOG_PROBE' => :log,
27
+ "LOG_PROBE" => :log,
26
28
  }.freeze
27
29
 
28
30
  module_function
29
31
 
30
- def build_from_remote_config(config)
32
+ CAPTURE_EXPRESSION_NAME_PATTERN = /\A[a-zA-Z0-9_?]+\z/
33
+
34
+ EVALUATE_AT_STRINGS = {
35
+ "ENTRY" => :entry,
36
+ "EXIT" => :exit,
37
+ "DEFAULT" => :exit,
38
+ }.freeze
39
+
40
+ def build_from_remote_config(config, logger:)
31
41
  # The validations here are not yet comprehensive.
32
- type = config.fetch('type')
42
+ type = config.fetch("type")
33
43
  type_symbol = PROBE_TYPES[type] or raise ArgumentError, "Unrecognized probe type: #{type}"
34
- cond = if cond_spec = config['when']
35
- unless cond_spec['dsl'] && cond_spec['json']
44
+ cond = if cond_spec = config["when"]
45
+ unless cond_spec["dsl"] && cond_spec["json"]
36
46
  raise ArgumentError, "Malformed condition specification for probe: #{config}"
37
47
  end
38
- compiled = EL::Compiler.new.compile(cond_spec['json'])
39
- EL::Expression.new(cond_spec['dsl'], compiled)
48
+ compiled = EL::Compiler.new.compile(cond_spec["json"])
49
+ EL::Expression.new(cond_spec["dsl"], compiled)
50
+ end
51
+ capture_expressions = build_capture_expressions(config["captureExpressions"])
52
+ capture_expressions = dedup_capture_expressions(capture_expressions, config["id"], logger)
53
+ if !!config["captureSnapshot"] && !capture_expressions.empty?
54
+ logger.debug do
55
+ "di: probe #{config["id"]}: captureSnapshot=true wins over captureExpressions (n=#{capture_expressions.size})"
56
+ end
40
57
  end
41
58
  Probe.new(
42
59
  id: config.fetch("id"),
@@ -50,10 +67,14 @@ module Datadog
50
67
  # We should not be using the template for anything - we instead
51
68
  # use +segments+ - but keep the template for debugging.
52
69
  template: config["template"],
53
- template_segments: build_template_segments(config['segments']),
70
+ template_segments: build_template_segments(config["segments"]),
54
71
  capture_snapshot: !!config["captureSnapshot"],
55
72
  max_capture_depth: config["capture"]&.[]("maxReferenceDepth"),
56
73
  max_capture_attribute_count: config["capture"]&.[]("maxFieldCount"),
74
+ max_capture_collection_size: config["capture"]&.[]("maxCollectionSize"),
75
+ max_capture_string_length: config["capture"]&.[]("maxLength"),
76
+ capture_expressions: capture_expressions,
77
+ evaluate_at: parse_evaluate_at(config["evaluateAt"], config["id"], logger),
57
78
  rate_limit: config["sampling"]&.[]("snapshotsPerSecond"),
58
79
  condition: cond,
59
80
  )
@@ -61,13 +82,74 @@ module Datadog
61
82
  raise ArgumentError, "Malformed remote configuration entry for probe: #{exc.class}: #{exc.message}: #{config}"
62
83
  end
63
84
 
85
+ def build_capture_expressions(raw)
86
+ return [] if raw.nil?
87
+ unless Array === raw
88
+ raise ArgumentError, "captureExpressions must be an array, got: #{raw.class}"
89
+ end
90
+ return [] if raw.empty?
91
+ raw.map do |entry|
92
+ unless Hash === entry
93
+ raise ArgumentError, "captureExpressions entry must be a hash, got: #{entry.class}"
94
+ end
95
+ name = entry["name"]
96
+ unless String === name && CAPTURE_EXPRESSION_NAME_PATTERN.match?(name)
97
+ raise ArgumentError, "captureExpressions entry name missing or invalid (must match #{CAPTURE_EXPRESSION_NAME_PATTERN.inspect}): #{name.inspect}"
98
+ end
99
+ expr_spec = entry["expr"]
100
+ unless Hash === expr_spec && expr_spec["dsl"] && expr_spec["json"]
101
+ raise ArgumentError, "captureExpressions entry #{name}: missing or malformed expr"
102
+ end
103
+ compiled = EL::Compiler.new.compile(expr_spec["json"])
104
+ expr = EL::Expression.new(expr_spec["dsl"], compiled)
105
+ limits = build_capture_limits(entry["capture"])
106
+ CaptureExpression.new(name: name, expr: expr, limits: limits)
107
+ end
108
+ end
109
+
110
+ def dedup_capture_expressions(capture_expressions, probe_id, logger)
111
+ return capture_expressions if capture_expressions.size < 2
112
+ by_name = {}
113
+ capture_expressions.each do |capture_expression|
114
+ by_name[capture_expression.name] = capture_expression
115
+ end
116
+ return capture_expressions if by_name.size == capture_expressions.size
117
+ logger.debug do
118
+ "di: probe #{probe_id}: collapsed duplicate captureExpressions names, kept last per name (#{capture_expressions.size} -> #{by_name.size})"
119
+ end
120
+ by_name.values
121
+ end
122
+
123
+ def build_capture_limits(raw)
124
+ return nil if raw.nil?
125
+ unless Hash === raw
126
+ raise ArgumentError, "capture-expression entry capture must be a hash, got: #{raw.class}"
127
+ end
128
+ CaptureLimits.new(
129
+ max_reference_depth: raw["maxReferenceDepth"],
130
+ max_collection_size: raw["maxCollectionSize"],
131
+ max_length: raw["maxLength"],
132
+ max_field_count: raw["maxFieldCount"],
133
+ )
134
+ end
135
+
136
+ def parse_evaluate_at(raw, probe_id, logger)
137
+ return :exit if raw.nil?
138
+ EVALUATE_AT_STRINGS[raw] || begin
139
+ logger.debug do
140
+ "di: probe #{probe_id}: unrecognized evaluateAt value #{raw.inspect}, defaulting to :exit"
141
+ end
142
+ :exit
143
+ end
144
+ end
145
+
64
146
  def build_template_segments(segments)
65
147
  segments&.map do |segment|
66
148
  if Hash === segment
67
- if str = segment['str']
149
+ if str = segment["str"]
68
150
  str
69
- elsif ast = segment['json']
70
- unless dsl = segment['dsl']
151
+ elsif ast = segment["json"]
152
+ unless dsl = segment["dsl"]
71
153
  raise ArgumentError, "Missing dsl for json in segment: #{segment}"
72
154
  end
73
155
  compiled = EL::Compiler.new.compile(ast)
@@ -6,7 +6,7 @@ module Datadog
6
6
  # Railtie class initializes dynamic instrumentation contrib code
7
7
  # in Rails environments.
8
8
  class Railtie < Rails::Railtie
9
- initializer 'datadog.dynamic_instrumentation.load_probe_file' do |app|
9
+ initializer "datadog.dynamic_instrumentation.load_probe_file" do |app|
10
10
  ProbeFileLoader.load_now
11
11
  end
12
12
  end
@@ -1,16 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'json'
3
+ require "json"
4
4
 
5
- require_relative 'fatal_exceptions'
5
+ require_relative "fatal_exceptions"
6
6
 
7
7
  module Datadog
8
8
  module DI
9
9
  module ProbeFileLoader
10
10
  module_function def load_now_or_later
11
11
  if Datadog::Core::Contrib::Rails::Utils.railtie_supported?
12
- Datadog.logger.debug('di: loading probe_file_loader/railtie')
13
- require_relative 'probe_file_loader/railtie'
12
+ Datadog.logger.debug("di: loading probe_file_loader/railtie")
13
+ require_relative "probe_file_loader/railtie"
14
14
  else
15
15
  load_now
16
16
  end
@@ -22,7 +22,7 @@ module Datadog
22
22
  module_function def load_now
23
23
  should_propagate = false
24
24
 
25
- probe_file_path = DATADOG_ENV['DD_DYNAMIC_INSTRUMENTATION_PROBE_FILE']
25
+ probe_file_path = DATADOG_ENV["DD_DYNAMIC_INSTRUMENTATION_PROBE_FILE"]
26
26
  if probe_file_path.nil? || probe_file_path.empty?
27
27
  return
28
28
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  # rubocop:disable Lint/AssignmentInCondition
4
4
 
5
- require_relative 'fatal_exceptions'
5
+ require_relative "fatal_exceptions"
6
6
 
7
7
  module Datadog
8
8
  module DI