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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5435fe8fe48f8cd33010ad82ee5fe6f969077a86cdcca6a96cc9d8633c89eb0e
4
- data.tar.gz: 3681864939e4601b11bb94fa4b6647d1505efc621eae82ac9664fcc3819b34a3
3
+ metadata.gz: 738a49f1b7d7068adaa2e6237046870eb9868fe5fcbebdc8f136d2c99f880b00
4
+ data.tar.gz: 19c8e8c4c05ad009beceb84afc161c7012c75f6dc26987ae6a599d33d7212a98
5
5
  SHA512:
6
- metadata.gz: de74ddeb7271f1ced1c21dde221b2bdd10fec9b7c9f8663cdf01f146c6a242d93dcde9ac7c63828e41045565f4870359469124a55ef999847f1d02416e36b919
7
- data.tar.gz: 2d7d44bb00879fa869c5ec630654632632fd74719c7cb276a9a5310606a952cf3eece0bd52c70b25a2a75cb6e69949a1f3ab9597badfb89e17175905b5e08f3e
6
+ metadata.gz: c48d6c1506eeb45ed203a7aaab7877370b35a0d0902935dcb9f5eaeb69ac40bc03e1bd55e78c414b89a71d6ea50c4e30191d1dff29160ba79f27c91b116cecc4
7
+ data.tar.gz: 93037c1ea2179bac9db492a8410520fc96ff3184ca005df577960d452f783fb7a6ed2397ccfbb76dff3dc0d8d37bdd954ec8c1e2e44fbdaa197e4c54eb975971
data/CHANGELOG.md CHANGED
@@ -2,6 +2,37 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [2.39.0] - 2026-07-22
6
+
7
+ ### Added
8
+
9
+ * Tracing: Integrations: Add database name and host to Sequel spans and infer `peer.service` so datastore dependencies appear in the service map. ([#6072][])
10
+
11
+ ### Fixed
12
+
13
+ * AppSec: Fix error in `devise` contrib for non-standard Warden session serialization. ([#6064][])
14
+ * Dynamic Instrumentation: Fix dynamic instrumentation line probes failing to install when dynamic instrumentation is enabled remotely after application startup. ([#6050][])
15
+ * Profiling: Fix crash when trying to sample during GC compaction ([#6056][])
16
+ * Tracing: Integrations: Fix an `ArgumentError` (and the resulting `Kafka::BufferOverflow`) raised by the Kafka producer integration on Ruby 2.5 and 2.6. ([#6060][])
17
+
18
+ ## [2.38.0] - 2026-07-16
19
+
20
+ ### Added
21
+
22
+ * Dynamic Instrumentation: Log probes now support capture expressions as an alternative to capturing the full local/argument scope ([#5845][])
23
+ * SSI: Add support for Ruby 4.0 runtime ([#5981][])
24
+ * SSI: Add support for Bundler 4.0 and RubyGems 4.0 ([#5981][])
25
+
26
+ ### Fixed
27
+
28
+ * AppSec: Fix Rack-based and Rails request body analysis when body parsing fails ([#5993][])
29
+ * Profiling: Add workaround for crash when collecting frame information ([#6014][])
30
+ * Profiling: Fix left-over state impacting samples when profiler gets stopped and started again ([#5960][])
31
+ * Profiling: Fix Ruby 4.0.6 support by bumping minimum version of `datadog-ruby_core_source` to 3.5.3 ([#6047][])
32
+ * Profiling: Disable live heap size profiling on Ruby 4.0 due to incompatibility ([#6022][])
33
+ * Profiling: Disallow heap profiling on Ruby 4.1+ ([#6023][])
34
+ * Tracing: Fix `pg` instrumentation which raised `ArgumentError` when calling `exec_params`, `exec_prepared` without a `params` argument, or their `async_`/`sync_` variants ([#6020][])
35
+
5
36
  ## [2.37.0] - 2026-07-06
6
37
 
7
38
  ### Added
@@ -3685,7 +3716,9 @@ Release notes: https://github.com/DataDog/dd-trace-rb/releases/tag/v0.3.1
3685
3716
  Git diff: https://github.com/DataDog/dd-trace-rb/compare/v0.3.0...v0.3.1
3686
3717
 
3687
3718
 
3688
- [Unreleased]: https://github.com/DataDog/dd-trace-rb/compare/v2.37.0...master
3719
+ [Unreleased]: https://github.com/DataDog/dd-trace-rb/compare/v2.39.0...master
3720
+ [2.39.0]: https://github.com/DataDog/dd-trace-rb/compare/v2.38.0...v2.39.0
3721
+ [2.38.0]: https://github.com/DataDog/dd-trace-rb/compare/v2.37.0...v2.38.0
3689
3722
  [2.37.0]: https://github.com/DataDog/dd-trace-rb/compare/v2.36.0...v2.37.0
3690
3723
  [2.36.0]: https://github.com/DataDog/dd-trace-rb/compare/v2.35.0...v2.36.0
3691
3724
  [2.35.0]: https://github.com/DataDog/dd-trace-rb/compare/v2.34.0...v2.35.0
@@ -5454,6 +5487,7 @@ Git diff: https://github.com/DataDog/dd-trace-rb/compare/v0.3.0...v0.3.1
5454
5487
  [#5834]: https://github.com/DataDog/dd-trace-rb/issues/5834
5455
5488
  [#5836]: https://github.com/DataDog/dd-trace-rb/issues/5836
5456
5489
  [#5844]: https://github.com/DataDog/dd-trace-rb/issues/5844
5490
+ [#5845]: https://github.com/DataDog/dd-trace-rb/issues/5845
5457
5491
  [#5857]: https://github.com/DataDog/dd-trace-rb/issues/5857
5458
5492
  [#5872]: https://github.com/DataDog/dd-trace-rb/issues/5872
5459
5493
  [#5877]: https://github.com/DataDog/dd-trace-rb/issues/5877
@@ -5470,12 +5504,25 @@ Git diff: https://github.com/DataDog/dd-trace-rb/compare/v0.3.0...v0.3.1
5470
5504
  [#5945]: https://github.com/DataDog/dd-trace-rb/issues/5945
5471
5505
  [#5954]: https://github.com/DataDog/dd-trace-rb/issues/5954
5472
5506
  [#5955]: https://github.com/DataDog/dd-trace-rb/issues/5955
5507
+ [#5960]: https://github.com/DataDog/dd-trace-rb/issues/5960
5473
5508
  [#5970]: https://github.com/DataDog/dd-trace-rb/issues/5970
5474
5509
  [#5973]: https://github.com/DataDog/dd-trace-rb/issues/5973
5475
5510
  [#5975]: https://github.com/DataDog/dd-trace-rb/issues/5975
5511
+ [#5981]: https://github.com/DataDog/dd-trace-rb/issues/5981
5476
5512
  [#5987]: https://github.com/DataDog/dd-trace-rb/issues/5987
5477
5513
  [#5990]: https://github.com/DataDog/dd-trace-rb/issues/5990
5478
5514
  [#5991]: https://github.com/DataDog/dd-trace-rb/issues/5991
5515
+ [#5993]: https://github.com/DataDog/dd-trace-rb/issues/5993
5516
+ [#6014]: https://github.com/DataDog/dd-trace-rb/issues/6014
5517
+ [#6020]: https://github.com/DataDog/dd-trace-rb/issues/6020
5518
+ [#6022]: https://github.com/DataDog/dd-trace-rb/issues/6022
5519
+ [#6023]: https://github.com/DataDog/dd-trace-rb/issues/6023
5520
+ [#6047]: https://github.com/DataDog/dd-trace-rb/issues/6047
5521
+ [#6050]: https://github.com/DataDog/dd-trace-rb/issues/6050
5522
+ [#6056]: https://github.com/DataDog/dd-trace-rb/issues/6056
5523
+ [#6060]: https://github.com/DataDog/dd-trace-rb/issues/6060
5524
+ [#6064]: https://github.com/DataDog/dd-trace-rb/issues/6064
5525
+ [#6072]: https://github.com/DataDog/dd-trace-rb/issues/6072
5479
5526
  [@AdrianLC]: https://github.com/AdrianLC
5480
5527
  [@Azure7111]: https://github.com/Azure7111
5481
5528
  [@BabyGroot]: https://github.com/BabyGroot
data/bin/ddprofrb CHANGED
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env ruby
2
- require 'datadog/profiling/tasks/exec'
3
- require 'datadog/profiling/tasks/help'
2
+ require "datadog/profiling/tasks/exec"
3
+ require "datadog/profiling/tasks/help"
4
4
 
5
5
  command = ARGV.shift
6
6
 
7
7
  case command
8
- when 'exec'
8
+ when "exec"
9
9
  Datadog::Profiling::Tasks::Exec.new(ARGV).run
10
- when 'help', '--help'
10
+ when "help", "--help"
11
11
  Datadog::Profiling::Tasks::Help.new.run
12
12
  else
13
13
  puts "Command '#{command}' is not valid for ddprofrb."
@@ -154,8 +154,6 @@ typedef struct {
154
154
  unsigned int signal_handler_enqueued_sample;
155
155
  // How many times we prepared a sample (sampled directly) from the signal handler
156
156
  unsigned int signal_handler_prepared_sample;
157
- // How many times the signal handler was called from the wrong thread
158
- unsigned int signal_handler_wrong_thread;
159
157
  // How many times we actually tried to interrupt a thread for sampling
160
158
  unsigned int interrupt_thread_attempts;
161
159
 
@@ -222,6 +220,7 @@ static VALUE _native_failure_exception_during_operation(DDTRACE_UNUSED VALUE sel
222
220
  static void testing_signal_handler(DDTRACE_UNUSED int _signal, DDTRACE_UNUSED siginfo_t *_info, DDTRACE_UNUSED void *_ucontext);
223
221
  static VALUE _native_install_testing_signal_handler(DDTRACE_UNUSED VALUE self);
224
222
  static VALUE _native_remove_testing_signal_handler(DDTRACE_UNUSED VALUE self);
223
+ static VALUE _native_install_sigprof_handler_on_altstack(DDTRACE_UNUSED VALUE self);
225
224
  static VALUE _native_trigger_sample(DDTRACE_UNUSED VALUE self);
226
225
  static VALUE _native_gc_tracepoint(DDTRACE_UNUSED VALUE self, VALUE instance);
227
226
  static void on_gc_event(VALUE tracepoint_data, DDTRACE_UNUSED void *unused);
@@ -294,6 +293,15 @@ static VALUE active_sampler_instance = Qnil;
294
293
  static cpu_and_wall_time_worker_state *active_sampler_instance_state = NULL;
295
294
  static VALUE clock_failure_exception_class = Qnil;
296
295
 
296
+ // Stats that live outside of any particular `cpu_and_wall_time_worker_state`, so that they can always be safely
297
+ // touched, even when we're not sure it's safe to touch the state (e.g. signal handler, no GVL, etc).
298
+ typedef struct {
299
+ // How many times we skipped sampling because we were running on the alternate signal stack (e.g. nested inside
300
+ // another signal handler, presumably GC compaction).
301
+ unsigned int signal_handler_skipped_sample_on_altstack;
302
+ } global_stats_t;
303
+ static global_stats_t global_stats;
304
+
297
305
  // See handle_sampling_signal for details on what this does
298
306
  #ifdef NO_POSTPONED_TRIGGER
299
307
  static void *gc_finalize_deferred_workaround;
@@ -359,6 +367,7 @@ void collectors_cpu_and_wall_time_worker_init(VALUE profiling_module) {
359
367
  rb_define_singleton_method(collectors_cpu_and_wall_time_worker_class, "_native_resume_signals", _native_resume_signals, 0);
360
368
  rb_define_singleton_method(testing_module, "_native_install_testing_signal_handler", _native_install_testing_signal_handler, 0);
361
369
  rb_define_singleton_method(testing_module, "_native_remove_testing_signal_handler", _native_remove_testing_signal_handler, 0);
370
+ rb_define_singleton_method(testing_module, "_native_install_sigprof_handler_on_altstack", _native_install_sigprof_handler_on_altstack, 0);
362
371
  rb_define_singleton_method(testing_module, "_native_trigger_sample", _native_trigger_sample, 0);
363
372
  rb_define_singleton_method(testing_module, "_native_gc_tracepoint", _native_gc_tracepoint, 1);
364
373
  rb_define_singleton_method(testing_module, "_native_simulate_handle_sampling_signal", _native_simulate_handle_sampling_signal, 0);
@@ -537,6 +546,13 @@ static VALUE _native_sampling_loop(DDTRACE_UNUSED VALUE _self, VALUE instance) {
537
546
  long now = monotonic_wall_time_now_ns(RAISE_ON_FAILURE);
538
547
  discrete_dynamic_sampler_reset(&state->allocation_sampler, now);
539
548
 
549
+ // Reset per-thread state, if any. This ensures there's no leftover state from a previous profiler run that would
550
+ // affect or be included in samples taken by this profiler about to run.
551
+ //
552
+ // NOTE: This needs to be called before we enable any tracepoints or anything that could trigger samples (e.g.
553
+ // reset cannot be concurrent with any sampling activity)
554
+ thread_context_collector_reset_all_per_thread_contexts(state->thread_context_collector_instance);
555
+
540
556
  // This write to a global is thread-safe BECAUSE we're still holding on to the global VM lock at this point
541
557
  active_sampler_instance_state = state;
542
558
  active_sampler_instance = instance;
@@ -633,23 +649,63 @@ static VALUE stop(VALUE self_instance, VALUE optional_exception, const char *opt
633
649
  return Qtrue;
634
650
  }
635
651
 
652
+ // Our SIGPROF handler is not installed with SA_ONSTACK (see `install_sigprof_signal_handler`).
653
+ // If we detect our signal handler is running on the alt stack, it means we interrupted another signal handler
654
+ // that IS running on the alt stack -- in practice, Ruby's GC compaction read-barrier handler.
655
+ #ifdef __APPLE__
656
+ // On macOS, `ucontext->uc_stack.ss_sp` reports the (live) stack pointer near the top of the alt stack rather than the
657
+ // alt-stack base like Linux does, and `ss_size` is the full alt-stack size. Thus the linux version of the check
658
+ // didn't work for macOS.
659
+ // As an alternative, we query `sigaltstack()`; we save/restore errno since `sigaltstack()` may clobber it.
660
+ static bool is_running_on_alternate_signal_stack(DDTRACE_UNUSED void *ucontext) {
661
+ int old_errno = errno;
662
+ stack_t current_alt_stack;
663
+ bool on_alt_stack = sigaltstack(NULL, &current_alt_stack) == 0 && (current_alt_stack.ss_flags & SS_ONSTACK) != 0;
664
+ errno = old_errno;
665
+ return on_alt_stack;
666
+ }
667
+ #else
668
+ // NOTE: On Linux we use the alt-stack bounds from the `ucontext` rather than `sigaltstack()`, allowing us to avoid one syscall.
669
+ static bool is_running_on_alternate_signal_stack(void *ucontext) {
670
+ if (ucontext == NULL) return false;
671
+
672
+ stack_t alt_stack = ((ucontext_t *) ucontext)->uc_stack;
673
+ if (alt_stack.ss_size == 0) return false; // No alternate signal stack registered on this thread
674
+
675
+ char stack_local;
676
+ uintptr_t current_sp = (uintptr_t) &stack_local;
677
+ uintptr_t alt_stack_start = (uintptr_t) alt_stack.ss_sp;
678
+
679
+ return current_sp >= alt_stack_start && current_sp < alt_stack_start + alt_stack.ss_size;
680
+ }
681
+ #endif
682
+
636
683
  // NOTE: Remember that this will run in the thread and within the scope of user code, including user C code.
637
684
  // We need to be careful not to change any state that may be observed OR to restore it if we do. For instance, if anything
638
685
  // we do here can set `errno`, then we must be careful to restore the old `errno` after the fact.
639
- static void handle_sampling_signal(DDTRACE_UNUSED int _signal, DDTRACE_UNUSED siginfo_t *_info, DDTRACE_UNUSED void *_ucontext) {
640
- cpu_and_wall_time_worker_state *state = active_sampler_instance_state; // Read from global variable, see "sampler global state safety" note above
641
-
642
- // This can potentially happen if the CpuAndWallTimeWorker was stopped while the signal delivery was happening; nothing to do
643
- if (state == NULL) return;
686
+ static void handle_sampling_signal(DDTRACE_UNUSED int _signal, DDTRACE_UNUSED siginfo_t *_info, void *ucontext) {
687
+ // If we're running on the alternate signal stack, we've interrupted another signal handler that's running
688
+ // there -- in practice, Ruby's GC compaction read-barrier handler.
689
+ // During GC compaction, Ruby protects pages containing Ruby objects, so many of the checks we do below are unsafe
690
+ // since they can touch those pages, and thus we just bail out here in this situation to avoid crashes.
691
+ if (is_running_on_alternate_signal_stack(ucontext)) {
692
+ global_stats.signal_handler_skipped_sample_on_altstack++;
693
+ return;
694
+ }
644
695
 
696
+ // We must first check that we landed on the correct thread and can proceed.
697
+ // We must never touch the state before we confirm that we have landed on the thread that is holding the GVL on the main
698
+ // ractor as otherwise we may be concurrent with the profiler shutting down and removing its state.
645
699
  if (
646
700
  !ruby_native_thread_p() || // Not a Ruby thread
647
701
  !is_current_thread_holding_the_gvl() || // Not safe to enqueue a sample from this thread
648
702
  !ddtrace_rb_ractor_main_p() // We're not on the main Ractor; we currently don't support profiling non-main Ractors
649
- ) {
650
- state->stats.signal_handler_wrong_thread++;
651
- return;
652
- }
703
+ ) return;
704
+
705
+ cpu_and_wall_time_worker_state *state = active_sampler_instance_state; // Read from global variable, see "sampler global state safety" note above
706
+
707
+ // This can potentially happen if the CpuAndWallTimeWorker was stopped while the signal delivery was happening; nothing to do
708
+ if (state == NULL) return;
653
709
 
654
710
  // We assume there can be no concurrent nor nested calls to handle_sampling_signal because
655
711
  // a) we get triggered using SIGPROF, and the docs state a second SIGPROF will not interrupt an existing one (see sigaction docs on sa_mask)
@@ -935,6 +991,28 @@ static VALUE _native_remove_testing_signal_handler(DDTRACE_UNUSED VALUE self) {
935
991
  return Qtrue;
936
992
  }
937
993
 
994
+ // Reproduces a profiler sample being taken in the middle of GC compaction: during compaction a SIGPROF can be
995
+ // delivered while nested inside Ruby's read-barrier signal handler, which runs on the alternate signal stack. We
996
+ // simulate that here by re-installing the production `handle_sampling_signal` with the `SA_ONSTACK` flag, so it runs
997
+ // on the alternate signal stack just like it would in that scenario.
998
+ //
999
+ // The `SA_ONSTACK` will be undone by any next `replace_sigprof_signal_handler_with_empty_handler` /
1000
+ // `install_sigprof_signal_handler_internal` / `remove_sigprof_signal_handle` so this doesn't need a specific, symmetric
1001
+ // `uninstall` to undo this.
1002
+ static VALUE _native_install_sigprof_handler_on_altstack(DDTRACE_UNUSED VALUE self) {
1003
+ struct sigaction signal_handler_config = {
1004
+ .sa_flags = SA_RESTART | SA_SIGINFO | SA_ONSTACK,
1005
+ .sa_sigaction = handle_sampling_signal,
1006
+ };
1007
+ sigemptyset(&signal_handler_config.sa_mask);
1008
+
1009
+ if (sigaction(SIGPROF, &signal_handler_config, NULL) != 0) {
1010
+ rb_sys_fail("Failed to install SA_ONSTACK SIGPROF signal handler for testing");
1011
+ }
1012
+
1013
+ return Qtrue;
1014
+ }
1015
+
938
1016
  // This method exists only to enable testing Datadog::Profiling::Collectors::CpuAndWallTimeWorker behavior using RSpec.
939
1017
  // It SHOULD NOT be used for other purposes.
940
1018
  static VALUE _native_trigger_sample(DDTRACE_UNUSED VALUE self) {
@@ -1104,7 +1182,7 @@ static VALUE _native_stats(DDTRACE_UNUSED VALUE self, VALUE instance) {
1104
1182
  ID2SYM(rb_intern("simulated_signal_delivery")), /* => */ UINT2NUM(state->stats.simulated_signal_delivery),
1105
1183
  ID2SYM(rb_intern("signal_handler_enqueued_sample")), /* => */ UINT2NUM(state->stats.signal_handler_enqueued_sample),
1106
1184
  ID2SYM(rb_intern("signal_handler_prepared_sample")), /* => */ UINT2NUM(state->stats.signal_handler_prepared_sample),
1107
- ID2SYM(rb_intern("signal_handler_wrong_thread")), /* => */ UINT2NUM(state->stats.signal_handler_wrong_thread),
1185
+ ID2SYM(rb_intern("signal_handler_skipped_sample_on_altstack")), /* => */ UINT2NUM(global_stats.signal_handler_skipped_sample_on_altstack),
1108
1186
  ID2SYM(rb_intern("interrupt_thread_attempts")), /* => */ UINT2NUM(state->stats.interrupt_thread_attempts),
1109
1187
 
1110
1188
  // CPU Stats
@@ -1174,6 +1252,7 @@ static void reset_stats_not_thread_safe(cpu_and_wall_time_worker_state *state) {
1174
1252
  // * Included in the following stats window (writes after stats retrieval and reset).
1175
1253
  // Given the expected infrequency of resetting (~once per 60s profile) and the auxiliary/non-critical nature of these stats
1176
1254
  // this momentary loss of accuracy is deemed acceptable to keep overhead to a minimum.
1255
+
1177
1256
  state->stats = (struct stats) {
1178
1257
  // All these values are initialized to their highest value possible since we always take the min between existing and latest sample
1179
1258
  .cpu_sampling_time_ns_min = UINT64_MAX,
@@ -1181,6 +1260,7 @@ static void reset_stats_not_thread_safe(cpu_and_wall_time_worker_state *state) {
1181
1260
  .gvl_sampling_time_ns_min = UINT64_MAX,
1182
1261
  // Other fields are reset to 0
1183
1262
  };
1263
+ global_stats = (global_stats_t) {0};
1184
1264
  }
1185
1265
 
1186
1266
  static void sleep_for(uint64_t time_ns) {
@@ -1437,17 +1517,21 @@ static VALUE _native_resume_signals(DDTRACE_UNUSED VALUE self) {
1437
1517
  static void on_gvl_event(rb_event_flag_t event_id, const rb_internal_thread_event_data_t *event_data, DDTRACE_UNUSED void *_unused) {
1438
1518
  // Be very careful about touching the `state` here or doing anything at all:
1439
1519
  // This function gets called without the GVL, and potentially from non-main Ractors!
1520
+ //
1521
+ // Note, even though these events can get called without the GVL, they synchronize-with enabling/disabling of
1522
+ // the hook that calls us using a read-write lock. Thus, disabling the hook cannot be concurrent with calling this function,
1523
+ // and once the disable finishes there can't be "late" calls into this function.
1440
1524
 
1441
1525
  // The thread that this event is about may not be the current thread
1442
1526
  // (as documented on rb_internal_thread_add_event_hook(), and this is notably the case for READY on Ruby 4.0),
1443
1527
  // so be careful with native thread locals that are not directly tied to the thread object and the like.
1444
1528
 
1445
- // On Ruby 3.2 the event does not carry the thread, but all events always fire on the event thread on Ruby 3.2.
1446
- // However, during early thread startup rb_thread_current() can crash because the execution context (Fiber) isn't
1447
- // stored in TLS yet; ruby_native_thread_p() guards against this.
1448
1529
  #ifdef HAVE_RUBY_THREAD_STORAGE_API
1449
1530
  VALUE target_thread = event_data->thread;
1450
1531
  #else
1532
+ // On Ruby 3.2 the event does not carry the thread, but all events fire on the thread itself.
1533
+ // However, during early thread startup rb_thread_current() can crash because the execution context (Fiber) isn't
1534
+ // stored in TLS yet; ruby_native_thread_p() guards against this.
1451
1535
  if (!ruby_native_thread_p()) return;
1452
1536
  VALUE target_thread = rb_thread_current();
1453
1537
  #endif
@@ -251,22 +251,26 @@ void sample_thread(
251
251
  bool native_filenames_enabled,
252
252
  st_table *native_filenames_cache
253
253
  ) {
254
+ if (buffer->max_frames != locations.len) {
255
+ // This shouldn't happen as thread_context_collector_reset_all_per_thread_contexts (which resizes every
256
+ // per-thread sampling buffer to match the collector's max_frames) must always be called before starting or
257
+ // restarting profiling.
258
+ raise_error(
259
+ rb_eRuntimeError,
260
+ "Unexpected: sampling buffer max_frames (%d) doesn't match locations len (%d)",
261
+ (int) buffer->max_frames,
262
+ (int) locations.len
263
+ );
264
+ }
265
+
254
266
  // If we already prepared a sample, we use it below; if not, we prepare it now.
255
267
  if (!buffer->pending_sample) {
256
- // Reconcile the sampling_buffer's max_frames with the locations size
257
- if (buffer->max_frames != locations.len) {
258
- sampling_buffer_reinitialize(buffer, locations.len);
259
- }
260
268
  prepare_sample_thread(thread, buffer);
261
269
  }
262
270
 
263
271
  buffer->pending_sample = false;
264
272
  int captured_frames = buffer->pending_sample_result;
265
273
 
266
- // The per_thread_context's sampling_buffer may have been created by a previous collector with a
267
- // different (larger) max_frames. Cap to the locations array size to prevent out-of-bounds writes.
268
- if (captured_frames > (int) locations.len) captured_frames = (int) locations.len;
269
-
270
274
  if (captured_frames == PLACEHOLDER_STACK_IN_NATIVE_CODE) {
271
275
  record_placeholder_stack_in_native_code(recorder_instance, values, labels);
272
276
  return;
@@ -312,8 +316,13 @@ void sample_thread(
312
316
  bool top_of_the_stack = i == top_of_stack_position;
313
317
 
314
318
  if (buffer->stack_buffer[i].is_ruby_frame) {
315
- VALUE name = rb_iseq_base_label(buffer->stack_buffer[i].as.ruby_frame.iseq);
316
- VALUE filename = rb_iseq_path(buffer->stack_buffer[i].as.ruby_frame.iseq);
319
+ VALUE iseq = buffer->stack_buffer[i].as.ruby_frame.iseq;
320
+ VALUE name = rb_iseq_base_label(iseq);
321
+ VALUE filename =
322
+ // Note: We saw crash reports from a customer from dereferencing a null pointer inside `rb_iseq_path`.
323
+ // It's not clear in what situation would the pathobj ever be NULL, yet it seems harmless from our side to
324
+ // skip this information if we're ever in such a situation.
325
+ pathobj_is_null(iseq) ? Qnil : rb_iseq_path(iseq);
317
326
 
318
327
  name_slice = NIL_P(name) ? DDOG_CHARSLICE_C("") : char_slice_from_ruby_string(name);
319
328
  filename_slice = NIL_P(filename) ? DDOG_CHARSLICE_C("") : char_slice_from_ruby_string(filename);
@@ -420,11 +429,6 @@ void sample_thread(
420
429
  values,
421
430
  labels
422
431
  );
423
-
424
- // Reconcile the sampling_buffer's max_frames with the locations size for future samples
425
- if (buffer->max_frames != locations.len) {
426
- sampling_buffer_reinitialize(buffer, locations.len);
427
- }
428
432
  }
429
433
 
430
434
  #if (defined(HAVE_DLADDR1) && HAVE_DLADDR1) || (defined(HAVE_DLADDR) && HAVE_DLADDR)
@@ -645,16 +649,7 @@ void sampling_buffer_initialize(sampling_buffer *buffer, uint16_t max_frames) {
645
649
  buffer->pending_sample_result = 0;
646
650
  }
647
651
 
648
- void sampling_buffer_reinitialize(sampling_buffer *buffer, uint16_t max_frames) {
649
- sampling_buffer_free(buffer);
650
- sampling_buffer_initialize(buffer, max_frames);
651
- }
652
-
653
652
  void sampling_buffer_free(sampling_buffer *buffer) {
654
- if (buffer->max_frames == 0 || buffer->stack_buffer == NULL) {
655
- raise_error(rb_eArgError, "sampling_buffer_free called with invalid buffer");
656
- }
657
-
658
653
  ruby_xfree(buffer->stack_buffer);
659
654
 
660
655
  buffer->max_frames = 0;
@@ -42,7 +42,6 @@ bool prepare_sample_thread(VALUE thread, sampling_buffer *buffer);
42
42
 
43
43
  uint16_t sampling_buffer_check_max_frames(int max_frames);
44
44
  void sampling_buffer_initialize(sampling_buffer *buffer, uint16_t max_frames);
45
- void sampling_buffer_reinitialize(sampling_buffer *buffer, uint16_t max_frames);
46
45
  void sampling_buffer_free(sampling_buffer *buffer);
47
46
  void sampling_buffer_mark(sampling_buffer *buffer);
48
47
  static inline bool sampling_buffer_needs_marking(sampling_buffer *buffer) {