datadog 2.28.0 → 2.41.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 (941) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +412 -1
  3. data/bin/ddprofrb +4 -4
  4. data/ext/datadog_profiling_native_extension/clock_id.h +9 -1
  5. data/ext/datadog_profiling_native_extension/clock_id_from_mach.c +66 -0
  6. data/ext/datadog_profiling_native_extension/clock_id_from_pthread.c +1 -1
  7. data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +281 -57
  8. data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.c +1 -1
  9. data/ext/datadog_profiling_native_extension/collectors_idle_sampling_helper.c +18 -4
  10. data/ext/datadog_profiling_native_extension/collectors_stack.c +245 -160
  11. data/ext/datadog_profiling_native_extension/collectors_stack.h +23 -4
  12. data/ext/datadog_profiling_native_extension/collectors_thread_context.c +725 -432
  13. data/ext/datadog_profiling_native_extension/collectors_thread_context.h +19 -6
  14. data/ext/datadog_profiling_native_extension/crashtracking_runtime_stacks.c +5 -4
  15. data/ext/datadog_profiling_native_extension/datadog_ruby_common.c +44 -19
  16. data/ext/datadog_profiling_native_extension/datadog_ruby_common.h +17 -12
  17. data/ext/datadog_profiling_native_extension/extconf.rb +44 -40
  18. data/ext/datadog_profiling_native_extension/gvl_profiling_helper.c +4 -43
  19. data/ext/datadog_profiling_native_extension/gvl_profiling_helper.h +15 -47
  20. data/ext/datadog_profiling_native_extension/heap_recorder.c +230 -81
  21. data/ext/datadog_profiling_native_extension/heap_recorder.h +12 -1
  22. data/ext/datadog_profiling_native_extension/http_transport.c +61 -69
  23. data/ext/datadog_profiling_native_extension/macos_sampler_thread.h +55 -0
  24. data/ext/datadog_profiling_native_extension/native_extension_helpers.rb +3 -16
  25. data/ext/datadog_profiling_native_extension/private_vm_api_access.c +300 -108
  26. data/ext/datadog_profiling_native_extension/private_vm_api_access.h +17 -9
  27. data/ext/datadog_profiling_native_extension/profiling.c +44 -5
  28. data/ext/datadog_profiling_native_extension/ruby_helpers.c +40 -34
  29. data/ext/datadog_profiling_native_extension/setup_signal_handler.c +26 -8
  30. data/ext/datadog_profiling_native_extension/setup_signal_handler.h +1 -3
  31. data/ext/datadog_profiling_native_extension/stack_recorder.c +94 -69
  32. data/ext/datadog_profiling_native_extension/stack_recorder.h +3 -1
  33. data/ext/datadog_profiling_native_extension/time_helpers.h +13 -7
  34. data/ext/datadog_profiling_native_extension/unsafe_api_calls_check.h +4 -2
  35. data/ext/libdatadog_api/crashtracker.c +12 -8
  36. data/ext/libdatadog_api/crashtracker_report_exception.c +126 -0
  37. data/ext/libdatadog_api/datadog_ruby_common.c +44 -19
  38. data/ext/libdatadog_api/datadog_ruby_common.h +17 -12
  39. data/ext/libdatadog_api/di.c +203 -0
  40. data/ext/libdatadog_api/extconf.rb +38 -44
  41. data/ext/libdatadog_api/feature_flags.c +26 -0
  42. data/ext/libdatadog_api/init.c +9 -2
  43. data/ext/libdatadog_api/trace_exporter.c +1312 -0
  44. data/ext/libdatadog_api/trace_exporter.h +5 -0
  45. data/ext/libdatadog_extconf_helpers.rb +98 -15
  46. data/lib/datadog/ai_guard/api_client.rb +9 -7
  47. data/lib/datadog/ai_guard/autoload.rb +10 -0
  48. data/lib/datadog/ai_guard/component.rb +11 -9
  49. data/lib/datadog/ai_guard/configuration.rb +106 -2
  50. data/lib/datadog/ai_guard/contrib/auto_instrument.rb +24 -0
  51. data/lib/datadog/ai_guard/contrib/rack/integration.rb +42 -0
  52. data/lib/datadog/ai_guard/contrib/rack/patcher.rb +26 -0
  53. data/lib/datadog/ai_guard/contrib/rack/request_middleware.rb +97 -0
  54. data/lib/datadog/ai_guard/contrib/rails/integration.rb +41 -0
  55. data/lib/datadog/ai_guard/contrib/rails/patcher.rb +97 -0
  56. data/lib/datadog/ai_guard/contrib/ruby_llm/chat_instrumentation.rb +41 -3
  57. data/lib/datadog/ai_guard/evaluation/content_builder.rb +31 -0
  58. data/lib/datadog/ai_guard/evaluation/content_part.rb +36 -0
  59. data/lib/datadog/ai_guard/evaluation/no_op_result.rb +3 -1
  60. data/lib/datadog/ai_guard/evaluation/request.rb +22 -17
  61. data/lib/datadog/ai_guard/evaluation/result.rb +3 -1
  62. data/lib/datadog/ai_guard/evaluation.rb +51 -7
  63. data/lib/datadog/ai_guard/ext.rb +15 -0
  64. data/lib/datadog/ai_guard.rb +34 -8
  65. data/lib/datadog/appsec/actions_handler/serializable_backtrace.rb +22 -43
  66. data/lib/datadog/appsec/actions_handler.rb +6 -6
  67. data/lib/datadog/appsec/anonymizer.rb +1 -1
  68. data/lib/datadog/appsec/api_security/endpoint_collection/grape_route_serializer.rb +2 -2
  69. data/lib/datadog/appsec/api_security/endpoint_collection/rails_collector.rb +6 -6
  70. data/lib/datadog/appsec/api_security/endpoint_collection/rails_route_serializer.rb +1 -1
  71. data/lib/datadog/appsec/api_security/endpoint_collection/sinatra_route_serializer.rb +2 -2
  72. data/lib/datadog/appsec/api_security/route_extractor.rb +26 -14
  73. data/lib/datadog/appsec/api_security/sampler.rb +5 -5
  74. data/lib/datadog/appsec/api_security.rb +1 -1
  75. data/lib/datadog/appsec/assets/blocked.html +2 -1
  76. data/lib/datadog/appsec/assets.rb +7 -7
  77. data/lib/datadog/appsec/autoload.rb +4 -4
  78. data/lib/datadog/appsec/component.rb +29 -22
  79. data/lib/datadog/appsec/compressed_json.rb +7 -7
  80. data/lib/datadog/appsec/configuration.rb +436 -1
  81. data/lib/datadog/appsec/context.rb +49 -12
  82. data/lib/datadog/appsec/contrib/active_record/instrumentation.rb +6 -6
  83. data/lib/datadog/appsec/contrib/active_record/integration.rb +4 -4
  84. data/lib/datadog/appsec/contrib/active_record/patcher.rb +7 -4
  85. data/lib/datadog/appsec/contrib/aws_lambda/gateway/watcher.rb +75 -0
  86. data/lib/datadog/appsec/contrib/aws_lambda/integration.rb +39 -0
  87. data/lib/datadog/appsec/contrib/aws_lambda/patcher.rb +30 -0
  88. data/lib/datadog/appsec/contrib/aws_lambda/waf_addresses.rb +146 -0
  89. data/lib/datadog/appsec/contrib/devise/configuration.rb +1 -1
  90. data/lib/datadog/appsec/contrib/devise/data_extractor.rb +3 -3
  91. data/lib/datadog/appsec/contrib/devise/ext.rb +20 -20
  92. data/lib/datadog/appsec/contrib/devise/integration.rb +5 -5
  93. data/lib/datadog/appsec/contrib/devise/patcher.rb +8 -8
  94. data/lib/datadog/appsec/contrib/devise/patches/signin_tracking_patch.rb +14 -13
  95. data/lib/datadog/appsec/contrib/devise/patches/signup_tracking_patch.rb +8 -8
  96. data/lib/datadog/appsec/contrib/devise/tracking_middleware.rb +24 -9
  97. data/lib/datadog/appsec/contrib/excon/integration.rb +4 -4
  98. data/lib/datadog/appsec/contrib/excon/patcher.rb +3 -1
  99. data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +118 -14
  100. data/lib/datadog/appsec/contrib/faraday/integration.rb +5 -5
  101. data/lib/datadog/appsec/contrib/faraday/patcher.rb +4 -4
  102. data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +119 -12
  103. data/lib/datadog/appsec/contrib/graphql/appsec_trace.rb +4 -4
  104. data/lib/datadog/appsec/contrib/graphql/gateway/multiplex.rb +76 -26
  105. data/lib/datadog/appsec/contrib/graphql/gateway/watcher.rb +7 -7
  106. data/lib/datadog/appsec/contrib/graphql/integration.rb +10 -9
  107. data/lib/datadog/appsec/contrib/graphql/patcher.rb +3 -3
  108. data/lib/datadog/appsec/contrib/rack/buffered_input.rb +83 -0
  109. data/lib/datadog/appsec/contrib/rack/ext.rb +29 -29
  110. data/lib/datadog/appsec/contrib/rack/gateway/request.rb +56 -21
  111. data/lib/datadog/appsec/contrib/rack/gateway/response.rb +1 -1
  112. data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +46 -30
  113. data/lib/datadog/appsec/contrib/rack/input_peeker.rb +79 -0
  114. data/lib/datadog/appsec/contrib/rack/integration.rb +7 -7
  115. data/lib/datadog/appsec/contrib/rack/patcher.rb +3 -3
  116. data/lib/datadog/appsec/contrib/rack/request_body_middleware.rb +11 -8
  117. data/lib/datadog/appsec/contrib/rack/request_middleware.rb +63 -52
  118. data/lib/datadog/appsec/contrib/rack/response_body.rb +36 -0
  119. data/lib/datadog/appsec/contrib/rails/gateway/request.rb +43 -4
  120. data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +25 -9
  121. data/lib/datadog/appsec/contrib/rails/integration.rb +6 -6
  122. data/lib/datadog/appsec/contrib/rails/patcher.rb +17 -17
  123. data/lib/datadog/appsec/contrib/rails/patches/process_action_patch.rb +3 -1
  124. data/lib/datadog/appsec/contrib/rails/patches/render_to_body_patch.rb +3 -3
  125. data/lib/datadog/appsec/contrib/rails/request.rb +3 -3
  126. data/lib/datadog/appsec/contrib/rails/request_middleware.rb +2 -1
  127. data/lib/datadog/appsec/contrib/rest_client/integration.rb +5 -5
  128. data/lib/datadog/appsec/contrib/rest_client/patcher.rb +3 -1
  129. data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +131 -13
  130. data/lib/datadog/appsec/contrib/sinatra/gateway/request.rb +1 -1
  131. data/lib/datadog/appsec/contrib/sinatra/gateway/route_params.rb +1 -1
  132. data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +35 -12
  133. data/lib/datadog/appsec/contrib/sinatra/integration.rb +5 -5
  134. data/lib/datadog/appsec/contrib/sinatra/patcher.rb +11 -11
  135. data/lib/datadog/appsec/contrib/sinatra/patches/json_patch.rb +3 -3
  136. data/lib/datadog/appsec/contrib/sinatra/request_middleware.rb +2 -1
  137. data/lib/datadog/appsec/counter_sampler.rb +25 -0
  138. data/lib/datadog/appsec/default_header_tags.rb +52 -0
  139. data/lib/datadog/appsec/event.rb +15 -31
  140. data/lib/datadog/appsec/ext.rb +11 -10
  141. data/lib/datadog/appsec/extensions.rb +2 -2
  142. data/lib/datadog/appsec/instrumentation/gateway/middleware.rb +2 -3
  143. data/lib/datadog/appsec/instrumentation/gateway.rb +3 -16
  144. data/lib/datadog/appsec/metrics/collector.rb +18 -1
  145. data/lib/datadog/appsec/metrics/exporter.rb +17 -11
  146. data/lib/datadog/appsec/metrics/telemetry.rb +15 -3
  147. data/lib/datadog/appsec/metrics/telemetry_exporter.rb +20 -2
  148. data/lib/datadog/appsec/metrics.rb +4 -4
  149. data/lib/datadog/appsec/monitor/gateway/watcher.rb +18 -12
  150. data/lib/datadog/appsec/monitor.rb +1 -1
  151. data/lib/datadog/appsec/processor/rule_loader.rb +32 -32
  152. data/lib/datadog/appsec/rate_limiter.rb +1 -1
  153. data/lib/datadog/appsec/remote.rb +15 -9
  154. data/lib/datadog/appsec/response.rb +22 -22
  155. data/lib/datadog/appsec/route_normalizer/rails_route_pattern.rb +176 -0
  156. data/lib/datadog/appsec/route_normalizer/route_pattern.rb +378 -0
  157. data/lib/datadog/appsec/route_normalizer/route_text.rb +57 -0
  158. data/lib/datadog/appsec/route_normalizer.rb +80 -0
  159. data/lib/datadog/appsec/security_engine/engine.rb +54 -33
  160. data/lib/datadog/appsec/security_engine/runner.rb +3 -3
  161. data/lib/datadog/appsec/security_event.rb +2 -2
  162. data/lib/datadog/appsec/trace_keeper.rb +18 -6
  163. data/lib/datadog/appsec/utils/http/body.rb +41 -0
  164. data/lib/datadog/appsec/utils/http/body_reader.rb +61 -0
  165. data/lib/datadog/appsec/utils/http/media_range.rb +17 -16
  166. data/lib/datadog/appsec/utils/http/media_type.rb +28 -36
  167. data/lib/datadog/appsec/utils/http/url_encoded.rb +107 -0
  168. data/lib/datadog/appsec.rb +21 -24
  169. data/lib/datadog/auto_instrument.rb +2 -2
  170. data/lib/datadog/core/buffer/cruby.rb +1 -1
  171. data/lib/datadog/core/buffer/thread_safe.rb +1 -1
  172. data/lib/datadog/core/configuration/agent_settings.rb +1 -1
  173. data/lib/datadog/core/configuration/agent_settings_resolver.rb +15 -15
  174. data/lib/datadog/core/configuration/agentless_settings_resolver.rb +2 -2
  175. data/lib/datadog/core/configuration/base.rb +19 -7
  176. data/lib/datadog/core/configuration/components.rb +166 -36
  177. data/lib/datadog/core/configuration/components_state.rb +6 -1
  178. data/lib/datadog/core/configuration/config_helper.rb +12 -3
  179. data/lib/datadog/core/configuration/deprecations.rb +6 -6
  180. data/lib/datadog/core/configuration/ext.rb +11 -11
  181. data/lib/datadog/core/configuration/option.rb +48 -22
  182. data/lib/datadog/core/configuration/option_definition.rb +43 -17
  183. data/lib/datadog/core/configuration/options.rb +43 -9
  184. data/lib/datadog/core/configuration/settings.rb +155 -106
  185. data/lib/datadog/core/configuration/stable_config.rb +1 -1
  186. data/lib/datadog/core/configuration/supported_configurations.rb +44 -1
  187. data/lib/datadog/core/configuration.rb +11 -11
  188. data/lib/datadog/core/contrib/rails/railtie.rb +32 -0
  189. data/lib/datadog/core/contrib/rails/utils.rb +7 -3
  190. data/lib/datadog/core/crashtracking/component.rb +78 -26
  191. data/lib/datadog/core/crashtracking/tag_builder.rb +5 -5
  192. data/lib/datadog/core/deprecations.rb +1 -1
  193. data/lib/datadog/core/diagnostics/environment_logger.rb +45 -8
  194. data/lib/datadog/core/diagnostics/health.rb +2 -2
  195. data/lib/datadog/core/encoding.rb +4 -4
  196. data/lib/datadog/core/environment/agent_info.rb +65 -1
  197. data/lib/datadog/core/environment/cgroup.rb +4 -4
  198. data/lib/datadog/core/environment/container.rb +11 -11
  199. data/lib/datadog/core/environment/execution.rb +3 -3
  200. data/lib/datadog/core/environment/ext.rb +21 -15
  201. data/lib/datadog/core/environment/gc.rb +1 -1
  202. data/lib/datadog/core/environment/git.rb +2 -2
  203. data/lib/datadog/core/environment/identity.rb +47 -11
  204. data/lib/datadog/core/environment/platform.rb +8 -8
  205. data/lib/datadog/core/environment/process.rb +54 -19
  206. data/lib/datadog/core/environment/socket.rb +15 -2
  207. data/lib/datadog/core/environment/variable_helpers.rb +1 -1
  208. data/lib/datadog/core/environment/vm_cache.rb +1 -1
  209. data/lib/datadog/core/environment/yjit.rb +2 -2
  210. data/lib/datadog/core/error.rb +5 -5
  211. data/lib/datadog/core/evp.rb +11 -0
  212. data/lib/datadog/core/extensions.rb +1 -1
  213. data/lib/datadog/core/feature_flags.rb +3 -3
  214. data/lib/datadog/core/git/ext.rb +4 -4
  215. data/lib/datadog/core/knuth_sampler.rb +3 -1
  216. data/lib/datadog/core/logger.rb +4 -4
  217. data/lib/datadog/core/logging/ext.rb +1 -1
  218. data/lib/datadog/core/metrics/client.rb +26 -26
  219. data/lib/datadog/core/metrics/ext.rb +5 -5
  220. data/lib/datadog/core/metrics/helpers.rb +1 -1
  221. data/lib/datadog/core/metrics/logging.rb +3 -3
  222. data/lib/datadog/core/metrics/options.rb +5 -5
  223. data/lib/datadog/core/pin.rb +1 -1
  224. data/lib/datadog/core/process_discovery.rb +23 -22
  225. data/lib/datadog/core/rate_limiter.rb +3 -1
  226. data/lib/datadog/core/remote/client/capabilities.rb +67 -15
  227. data/lib/datadog/core/remote/client.rb +18 -18
  228. data/lib/datadog/core/remote/component.rb +70 -34
  229. data/lib/datadog/core/remote/configuration/content.rb +3 -3
  230. data/lib/datadog/core/remote/configuration/digest.rb +1 -1
  231. data/lib/datadog/core/remote/configuration/path.rb +9 -9
  232. data/lib/datadog/core/remote/configuration/repository.rb +4 -4
  233. data/lib/datadog/core/remote/configuration/target.rb +9 -9
  234. data/lib/datadog/core/remote/configuration.rb +4 -4
  235. data/lib/datadog/core/remote/ext.rb +3 -3
  236. data/lib/datadog/core/remote/negotiation.rb +1 -1
  237. data/lib/datadog/core/remote/tie/tracing.rb +7 -7
  238. data/lib/datadog/core/remote/transport/config.rb +9 -15
  239. data/lib/datadog/core/remote/transport/http/config.rb +10 -10
  240. data/lib/datadog/core/remote/transport/http/negotiation.rb +4 -4
  241. data/lib/datadog/core/remote/transport/http.rb +10 -10
  242. data/lib/datadog/core/remote/transport/negotiation.rb +3 -3
  243. data/lib/datadog/core/remote/worker.rb +5 -5
  244. data/lib/datadog/core/runtime/ext.rb +22 -22
  245. data/lib/datadog/core/runtime/metrics.rb +11 -12
  246. data/lib/datadog/core/tag_builder.rb +18 -18
  247. data/lib/datadog/core/tag_normalizer.rb +7 -7
  248. data/lib/datadog/core/telemetry/component.rb +16 -26
  249. data/lib/datadog/core/telemetry/configuration_value.rb +38 -0
  250. data/lib/datadog/core/telemetry/emitter.rb +5 -5
  251. data/lib/datadog/core/telemetry/event/app_client_configuration_change.rb +10 -9
  252. data/lib/datadog/core/telemetry/event/app_closing.rb +2 -2
  253. data/lib/datadog/core/telemetry/event/app_dependencies_loaded.rb +2 -2
  254. data/lib/datadog/core/telemetry/event/app_endpoints_loaded.rb +3 -3
  255. data/lib/datadog/core/telemetry/event/app_extended_heartbeat.rb +32 -0
  256. data/lib/datadog/core/telemetry/event/app_heartbeat.rb +2 -2
  257. data/lib/datadog/core/telemetry/event/app_integrations_change.rb +2 -2
  258. data/lib/datadog/core/telemetry/event/app_started.rb +142 -193
  259. data/lib/datadog/core/telemetry/event/base.rb +1 -1
  260. data/lib/datadog/core/telemetry/event/distributions.rb +2 -2
  261. data/lib/datadog/core/telemetry/event/generate_metrics.rb +3 -3
  262. data/lib/datadog/core/telemetry/event/log.rb +6 -6
  263. data/lib/datadog/core/telemetry/event/message_batch.rb +1 -1
  264. data/lib/datadog/core/telemetry/event/synth_app_client_configuration_change.rb +3 -3
  265. data/lib/datadog/core/telemetry/event.rb +16 -22
  266. data/lib/datadog/core/telemetry/ext.rb +11 -10
  267. data/lib/datadog/core/telemetry/logger.rb +1 -1
  268. data/lib/datadog/core/telemetry/logging.rb +5 -5
  269. data/lib/datadog/core/telemetry/metric.rb +9 -9
  270. data/lib/datadog/core/telemetry/metrics_collection.rb +2 -2
  271. data/lib/datadog/core/telemetry/metrics_manager.rb +1 -1
  272. data/lib/datadog/core/telemetry/request.rb +6 -8
  273. data/lib/datadog/core/telemetry/transport/http/telemetry.rb +16 -11
  274. data/lib/datadog/core/telemetry/transport/http.rb +7 -7
  275. data/lib/datadog/core/telemetry/transport/telemetry.rb +8 -9
  276. data/lib/datadog/core/telemetry/worker.rb +26 -6
  277. data/lib/datadog/core/transport/ext.rb +14 -13
  278. data/lib/datadog/core/transport/http/adapters/net.rb +4 -4
  279. data/lib/datadog/core/transport/http/adapters/test.rb +1 -1
  280. data/lib/datadog/core/transport/http/adapters/unix_socket.rb +4 -4
  281. data/lib/datadog/core/transport/http/api/endpoint.rb +1 -1
  282. data/lib/datadog/core/transport/http/api/map.rb +1 -1
  283. data/lib/datadog/core/transport/http/builder.rb +6 -6
  284. data/lib/datadog/core/transport/http/client.rb +2 -2
  285. data/lib/datadog/core/transport/http/response.rb +5 -1
  286. data/lib/datadog/core/transport/http.rb +9 -7
  287. data/lib/datadog/core/transport/parcel.rb +61 -9
  288. data/lib/datadog/core/transport/response.rb +1 -1
  289. data/lib/datadog/core/transport/transport.rb +2 -2
  290. data/lib/datadog/core/utils/at_fork_monkey_patch.rb +172 -20
  291. data/lib/datadog/core/utils/base64_codec.rb +23 -0
  292. data/lib/datadog/core/utils/duration.rb +1 -1
  293. data/lib/datadog/core/utils/{array.rb → enumerable_compat.rb} +2 -2
  294. data/lib/datadog/core/utils/fnv.rb +26 -0
  295. data/lib/datadog/core/utils/forking.rb +3 -1
  296. data/lib/datadog/core/utils/hash.rb +0 -23
  297. data/lib/datadog/core/utils/lru_cache.rb +3 -3
  298. data/lib/datadog/core/utils/network.rb +11 -11
  299. data/lib/datadog/core/utils/only_once.rb +1 -1
  300. data/lib/datadog/core/utils/only_once_successful.rb +1 -1
  301. data/lib/datadog/core/utils/safe_dup.rb +2 -1
  302. data/lib/datadog/core/utils/sequence.rb +3 -6
  303. data/lib/datadog/core/utils/spawn_monkey_patch.rb +68 -0
  304. data/lib/datadog/core/utils/time.rb +18 -52
  305. data/lib/datadog/core/utils/url.rb +1 -1
  306. data/lib/datadog/core/utils.rb +5 -5
  307. data/lib/datadog/core/workers/async.rb +2 -2
  308. data/lib/datadog/core/workers/interval_loop.rb +13 -6
  309. data/lib/datadog/core/workers/polling.rb +2 -2
  310. data/lib/datadog/core/workers/queue.rb +0 -4
  311. data/lib/datadog/core/workers/runtime_metrics.rb +13 -5
  312. data/lib/datadog/core.rb +13 -6
  313. data/lib/datadog/data_streams/configuration.rb +40 -1
  314. data/lib/datadog/data_streams/ext.rb +1 -1
  315. data/lib/datadog/data_streams/extensions.rb +2 -2
  316. data/lib/datadog/data_streams/pathway_context.rb +8 -8
  317. data/lib/datadog/data_streams/processor.rb +87 -85
  318. data/lib/datadog/data_streams/transport/http/stats.rb +9 -3
  319. data/lib/datadog/data_streams/transport/http.rb +5 -9
  320. data/lib/datadog/data_streams/transport/stats.rb +10 -17
  321. data/lib/datadog/data_streams.rb +5 -5
  322. data/lib/datadog/di/base.rb +16 -8
  323. data/lib/datadog/di/boot.rb +25 -23
  324. data/lib/datadog/di/capture_expression.rb +21 -0
  325. data/lib/datadog/di/capture_expression_evaluator.rb +71 -0
  326. data/lib/datadog/di/capture_limits.rb +41 -0
  327. data/lib/datadog/di/code_tracker.rb +218 -16
  328. data/lib/datadog/di/component.rb +137 -39
  329. data/lib/datadog/di/configuration.rb +241 -2
  330. data/lib/datadog/di/context.rb +15 -3
  331. data/lib/datadog/di/contrib/active_record.rb +6 -2
  332. data/lib/datadog/di/contrib/railtie.rb +1 -1
  333. data/lib/datadog/di/contrib.rb +5 -5
  334. data/lib/datadog/di/el/compiler.rb +114 -38
  335. data/lib/datadog/di/el/evaluator.rb +82 -2
  336. data/lib/datadog/di/el/expression.rb +13 -2
  337. data/lib/datadog/di/el.rb +3 -3
  338. data/lib/datadog/di/error.rb +10 -0
  339. data/lib/datadog/di/fatal_exceptions.rb +26 -0
  340. data/lib/datadog/di/instrumenter.rb +608 -255
  341. data/lib/datadog/di/logger.rb +1 -1
  342. data/lib/datadog/di/preload.rb +1 -1
  343. data/lib/datadog/di/probe.rb +71 -3
  344. data/lib/datadog/di/probe_builder.rb +98 -15
  345. data/lib/datadog/di/probe_file_loader/railtie.rb +1 -1
  346. data/lib/datadog/di/probe_file_loader.rb +16 -11
  347. data/lib/datadog/di/probe_manager.rb +153 -73
  348. data/lib/datadog/di/probe_notification_builder.rb +218 -38
  349. data/lib/datadog/di/probe_notifier_worker.rb +111 -35
  350. data/lib/datadog/di/probe_repository.rb +198 -0
  351. data/lib/datadog/di/proc_responder.rb +4 -0
  352. data/lib/datadog/di/redactor.rb +16 -1
  353. data/lib/datadog/di/remote.rb +193 -33
  354. data/lib/datadog/di/serializer.rb +201 -39
  355. data/lib/datadog/di/transport/diagnostics.rb +10 -12
  356. data/lib/datadog/di/transport/http/diagnostics.rb +5 -3
  357. data/lib/datadog/di/transport/http/input.rb +3 -3
  358. data/lib/datadog/di/transport/http.rb +22 -13
  359. data/lib/datadog/di/transport/input.rb +65 -24
  360. data/lib/datadog/di/utils.rb +43 -15
  361. data/lib/datadog/di.rb +147 -3
  362. data/lib/datadog/error_tracking/collector.rb +3 -2
  363. data/lib/datadog/error_tracking/component.rb +12 -12
  364. data/lib/datadog/error_tracking/configuration.rb +55 -2
  365. data/lib/datadog/error_tracking/ext.rb +7 -7
  366. data/lib/datadog/error_tracking/extensions.rb +2 -2
  367. data/lib/datadog/error_tracking/filters.rb +4 -4
  368. data/lib/datadog/error_tracking.rb +6 -6
  369. data/lib/datadog/kit/appsec/events/v2.rb +91 -33
  370. data/lib/datadog/kit/appsec/events.rb +25 -25
  371. data/lib/datadog/kit/enable_core_dumps.rb +3 -3
  372. data/lib/datadog/kit/identity.rb +18 -18
  373. data/lib/datadog/kit/tracing/method_tracer.rb +135 -0
  374. data/lib/datadog/kit.rb +1 -1
  375. data/lib/datadog/open_feature/component.rb +62 -13
  376. data/lib/datadog/open_feature/configuration.rb +24 -1
  377. data/lib/datadog/open_feature/evaluation_engine.rb +9 -9
  378. data/lib/datadog/open_feature/exposures/batch_builder.rb +1 -1
  379. data/lib/datadog/open_feature/exposures/buffer.rb +1 -1
  380. data/lib/datadog/open_feature/exposures/deduplicator.rb +1 -1
  381. data/lib/datadog/open_feature/exposures/event.rb +7 -7
  382. data/lib/datadog/open_feature/exposures/reporter.rb +3 -3
  383. data/lib/datadog/open_feature/exposures/worker.rb +6 -6
  384. data/lib/datadog/open_feature/ext.rb +13 -6
  385. data/lib/datadog/open_feature/flag_evaluation/aggregator.rb +286 -0
  386. data/lib/datadog/open_feature/flag_evaluation/writer.rb +433 -0
  387. data/lib/datadog/open_feature/hooks/flag_eval_evp_hook.rb +102 -0
  388. data/lib/datadog/open_feature/hooks/flag_eval_metrics_hook.rb +51 -0
  389. data/lib/datadog/open_feature/hooks/span_enrichment_hook/codec.rb +58 -0
  390. data/lib/datadog/open_feature/hooks/span_enrichment_hook/span_enrichment_state.rb +96 -0
  391. data/lib/datadog/open_feature/hooks/span_enrichment_hook/span_enrichment_state_store.rb +49 -0
  392. data/lib/datadog/open_feature/hooks/span_enrichment_hook.rb +184 -0
  393. data/lib/datadog/open_feature/metrics/flag_eval_metrics.rb +149 -0
  394. data/lib/datadog/open_feature/native_evaluator.rb +23 -1
  395. data/lib/datadog/open_feature/noop_evaluator.rb +3 -3
  396. data/lib/datadog/open_feature/provider.rb +106 -21
  397. data/lib/datadog/open_feature/remote.rb +3 -3
  398. data/lib/datadog/open_feature/resolution_details.rb +4 -2
  399. data/lib/datadog/open_feature/transport.rb +73 -22
  400. data/lib/datadog/open_feature.rb +2 -2
  401. data/lib/datadog/opentelemetry/api/baggage.rb +3 -3
  402. data/lib/datadog/opentelemetry/api/context.rb +4 -4
  403. data/lib/datadog/opentelemetry/configuration/settings.rb +95 -28
  404. data/lib/datadog/opentelemetry/ext.rb +9 -0
  405. data/lib/datadog/opentelemetry/logs.rb +98 -0
  406. data/lib/datadog/opentelemetry/metrics.rb +17 -44
  407. data/lib/datadog/opentelemetry/sdk/configurator.rb +46 -6
  408. data/lib/datadog/opentelemetry/sdk/id_generator.rb +16 -10
  409. data/lib/datadog/opentelemetry/sdk/logs_exporter.rb +30 -0
  410. data/lib/datadog/opentelemetry/sdk/metrics_exporter.rb +9 -16
  411. data/lib/datadog/opentelemetry/sdk/propagator.rb +16 -10
  412. data/lib/datadog/opentelemetry/sdk/span_processor.rb +18 -15
  413. data/lib/datadog/opentelemetry/sdk/trace/span.rb +32 -32
  414. data/lib/datadog/opentelemetry/sdk.rb +19 -0
  415. data/lib/datadog/opentelemetry/signal_configuration.rb +53 -0
  416. data/lib/datadog/opentelemetry/trace.rb +1 -1
  417. data/lib/datadog/opentelemetry.rb +8 -7
  418. data/lib/datadog/profiling/collectors/code_provenance.rb +36 -11
  419. data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +50 -3
  420. data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +12 -4
  421. data/lib/datadog/profiling/collectors/info.rb +17 -4
  422. data/lib/datadog/profiling/collectors/thread_context.rb +16 -18
  423. data/lib/datadog/profiling/component.rb +62 -33
  424. data/lib/datadog/profiling/exporter.rb +38 -13
  425. data/lib/datadog/profiling/ext/dir_monkey_patches.rb +6 -5
  426. data/lib/datadog/profiling/ext.rb +0 -2
  427. data/lib/datadog/profiling/flush.rb +21 -12
  428. data/lib/datadog/profiling/http_transport.rb +18 -8
  429. data/lib/datadog/profiling/load_native_extension.rb +2 -2
  430. data/lib/datadog/profiling/profiler.rb +28 -13
  431. data/lib/datadog/profiling/scheduler.rb +2 -2
  432. data/lib/datadog/profiling/sequence_tracker.rb +1 -1
  433. data/lib/datadog/profiling/stack_recorder.rb +0 -8
  434. data/lib/datadog/profiling/tag_builder.rb +19 -19
  435. data/lib/datadog/profiling/tasks/exec.rb +9 -4
  436. data/lib/datadog/profiling/tasks/help.rb +1 -0
  437. data/lib/datadog/profiling/tasks/setup.rb +2 -2
  438. data/lib/datadog/profiling.rb +32 -29
  439. data/lib/datadog/ruby_version.rb +25 -0
  440. data/lib/datadog/single_step_instrument.rb +2 -2
  441. data/lib/datadog/symbol_database/component.rb +734 -0
  442. data/lib/datadog/symbol_database/configuration.rb +73 -0
  443. data/lib/datadog/symbol_database/extensions.rb +19 -0
  444. data/lib/datadog/symbol_database/extractor.rb +1110 -0
  445. data/lib/datadog/symbol_database/file_hash.rb +48 -0
  446. data/lib/datadog/symbol_database/logger.rb +43 -0
  447. data/lib/datadog/symbol_database/remote.rb +195 -0
  448. data/lib/datadog/symbol_database/scope.rb +102 -0
  449. data/lib/datadog/symbol_database/scope_batcher.rb +292 -0
  450. data/lib/datadog/symbol_database/service_version.rb +66 -0
  451. data/lib/datadog/symbol_database/symbol.rb +69 -0
  452. data/lib/datadog/symbol_database/transport/http/endpoint.rb +28 -0
  453. data/lib/datadog/symbol_database/transport/http.rb +45 -0
  454. data/lib/datadog/symbol_database/transport.rb +54 -0
  455. data/lib/datadog/symbol_database/uploader.rb +230 -0
  456. data/lib/datadog/symbol_database.rb +71 -0
  457. data/lib/datadog/tracing/analytics.rb +1 -1
  458. data/lib/datadog/tracing/buffer.rb +8 -8
  459. data/lib/datadog/tracing/client_ip.rb +4 -4
  460. data/lib/datadog/tracing/component.rb +39 -7
  461. data/lib/datadog/tracing/configuration/dynamic/option.rb +4 -0
  462. data/lib/datadog/tracing/configuration/dynamic.rb +13 -11
  463. data/lib/datadog/tracing/configuration/ext.rb +52 -38
  464. data/lib/datadog/tracing/configuration/http.rb +2 -2
  465. data/lib/datadog/tracing/configuration/settings.rb +51 -17
  466. data/lib/datadog/tracing/context.rb +1 -1
  467. data/lib/datadog/tracing/context_provider.rb +2 -2
  468. data/lib/datadog/tracing/contrib/action_cable/configuration/settings.rb +2 -2
  469. data/lib/datadog/tracing/contrib/action_cable/event.rb +4 -4
  470. data/lib/datadog/tracing/contrib/action_cable/events/broadcast.rb +9 -6
  471. data/lib/datadog/tracing/contrib/action_cable/events/perform_action.rb +8 -5
  472. data/lib/datadog/tracing/contrib/action_cable/events/transmit.rb +9 -6
  473. data/lib/datadog/tracing/contrib/action_cable/events.rb +5 -5
  474. data/lib/datadog/tracing/contrib/action_cable/ext.rb +18 -18
  475. data/lib/datadog/tracing/contrib/action_cable/instrumentation.rb +8 -5
  476. data/lib/datadog/tracing/contrib/action_cable/integration.rb +7 -7
  477. data/lib/datadog/tracing/contrib/action_cable/patcher.rb +4 -4
  478. data/lib/datadog/tracing/contrib/action_mailer/configuration/settings.rb +2 -2
  479. data/lib/datadog/tracing/contrib/action_mailer/event.rb +7 -4
  480. data/lib/datadog/tracing/contrib/action_mailer/events/deliver.rb +8 -8
  481. data/lib/datadog/tracing/contrib/action_mailer/events/process.rb +4 -4
  482. data/lib/datadog/tracing/contrib/action_mailer/events.rb +3 -3
  483. data/lib/datadog/tracing/contrib/action_mailer/ext.rb +18 -18
  484. data/lib/datadog/tracing/contrib/action_mailer/integration.rb +7 -7
  485. data/lib/datadog/tracing/contrib/action_mailer/patcher.rb +3 -3
  486. data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +15 -12
  487. data/lib/datadog/tracing/contrib/action_pack/action_controller/patcher.rb +2 -2
  488. data/lib/datadog/tracing/contrib/action_pack/action_dispatch/instrumentation.rb +31 -3
  489. data/lib/datadog/tracing/contrib/action_pack/action_dispatch/patcher.rb +5 -3
  490. data/lib/datadog/tracing/contrib/action_pack/configuration/settings.rb +3 -3
  491. data/lib/datadog/tracing/contrib/action_pack/ext.rb +10 -10
  492. data/lib/datadog/tracing/contrib/action_pack/integration.rb +7 -7
  493. data/lib/datadog/tracing/contrib/action_pack/patcher.rb +3 -3
  494. data/lib/datadog/tracing/contrib/action_pack/utils.rb +1 -1
  495. data/lib/datadog/tracing/contrib/action_view/configuration/settings.rb +3 -3
  496. data/lib/datadog/tracing/contrib/action_view/event.rb +1 -1
  497. data/lib/datadog/tracing/contrib/action_view/events/render_partial.rb +10 -7
  498. data/lib/datadog/tracing/contrib/action_view/events/render_template.rb +11 -8
  499. data/lib/datadog/tracing/contrib/action_view/events.rb +3 -3
  500. data/lib/datadog/tracing/contrib/action_view/ext.rb +10 -10
  501. data/lib/datadog/tracing/contrib/action_view/integration.rb +11 -11
  502. data/lib/datadog/tracing/contrib/action_view/patcher.rb +5 -5
  503. data/lib/datadog/tracing/contrib/action_view/utils.rb +2 -2
  504. data/lib/datadog/tracing/contrib/active_job/configuration/settings.rb +2 -2
  505. data/lib/datadog/tracing/contrib/active_job/data_streams.rb +62 -0
  506. data/lib/datadog/tracing/contrib/active_job/event.rb +3 -3
  507. data/lib/datadog/tracing/contrib/active_job/events/discard.rb +10 -7
  508. data/lib/datadog/tracing/contrib/active_job/events/enqueue.rb +10 -7
  509. data/lib/datadog/tracing/contrib/active_job/events/enqueue_at.rb +10 -7
  510. data/lib/datadog/tracing/contrib/active_job/events/enqueue_retry.rb +10 -7
  511. data/lib/datadog/tracing/contrib/active_job/events/perform.rb +10 -7
  512. data/lib/datadog/tracing/contrib/active_job/events/retry_stopped.rb +10 -7
  513. data/lib/datadog/tracing/contrib/active_job/events.rb +6 -6
  514. data/lib/datadog/tracing/contrib/active_job/ext.rb +23 -23
  515. data/lib/datadog/tracing/contrib/active_job/integration.rb +7 -7
  516. data/lib/datadog/tracing/contrib/active_job/patcher.rb +17 -5
  517. data/lib/datadog/tracing/contrib/active_model_serializers/configuration/settings.rb +2 -2
  518. data/lib/datadog/tracing/contrib/active_model_serializers/event.rb +4 -4
  519. data/lib/datadog/tracing/contrib/active_model_serializers/events/render.rb +7 -7
  520. data/lib/datadog/tracing/contrib/active_model_serializers/events/serialize.rb +8 -9
  521. data/lib/datadog/tracing/contrib/active_model_serializers/events.rb +3 -3
  522. data/lib/datadog/tracing/contrib/active_model_serializers/ext.rb +10 -10
  523. data/lib/datadog/tracing/contrib/active_model_serializers/integration.rb +5 -5
  524. data/lib/datadog/tracing/contrib/active_model_serializers/patcher.rb +3 -3
  525. data/lib/datadog/tracing/contrib/active_record/configuration/makara_resolver.rb +1 -1
  526. data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +9 -9
  527. data/lib/datadog/tracing/contrib/active_record/configuration/settings.rb +4 -4
  528. data/lib/datadog/tracing/contrib/active_record/event.rb +1 -1
  529. data/lib/datadog/tracing/contrib/active_record/events/instantiation.rb +9 -9
  530. data/lib/datadog/tracing/contrib/active_record/events/sql.rb +11 -14
  531. data/lib/datadog/tracing/contrib/active_record/events.rb +3 -3
  532. data/lib/datadog/tracing/contrib/active_record/ext.rb +15 -15
  533. data/lib/datadog/tracing/contrib/active_record/integration.rb +11 -11
  534. data/lib/datadog/tracing/contrib/active_record/patcher.rb +2 -2
  535. data/lib/datadog/tracing/contrib/active_record/utils.rb +4 -4
  536. data/lib/datadog/tracing/contrib/active_support/cache/event.rb +1 -1
  537. data/lib/datadog/tracing/contrib/active_support/cache/events/cache.rb +14 -17
  538. data/lib/datadog/tracing/contrib/active_support/cache/events.rb +1 -1
  539. data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +5 -8
  540. data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +5 -5
  541. data/lib/datadog/tracing/contrib/active_support/cache/redis.rb +4 -4
  542. data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +3 -3
  543. data/lib/datadog/tracing/contrib/active_support/ext.rb +16 -16
  544. data/lib/datadog/tracing/contrib/active_support/integration.rb +8 -8
  545. data/lib/datadog/tracing/contrib/active_support/notifications/event.rb +1 -1
  546. data/lib/datadog/tracing/contrib/active_support/notifications/subscriber.rb +2 -2
  547. data/lib/datadog/tracing/contrib/active_support/notifications/subscription.rb +3 -3
  548. data/lib/datadog/tracing/contrib/active_support/patcher.rb +2 -2
  549. data/lib/datadog/tracing/contrib/analytics.rb +1 -1
  550. data/lib/datadog/tracing/contrib/auto_instrument.rb +4 -4
  551. data/lib/datadog/tracing/contrib/aws/configuration/settings.rb +3 -3
  552. data/lib/datadog/tracing/contrib/aws/ext.rb +26 -26
  553. data/lib/datadog/tracing/contrib/aws/instrumentation.rb +7 -11
  554. data/lib/datadog/tracing/contrib/aws/integration.rb +9 -9
  555. data/lib/datadog/tracing/contrib/aws/parsed_context.rb +1 -1
  556. data/lib/datadog/tracing/contrib/aws/patcher.rb +5 -5
  557. data/lib/datadog/tracing/contrib/aws/service/dynamodb.rb +2 -2
  558. data/lib/datadog/tracing/contrib/aws/service/eventbridge.rb +2 -2
  559. data/lib/datadog/tracing/contrib/aws/service/kinesis.rb +4 -4
  560. data/lib/datadog/tracing/contrib/aws/service/s3.rb +2 -2
  561. data/lib/datadog/tracing/contrib/aws/service/sns.rb +3 -3
  562. data/lib/datadog/tracing/contrib/aws/service/sqs.rb +3 -3
  563. data/lib/datadog/tracing/contrib/aws/service/states.rb +5 -5
  564. data/lib/datadog/tracing/contrib/aws/services.rb +14 -14
  565. data/lib/datadog/tracing/contrib/component.rb +1 -1
  566. data/lib/datadog/tracing/contrib/concurrent_ruby/async_patch.rb +1 -1
  567. data/lib/datadog/tracing/contrib/concurrent_ruby/configuration/settings.rb +2 -2
  568. data/lib/datadog/tracing/contrib/concurrent_ruby/context_composite_executor_service.rb +1 -1
  569. data/lib/datadog/tracing/contrib/concurrent_ruby/ext.rb +2 -2
  570. data/lib/datadog/tracing/contrib/concurrent_ruby/future_patch.rb +1 -1
  571. data/lib/datadog/tracing/contrib/concurrent_ruby/integration.rb +6 -6
  572. data/lib/datadog/tracing/contrib/concurrent_ruby/patcher.rb +4 -4
  573. data/lib/datadog/tracing/contrib/concurrent_ruby/promises_future_patch.rb +1 -1
  574. data/lib/datadog/tracing/contrib/configurable.rb +20 -5
  575. data/lib/datadog/tracing/contrib/configuration/resolver.rb +14 -4
  576. data/lib/datadog/tracing/contrib/configuration/resolvers/pattern_resolver.rb +1 -1
  577. data/lib/datadog/tracing/contrib/configuration/settings.rb +2 -2
  578. data/lib/datadog/tracing/contrib/dalli/configuration/settings.rb +2 -2
  579. data/lib/datadog/tracing/contrib/dalli/ext.rb +13 -13
  580. data/lib/datadog/tracing/contrib/dalli/instrumentation.rb +6 -10
  581. data/lib/datadog/tracing/contrib/dalli/integration.rb +10 -7
  582. data/lib/datadog/tracing/contrib/dalli/patcher.rb +3 -3
  583. data/lib/datadog/tracing/contrib/dalli/quantize.rb +3 -3
  584. data/lib/datadog/tracing/contrib/delayed_job/configuration/settings.rb +2 -2
  585. data/lib/datadog/tracing/contrib/delayed_job/ext.rb +14 -14
  586. data/lib/datadog/tracing/contrib/delayed_job/integration.rb +5 -5
  587. data/lib/datadog/tracing/contrib/delayed_job/patcher.rb +3 -3
  588. data/lib/datadog/tracing/contrib/delayed_job/plugin.rb +7 -5
  589. data/lib/datadog/tracing/contrib/delayed_job/server_internal_tracer/worker.rb +1 -0
  590. data/lib/datadog/tracing/contrib/elasticsearch/configuration/settings.rb +2 -2
  591. data/lib/datadog/tracing/contrib/elasticsearch/ext.rb +15 -15
  592. data/lib/datadog/tracing/contrib/elasticsearch/integration.rb +6 -6
  593. data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +12 -16
  594. data/lib/datadog/tracing/contrib/elasticsearch/quantize.rb +4 -4
  595. data/lib/datadog/tracing/contrib/ethon/configuration/settings.rb +7 -3
  596. data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +9 -13
  597. data/lib/datadog/tracing/contrib/ethon/ext.rb +13 -12
  598. data/lib/datadog/tracing/contrib/ethon/integration.rb +6 -6
  599. data/lib/datadog/tracing/contrib/ethon/multi_patch.rb +4 -11
  600. data/lib/datadog/tracing/contrib/ethon/patcher.rb +3 -3
  601. data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +10 -7
  602. data/lib/datadog/tracing/contrib/excon/ext.rb +11 -10
  603. data/lib/datadog/tracing/contrib/excon/integration.rb +6 -6
  604. data/lib/datadog/tracing/contrib/excon/middleware.rb +10 -14
  605. data/lib/datadog/tracing/contrib/excon/patcher.rb +2 -2
  606. data/lib/datadog/tracing/contrib/ext.rb +20 -18
  607. data/lib/datadog/tracing/contrib/extensions.rb +11 -2
  608. data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +9 -6
  609. data/lib/datadog/tracing/contrib/faraday/ext.rb +11 -10
  610. data/lib/datadog/tracing/contrib/faraday/integration.rb +6 -6
  611. data/lib/datadog/tracing/contrib/faraday/middleware.rb +10 -14
  612. data/lib/datadog/tracing/contrib/faraday/patcher.rb +6 -6
  613. data/lib/datadog/tracing/contrib/grape/configuration/settings.rb +4 -4
  614. data/lib/datadog/tracing/contrib/grape/endpoint.rb +30 -27
  615. data/lib/datadog/tracing/contrib/grape/ext.rb +15 -15
  616. data/lib/datadog/tracing/contrib/grape/instrumentation.rb +15 -10
  617. data/lib/datadog/tracing/contrib/grape/integration.rb +5 -5
  618. data/lib/datadog/tracing/contrib/grape/patcher.rb +10 -5
  619. data/lib/datadog/tracing/contrib/graphql/configuration/error_extension_env_parser.rb +1 -1
  620. data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +3 -3
  621. data/lib/datadog/tracing/contrib/graphql/ext.rb +9 -9
  622. data/lib/datadog/tracing/contrib/graphql/integration.rb +9 -9
  623. data/lib/datadog/tracing/contrib/graphql/patcher.rb +7 -7
  624. data/lib/datadog/tracing/contrib/graphql/unified_trace.rb +38 -37
  625. data/lib/datadog/tracing/contrib/graphql/unified_trace_patcher.rb +2 -2
  626. data/lib/datadog/tracing/contrib/grpc/configuration/settings.rb +7 -4
  627. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +11 -15
  628. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +11 -15
  629. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor.rb +6 -6
  630. data/lib/datadog/tracing/contrib/grpc/distributed/fetcher.rb +1 -1
  631. data/lib/datadog/tracing/contrib/grpc/distributed/propagation.rb +11 -9
  632. data/lib/datadog/tracing/contrib/grpc/ext.rb +14 -13
  633. data/lib/datadog/tracing/contrib/grpc/formatting.rb +7 -7
  634. data/lib/datadog/tracing/contrib/grpc/integration.rb +5 -5
  635. data/lib/datadog/tracing/contrib/grpc/intercept_with_datadog.rb +1 -1
  636. data/lib/datadog/tracing/contrib/grpc/patcher.rb +3 -3
  637. data/lib/datadog/tracing/contrib/grpc.rb +7 -6
  638. data/lib/datadog/tracing/contrib/hanami/action_tracer.rb +4 -3
  639. data/lib/datadog/tracing/contrib/hanami/configuration/settings.rb +2 -2
  640. data/lib/datadog/tracing/contrib/hanami/ext.rb +8 -8
  641. data/lib/datadog/tracing/contrib/hanami/integration.rb +6 -6
  642. data/lib/datadog/tracing/contrib/hanami/patcher.rb +5 -5
  643. data/lib/datadog/tracing/contrib/hanami/renderer_policy_tracing.rb +4 -3
  644. data/lib/datadog/tracing/contrib/hanami/router_tracing.rb +6 -4
  645. data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +1 -1
  646. data/lib/datadog/tracing/contrib/http/configuration/settings.rb +9 -6
  647. data/lib/datadog/tracing/contrib/http/distributed/fetcher.rb +3 -3
  648. data/lib/datadog/tracing/contrib/http/distributed/propagation.rb +10 -8
  649. data/lib/datadog/tracing/contrib/http/ext.rb +11 -10
  650. data/lib/datadog/tracing/contrib/http/instrumentation.rb +10 -14
  651. data/lib/datadog/tracing/contrib/http/integration.rb +7 -9
  652. data/lib/datadog/tracing/contrib/http/patcher.rb +3 -3
  653. data/lib/datadog/tracing/contrib/http.rb +7 -6
  654. data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +9 -6
  655. data/lib/datadog/tracing/contrib/httpclient/ext.rb +11 -10
  656. data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +12 -12
  657. data/lib/datadog/tracing/contrib/httpclient/integration.rb +6 -6
  658. data/lib/datadog/tracing/contrib/httpclient/patcher.rb +3 -3
  659. data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +9 -6
  660. data/lib/datadog/tracing/contrib/httprb/ext.rb +11 -10
  661. data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +10 -14
  662. data/lib/datadog/tracing/contrib/httprb/integration.rb +7 -7
  663. data/lib/datadog/tracing/contrib/httprb/patcher.rb +3 -3
  664. data/lib/datadog/tracing/contrib/integration.rb +3 -3
  665. data/lib/datadog/tracing/contrib/kafka/configuration/settings.rb +2 -2
  666. data/lib/datadog/tracing/contrib/kafka/event.rb +4 -3
  667. data/lib/datadog/tracing/contrib/kafka/events/connection/request.rb +7 -3
  668. data/lib/datadog/tracing/contrib/kafka/events/consumer/process_batch.rb +4 -4
  669. data/lib/datadog/tracing/contrib/kafka/events/consumer/process_message.rb +4 -4
  670. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/heartbeat.rb +5 -5
  671. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/join_group.rb +5 -5
  672. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/leave_group.rb +5 -5
  673. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/sync_group.rb +5 -5
  674. data/lib/datadog/tracing/contrib/kafka/events/produce_operation/send_messages.rb +10 -5
  675. data/lib/datadog/tracing/contrib/kafka/events/producer/deliver_messages.rb +10 -5
  676. data/lib/datadog/tracing/contrib/kafka/events.rb +10 -10
  677. data/lib/datadog/tracing/contrib/kafka/ext.rb +40 -40
  678. data/lib/datadog/tracing/contrib/kafka/instrumentation/consumer.rb +4 -4
  679. data/lib/datadog/tracing/contrib/kafka/instrumentation/producer.rb +6 -6
  680. data/lib/datadog/tracing/contrib/kafka/integration.rb +6 -6
  681. data/lib/datadog/tracing/contrib/kafka/patcher.rb +5 -5
  682. data/lib/datadog/tracing/contrib/karafka/configuration/settings.rb +7 -3
  683. data/lib/datadog/tracing/contrib/karafka/distributed/propagation.rb +11 -9
  684. data/lib/datadog/tracing/contrib/karafka/ext.rb +13 -12
  685. data/lib/datadog/tracing/contrib/karafka/integration.rb +5 -5
  686. data/lib/datadog/tracing/contrib/karafka/monitor.rb +14 -14
  687. data/lib/datadog/tracing/contrib/karafka/patcher.rb +9 -9
  688. data/lib/datadog/tracing/contrib/karafka.rb +7 -6
  689. data/lib/datadog/tracing/contrib/lograge/configuration/settings.rb +2 -2
  690. data/lib/datadog/tracing/contrib/lograge/ext.rb +1 -1
  691. data/lib/datadog/tracing/contrib/lograge/integration.rb +5 -5
  692. data/lib/datadog/tracing/contrib/lograge/patcher.rb +9 -9
  693. data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +2 -2
  694. data/lib/datadog/tracing/contrib/mongodb/ext.rb +18 -18
  695. data/lib/datadog/tracing/contrib/mongodb/instrumentation.rb +3 -3
  696. data/lib/datadog/tracing/contrib/mongodb/integration.rb +7 -7
  697. data/lib/datadog/tracing/contrib/mongodb/parsers.rb +9 -9
  698. data/lib/datadog/tracing/contrib/mongodb/patcher.rb +3 -3
  699. data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +18 -21
  700. data/lib/datadog/tracing/contrib/mysql2/configuration/settings.rb +9 -3
  701. data/lib/datadog/tracing/contrib/mysql2/ext.rb +11 -11
  702. data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +9 -12
  703. data/lib/datadog/tracing/contrib/mysql2/integration.rb +5 -5
  704. data/lib/datadog/tracing/contrib/mysql2/patcher.rb +2 -2
  705. data/lib/datadog/tracing/contrib/opensearch/configuration/settings.rb +2 -2
  706. data/lib/datadog/tracing/contrib/opensearch/ext.rb +23 -23
  707. data/lib/datadog/tracing/contrib/opensearch/integration.rb +6 -6
  708. data/lib/datadog/tracing/contrib/opensearch/patcher.rb +15 -19
  709. data/lib/datadog/tracing/contrib/opensearch/quantize.rb +5 -5
  710. data/lib/datadog/tracing/contrib/patchable.rb +1 -1
  711. data/lib/datadog/tracing/contrib/patcher.rb +3 -3
  712. data/lib/datadog/tracing/contrib/pg/configuration/settings.rb +9 -3
  713. data/lib/datadog/tracing/contrib/pg/ext.rb +19 -19
  714. data/lib/datadog/tracing/contrib/pg/instrumentation.rb +21 -24
  715. data/lib/datadog/tracing/contrib/pg/integration.rb +5 -5
  716. data/lib/datadog/tracing/contrib/pg/patcher.rb +2 -2
  717. data/lib/datadog/tracing/contrib/presto/configuration/settings.rb +2 -2
  718. data/lib/datadog/tracing/contrib/presto/ext.rb +21 -21
  719. data/lib/datadog/tracing/contrib/presto/instrumentation.rb +8 -10
  720. data/lib/datadog/tracing/contrib/presto/integration.rb +6 -6
  721. data/lib/datadog/tracing/contrib/presto/patcher.rb +4 -4
  722. data/lib/datadog/tracing/contrib/propagation/sql_comment/comment.rb +2 -2
  723. data/lib/datadog/tracing/contrib/propagation/sql_comment/ext.rb +26 -13
  724. data/lib/datadog/tracing/contrib/propagation/sql_comment/mode.rb +7 -3
  725. data/lib/datadog/tracing/contrib/propagation/sql_comment.rb +29 -5
  726. data/lib/datadog/tracing/contrib/que/configuration/settings.rb +7 -4
  727. data/lib/datadog/tracing/contrib/que/ext.rb +19 -18
  728. data/lib/datadog/tracing/contrib/que/integration.rb +6 -6
  729. data/lib/datadog/tracing/contrib/que/patcher.rb +1 -1
  730. data/lib/datadog/tracing/contrib/que/tracer.rb +3 -2
  731. data/lib/datadog/tracing/contrib/racecar/configuration/settings.rb +3 -3
  732. data/lib/datadog/tracing/contrib/racecar/event.rb +5 -9
  733. data/lib/datadog/tracing/contrib/racecar/events/batch.rb +3 -3
  734. data/lib/datadog/tracing/contrib/racecar/events/consume.rb +3 -3
  735. data/lib/datadog/tracing/contrib/racecar/events/message.rb +3 -3
  736. data/lib/datadog/tracing/contrib/racecar/events.rb +4 -4
  737. data/lib/datadog/tracing/contrib/racecar/ext.rb +18 -18
  738. data/lib/datadog/tracing/contrib/racecar/integration.rb +5 -5
  739. data/lib/datadog/tracing/contrib/racecar/patcher.rb +3 -3
  740. data/lib/datadog/tracing/contrib/rack/configuration/settings.rb +14 -4
  741. data/lib/datadog/tracing/contrib/rack/ext.rb +43 -15
  742. data/lib/datadog/tracing/contrib/rack/header_collection.rb +3 -3
  743. data/lib/datadog/tracing/contrib/rack/header_tagging.rb +24 -1
  744. data/lib/datadog/tracing/contrib/rack/integration.rb +6 -6
  745. data/lib/datadog/tracing/contrib/rack/middlewares.rb +28 -25
  746. data/lib/datadog/tracing/contrib/rack/patcher.rb +5 -5
  747. data/lib/datadog/tracing/contrib/rack/request_queue.rb +4 -4
  748. data/lib/datadog/tracing/contrib/rack/route_inference.rb +27 -13
  749. data/lib/datadog/tracing/contrib/rack/trace_proxy_middleware.rb +124 -6
  750. data/lib/datadog/tracing/contrib/rails/auto_instrument_railtie.rb +1 -1
  751. data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +8 -5
  752. data/lib/datadog/tracing/contrib/rails/ext.rb +15 -14
  753. data/lib/datadog/tracing/contrib/rails/framework.rb +11 -11
  754. data/lib/datadog/tracing/contrib/rails/integration.rb +5 -5
  755. data/lib/datadog/tracing/contrib/rails/log_injection.rb +1 -1
  756. data/lib/datadog/tracing/contrib/rails/middlewares.rb +1 -1
  757. data/lib/datadog/tracing/contrib/rails/patcher.rb +8 -9
  758. data/lib/datadog/tracing/contrib/rails/railtie.rb +4 -4
  759. data/lib/datadog/tracing/contrib/rails/runner.rb +4 -2
  760. data/lib/datadog/tracing/contrib/rake/configuration/settings.rb +3 -3
  761. data/lib/datadog/tracing/contrib/rake/ext.rb +12 -12
  762. data/lib/datadog/tracing/contrib/rake/instrumentation.rb +9 -7
  763. data/lib/datadog/tracing/contrib/rake/integration.rb +5 -5
  764. data/lib/datadog/tracing/contrib/rake/patcher.rb +3 -3
  765. data/lib/datadog/tracing/contrib/redis/configuration/resolver.rb +3 -3
  766. data/lib/datadog/tracing/contrib/redis/configuration/settings.rb +2 -2
  767. data/lib/datadog/tracing/contrib/redis/ext.rb +16 -16
  768. data/lib/datadog/tracing/contrib/redis/instrumentation.rb +6 -6
  769. data/lib/datadog/tracing/contrib/redis/integration.rb +7 -7
  770. data/lib/datadog/tracing/contrib/redis/patcher.rb +10 -10
  771. data/lib/datadog/tracing/contrib/redis/quantize.rb +40 -6
  772. data/lib/datadog/tracing/contrib/redis/tags.rb +6 -11
  773. data/lib/datadog/tracing/contrib/redis/trace_middleware.rb +16 -8
  774. data/lib/datadog/tracing/contrib/registerable.rb +11 -0
  775. data/lib/datadog/tracing/contrib/resque/configuration/settings.rb +2 -2
  776. data/lib/datadog/tracing/contrib/resque/ext.rb +7 -7
  777. data/lib/datadog/tracing/contrib/resque/integration.rb +5 -5
  778. data/lib/datadog/tracing/contrib/resque/patcher.rb +3 -3
  779. data/lib/datadog/tracing/contrib/resque/resque_job.rb +6 -5
  780. data/lib/datadog/tracing/contrib/rest_client/configuration/settings.rb +7 -4
  781. data/lib/datadog/tracing/contrib/rest_client/ext.rb +10 -9
  782. data/lib/datadog/tracing/contrib/rest_client/integration.rb +6 -6
  783. data/lib/datadog/tracing/contrib/rest_client/patcher.rb +2 -2
  784. data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +6 -10
  785. data/lib/datadog/tracing/contrib/roda/configuration/settings.rb +2 -2
  786. data/lib/datadog/tracing/contrib/roda/ext.rb +6 -5
  787. data/lib/datadog/tracing/contrib/roda/instrumentation.rb +8 -5
  788. data/lib/datadog/tracing/contrib/roda/integration.rb +6 -6
  789. data/lib/datadog/tracing/contrib/roda/patcher.rb +3 -3
  790. data/lib/datadog/tracing/contrib/semantic_logger/configuration/settings.rb +2 -2
  791. data/lib/datadog/tracing/contrib/semantic_logger/ext.rb +1 -1
  792. data/lib/datadog/tracing/contrib/semantic_logger/integration.rb +5 -5
  793. data/lib/datadog/tracing/contrib/semantic_logger/patcher.rb +2 -2
  794. data/lib/datadog/tracing/contrib/sequel/configuration/settings.rb +2 -2
  795. data/lib/datadog/tracing/contrib/sequel/database.rb +7 -10
  796. data/lib/datadog/tracing/contrib/sequel/dataset.rb +6 -5
  797. data/lib/datadog/tracing/contrib/sequel/ext.rb +12 -8
  798. data/lib/datadog/tracing/contrib/sequel/integration.rb +5 -5
  799. data/lib/datadog/tracing/contrib/sequel/patcher.rb +3 -3
  800. data/lib/datadog/tracing/contrib/sequel/utils.rb +116 -16
  801. data/lib/datadog/tracing/contrib/shoryuken/configuration/settings.rb +2 -2
  802. data/lib/datadog/tracing/contrib/shoryuken/ext.rb +12 -12
  803. data/lib/datadog/tracing/contrib/shoryuken/integration.rb +6 -6
  804. data/lib/datadog/tracing/contrib/shoryuken/patcher.rb +1 -1
  805. data/lib/datadog/tracing/contrib/shoryuken/tracer.rb +3 -2
  806. data/lib/datadog/tracing/contrib/sidekiq/client_tracer.rb +9 -8
  807. data/lib/datadog/tracing/contrib/sidekiq/configuration/settings.rb +7 -3
  808. data/lib/datadog/tracing/contrib/sidekiq/distributed/propagation.rb +12 -10
  809. data/lib/datadog/tracing/contrib/sidekiq/ext.rb +30 -29
  810. data/lib/datadog/tracing/contrib/sidekiq/integration.rb +7 -7
  811. data/lib/datadog/tracing/contrib/sidekiq/patcher.rb +8 -8
  812. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/heartbeat.rb +2 -0
  813. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/job_fetch.rb +1 -0
  814. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/redis_info.rb +1 -0
  815. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/scheduled_poller.rb +2 -0
  816. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/stop.rb +1 -0
  817. data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +15 -14
  818. data/lib/datadog/tracing/contrib/sidekiq/utils.rb +10 -10
  819. data/lib/datadog/tracing/contrib/sidekiq.rb +7 -6
  820. data/lib/datadog/tracing/contrib/sinatra/configuration/settings.rb +8 -4
  821. data/lib/datadog/tracing/contrib/sinatra/env.rb +6 -6
  822. data/lib/datadog/tracing/contrib/sinatra/ext.rb +17 -16
  823. data/lib/datadog/tracing/contrib/sinatra/framework.rb +2 -2
  824. data/lib/datadog/tracing/contrib/sinatra/integration.rb +5 -5
  825. data/lib/datadog/tracing/contrib/sinatra/patcher.rb +5 -5
  826. data/lib/datadog/tracing/contrib/sinatra/tracer.rb +11 -10
  827. data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +9 -8
  828. data/lib/datadog/tracing/contrib/sneakers/configuration/settings.rb +1 -1
  829. data/lib/datadog/tracing/contrib/sneakers/ext.rb +12 -12
  830. data/lib/datadog/tracing/contrib/sneakers/integration.rb +19 -8
  831. data/lib/datadog/tracing/contrib/sneakers/patcher.rb +2 -2
  832. data/lib/datadog/tracing/contrib/sneakers/tracer.rb +5 -4
  833. data/lib/datadog/tracing/contrib/span_attribute_schema.rb +2 -2
  834. data/lib/datadog/tracing/contrib/status_range_env_parser.rb +2 -2
  835. data/lib/datadog/tracing/contrib/status_range_matcher.rb +4 -0
  836. data/lib/datadog/tracing/contrib/stripe/configuration/settings.rb +2 -2
  837. data/lib/datadog/tracing/contrib/stripe/ext.rb +12 -12
  838. data/lib/datadog/tracing/contrib/stripe/integration.rb +5 -5
  839. data/lib/datadog/tracing/contrib/stripe/patcher.rb +2 -2
  840. data/lib/datadog/tracing/contrib/stripe/request.rb +4 -4
  841. data/lib/datadog/tracing/contrib/sucker_punch/configuration/settings.rb +2 -2
  842. data/lib/datadog/tracing/contrib/sucker_punch/exception_handler.rb +1 -1
  843. data/lib/datadog/tracing/contrib/sucker_punch/ext.rb +13 -13
  844. data/lib/datadog/tracing/contrib/sucker_punch/instrumentation.rb +5 -4
  845. data/lib/datadog/tracing/contrib/sucker_punch/integration.rb +5 -5
  846. data/lib/datadog/tracing/contrib/sucker_punch/patcher.rb +4 -4
  847. data/lib/datadog/tracing/contrib/trilogy/configuration/settings.rb +9 -3
  848. data/lib/datadog/tracing/contrib/trilogy/ext.rb +11 -11
  849. data/lib/datadog/tracing/contrib/trilogy/instrumentation.rb +10 -12
  850. data/lib/datadog/tracing/contrib/trilogy/integration.rb +5 -5
  851. data/lib/datadog/tracing/contrib/trilogy/patcher.rb +2 -2
  852. data/lib/datadog/tracing/contrib/utils/database.rb +5 -5
  853. data/lib/datadog/tracing/contrib/utils/quantization/{hash.rb → hash_formatter.rb} +3 -3
  854. data/lib/datadog/tracing/contrib/utils/quantization/http.rb +10 -10
  855. data/lib/datadog/tracing/contrib/waterdrop/configuration/settings.rb +7 -3
  856. data/lib/datadog/tracing/contrib/waterdrop/distributed/propagation.rb +11 -9
  857. data/lib/datadog/tracing/contrib/waterdrop/ext.rb +4 -3
  858. data/lib/datadog/tracing/contrib/waterdrop/integration.rb +5 -5
  859. data/lib/datadog/tracing/contrib/waterdrop/middleware.rb +2 -2
  860. data/lib/datadog/tracing/contrib/waterdrop/patcher.rb +7 -7
  861. data/lib/datadog/tracing/contrib/waterdrop/producer.rb +3 -3
  862. data/lib/datadog/tracing/contrib/waterdrop.rb +7 -6
  863. data/lib/datadog/tracing/contrib.rb +62 -54
  864. data/lib/datadog/tracing/correlation.rb +12 -12
  865. data/lib/datadog/tracing/diagnostics/environment_logger.rb +14 -12
  866. data/lib/datadog/tracing/diagnostics/ext.rb +19 -19
  867. data/lib/datadog/tracing/diagnostics/health.rb +1 -1
  868. data/lib/datadog/tracing/distributed/b3_multi.rb +8 -8
  869. data/lib/datadog/tracing/distributed/b3_single.rb +4 -4
  870. data/lib/datadog/tracing/distributed/baggage.rb +82 -28
  871. data/lib/datadog/tracing/distributed/datadog.rb +32 -30
  872. data/lib/datadog/tracing/distributed/datadog_tags_codec.rb +4 -17
  873. data/lib/datadog/tracing/distributed/fetcher.rb +1 -1
  874. data/lib/datadog/tracing/distributed/helpers.rb +3 -3
  875. data/lib/datadog/tracing/distributed/propagation.rb +43 -11
  876. data/lib/datadog/tracing/distributed/propagation_policy.rb +5 -0
  877. data/lib/datadog/tracing/distributed/trace_context.rb +108 -85
  878. data/lib/datadog/tracing/event.rb +2 -2
  879. data/lib/datadog/tracing/ext.rb +9 -0
  880. data/lib/datadog/tracing/metadata/analytics.rb +2 -2
  881. data/lib/datadog/tracing/metadata/errors.rb +4 -4
  882. data/lib/datadog/tracing/metadata/ext.rb +79 -65
  883. data/lib/datadog/tracing/metadata/metastruct.rb +1 -1
  884. data/lib/datadog/tracing/metadata/metastruct_tagging.rb +1 -1
  885. data/lib/datadog/tracing/metadata/tagging.rb +5 -5
  886. data/lib/datadog/tracing/metadata.rb +4 -4
  887. data/lib/datadog/tracing/pipeline/span_filter.rb +2 -2
  888. data/lib/datadog/tracing/pipeline.rb +3 -3
  889. data/lib/datadog/tracing/remote.rb +48 -10
  890. data/lib/datadog/tracing/sampling/all_sampler.rb +1 -1
  891. data/lib/datadog/tracing/sampling/ext.rb +9 -7
  892. data/lib/datadog/tracing/sampling/matcher.rb +4 -4
  893. data/lib/datadog/tracing/sampling/priority_sampler.rb +17 -4
  894. data/lib/datadog/tracing/sampling/rate_by_key_sampler.rb +3 -3
  895. data/lib/datadog/tracing/sampling/rate_by_service_sampler.rb +2 -2
  896. data/lib/datadog/tracing/sampling/rate_sampler.rb +2 -2
  897. data/lib/datadog/tracing/sampling/rule.rb +5 -5
  898. data/lib/datadog/tracing/sampling/rule_sampler.rb +66 -37
  899. data/lib/datadog/tracing/sampling/sampler.rb +2 -2
  900. data/lib/datadog/tracing/sampling/span/ext.rb +3 -3
  901. data/lib/datadog/tracing/sampling/span/matcher.rb +2 -2
  902. data/lib/datadog/tracing/sampling/span/rule.rb +1 -1
  903. data/lib/datadog/tracing/sampling/span/rule_parser.rb +10 -10
  904. data/lib/datadog/tracing/span.rb +9 -9
  905. data/lib/datadog/tracing/span_event.rb +5 -5
  906. data/lib/datadog/tracing/span_operation.rb +39 -26
  907. data/lib/datadog/tracing/sync_writer.rb +12 -8
  908. data/lib/datadog/tracing/trace_digest.rb +7 -0
  909. data/lib/datadog/tracing/trace_operation.rb +90 -21
  910. data/lib/datadog/tracing/trace_segment.rb +10 -10
  911. data/lib/datadog/tracing/tracer.rb +63 -22
  912. data/lib/datadog/tracing/transport/http/client.rb +4 -4
  913. data/lib/datadog/tracing/transport/http/statistics.rb +2 -2
  914. data/lib/datadog/tracing/transport/http/traces.rb +8 -8
  915. data/lib/datadog/tracing/transport/http.rb +10 -10
  916. data/lib/datadog/tracing/transport/io/client.rb +8 -11
  917. data/lib/datadog/tracing/transport/io/response.rb +1 -1
  918. data/lib/datadog/tracing/transport/io/traces.rb +33 -39
  919. data/lib/datadog/tracing/transport/io.rb +3 -3
  920. data/lib/datadog/tracing/transport/native/response.rb +71 -0
  921. data/lib/datadog/tracing/transport/native.rb +387 -0
  922. data/lib/datadog/tracing/transport/serializable_trace.rb +19 -19
  923. data/lib/datadog/tracing/transport/statistics.rb +2 -2
  924. data/lib/datadog/tracing/transport/trace_formatter.rb +20 -9
  925. data/lib/datadog/tracing/transport/traces.rb +13 -19
  926. data/lib/datadog/tracing/utils.rb +2 -2
  927. data/lib/datadog/tracing/workers.rb +4 -3
  928. data/lib/datadog/tracing/writer.rb +22 -10
  929. data/lib/datadog/tracing.rb +3 -3
  930. data/lib/datadog/version.rb +4 -4
  931. data/lib/datadog.rb +15 -11
  932. metadata +91 -23
  933. data/ext/datadog_profiling_native_extension/clock_id_noop.c +0 -21
  934. data/lib/datadog/ai_guard/configuration/settings.rb +0 -110
  935. data/lib/datadog/appsec/configuration/settings.rb +0 -409
  936. data/lib/datadog/appsec/contrib/rails/ext.rb +0 -13
  937. data/lib/datadog/core/utils/base64.rb +0 -22
  938. data/lib/datadog/data_streams/configuration/settings.rb +0 -49
  939. data/lib/datadog/di/configuration/settings.rb +0 -234
  940. data/lib/datadog/error_tracking/configuration/settings.rb +0 -63
  941. data/lib/datadog/tracing/workers/trace_writer.rb +0 -204
@@ -0,0 +1,68 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../../ruby_version"
4
+
5
+ module Datadog
6
+ module Core
7
+ module Utils
8
+ # Applies the Process.spawn wrapper used to merge additional environment variables
9
+ # into child processes.
10
+ module SpawnMonkeyPatch
11
+ # @param env_provider [#call] returns a Hash of env vars to merge into the child process
12
+ def self.apply!(env_provider:)
13
+ @env_provider = env_provider
14
+
15
+ # Idempotent: tests, reloads, or repeated Components init must not stack prepends.
16
+ return if ::Process.singleton_class.ancestors.include?(ProcessSpawnPatch)
17
+
18
+ ::Process.singleton_class.prepend(ProcessSpawnPatch)
19
+ end
20
+
21
+ # Prepends `Process.spawn` to merge `env_provider` output into the child's environment hash.
22
+ module ProcessSpawnPatch
23
+ # The One and Only Correct Delegation Pattern
24
+ if RubyVersion.is?(">= 3")
25
+ def spawn(*args, **kwargs) # steep:ignore DifferentMethodParameterKind
26
+ super(*SpawnMonkeyPatch.inject_envs(args), **kwargs)
27
+ end
28
+ else
29
+ def spawn(*args)
30
+ super(*SpawnMonkeyPatch.inject_envs(args))
31
+ end
32
+ ruby2_keywords :spawn if respond_to?(:ruby2_keywords, true)
33
+ end
34
+ end
35
+
36
+ # Merge the env vars from `env_provider` with the optional env `Hash` from {Process.spawn}.
37
+ #
38
+ # `env` is the first argument when it is a {Hash}; see MRI `spawn([env, ] *args, options)`:
39
+ # https://docs.ruby-lang.org/en/master/Process.html#method-c-spawn
40
+ #
41
+ # When there is **no** leading env Hash, MRI inherits the parent's `ENV`; we prepend only the
42
+ # `env_provider` hash so spawned children see parent env plus injections.
43
+ #
44
+ # When callers pass `unsetenv_others: true`, MRI only forwards the explicitly passed env Hash;
45
+ # replacing a missing hash with DATADOG_ENV.to_h would wrongly carry over parent variables.
46
+ # Prepending only the provider hash preserves `unsetenv_others` semantics.
47
+ #
48
+ # See https://docs.ruby-lang.org/en/master/Process.html#module-Process-label-Environment+Variables+-28-3Aunsetenv_others-29
49
+ #
50
+ # NOTE: `::Hash` (not bare `Hash`) is required because this module is nested under
51
+ # `Datadog::Core::Utils`, and `Datadog::Core::Utils::Hash` exists.
52
+ # Bare `Hash` resolves to that module via Module.nesting, making `Hash === some_hash`
53
+ # silently return `false`. See https://github.com/DataDog/dd-trace-rb/issues/5621.
54
+ def self.inject_envs(args)
55
+ provided_env = @env_provider.call
56
+
57
+ if ::Hash === args.first
58
+ args[0] = args.first.merge(provided_env)
59
+ else
60
+ args.unshift(provided_env)
61
+ end
62
+
63
+ args
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
@@ -5,75 +5,41 @@ module Datadog
5
5
  module Utils
6
6
  # Common database-related utility functions.
7
7
  module Time
8
- module_function
8
+ # timecop monkey-patches Time.now, Process.clock_gettime, etc:
9
+ # https://github.com/travisjeffery/timecop/blob/v0.9.11/lib/timecop/time_extensions.rb
10
+ # It keeps the original methods as aliases.
11
+ # We want the real not-mocked time here, so we use those aliases to the original method if present.
12
+ # If not present we assume these methods have not been monkey-patched and are the original.
13
+
14
+ original_clock_gettime_name = Process.respond_to?(:clock_gettime_without_mock) ? :clock_gettime_without_mock : :clock_gettime
15
+ define_singleton_method(:original_clock_gettime, &Process.method(original_clock_gettime_name))
16
+
17
+ MONOTONIC_CLOCK_ID = RUBY_PLATFORM.include?("darwin") ? Process::CLOCK_MONOTONIC_RAW : Process::CLOCK_MONOTONIC
9
18
 
10
19
  # Current monotonic time
20
+ # On macOS, CLOCK_MONOTONIC only has microsecond precision,
21
+ # so we use CLOCK_MONOTONIC_RAW which has nanosecond precision instead.
11
22
  #
12
23
  # @param unit [Symbol] unit for the resulting value, same as ::Process#clock_gettime, defaults to :float_second
13
24
  # @return [Float|Integer] timestamp in the requested unit, since some unspecified starting point
14
- def get_time(unit = :float_second)
15
- Process.clock_gettime(Process::CLOCK_MONOTONIC, unit)
25
+ def self.get_time(unit = :float_second)
26
+ original_clock_gettime(MONOTONIC_CLOCK_ID, unit)
16
27
  end
17
28
 
18
29
  # Current wall time.
19
30
  #
20
31
  # @return [Time] current time object
21
- def now
22
- ::Time.now
23
- end
24
-
25
- # Overrides the implementation of `#now
26
- # with the provided callable.
27
- #
28
- # Overriding the method `#now` instead of
29
- # indirectly calling `block` removes
30
- # one level of method call overhead.
31
- #
32
- # @param block [Proc] block that returns a `Time` object representing the current wall time
33
- def now_provider=(block)
34
- class << self
35
- # Avoid method redefinition warning.
36
- # `rescue nil` is added in case customers remove the method
37
- # themselves to squelch the warning.
38
- begin
39
- remove_method(:now)
40
- rescue
41
- nil
42
- end
43
- end
44
- define_singleton_method(:now, &block)
45
- end
46
-
47
- # Overrides the implementation of `#get_time
48
- # with the provided callable.
49
- #
50
- # Overriding the method `#get_time` instead of
51
- # indirectly calling `block` removes
52
- # one level of method call overhead.
53
- #
54
- # @param block [Proc] block that accepts unit and returns timestamp in the requested unit
55
- def get_time_provider=(block)
56
- class << self
57
- # Avoid method redefinition warning
58
- # `rescue nil` is added in case customers remove the method
59
- # themselves to squelch the warning.
60
- begin
61
- remove_method(:get_time)
62
- rescue
63
- nil
64
- end
65
- end
66
- define_singleton_method(:get_time, &block)
67
- end
32
+ original_time_now_name = ::Time.respond_to?(:now_without_mock_time) ? :now_without_mock_time : :now
33
+ define_singleton_method(:now, &::Time.method(original_time_now_name))
68
34
 
69
- def measure(unit = :float_second)
35
+ def self.measure(unit = :float_second)
70
36
  before = get_time(unit)
71
37
  yield
72
38
  after = get_time(unit)
73
39
  after - before
74
40
  end
75
41
 
76
- def as_utc_epoch_ns(time)
42
+ def self.as_utc_epoch_ns(time)
77
43
  # we use #to_r instead of #to_f because Float doesn't have enough precision to represent exact nanoseconds, see
78
44
  # https://rubyapi.org/3.0/o/time#method-i-to_f
79
45
  (time.to_r * 1_000_000_000).to_i
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'uri'
3
+ require "uri"
4
4
 
5
5
  module Datadog
6
6
  module Core
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'utils/forking'
3
+ require_relative "utils/forking"
4
4
 
5
5
  module Datadog
6
6
  module Core
@@ -9,7 +9,7 @@ module Datadog
9
9
  module Utils
10
10
  extend Forking
11
11
 
12
- EMPTY_STRING = ''.encode(::Encoding::UTF_8).freeze
12
+ EMPTY_STRING = "".encode(::Encoding::UTF_8).freeze
13
13
 
14
14
  # Stringifies `value` and ensures the outcome is
15
15
  # string is no longer than `size`.
@@ -20,7 +20,7 @@ module Datadog
20
20
  # If `omission.size` is larger than `size`, the output
21
21
  # will still be `omission.size` in length.
22
22
  # @!visibility private
23
- def self.truncate(value, size, omission = '...')
23
+ def self.truncate(value, size, omission = "...")
24
24
  string = value.to_s
25
25
 
26
26
  return string if string.size <= size
@@ -52,7 +52,7 @@ module Datadog
52
52
  if binary
53
53
  # This option is useful for "gracefully" displaying binary data that
54
54
  # often contains text such as marshalled objects
55
- str.encode('UTF-8', 'binary', invalid: :replace, undef: :replace, replace: '')
55
+ str.encode("UTF-8", "binary", invalid: :replace, undef: :replace, replace: "")
56
56
  elsif str.encoding == ::Encoding::UTF_8
57
57
  str
58
58
  elsif str.empty?
@@ -63,7 +63,7 @@ module Datadog
63
63
  str.encode(::Encoding::UTF_8)
64
64
  end
65
65
  rescue => e
66
- Datadog.logger.debug("Error encoding string in UTF-8: #{e}")
66
+ Datadog.logger.debug("Error encoding string in UTF-8: #{e.class}: #{e.message}")
67
67
 
68
68
  placeholder
69
69
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../logger'
3
+ require_relative "../logger"
4
4
 
5
5
  module Datadog
6
6
  module Core
@@ -168,7 +168,7 @@ module Datadog
168
168
  rescue Exception => e
169
169
  @error = e
170
170
  Datadog.logger.debug(
171
- "Worker thread error. Cause: #{e.class.name} #{e.message} Location: #{Array(e.backtrace).first}"
171
+ "Worker thread error. Cause: #{e.class}: #{e.message} Location: #{Array(e.backtrace).first}"
172
172
  )
173
173
  raise
174
174
 
@@ -70,16 +70,23 @@ module Datadog
70
70
  true
71
71
  end
72
72
 
73
- # TODO This overwrites Queue's +work_pending?+ method with an
74
- # implementation that, to me, is at leat questionable semantically:
75
- # the Queue's idea of pending work is if the buffer is not empty,
76
- # but this module says that work is pending if the work processing
77
- # loop is scheduled to run (in other words, as long as the background
78
- # thread is running, there is always pending work).
73
+ # TODO: This method carries two semantics today:
74
+ # 1. Is there work available to process?
75
+ # 2. Should the main loop keep running?
76
+ # Things get messy when `Queue` is mixed in,
77
+ # wanting to override semantic 1 but not 2.
78
+ # This should probably be split into two methods:
79
+ # `work_pending?` (semantic 1) and `continue_loop?` (semantic 2).
80
+ # Today, `run_loop?` performs semantic 2, but should probably be
81
+ # renamed to `continue_loop?`, since that would make it clear that
82
+ # we're just checking if we can "keep going inside the loop",
83
+ # and not checking if we should run the loop right now.
84
+ # Clean up {Workers::Queue} after this.
79
85
  def work_pending?
80
86
  run_loop?
81
87
  end
82
88
 
89
+ # TODO: Probably should be renamed to `continue_loop?`, see `work_pending?` TODO.
83
90
  def run_loop?
84
91
  return false unless instance_variable_defined?(:@run_loop)
85
92
 
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'async'
4
- require_relative 'interval_loop'
3
+ require_relative "async"
4
+ require_relative "interval_loop"
5
5
 
6
6
  module Datadog
7
7
  module Core
@@ -130,10 +130,6 @@ module Datadog
130
130
  # they all override +perform+ and the correct behavior depends on
131
131
  # placing IntervalLoop after Queue.
132
132
  #
133
- # The TraceWriter worker then defines +work_pending?+ to be the
134
- # same as Queue implementation here... Essentially, it demands
135
- # the behavior that perhaps should be applied to all workers.
136
- #
137
133
  # Until this mess is untangled, call +buffer.empty?+ here.
138
134
  buffer.empty? && !in_iteration?
139
135
  end
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../runtime/metrics'
3
+ require_relative "../runtime/metrics"
4
4
 
5
- require_relative '../worker'
6
- require_relative 'async'
7
- require_relative 'polling'
5
+ require_relative "../worker"
6
+ require_relative "async"
7
+ require_relative "polling"
8
8
 
9
9
  module Datadog
10
10
  module Core
@@ -21,7 +21,15 @@ module Datadog
21
21
  :metrics
22
22
 
23
23
  def initialize(telemetry:, **options)
24
- @metrics = options.fetch(:metrics) { Core::Runtime::Metrics.new(logger: options[:logger], telemetry: telemetry) }
24
+ @metrics = options.fetch(:metrics) do
25
+ Core::Runtime::Metrics.new(
26
+ logger: options[:logger],
27
+ telemetry: telemetry,
28
+ experimental_propagate_process_tags_enabled: options.fetch(:propagate_process_tags_enabled) do
29
+ options.fetch(:experimental_propagate_process_tags_enabled)
30
+ end
31
+ )
32
+ end
25
33
 
26
34
  # Workers::Async::Thread settings
27
35
  self.fork_policy = options.fetch(:fork_policy, Workers::Async::Thread::FORK_POLICY_STOP)
data/lib/datadog/core.rb CHANGED
@@ -1,8 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'core/deprecations'
4
- require_relative 'core/configuration/config_helper'
5
- require_relative 'core/extensions'
3
+ # Keep this at the top, this is needed at require-time by some files
4
+ require_relative "ruby_version"
5
+
6
+ require_relative "core/deprecations"
7
+ require_relative "core/configuration/config_helper"
8
+ require_relative "core/extensions"
6
9
 
7
10
  # We must load core extensions to make certain global APIs
8
11
  # accessible: both for Datadog features and the core itself.
@@ -18,20 +21,24 @@ module Datadog
18
21
  require "libdatadog_api.#{RUBY_VERSION[/\d+.\d+/]}_#{RUBY_PLATFORM}"
19
22
  nil
20
23
  rescue LoadError => e
21
- e.message
24
+ "#{e.class}: #{e.message}"
22
25
  end
23
26
  end
24
27
 
25
- DATADOG_ENV = Core::Configuration::ConfigHelper.new
26
28
  extend Core::Extensions
27
29
 
28
30
  # Add shutdown hook:
29
31
  # Ensures the Datadog components have a chance to gracefully
30
32
  # shut down and cleanup before terminating the process.
31
33
  at_exit do
32
- if Interrupt === $! # rubocop:disable Style/SpecialGlobalVars is process terminating due to a ctrl+c or similar?
34
+ exception = $! # rubocop:disable Style/SpecialGlobalVars
35
+
36
+ if Interrupt === exception # is process terminating due to a ctrl+c or similar?
33
37
  Datadog.send(:handle_interrupt_shutdown!)
34
38
  else
39
+ # Report unhandled exception to crash tracker before shutdown
40
+ Datadog::Core::Crashtracking::Component.report_unhandled_exception(exception)
41
+
35
42
  Datadog.shutdown!
36
43
  end
37
44
  end
@@ -1,11 +1,50 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'configuration/settings'
3
+ require_relative "../core/environment/variable_helpers"
4
+ require_relative "ext"
4
5
 
5
6
  module Datadog
6
7
  module DataStreams
7
8
  # Configuration for Data Streams Monitoring
8
9
  module Configuration
10
+ # Configuration settings for Data Streams Monitoring.
11
+ module Settings
12
+ def self.extended(base)
13
+ base = base.singleton_class unless base.is_a?(Class)
14
+ add_settings!(base)
15
+ end
16
+
17
+ def self.add_settings!(base)
18
+ base.class_eval do
19
+ # Data Streams Monitoring configuration
20
+ # @public_api
21
+ settings :data_streams do
22
+ # Whether Data Streams Monitoring is enabled. When enabled, the library will
23
+ # collect and report data lineage information for messaging systems.
24
+ #
25
+ # @default `DD_DATA_STREAMS_ENABLED` environment variable, otherwise `false`.
26
+ # @return [Boolean]
27
+ option :enabled do |o|
28
+ o.type :bool
29
+ o.env Ext::ENV_ENABLED
30
+ o.default false
31
+ end
32
+
33
+ # The interval (in seconds) at which Data Streams Monitoring stats are flushed.
34
+ #
35
+ # @default 10.0
36
+ # @env '_DD_TRACE_STATS_WRITER_INTERVAL'
37
+ # @return [Float]
38
+ # @!visibility private
39
+ option :interval do |o|
40
+ o.type :float
41
+ o.env "_DD_TRACE_STATS_WRITER_INTERVAL"
42
+ o.default 10.0
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
9
48
  end
10
49
  end
11
50
  end
@@ -5,7 +5,7 @@ module Datadog
5
5
  # Constants for Data Streams Monitoring configuration
6
6
  # @public_api
7
7
  module Ext
8
- ENV_ENABLED = 'DD_DATA_STREAMS_ENABLED'
8
+ ENV_ENABLED = "DD_DATA_STREAMS_ENABLED"
9
9
  end
10
10
  end
11
11
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'configuration'
4
- require_relative '../core/configuration'
3
+ require_relative "configuration"
4
+ require_relative "../core/configuration"
5
5
 
6
6
  module Datadog
7
7
  module DataStreams
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'stringio'
4
- require_relative '../core/utils/base64'
3
+ require "stringio"
4
+ require_relative "../core/utils/base64_codec"
5
5
 
6
6
  module Datadog
7
7
  module DataStreams
@@ -34,7 +34,7 @@ module Datadog
34
34
  end
35
35
 
36
36
  def encode_b64
37
- Core::Utils::Base64.strict_encode64(encode)
37
+ Core::Utils::Base64Codec.strict_encode64(encode)
38
38
  end
39
39
 
40
40
  # Decode pathway context from base64 encoded string
@@ -42,11 +42,11 @@ module Datadog
42
42
  return nil unless encoded_ctx && !encoded_ctx.empty?
43
43
 
44
44
  begin
45
- binary_data = Core::Utils::Base64.strict_decode64(encoded_ctx)
45
+ binary_data = Core::Utils::Base64Codec.strict_decode64(encoded_ctx)
46
46
  decode(binary_data)
47
47
  rescue ArgumentError => e
48
48
  # Invalid base64 encoding - may indicate version mismatch or corruption
49
- Datadog.logger.debug("Failed to decode DSM pathway context: #{e.message}")
49
+ Datadog.logger.debug { "Failed to decode DSM pathway context: #{e.class}: #{e.message}" }
50
50
  nil
51
51
  end
52
52
  end
@@ -58,7 +58,7 @@ module Datadog
58
58
  # - 8 bytes: hash value (little-endian)
59
59
  # - VarInt: pathway start time (milliseconds)
60
60
  # - VarInt: current edge start time (milliseconds)
61
- [@hash].pack('Q') <<
61
+ [@hash].pack("Q") <<
62
62
  encode_var_int_64(time_to_ms(@pathway_start)) <<
63
63
  encode_var_int_64(time_to_ms(@current_edge_start))
64
64
  end
@@ -73,7 +73,7 @@ module Datadog
73
73
  hash_bytes = reader.read(8)
74
74
  return nil unless hash_bytes
75
75
 
76
- hash_value = hash_bytes.unpack1('Q') # : Integer
76
+ hash_value = hash_bytes.unpack1("Q") # : Integer
77
77
 
78
78
  # Extract pathway start time (VarInt milliseconds)
79
79
  pathway_start_ms = decode_varint(reader)
@@ -116,7 +116,7 @@ module Datadog
116
116
  value >>= 7
117
117
  end
118
118
  bytes << value
119
- bytes.pack('C*')
119
+ bytes.pack("C*")
120
120
  end
121
121
 
122
122
  # Decode an unsigned LEB128 variable-length integer from IO stream.