datadog 2.30.0 → 2.43.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 (942) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +382 -1
  3. data/README.md +3 -0
  4. data/bin/ddprofrb +4 -4
  5. data/ext/datadog_profiling_native_extension/NativeExtensionDesign.md +12 -24
  6. data/ext/datadog_profiling_native_extension/clock_id.h +9 -1
  7. data/ext/datadog_profiling_native_extension/clock_id_from_mach.c +66 -0
  8. data/ext/datadog_profiling_native_extension/clock_id_from_pthread.c +1 -1
  9. data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +312 -99
  10. data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.c +1 -1
  11. data/ext/datadog_profiling_native_extension/collectors_idle_sampling_helper.c +18 -4
  12. data/ext/datadog_profiling_native_extension/collectors_stack.c +256 -163
  13. data/ext/datadog_profiling_native_extension/collectors_stack.h +23 -4
  14. data/ext/datadog_profiling_native_extension/collectors_thread_context.c +833 -513
  15. data/ext/datadog_profiling_native_extension/collectors_thread_context.h +24 -9
  16. data/ext/datadog_profiling_native_extension/crashtracking_runtime_stacks.c +5 -4
  17. data/ext/datadog_profiling_native_extension/datadog_ruby_common.c +44 -19
  18. data/ext/datadog_profiling_native_extension/datadog_ruby_common.h +7 -12
  19. data/ext/datadog_profiling_native_extension/extconf.rb +83 -105
  20. data/ext/datadog_profiling_native_extension/gvl_profiling_helper.c +4 -43
  21. data/ext/datadog_profiling_native_extension/gvl_profiling_helper.h +15 -47
  22. data/ext/datadog_profiling_native_extension/heap_recorder.c +391 -277
  23. data/ext/datadog_profiling_native_extension/heap_recorder.h +50 -31
  24. data/ext/datadog_profiling_native_extension/http_transport.c +10 -5
  25. data/ext/datadog_profiling_native_extension/macos_sampler_thread.h +55 -0
  26. data/ext/datadog_profiling_native_extension/native_extension_helpers.rb +3 -27
  27. data/ext/datadog_profiling_native_extension/private_vm_api_access.c +750 -482
  28. data/ext/datadog_profiling_native_extension/private_vm_api_access.h +32 -12
  29. data/ext/datadog_profiling_native_extension/profiling.c +43 -4
  30. data/ext/datadog_profiling_native_extension/ruby_helpers.c +34 -106
  31. data/ext/datadog_profiling_native_extension/ruby_helpers.h +0 -7
  32. data/ext/datadog_profiling_native_extension/setup_signal_handler.c +2 -0
  33. data/ext/datadog_profiling_native_extension/stack_recorder.c +139 -84
  34. data/ext/datadog_profiling_native_extension/stack_recorder.h +13 -4
  35. data/ext/datadog_profiling_native_extension/time_helpers.h +15 -8
  36. data/ext/datadog_profiling_native_extension/unsafe_api_calls_check.h +4 -2
  37. data/ext/libdatadog_api/crashtracker.c +7 -8
  38. data/ext/libdatadog_api/datadog_ruby_common.c +44 -19
  39. data/ext/libdatadog_api/datadog_ruby_common.h +7 -12
  40. data/ext/libdatadog_api/di.c +213 -0
  41. data/ext/libdatadog_api/extconf.rb +40 -26
  42. data/ext/libdatadog_api/feature_flags.c +26 -0
  43. data/ext/libdatadog_api/init.c +11 -2
  44. data/ext/libdatadog_api/otel_thread_context.c +247 -0
  45. data/ext/libdatadog_api/otel_thread_context.h +5 -0
  46. data/ext/libdatadog_api/trace_exporter.c +1932 -0
  47. data/ext/libdatadog_api/trace_exporter.h +5 -0
  48. data/ext/libdatadog_extconf_helpers.rb +50 -5
  49. data/lib/datadog/ai_guard/api_client.rb +9 -7
  50. data/lib/datadog/ai_guard/autoload.rb +10 -0
  51. data/lib/datadog/ai_guard/component.rb +11 -9
  52. data/lib/datadog/ai_guard/configuration.rb +106 -2
  53. data/lib/datadog/ai_guard/contrib/auto_instrument.rb +24 -0
  54. data/lib/datadog/ai_guard/contrib/rack/integration.rb +42 -0
  55. data/lib/datadog/ai_guard/contrib/rack/patcher.rb +26 -0
  56. data/lib/datadog/ai_guard/contrib/rack/request_middleware.rb +97 -0
  57. data/lib/datadog/ai_guard/contrib/rails/integration.rb +41 -0
  58. data/lib/datadog/ai_guard/contrib/rails/patcher.rb +97 -0
  59. data/lib/datadog/ai_guard/contrib/ruby_llm/chat_instrumentation.rb +41 -3
  60. data/lib/datadog/ai_guard/evaluation/content_builder.rb +31 -0
  61. data/lib/datadog/ai_guard/evaluation/content_part.rb +36 -0
  62. data/lib/datadog/ai_guard/evaluation/no_op_result.rb +3 -1
  63. data/lib/datadog/ai_guard/evaluation/request.rb +22 -17
  64. data/lib/datadog/ai_guard/evaluation/result.rb +3 -1
  65. data/lib/datadog/ai_guard/evaluation.rb +51 -7
  66. data/lib/datadog/ai_guard/ext.rb +15 -0
  67. data/lib/datadog/ai_guard.rb +34 -8
  68. data/lib/datadog/appsec/actions_handler/serializable_backtrace.rb +22 -43
  69. data/lib/datadog/appsec/actions_handler.rb +6 -6
  70. data/lib/datadog/appsec/anonymizer.rb +1 -1
  71. data/lib/datadog/appsec/api_security/endpoint_collection/grape_route_serializer.rb +2 -2
  72. data/lib/datadog/appsec/api_security/endpoint_collection/rails_collector.rb +6 -6
  73. data/lib/datadog/appsec/api_security/endpoint_collection/rails_route_serializer.rb +1 -1
  74. data/lib/datadog/appsec/api_security/endpoint_collection/sinatra_route_serializer.rb +2 -2
  75. data/lib/datadog/appsec/api_security/route_extractor.rb +26 -14
  76. data/lib/datadog/appsec/api_security/sampler.rb +5 -5
  77. data/lib/datadog/appsec/api_security.rb +1 -1
  78. data/lib/datadog/appsec/assets/blocked.html +1 -108
  79. data/lib/datadog/appsec/assets.rb +7 -7
  80. data/lib/datadog/appsec/autoload.rb +4 -4
  81. data/lib/datadog/appsec/component.rb +29 -22
  82. data/lib/datadog/appsec/compressed_json.rb +7 -7
  83. data/lib/datadog/appsec/configuration.rb +436 -1
  84. data/lib/datadog/appsec/context.rb +10 -8
  85. data/lib/datadog/appsec/contrib/active_record/instrumentation.rb +6 -6
  86. data/lib/datadog/appsec/contrib/active_record/integration.rb +4 -4
  87. data/lib/datadog/appsec/contrib/active_record/patcher.rb +4 -4
  88. data/lib/datadog/appsec/contrib/aws_lambda/gateway/watcher.rb +75 -0
  89. data/lib/datadog/appsec/contrib/aws_lambda/integration.rb +39 -0
  90. data/lib/datadog/appsec/contrib/aws_lambda/patcher.rb +30 -0
  91. data/lib/datadog/appsec/contrib/aws_lambda/waf_addresses.rb +146 -0
  92. data/lib/datadog/appsec/contrib/devise/configuration.rb +1 -1
  93. data/lib/datadog/appsec/contrib/devise/data_extractor.rb +3 -3
  94. data/lib/datadog/appsec/contrib/devise/ext.rb +20 -20
  95. data/lib/datadog/appsec/contrib/devise/integration.rb +4 -4
  96. data/lib/datadog/appsec/contrib/devise/patcher.rb +8 -8
  97. data/lib/datadog/appsec/contrib/devise/patches/signin_tracking_patch.rb +14 -13
  98. data/lib/datadog/appsec/contrib/devise/patches/signup_tracking_patch.rb +8 -8
  99. data/lib/datadog/appsec/contrib/devise/tracking_middleware.rb +24 -9
  100. data/lib/datadog/appsec/contrib/excon/integration.rb +4 -4
  101. data/lib/datadog/appsec/contrib/excon/patcher.rb +1 -1
  102. data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +76 -21
  103. data/lib/datadog/appsec/contrib/faraday/integration.rb +4 -4
  104. data/lib/datadog/appsec/contrib/faraday/patcher.rb +4 -4
  105. data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +72 -18
  106. data/lib/datadog/appsec/contrib/graphql/appsec_trace.rb +4 -4
  107. data/lib/datadog/appsec/contrib/graphql/gateway/multiplex.rb +66 -21
  108. data/lib/datadog/appsec/contrib/graphql/gateway/watcher.rb +7 -7
  109. data/lib/datadog/appsec/contrib/graphql/integration.rb +9 -8
  110. data/lib/datadog/appsec/contrib/graphql/patcher.rb +3 -3
  111. data/lib/datadog/appsec/contrib/rack/buffered_input.rb +83 -0
  112. data/lib/datadog/appsec/contrib/rack/ext.rb +29 -29
  113. data/lib/datadog/appsec/contrib/rack/gateway/request.rb +56 -17
  114. data/lib/datadog/appsec/contrib/rack/gateway/response.rb +1 -1
  115. data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +46 -30
  116. data/lib/datadog/appsec/contrib/rack/input_peeker.rb +79 -0
  117. data/lib/datadog/appsec/contrib/rack/integration.rb +6 -6
  118. data/lib/datadog/appsec/contrib/rack/patcher.rb +3 -3
  119. data/lib/datadog/appsec/contrib/rack/request_body_middleware.rb +11 -8
  120. data/lib/datadog/appsec/contrib/rack/request_middleware.rb +51 -61
  121. data/lib/datadog/appsec/contrib/rack/response_body.rb +1 -1
  122. data/lib/datadog/appsec/contrib/rails/gateway/request.rb +43 -4
  123. data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +25 -9
  124. data/lib/datadog/appsec/contrib/rails/integration.rb +5 -5
  125. data/lib/datadog/appsec/contrib/rails/patcher.rb +17 -17
  126. data/lib/datadog/appsec/contrib/rails/patches/process_action_patch.rb +2 -2
  127. data/lib/datadog/appsec/contrib/rails/patches/render_to_body_patch.rb +3 -3
  128. data/lib/datadog/appsec/contrib/rails/request.rb +3 -3
  129. data/lib/datadog/appsec/contrib/rails/request_middleware.rb +2 -1
  130. data/lib/datadog/appsec/contrib/rest_client/integration.rb +5 -5
  131. data/lib/datadog/appsec/contrib/rest_client/patcher.rb +1 -1
  132. data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +74 -21
  133. data/lib/datadog/appsec/contrib/sinatra/gateway/request.rb +1 -1
  134. data/lib/datadog/appsec/contrib/sinatra/gateway/route_params.rb +1 -1
  135. data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +34 -13
  136. data/lib/datadog/appsec/contrib/sinatra/integration.rb +5 -5
  137. data/lib/datadog/appsec/contrib/sinatra/patcher.rb +11 -11
  138. data/lib/datadog/appsec/contrib/sinatra/patches/json_patch.rb +3 -3
  139. data/lib/datadog/appsec/contrib/sinatra/request_middleware.rb +2 -1
  140. data/lib/datadog/appsec/counter_sampler.rb +1 -1
  141. data/lib/datadog/appsec/default_header_tags.rb +52 -0
  142. data/lib/datadog/appsec/event.rb +14 -14
  143. data/lib/datadog/appsec/ext.rb +11 -10
  144. data/lib/datadog/appsec/extensions.rb +2 -2
  145. data/lib/datadog/appsec/instrumentation/gateway.rb +1 -14
  146. data/lib/datadog/appsec/metrics/collector.rb +18 -1
  147. data/lib/datadog/appsec/metrics/exporter.rb +17 -11
  148. data/lib/datadog/appsec/metrics/telemetry.rb +15 -3
  149. data/lib/datadog/appsec/metrics/telemetry_exporter.rb +4 -4
  150. data/lib/datadog/appsec/metrics.rb +4 -4
  151. data/lib/datadog/appsec/monitor/gateway/watcher.rb +18 -12
  152. data/lib/datadog/appsec/monitor.rb +1 -1
  153. data/lib/datadog/appsec/processor/rule_loader.rb +32 -32
  154. data/lib/datadog/appsec/rate_limiter.rb +1 -1
  155. data/lib/datadog/appsec/remote.rb +15 -9
  156. data/lib/datadog/appsec/response.rb +22 -22
  157. data/lib/datadog/appsec/route_normalizer/rails_route_pattern.rb +176 -0
  158. data/lib/datadog/appsec/route_normalizer/route_pattern.rb +378 -0
  159. data/lib/datadog/appsec/route_normalizer/route_text.rb +57 -0
  160. data/lib/datadog/appsec/route_normalizer.rb +80 -0
  161. data/lib/datadog/appsec/security_engine/engine.rb +40 -40
  162. data/lib/datadog/appsec/security_engine/runner.rb +3 -3
  163. data/lib/datadog/appsec/security_event.rb +2 -2
  164. data/lib/datadog/appsec/trace_keeper.rb +18 -6
  165. data/lib/datadog/appsec/utils/http/body.rb +11 -8
  166. data/lib/datadog/appsec/utils/http/body_reader.rb +61 -0
  167. data/lib/datadog/appsec/utils/http/media_range.rb +15 -15
  168. data/lib/datadog/appsec/utils/http/media_type.rb +5 -6
  169. data/lib/datadog/appsec/utils/http/url_encoded.rb +79 -24
  170. data/lib/datadog/appsec.rb +21 -24
  171. data/lib/datadog/auto_instrument.rb +2 -2
  172. data/lib/datadog/core/buffer/cruby.rb +1 -1
  173. data/lib/datadog/core/buffer/thread_safe.rb +1 -1
  174. data/lib/datadog/core/configuration/agent_settings.rb +1 -1
  175. data/lib/datadog/core/configuration/agent_settings_resolver.rb +15 -15
  176. data/lib/datadog/core/configuration/agentless_settings_resolver.rb +2 -2
  177. data/lib/datadog/core/configuration/base.rb +19 -7
  178. data/lib/datadog/core/configuration/components.rb +142 -36
  179. data/lib/datadog/core/configuration/components_state.rb +6 -1
  180. data/lib/datadog/core/configuration/config_helper.rb +12 -3
  181. data/lib/datadog/core/configuration/deprecations.rb +6 -6
  182. data/lib/datadog/core/configuration/ext.rb +11 -11
  183. data/lib/datadog/core/configuration/option.rb +46 -21
  184. data/lib/datadog/core/configuration/option_definition.rb +43 -17
  185. data/lib/datadog/core/configuration/options.rb +42 -8
  186. data/lib/datadog/core/configuration/settings.rb +129 -104
  187. data/lib/datadog/core/configuration/stable_config.rb +1 -1
  188. data/lib/datadog/core/configuration/supported_configurations.rb +25 -1
  189. data/lib/datadog/core/configuration.rb +9 -9
  190. data/lib/datadog/core/contrib/rails/railtie.rb +32 -0
  191. data/lib/datadog/core/contrib/rails/utils.rb +7 -3
  192. data/lib/datadog/core/crashtracking/component.rb +17 -13
  193. data/lib/datadog/core/crashtracking/tag_builder.rb +5 -5
  194. data/lib/datadog/core/deprecations.rb +1 -1
  195. data/lib/datadog/core/diagnostics/environment_logger.rb +45 -8
  196. data/lib/datadog/core/diagnostics/health.rb +2 -2
  197. data/lib/datadog/core/encoding.rb +4 -4
  198. data/lib/datadog/core/environment/agent_info.rb +2 -2
  199. data/lib/datadog/core/environment/cgroup.rb +4 -4
  200. data/lib/datadog/core/environment/container.rb +11 -11
  201. data/lib/datadog/core/environment/execution.rb +3 -3
  202. data/lib/datadog/core/environment/ext.rb +21 -15
  203. data/lib/datadog/core/environment/gc.rb +1 -1
  204. data/lib/datadog/core/environment/git.rb +2 -2
  205. data/lib/datadog/core/environment/identity.rb +47 -11
  206. data/lib/datadog/core/environment/platform.rb +8 -8
  207. data/lib/datadog/core/environment/process.rb +54 -19
  208. data/lib/datadog/core/environment/socket.rb +15 -2
  209. data/lib/datadog/core/environment/variable_helpers.rb +1 -1
  210. data/lib/datadog/core/environment/vm_cache.rb +1 -1
  211. data/lib/datadog/core/environment/yjit.rb +2 -2
  212. data/lib/datadog/core/error.rb +5 -5
  213. data/lib/datadog/core/evp.rb +11 -0
  214. data/lib/datadog/core/extensions.rb +1 -1
  215. data/lib/datadog/core/feature_flags.rb +3 -3
  216. data/lib/datadog/core/git/ext.rb +4 -4
  217. data/lib/datadog/core/knuth_sampler.rb +3 -1
  218. data/lib/datadog/core/logger.rb +3 -3
  219. data/lib/datadog/core/logging/ext.rb +1 -1
  220. data/lib/datadog/core/metrics/client.rb +26 -26
  221. data/lib/datadog/core/metrics/ext.rb +5 -5
  222. data/lib/datadog/core/metrics/helpers.rb +1 -1
  223. data/lib/datadog/core/metrics/logging.rb +2 -2
  224. data/lib/datadog/core/metrics/options.rb +5 -5
  225. data/lib/datadog/core/pin.rb +1 -1
  226. data/lib/datadog/core/process_discovery.rb +8 -8
  227. data/lib/datadog/core/rate_limiter.rb +1 -1
  228. data/lib/datadog/core/remote/client/capabilities.rb +67 -15
  229. data/lib/datadog/core/remote/client.rb +18 -18
  230. data/lib/datadog/core/remote/component.rb +57 -32
  231. data/lib/datadog/core/remote/configuration/content.rb +3 -3
  232. data/lib/datadog/core/remote/configuration/digest.rb +1 -1
  233. data/lib/datadog/core/remote/configuration/path.rb +9 -9
  234. data/lib/datadog/core/remote/configuration/repository.rb +4 -4
  235. data/lib/datadog/core/remote/configuration/target.rb +9 -9
  236. data/lib/datadog/core/remote/configuration.rb +4 -4
  237. data/lib/datadog/core/remote/ext.rb +3 -3
  238. data/lib/datadog/core/remote/negotiation.rb +1 -1
  239. data/lib/datadog/core/remote/tie/tracing.rb +7 -7
  240. data/lib/datadog/core/remote/transport/config.rb +4 -4
  241. data/lib/datadog/core/remote/transport/http/config.rb +10 -10
  242. data/lib/datadog/core/remote/transport/http/negotiation.rb +4 -4
  243. data/lib/datadog/core/remote/transport/http.rb +10 -10
  244. data/lib/datadog/core/remote/transport/negotiation.rb +3 -3
  245. data/lib/datadog/core/remote/worker.rb +5 -5
  246. data/lib/datadog/core/runtime/ext.rb +22 -22
  247. data/lib/datadog/core/runtime/metrics.rb +10 -10
  248. data/lib/datadog/core/tag_builder.rb +18 -18
  249. data/lib/datadog/core/tag_normalizer.rb +7 -7
  250. data/lib/datadog/core/telemetry/component.rb +16 -13
  251. data/lib/datadog/core/telemetry/configuration_value.rb +38 -0
  252. data/lib/datadog/core/telemetry/emitter.rb +5 -5
  253. data/lib/datadog/core/telemetry/event/app_client_configuration_change.rb +10 -9
  254. data/lib/datadog/core/telemetry/event/app_closing.rb +2 -2
  255. data/lib/datadog/core/telemetry/event/app_dependencies_loaded.rb +2 -2
  256. data/lib/datadog/core/telemetry/event/app_endpoints_loaded.rb +3 -3
  257. data/lib/datadog/core/telemetry/event/app_extended_heartbeat.rb +32 -0
  258. data/lib/datadog/core/telemetry/event/app_heartbeat.rb +2 -2
  259. data/lib/datadog/core/telemetry/event/app_integrations_change.rb +2 -2
  260. data/lib/datadog/core/telemetry/event/app_started.rb +142 -193
  261. data/lib/datadog/core/telemetry/event/base.rb +1 -1
  262. data/lib/datadog/core/telemetry/event/distributions.rb +2 -2
  263. data/lib/datadog/core/telemetry/event/generate_metrics.rb +3 -3
  264. data/lib/datadog/core/telemetry/event/log.rb +6 -6
  265. data/lib/datadog/core/telemetry/event/message_batch.rb +1 -1
  266. data/lib/datadog/core/telemetry/event/synth_app_client_configuration_change.rb +3 -3
  267. data/lib/datadog/core/telemetry/event.rb +16 -22
  268. data/lib/datadog/core/telemetry/ext.rb +11 -10
  269. data/lib/datadog/core/telemetry/logger.rb +1 -1
  270. data/lib/datadog/core/telemetry/logging.rb +5 -5
  271. data/lib/datadog/core/telemetry/metric.rb +9 -9
  272. data/lib/datadog/core/telemetry/metrics_collection.rb +2 -2
  273. data/lib/datadog/core/telemetry/metrics_manager.rb +1 -1
  274. data/lib/datadog/core/telemetry/request.rb +6 -8
  275. data/lib/datadog/core/telemetry/transport/http/telemetry.rb +16 -11
  276. data/lib/datadog/core/telemetry/transport/http.rb +7 -7
  277. data/lib/datadog/core/telemetry/transport/telemetry.rb +3 -3
  278. data/lib/datadog/core/telemetry/worker.rb +26 -6
  279. data/lib/datadog/core/transport/ext.rb +14 -14
  280. data/lib/datadog/core/transport/http/adapters/net.rb +4 -4
  281. data/lib/datadog/core/transport/http/adapters/test.rb +1 -1
  282. data/lib/datadog/core/transport/http/adapters/unix_socket.rb +4 -4
  283. data/lib/datadog/core/transport/http/api/endpoint.rb +1 -1
  284. data/lib/datadog/core/transport/http/api/map.rb +1 -1
  285. data/lib/datadog/core/transport/http/builder.rb +6 -6
  286. data/lib/datadog/core/transport/http/client.rb +2 -2
  287. data/lib/datadog/core/transport/http/response.rb +1 -1
  288. data/lib/datadog/core/transport/http.rb +9 -7
  289. data/lib/datadog/core/transport/response.rb +1 -1
  290. data/lib/datadog/core/transport/transport.rb +2 -2
  291. data/lib/datadog/core/utils/at_fork_monkey_patch.rb +172 -20
  292. data/lib/datadog/core/utils/base64_codec.rb +23 -0
  293. data/lib/datadog/core/utils/duration.rb +1 -1
  294. data/lib/datadog/core/utils/{array.rb → enumerable_compat.rb} +2 -2
  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/polling.rb +2 -2
  309. data/lib/datadog/core/workers/runtime_metrics.rb +4 -4
  310. data/lib/datadog/core.rb +7 -5
  311. data/lib/datadog/data_streams/configuration.rb +40 -1
  312. data/lib/datadog/data_streams/ext.rb +1 -1
  313. data/lib/datadog/data_streams/extensions.rb +2 -2
  314. data/lib/datadog/data_streams/pathway_context.rb +28 -30
  315. data/lib/datadog/data_streams/processor.rb +93 -62
  316. data/lib/datadog/data_streams/transport/http/stats.rb +5 -5
  317. data/lib/datadog/data_streams/transport/http.rb +5 -5
  318. data/lib/datadog/data_streams/transport/stats.rb +7 -7
  319. data/lib/datadog/data_streams.rb +5 -5
  320. data/lib/datadog/di/base.rb +16 -8
  321. data/lib/datadog/di/boot.rb +25 -24
  322. data/lib/datadog/di/capture_expression.rb +21 -0
  323. data/lib/datadog/di/capture_expression_evaluator.rb +71 -0
  324. data/lib/datadog/di/capture_limits.rb +41 -0
  325. data/lib/datadog/di/code_tracker.rb +218 -16
  326. data/lib/datadog/di/component.rb +123 -37
  327. data/lib/datadog/di/configuration.rb +241 -2
  328. data/lib/datadog/di/context.rb +9 -3
  329. data/lib/datadog/di/contrib/active_record.rb +6 -2
  330. data/lib/datadog/di/contrib/railtie.rb +1 -1
  331. data/lib/datadog/di/contrib.rb +5 -5
  332. data/lib/datadog/di/el/compiler.rb +114 -38
  333. data/lib/datadog/di/el/evaluator.rb +82 -2
  334. data/lib/datadog/di/el/expression.rb +13 -2
  335. data/lib/datadog/di/el.rb +3 -3
  336. data/lib/datadog/di/error.rb +10 -0
  337. data/lib/datadog/di/fatal_exceptions.rb +26 -0
  338. data/lib/datadog/di/instrumenter.rb +528 -184
  339. data/lib/datadog/di/logger.rb +3 -3
  340. data/lib/datadog/di/preload.rb +1 -1
  341. data/lib/datadog/di/probe.rb +69 -2
  342. data/lib/datadog/di/probe_builder.rb +98 -15
  343. data/lib/datadog/di/probe_file_loader/railtie.rb +1 -1
  344. data/lib/datadog/di/probe_file_loader.rb +14 -9
  345. data/lib/datadog/di/probe_manager.rb +73 -15
  346. data/lib/datadog/di/probe_notification_builder.rb +178 -25
  347. data/lib/datadog/di/probe_notifier_worker.rb +57 -37
  348. data/lib/datadog/di/probe_repository.rb +1 -1
  349. data/lib/datadog/di/redactor.rb +16 -1
  350. data/lib/datadog/di/remote.rb +187 -26
  351. data/lib/datadog/di/serializer.rb +79 -35
  352. data/lib/datadog/di/transport/diagnostics.rb +5 -5
  353. data/lib/datadog/di/transport/http/diagnostics.rb +3 -3
  354. data/lib/datadog/di/transport/http/input.rb +2 -2
  355. data/lib/datadog/di/transport/http.rb +10 -10
  356. data/lib/datadog/di/transport/input.rb +18 -14
  357. data/lib/datadog/di/utils.rb +43 -15
  358. data/lib/datadog/di.rb +147 -3
  359. data/lib/datadog/error_tracking/collector.rb +3 -2
  360. data/lib/datadog/error_tracking/component.rb +12 -12
  361. data/lib/datadog/error_tracking/configuration.rb +55 -2
  362. data/lib/datadog/error_tracking/ext.rb +7 -7
  363. data/lib/datadog/error_tracking/extensions.rb +2 -2
  364. data/lib/datadog/error_tracking/filters.rb +4 -4
  365. data/lib/datadog/error_tracking.rb +6 -6
  366. data/lib/datadog/kit/appsec/events/v2.rb +91 -33
  367. data/lib/datadog/kit/appsec/events.rb +25 -25
  368. data/lib/datadog/kit/enable_core_dumps.rb +3 -3
  369. data/lib/datadog/kit/identity.rb +18 -18
  370. data/lib/datadog/kit/tracing/method_tracer.rb +9 -6
  371. data/lib/datadog/kit.rb +1 -1
  372. data/lib/datadog/open_feature/component.rb +62 -13
  373. data/lib/datadog/open_feature/configuration.rb +22 -1
  374. data/lib/datadog/open_feature/evaluation_engine.rb +38 -12
  375. data/lib/datadog/open_feature/exposures/batch_builder.rb +1 -1
  376. data/lib/datadog/open_feature/exposures/buffer.rb +1 -1
  377. data/lib/datadog/open_feature/exposures/deduplicator.rb +1 -1
  378. data/lib/datadog/open_feature/exposures/event.rb +17 -10
  379. data/lib/datadog/open_feature/exposures/reporter.rb +3 -3
  380. data/lib/datadog/open_feature/exposures/worker.rb +6 -6
  381. data/lib/datadog/open_feature/ext.rb +32 -6
  382. data/lib/datadog/open_feature/flag_evaluation/aggregator.rb +442 -0
  383. data/lib/datadog/open_feature/flag_evaluation/writer.rb +544 -0
  384. data/lib/datadog/open_feature/hooks/flag_eval_evp_hook.rb +105 -0
  385. data/lib/datadog/open_feature/hooks/flag_eval_metrics_hook.rb +51 -0
  386. data/lib/datadog/open_feature/hooks/span_enrichment_hook/codec.rb +58 -0
  387. data/lib/datadog/open_feature/hooks/span_enrichment_hook/span_enrichment_state.rb +96 -0
  388. data/lib/datadog/open_feature/hooks/span_enrichment_hook/span_enrichment_state_store.rb +49 -0
  389. data/lib/datadog/open_feature/hooks/span_enrichment_hook.rb +184 -0
  390. data/lib/datadog/open_feature/metrics/flag_eval_metrics.rb +149 -0
  391. data/lib/datadog/open_feature/native_evaluator.rb +56 -7
  392. data/lib/datadog/open_feature/noop_evaluator.rb +8 -3
  393. data/lib/datadog/open_feature/provider.rb +115 -21
  394. data/lib/datadog/open_feature/remote.rb +3 -3
  395. data/lib/datadog/open_feature/resolution_details.rb +4 -2
  396. data/lib/datadog/open_feature/transport.rb +71 -12
  397. data/lib/datadog/open_feature.rb +2 -2
  398. data/lib/datadog/opentelemetry/api/baggage.rb +3 -3
  399. data/lib/datadog/opentelemetry/api/context.rb +4 -4
  400. data/lib/datadog/opentelemetry/configuration/settings.rb +95 -28
  401. data/lib/datadog/opentelemetry/ext.rb +9 -0
  402. data/lib/datadog/opentelemetry/logs.rb +98 -0
  403. data/lib/datadog/opentelemetry/metrics.rb +17 -44
  404. data/lib/datadog/opentelemetry/sdk/configurator.rb +46 -6
  405. data/lib/datadog/opentelemetry/sdk/id_generator.rb +16 -10
  406. data/lib/datadog/opentelemetry/sdk/logs_exporter.rb +30 -0
  407. data/lib/datadog/opentelemetry/sdk/metrics_exporter.rb +9 -16
  408. data/lib/datadog/opentelemetry/sdk/propagator.rb +17 -11
  409. data/lib/datadog/opentelemetry/sdk/span_processor.rb +18 -15
  410. data/lib/datadog/opentelemetry/sdk/trace/span.rb +32 -32
  411. data/lib/datadog/opentelemetry/sdk.rb +19 -0
  412. data/lib/datadog/opentelemetry/signal_configuration.rb +53 -0
  413. data/lib/datadog/opentelemetry/trace.rb +4 -1
  414. data/lib/datadog/opentelemetry.rb +8 -7
  415. data/lib/datadog/profiling/collectors/code_provenance.rb +36 -11
  416. data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +40 -3
  417. data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +12 -4
  418. data/lib/datadog/profiling/collectors/info.rb +19 -10
  419. data/lib/datadog/profiling/collectors/thread_context.rb +16 -22
  420. data/lib/datadog/profiling/component.rb +41 -34
  421. data/lib/datadog/profiling/exporter.rb +38 -13
  422. data/lib/datadog/profiling/ext/dir_monkey_patches.rb +6 -5
  423. data/lib/datadog/profiling/ext.rb +0 -2
  424. data/lib/datadog/profiling/flush.rb +21 -12
  425. data/lib/datadog/profiling/http_transport.rb +13 -2
  426. data/lib/datadog/profiling/load_native_extension.rb +2 -2
  427. data/lib/datadog/profiling/profiler.rb +13 -5
  428. data/lib/datadog/profiling/scheduler.rb +2 -2
  429. data/lib/datadog/profiling/sequence_tracker.rb +1 -1
  430. data/lib/datadog/profiling/stack_recorder.rb +0 -8
  431. data/lib/datadog/profiling/tag_builder.rb +19 -19
  432. data/lib/datadog/profiling/tasks/exec.rb +9 -4
  433. data/lib/datadog/profiling/tasks/help.rb +1 -0
  434. data/lib/datadog/profiling/tasks/setup.rb +2 -2
  435. data/lib/datadog/profiling.rb +32 -29
  436. data/lib/datadog/ruby_version.rb +25 -0
  437. data/lib/datadog/single_step_instrument.rb +2 -2
  438. data/lib/datadog/symbol_database/component.rb +734 -0
  439. data/lib/datadog/symbol_database/configuration.rb +73 -0
  440. data/lib/datadog/symbol_database/extensions.rb +19 -0
  441. data/lib/datadog/symbol_database/extractor.rb +1110 -0
  442. data/lib/datadog/symbol_database/file_hash.rb +48 -0
  443. data/lib/datadog/symbol_database/logger.rb +43 -0
  444. data/lib/datadog/symbol_database/remote.rb +195 -0
  445. data/lib/datadog/symbol_database/scope.rb +102 -0
  446. data/lib/datadog/symbol_database/scope_batcher.rb +292 -0
  447. data/lib/datadog/symbol_database/service_version.rb +66 -0
  448. data/lib/datadog/symbol_database/symbol.rb +69 -0
  449. data/lib/datadog/symbol_database/transport/http/endpoint.rb +28 -0
  450. data/lib/datadog/symbol_database/transport/http.rb +45 -0
  451. data/lib/datadog/symbol_database/transport.rb +54 -0
  452. data/lib/datadog/symbol_database/uploader.rb +230 -0
  453. data/lib/datadog/symbol_database.rb +71 -0
  454. data/lib/datadog/tracing/analytics.rb +1 -1
  455. data/lib/datadog/tracing/buffer.rb +8 -8
  456. data/lib/datadog/tracing/client_ip.rb +4 -4
  457. data/lib/datadog/tracing/component.rb +39 -7
  458. data/lib/datadog/tracing/configuration/dynamic/option.rb +4 -0
  459. data/lib/datadog/tracing/configuration/dynamic.rb +13 -11
  460. data/lib/datadog/tracing/configuration/ext.rb +52 -38
  461. data/lib/datadog/tracing/configuration/http.rb +2 -2
  462. data/lib/datadog/tracing/configuration/settings.rb +51 -17
  463. data/lib/datadog/tracing/context.rb +1 -1
  464. data/lib/datadog/tracing/context_provider.rb +2 -2
  465. data/lib/datadog/tracing/contrib/action_cable/configuration/settings.rb +2 -2
  466. data/lib/datadog/tracing/contrib/action_cable/event.rb +4 -4
  467. data/lib/datadog/tracing/contrib/action_cable/events/broadcast.rb +9 -6
  468. data/lib/datadog/tracing/contrib/action_cable/events/perform_action.rb +8 -5
  469. data/lib/datadog/tracing/contrib/action_cable/events/transmit.rb +9 -6
  470. data/lib/datadog/tracing/contrib/action_cable/events.rb +5 -5
  471. data/lib/datadog/tracing/contrib/action_cable/ext.rb +18 -18
  472. data/lib/datadog/tracing/contrib/action_cable/instrumentation.rb +8 -5
  473. data/lib/datadog/tracing/contrib/action_cable/integration.rb +7 -7
  474. data/lib/datadog/tracing/contrib/action_cable/patcher.rb +4 -4
  475. data/lib/datadog/tracing/contrib/action_mailer/configuration/settings.rb +2 -2
  476. data/lib/datadog/tracing/contrib/action_mailer/event.rb +7 -4
  477. data/lib/datadog/tracing/contrib/action_mailer/events/deliver.rb +8 -8
  478. data/lib/datadog/tracing/contrib/action_mailer/events/process.rb +4 -4
  479. data/lib/datadog/tracing/contrib/action_mailer/events.rb +3 -3
  480. data/lib/datadog/tracing/contrib/action_mailer/ext.rb +18 -18
  481. data/lib/datadog/tracing/contrib/action_mailer/integration.rb +7 -7
  482. data/lib/datadog/tracing/contrib/action_mailer/patcher.rb +3 -3
  483. data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +15 -12
  484. data/lib/datadog/tracing/contrib/action_pack/action_controller/patcher.rb +2 -2
  485. data/lib/datadog/tracing/contrib/action_pack/action_dispatch/instrumentation.rb +31 -3
  486. data/lib/datadog/tracing/contrib/action_pack/action_dispatch/patcher.rb +5 -3
  487. data/lib/datadog/tracing/contrib/action_pack/configuration/settings.rb +3 -3
  488. data/lib/datadog/tracing/contrib/action_pack/ext.rb +10 -10
  489. data/lib/datadog/tracing/contrib/action_pack/integration.rb +7 -7
  490. data/lib/datadog/tracing/contrib/action_pack/patcher.rb +3 -3
  491. data/lib/datadog/tracing/contrib/action_pack/utils.rb +1 -1
  492. data/lib/datadog/tracing/contrib/action_view/configuration/settings.rb +3 -3
  493. data/lib/datadog/tracing/contrib/action_view/event.rb +1 -1
  494. data/lib/datadog/tracing/contrib/action_view/events/render_partial.rb +10 -7
  495. data/lib/datadog/tracing/contrib/action_view/events/render_template.rb +11 -8
  496. data/lib/datadog/tracing/contrib/action_view/events.rb +3 -3
  497. data/lib/datadog/tracing/contrib/action_view/ext.rb +10 -10
  498. data/lib/datadog/tracing/contrib/action_view/integration.rb +11 -11
  499. data/lib/datadog/tracing/contrib/action_view/patcher.rb +5 -5
  500. data/lib/datadog/tracing/contrib/action_view/utils.rb +2 -2
  501. data/lib/datadog/tracing/contrib/active_job/configuration/settings.rb +2 -2
  502. data/lib/datadog/tracing/contrib/active_job/data_streams.rb +62 -0
  503. data/lib/datadog/tracing/contrib/active_job/event.rb +3 -3
  504. data/lib/datadog/tracing/contrib/active_job/events/discard.rb +10 -7
  505. data/lib/datadog/tracing/contrib/active_job/events/enqueue.rb +10 -7
  506. data/lib/datadog/tracing/contrib/active_job/events/enqueue_at.rb +10 -7
  507. data/lib/datadog/tracing/contrib/active_job/events/enqueue_retry.rb +10 -7
  508. data/lib/datadog/tracing/contrib/active_job/events/perform.rb +10 -7
  509. data/lib/datadog/tracing/contrib/active_job/events/retry_stopped.rb +10 -7
  510. data/lib/datadog/tracing/contrib/active_job/events.rb +6 -6
  511. data/lib/datadog/tracing/contrib/active_job/ext.rb +23 -23
  512. data/lib/datadog/tracing/contrib/active_job/integration.rb +7 -7
  513. data/lib/datadog/tracing/contrib/active_job/patcher.rb +17 -5
  514. data/lib/datadog/tracing/contrib/active_model_serializers/configuration/settings.rb +2 -2
  515. data/lib/datadog/tracing/contrib/active_model_serializers/event.rb +4 -4
  516. data/lib/datadog/tracing/contrib/active_model_serializers/events/render.rb +7 -7
  517. data/lib/datadog/tracing/contrib/active_model_serializers/events/serialize.rb +8 -9
  518. data/lib/datadog/tracing/contrib/active_model_serializers/events.rb +3 -3
  519. data/lib/datadog/tracing/contrib/active_model_serializers/ext.rb +10 -10
  520. data/lib/datadog/tracing/contrib/active_model_serializers/integration.rb +5 -5
  521. data/lib/datadog/tracing/contrib/active_model_serializers/patcher.rb +3 -3
  522. data/lib/datadog/tracing/contrib/active_record/configuration/makara_resolver.rb +1 -1
  523. data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +9 -9
  524. data/lib/datadog/tracing/contrib/active_record/configuration/settings.rb +4 -4
  525. data/lib/datadog/tracing/contrib/active_record/event.rb +1 -1
  526. data/lib/datadog/tracing/contrib/active_record/events/instantiation.rb +9 -9
  527. data/lib/datadog/tracing/contrib/active_record/events/sql.rb +12 -14
  528. data/lib/datadog/tracing/contrib/active_record/events.rb +3 -3
  529. data/lib/datadog/tracing/contrib/active_record/ext.rb +15 -15
  530. data/lib/datadog/tracing/contrib/active_record/integration.rb +11 -11
  531. data/lib/datadog/tracing/contrib/active_record/patcher.rb +2 -2
  532. data/lib/datadog/tracing/contrib/active_record/utils.rb +4 -4
  533. data/lib/datadog/tracing/contrib/active_support/cache/event.rb +1 -1
  534. data/lib/datadog/tracing/contrib/active_support/cache/events/cache.rb +14 -17
  535. data/lib/datadog/tracing/contrib/active_support/cache/events.rb +1 -1
  536. data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +5 -8
  537. data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +5 -5
  538. data/lib/datadog/tracing/contrib/active_support/cache/redis.rb +4 -4
  539. data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +3 -3
  540. data/lib/datadog/tracing/contrib/active_support/ext.rb +16 -16
  541. data/lib/datadog/tracing/contrib/active_support/integration.rb +8 -8
  542. data/lib/datadog/tracing/contrib/active_support/notifications/event.rb +1 -1
  543. data/lib/datadog/tracing/contrib/active_support/notifications/subscriber.rb +2 -2
  544. data/lib/datadog/tracing/contrib/active_support/notifications/subscription.rb +3 -3
  545. data/lib/datadog/tracing/contrib/active_support/patcher.rb +2 -2
  546. data/lib/datadog/tracing/contrib/analytics.rb +1 -1
  547. data/lib/datadog/tracing/contrib/auto_instrument.rb +4 -4
  548. data/lib/datadog/tracing/contrib/aws/configuration/settings.rb +3 -3
  549. data/lib/datadog/tracing/contrib/aws/ext.rb +26 -26
  550. data/lib/datadog/tracing/contrib/aws/instrumentation.rb +7 -11
  551. data/lib/datadog/tracing/contrib/aws/integration.rb +9 -9
  552. data/lib/datadog/tracing/contrib/aws/parsed_context.rb +1 -1
  553. data/lib/datadog/tracing/contrib/aws/patcher.rb +5 -5
  554. data/lib/datadog/tracing/contrib/aws/service/dynamodb.rb +2 -2
  555. data/lib/datadog/tracing/contrib/aws/service/eventbridge.rb +2 -2
  556. data/lib/datadog/tracing/contrib/aws/service/kinesis.rb +4 -4
  557. data/lib/datadog/tracing/contrib/aws/service/s3.rb +2 -2
  558. data/lib/datadog/tracing/contrib/aws/service/sns.rb +3 -3
  559. data/lib/datadog/tracing/contrib/aws/service/sqs.rb +3 -3
  560. data/lib/datadog/tracing/contrib/aws/service/states.rb +5 -5
  561. data/lib/datadog/tracing/contrib/aws/services.rb +14 -14
  562. data/lib/datadog/tracing/contrib/component.rb +1 -1
  563. data/lib/datadog/tracing/contrib/concurrent_ruby/async_patch.rb +1 -1
  564. data/lib/datadog/tracing/contrib/concurrent_ruby/configuration/settings.rb +2 -2
  565. data/lib/datadog/tracing/contrib/concurrent_ruby/context_composite_executor_service.rb +1 -1
  566. data/lib/datadog/tracing/contrib/concurrent_ruby/ext.rb +2 -2
  567. data/lib/datadog/tracing/contrib/concurrent_ruby/future_patch.rb +1 -1
  568. data/lib/datadog/tracing/contrib/concurrent_ruby/integration.rb +6 -6
  569. data/lib/datadog/tracing/contrib/concurrent_ruby/patcher.rb +4 -4
  570. data/lib/datadog/tracing/contrib/concurrent_ruby/promises_future_patch.rb +1 -1
  571. data/lib/datadog/tracing/contrib/configurable.rb +20 -5
  572. data/lib/datadog/tracing/contrib/configuration/resolver.rb +14 -4
  573. data/lib/datadog/tracing/contrib/configuration/resolvers/pattern_resolver.rb +1 -1
  574. data/lib/datadog/tracing/contrib/configuration/settings.rb +2 -2
  575. data/lib/datadog/tracing/contrib/dalli/configuration/settings.rb +2 -2
  576. data/lib/datadog/tracing/contrib/dalli/ext.rb +13 -13
  577. data/lib/datadog/tracing/contrib/dalli/instrumentation.rb +6 -10
  578. data/lib/datadog/tracing/contrib/dalli/integration.rb +7 -7
  579. data/lib/datadog/tracing/contrib/dalli/patcher.rb +3 -3
  580. data/lib/datadog/tracing/contrib/dalli/quantize.rb +3 -3
  581. data/lib/datadog/tracing/contrib/delayed_job/configuration/settings.rb +2 -2
  582. data/lib/datadog/tracing/contrib/delayed_job/ext.rb +14 -14
  583. data/lib/datadog/tracing/contrib/delayed_job/integration.rb +5 -5
  584. data/lib/datadog/tracing/contrib/delayed_job/patcher.rb +3 -3
  585. data/lib/datadog/tracing/contrib/delayed_job/plugin.rb +7 -5
  586. data/lib/datadog/tracing/contrib/delayed_job/server_internal_tracer/worker.rb +1 -0
  587. data/lib/datadog/tracing/contrib/elasticsearch/configuration/settings.rb +2 -2
  588. data/lib/datadog/tracing/contrib/elasticsearch/ext.rb +15 -15
  589. data/lib/datadog/tracing/contrib/elasticsearch/integration.rb +6 -6
  590. data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +12 -16
  591. data/lib/datadog/tracing/contrib/elasticsearch/quantize.rb +4 -4
  592. data/lib/datadog/tracing/contrib/ethon/configuration/settings.rb +2 -2
  593. data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +9 -13
  594. data/lib/datadog/tracing/contrib/ethon/ext.rb +13 -13
  595. data/lib/datadog/tracing/contrib/ethon/integration.rb +6 -6
  596. data/lib/datadog/tracing/contrib/ethon/multi_patch.rb +4 -11
  597. data/lib/datadog/tracing/contrib/ethon/patcher.rb +3 -3
  598. data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +5 -5
  599. data/lib/datadog/tracing/contrib/excon/ext.rb +11 -11
  600. data/lib/datadog/tracing/contrib/excon/integration.rb +6 -6
  601. data/lib/datadog/tracing/contrib/excon/middleware.rb +10 -14
  602. data/lib/datadog/tracing/contrib/excon/patcher.rb +2 -2
  603. data/lib/datadog/tracing/contrib/ext.rb +20 -18
  604. data/lib/datadog/tracing/contrib/extensions.rb +11 -2
  605. data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +4 -4
  606. data/lib/datadog/tracing/contrib/faraday/ext.rb +11 -11
  607. data/lib/datadog/tracing/contrib/faraday/integration.rb +6 -6
  608. data/lib/datadog/tracing/contrib/faraday/middleware.rb +10 -14
  609. data/lib/datadog/tracing/contrib/faraday/patcher.rb +6 -6
  610. data/lib/datadog/tracing/contrib/grape/configuration/settings.rb +4 -4
  611. data/lib/datadog/tracing/contrib/grape/endpoint.rb +28 -25
  612. data/lib/datadog/tracing/contrib/grape/ext.rb +15 -15
  613. data/lib/datadog/tracing/contrib/grape/instrumentation.rb +3 -3
  614. data/lib/datadog/tracing/contrib/grape/integration.rb +5 -5
  615. data/lib/datadog/tracing/contrib/grape/patcher.rb +5 -5
  616. data/lib/datadog/tracing/contrib/graphql/configuration/error_extension_env_parser.rb +1 -1
  617. data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +3 -3
  618. data/lib/datadog/tracing/contrib/graphql/ext.rb +9 -9
  619. data/lib/datadog/tracing/contrib/graphql/integration.rb +9 -9
  620. data/lib/datadog/tracing/contrib/graphql/patcher.rb +7 -7
  621. data/lib/datadog/tracing/contrib/graphql/unified_trace.rb +38 -37
  622. data/lib/datadog/tracing/contrib/graphql/unified_trace_patcher.rb +2 -2
  623. data/lib/datadog/tracing/contrib/grpc/configuration/settings.rb +2 -2
  624. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +11 -15
  625. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +11 -15
  626. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor.rb +6 -6
  627. data/lib/datadog/tracing/contrib/grpc/distributed/fetcher.rb +1 -1
  628. data/lib/datadog/tracing/contrib/grpc/distributed/propagation.rb +11 -9
  629. data/lib/datadog/tracing/contrib/grpc/ext.rb +14 -14
  630. data/lib/datadog/tracing/contrib/grpc/formatting.rb +7 -7
  631. data/lib/datadog/tracing/contrib/grpc/integration.rb +5 -5
  632. data/lib/datadog/tracing/contrib/grpc/intercept_with_datadog.rb +1 -1
  633. data/lib/datadog/tracing/contrib/grpc/patcher.rb +3 -3
  634. data/lib/datadog/tracing/contrib/grpc.rb +7 -6
  635. data/lib/datadog/tracing/contrib/hanami/action_tracer.rb +4 -3
  636. data/lib/datadog/tracing/contrib/hanami/configuration/settings.rb +2 -2
  637. data/lib/datadog/tracing/contrib/hanami/ext.rb +8 -8
  638. data/lib/datadog/tracing/contrib/hanami/integration.rb +6 -6
  639. data/lib/datadog/tracing/contrib/hanami/patcher.rb +5 -5
  640. data/lib/datadog/tracing/contrib/hanami/renderer_policy_tracing.rb +4 -3
  641. data/lib/datadog/tracing/contrib/hanami/router_tracing.rb +6 -4
  642. data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +1 -1
  643. data/lib/datadog/tracing/contrib/http/configuration/settings.rb +4 -4
  644. data/lib/datadog/tracing/contrib/http/distributed/fetcher.rb +3 -3
  645. data/lib/datadog/tracing/contrib/http/distributed/propagation.rb +10 -8
  646. data/lib/datadog/tracing/contrib/http/ext.rb +11 -11
  647. data/lib/datadog/tracing/contrib/http/instrumentation.rb +10 -14
  648. data/lib/datadog/tracing/contrib/http/integration.rb +7 -7
  649. data/lib/datadog/tracing/contrib/http/patcher.rb +3 -3
  650. data/lib/datadog/tracing/contrib/http.rb +7 -6
  651. data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +4 -4
  652. data/lib/datadog/tracing/contrib/httpclient/ext.rb +11 -11
  653. data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +12 -12
  654. data/lib/datadog/tracing/contrib/httpclient/integration.rb +6 -6
  655. data/lib/datadog/tracing/contrib/httpclient/patcher.rb +3 -3
  656. data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +4 -4
  657. data/lib/datadog/tracing/contrib/httprb/ext.rb +11 -11
  658. data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +10 -14
  659. data/lib/datadog/tracing/contrib/httprb/integration.rb +7 -7
  660. data/lib/datadog/tracing/contrib/httprb/patcher.rb +3 -3
  661. data/lib/datadog/tracing/contrib/integration.rb +3 -3
  662. data/lib/datadog/tracing/contrib/kafka/configuration/settings.rb +2 -2
  663. data/lib/datadog/tracing/contrib/kafka/event.rb +4 -3
  664. data/lib/datadog/tracing/contrib/kafka/events/connection/request.rb +7 -3
  665. data/lib/datadog/tracing/contrib/kafka/events/consumer/process_batch.rb +4 -4
  666. data/lib/datadog/tracing/contrib/kafka/events/consumer/process_message.rb +4 -4
  667. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/heartbeat.rb +5 -5
  668. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/join_group.rb +5 -5
  669. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/leave_group.rb +5 -5
  670. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/sync_group.rb +5 -5
  671. data/lib/datadog/tracing/contrib/kafka/events/produce_operation/send_messages.rb +10 -5
  672. data/lib/datadog/tracing/contrib/kafka/events/producer/deliver_messages.rb +10 -5
  673. data/lib/datadog/tracing/contrib/kafka/events.rb +10 -10
  674. data/lib/datadog/tracing/contrib/kafka/ext.rb +40 -40
  675. data/lib/datadog/tracing/contrib/kafka/instrumentation/consumer.rb +4 -4
  676. data/lib/datadog/tracing/contrib/kafka/instrumentation/producer.rb +6 -6
  677. data/lib/datadog/tracing/contrib/kafka/integration.rb +6 -6
  678. data/lib/datadog/tracing/contrib/kafka/patcher.rb +5 -5
  679. data/lib/datadog/tracing/contrib/karafka/configuration/settings.rb +2 -2
  680. data/lib/datadog/tracing/contrib/karafka/distributed/propagation.rb +11 -9
  681. data/lib/datadog/tracing/contrib/karafka/ext.rb +13 -13
  682. data/lib/datadog/tracing/contrib/karafka/integration.rb +5 -5
  683. data/lib/datadog/tracing/contrib/karafka/monitor.rb +14 -14
  684. data/lib/datadog/tracing/contrib/karafka/patcher.rb +9 -9
  685. data/lib/datadog/tracing/contrib/karafka.rb +7 -6
  686. data/lib/datadog/tracing/contrib/lograge/configuration/settings.rb +2 -2
  687. data/lib/datadog/tracing/contrib/lograge/ext.rb +1 -1
  688. data/lib/datadog/tracing/contrib/lograge/integration.rb +5 -5
  689. data/lib/datadog/tracing/contrib/lograge/patcher.rb +9 -9
  690. data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +2 -2
  691. data/lib/datadog/tracing/contrib/mongodb/ext.rb +18 -18
  692. data/lib/datadog/tracing/contrib/mongodb/instrumentation.rb +3 -3
  693. data/lib/datadog/tracing/contrib/mongodb/integration.rb +7 -7
  694. data/lib/datadog/tracing/contrib/mongodb/parsers.rb +9 -9
  695. data/lib/datadog/tracing/contrib/mongodb/patcher.rb +3 -3
  696. data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +18 -21
  697. data/lib/datadog/tracing/contrib/mysql2/configuration/settings.rb +3 -3
  698. data/lib/datadog/tracing/contrib/mysql2/ext.rb +11 -11
  699. data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +7 -11
  700. data/lib/datadog/tracing/contrib/mysql2/integration.rb +5 -5
  701. data/lib/datadog/tracing/contrib/mysql2/patcher.rb +2 -2
  702. data/lib/datadog/tracing/contrib/opensearch/configuration/settings.rb +2 -2
  703. data/lib/datadog/tracing/contrib/opensearch/ext.rb +23 -23
  704. data/lib/datadog/tracing/contrib/opensearch/integration.rb +6 -6
  705. data/lib/datadog/tracing/contrib/opensearch/patcher.rb +15 -19
  706. data/lib/datadog/tracing/contrib/opensearch/quantize.rb +5 -5
  707. data/lib/datadog/tracing/contrib/patchable.rb +1 -1
  708. data/lib/datadog/tracing/contrib/patcher.rb +3 -3
  709. data/lib/datadog/tracing/contrib/pg/configuration/settings.rb +3 -3
  710. data/lib/datadog/tracing/contrib/pg/ext.rb +19 -19
  711. data/lib/datadog/tracing/contrib/pg/instrumentation.rb +19 -23
  712. data/lib/datadog/tracing/contrib/pg/integration.rb +5 -5
  713. data/lib/datadog/tracing/contrib/pg/patcher.rb +2 -2
  714. data/lib/datadog/tracing/contrib/presto/configuration/settings.rb +2 -2
  715. data/lib/datadog/tracing/contrib/presto/ext.rb +21 -21
  716. data/lib/datadog/tracing/contrib/presto/instrumentation.rb +8 -10
  717. data/lib/datadog/tracing/contrib/presto/integration.rb +6 -6
  718. data/lib/datadog/tracing/contrib/presto/patcher.rb +4 -4
  719. data/lib/datadog/tracing/contrib/propagation/sql_comment/comment.rb +2 -2
  720. data/lib/datadog/tracing/contrib/propagation/sql_comment/ext.rb +19 -16
  721. data/lib/datadog/tracing/contrib/propagation/sql_comment/mode.rb +3 -3
  722. data/lib/datadog/tracing/contrib/propagation/sql_comment.rb +5 -5
  723. data/lib/datadog/tracing/contrib/que/configuration/settings.rb +2 -2
  724. data/lib/datadog/tracing/contrib/que/ext.rb +19 -19
  725. data/lib/datadog/tracing/contrib/que/integration.rb +6 -6
  726. data/lib/datadog/tracing/contrib/que/patcher.rb +1 -1
  727. data/lib/datadog/tracing/contrib/que/tracer.rb +3 -2
  728. data/lib/datadog/tracing/contrib/racecar/configuration/settings.rb +3 -3
  729. data/lib/datadog/tracing/contrib/racecar/event.rb +5 -9
  730. data/lib/datadog/tracing/contrib/racecar/events/batch.rb +3 -3
  731. data/lib/datadog/tracing/contrib/racecar/events/consume.rb +3 -3
  732. data/lib/datadog/tracing/contrib/racecar/events/message.rb +3 -3
  733. data/lib/datadog/tracing/contrib/racecar/events.rb +4 -4
  734. data/lib/datadog/tracing/contrib/racecar/ext.rb +18 -18
  735. data/lib/datadog/tracing/contrib/racecar/integration.rb +5 -5
  736. data/lib/datadog/tracing/contrib/racecar/patcher.rb +3 -3
  737. data/lib/datadog/tracing/contrib/rack/configuration/settings.rb +9 -3
  738. data/lib/datadog/tracing/contrib/rack/ext.rb +43 -16
  739. data/lib/datadog/tracing/contrib/rack/header_collection.rb +3 -3
  740. data/lib/datadog/tracing/contrib/rack/header_tagging.rb +24 -1
  741. data/lib/datadog/tracing/contrib/rack/integration.rb +6 -6
  742. data/lib/datadog/tracing/contrib/rack/middlewares.rb +28 -25
  743. data/lib/datadog/tracing/contrib/rack/patcher.rb +5 -5
  744. data/lib/datadog/tracing/contrib/rack/request_queue.rb +4 -4
  745. data/lib/datadog/tracing/contrib/rack/route_inference.rb +12 -10
  746. data/lib/datadog/tracing/contrib/rack/trace_proxy_middleware.rb +124 -6
  747. data/lib/datadog/tracing/contrib/rails/auto_instrument_railtie.rb +1 -1
  748. data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +3 -3
  749. data/lib/datadog/tracing/contrib/rails/ext.rb +15 -15
  750. data/lib/datadog/tracing/contrib/rails/framework.rb +11 -11
  751. data/lib/datadog/tracing/contrib/rails/integration.rb +5 -5
  752. data/lib/datadog/tracing/contrib/rails/log_injection.rb +1 -1
  753. data/lib/datadog/tracing/contrib/rails/middlewares.rb +1 -1
  754. data/lib/datadog/tracing/contrib/rails/patcher.rb +8 -9
  755. data/lib/datadog/tracing/contrib/rails/railtie.rb +4 -4
  756. data/lib/datadog/tracing/contrib/rails/runner.rb +4 -2
  757. data/lib/datadog/tracing/contrib/rake/configuration/settings.rb +3 -3
  758. data/lib/datadog/tracing/contrib/rake/ext.rb +12 -12
  759. data/lib/datadog/tracing/contrib/rake/instrumentation.rb +9 -7
  760. data/lib/datadog/tracing/contrib/rake/integration.rb +5 -5
  761. data/lib/datadog/tracing/contrib/rake/patcher.rb +3 -3
  762. data/lib/datadog/tracing/contrib/redis/configuration/resolver.rb +3 -3
  763. data/lib/datadog/tracing/contrib/redis/configuration/settings.rb +2 -2
  764. data/lib/datadog/tracing/contrib/redis/ext.rb +16 -16
  765. data/lib/datadog/tracing/contrib/redis/instrumentation.rb +6 -6
  766. data/lib/datadog/tracing/contrib/redis/integration.rb +7 -7
  767. data/lib/datadog/tracing/contrib/redis/patcher.rb +10 -10
  768. data/lib/datadog/tracing/contrib/redis/quantize.rb +40 -6
  769. data/lib/datadog/tracing/contrib/redis/tags.rb +6 -11
  770. data/lib/datadog/tracing/contrib/redis/trace_middleware.rb +16 -8
  771. data/lib/datadog/tracing/contrib/resque/configuration/settings.rb +2 -2
  772. data/lib/datadog/tracing/contrib/resque/ext.rb +7 -7
  773. data/lib/datadog/tracing/contrib/resque/integration.rb +5 -5
  774. data/lib/datadog/tracing/contrib/resque/patcher.rb +3 -3
  775. data/lib/datadog/tracing/contrib/resque/resque_job.rb +6 -5
  776. data/lib/datadog/tracing/contrib/rest_client/configuration/settings.rb +2 -2
  777. data/lib/datadog/tracing/contrib/rest_client/ext.rb +10 -10
  778. data/lib/datadog/tracing/contrib/rest_client/integration.rb +6 -6
  779. data/lib/datadog/tracing/contrib/rest_client/patcher.rb +2 -2
  780. data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +6 -10
  781. data/lib/datadog/tracing/contrib/roda/configuration/settings.rb +2 -2
  782. data/lib/datadog/tracing/contrib/roda/ext.rb +6 -5
  783. data/lib/datadog/tracing/contrib/roda/instrumentation.rb +8 -5
  784. data/lib/datadog/tracing/contrib/roda/integration.rb +6 -6
  785. data/lib/datadog/tracing/contrib/roda/patcher.rb +3 -3
  786. data/lib/datadog/tracing/contrib/semantic_logger/configuration/settings.rb +2 -2
  787. data/lib/datadog/tracing/contrib/semantic_logger/ext.rb +1 -1
  788. data/lib/datadog/tracing/contrib/semantic_logger/integration.rb +5 -5
  789. data/lib/datadog/tracing/contrib/semantic_logger/patcher.rb +2 -2
  790. data/lib/datadog/tracing/contrib/sequel/configuration/settings.rb +2 -2
  791. data/lib/datadog/tracing/contrib/sequel/database.rb +7 -10
  792. data/lib/datadog/tracing/contrib/sequel/dataset.rb +6 -5
  793. data/lib/datadog/tracing/contrib/sequel/ext.rb +12 -8
  794. data/lib/datadog/tracing/contrib/sequel/integration.rb +5 -5
  795. data/lib/datadog/tracing/contrib/sequel/jdbc_connection_string.rb +140 -0
  796. data/lib/datadog/tracing/contrib/sequel/patcher.rb +3 -3
  797. data/lib/datadog/tracing/contrib/sequel/utils.rb +103 -16
  798. data/lib/datadog/tracing/contrib/shoryuken/configuration/settings.rb +2 -2
  799. data/lib/datadog/tracing/contrib/shoryuken/ext.rb +12 -12
  800. data/lib/datadog/tracing/contrib/shoryuken/integration.rb +6 -6
  801. data/lib/datadog/tracing/contrib/shoryuken/patcher.rb +1 -1
  802. data/lib/datadog/tracing/contrib/shoryuken/tracer.rb +3 -2
  803. data/lib/datadog/tracing/contrib/sidekiq/client_tracer.rb +9 -8
  804. data/lib/datadog/tracing/contrib/sidekiq/configuration/settings.rb +2 -2
  805. data/lib/datadog/tracing/contrib/sidekiq/distributed/propagation.rb +12 -10
  806. data/lib/datadog/tracing/contrib/sidekiq/ext.rb +30 -30
  807. data/lib/datadog/tracing/contrib/sidekiq/integration.rb +7 -7
  808. data/lib/datadog/tracing/contrib/sidekiq/patcher.rb +8 -8
  809. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/heartbeat.rb +2 -0
  810. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/job_fetch.rb +1 -0
  811. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/redis_info.rb +1 -0
  812. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/scheduled_poller.rb +2 -0
  813. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/stop.rb +1 -0
  814. data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +15 -14
  815. data/lib/datadog/tracing/contrib/sidekiq/utils.rb +10 -10
  816. data/lib/datadog/tracing/contrib/sidekiq.rb +7 -6
  817. data/lib/datadog/tracing/contrib/sinatra/configuration/settings.rb +3 -3
  818. data/lib/datadog/tracing/contrib/sinatra/env.rb +6 -6
  819. data/lib/datadog/tracing/contrib/sinatra/ext.rb +17 -17
  820. data/lib/datadog/tracing/contrib/sinatra/framework.rb +2 -2
  821. data/lib/datadog/tracing/contrib/sinatra/integration.rb +5 -5
  822. data/lib/datadog/tracing/contrib/sinatra/patcher.rb +5 -5
  823. data/lib/datadog/tracing/contrib/sinatra/tracer.rb +11 -10
  824. data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +9 -8
  825. data/lib/datadog/tracing/contrib/sneakers/configuration/settings.rb +1 -1
  826. data/lib/datadog/tracing/contrib/sneakers/ext.rb +12 -12
  827. data/lib/datadog/tracing/contrib/sneakers/integration.rb +7 -7
  828. data/lib/datadog/tracing/contrib/sneakers/patcher.rb +2 -2
  829. data/lib/datadog/tracing/contrib/sneakers/tracer.rb +5 -4
  830. data/lib/datadog/tracing/contrib/span_attribute_schema.rb +2 -2
  831. data/lib/datadog/tracing/contrib/status_range_env_parser.rb +2 -2
  832. data/lib/datadog/tracing/contrib/status_range_matcher.rb +4 -0
  833. data/lib/datadog/tracing/contrib/stripe/configuration/settings.rb +2 -2
  834. data/lib/datadog/tracing/contrib/stripe/ext.rb +12 -12
  835. data/lib/datadog/tracing/contrib/stripe/integration.rb +5 -5
  836. data/lib/datadog/tracing/contrib/stripe/patcher.rb +2 -2
  837. data/lib/datadog/tracing/contrib/stripe/request.rb +4 -4
  838. data/lib/datadog/tracing/contrib/sucker_punch/configuration/settings.rb +2 -2
  839. data/lib/datadog/tracing/contrib/sucker_punch/exception_handler.rb +1 -1
  840. data/lib/datadog/tracing/contrib/sucker_punch/ext.rb +13 -13
  841. data/lib/datadog/tracing/contrib/sucker_punch/instrumentation.rb +5 -4
  842. data/lib/datadog/tracing/contrib/sucker_punch/integration.rb +5 -5
  843. data/lib/datadog/tracing/contrib/sucker_punch/patcher.rb +4 -4
  844. data/lib/datadog/tracing/contrib/trilogy/configuration/settings.rb +3 -3
  845. data/lib/datadog/tracing/contrib/trilogy/ext.rb +11 -11
  846. data/lib/datadog/tracing/contrib/trilogy/instrumentation.rb +7 -11
  847. data/lib/datadog/tracing/contrib/trilogy/integration.rb +5 -5
  848. data/lib/datadog/tracing/contrib/trilogy/patcher.rb +2 -2
  849. data/lib/datadog/tracing/contrib/utils/database.rb +5 -5
  850. data/lib/datadog/tracing/contrib/utils/quantization/{hash.rb → hash_formatter.rb} +3 -3
  851. data/lib/datadog/tracing/contrib/utils/quantization/http.rb +10 -10
  852. data/lib/datadog/tracing/contrib/waterdrop/configuration/settings.rb +2 -2
  853. data/lib/datadog/tracing/contrib/waterdrop/distributed/propagation.rb +11 -9
  854. data/lib/datadog/tracing/contrib/waterdrop/ext.rb +4 -4
  855. data/lib/datadog/tracing/contrib/waterdrop/integration.rb +5 -5
  856. data/lib/datadog/tracing/contrib/waterdrop/middleware.rb +2 -2
  857. data/lib/datadog/tracing/contrib/waterdrop/patcher.rb +7 -7
  858. data/lib/datadog/tracing/contrib/waterdrop/producer.rb +3 -3
  859. data/lib/datadog/tracing/contrib/waterdrop.rb +7 -6
  860. data/lib/datadog/tracing/contrib.rb +62 -54
  861. data/lib/datadog/tracing/correlation.rb +12 -12
  862. data/lib/datadog/tracing/diagnostics/environment_logger.rb +14 -12
  863. data/lib/datadog/tracing/diagnostics/ext.rb +19 -19
  864. data/lib/datadog/tracing/diagnostics/health.rb +1 -1
  865. data/lib/datadog/tracing/distributed/b3_multi.rb +8 -8
  866. data/lib/datadog/tracing/distributed/b3_single.rb +4 -4
  867. data/lib/datadog/tracing/distributed/baggage.rb +81 -28
  868. data/lib/datadog/tracing/distributed/datadog.rb +34 -32
  869. data/lib/datadog/tracing/distributed/fetcher.rb +1 -1
  870. data/lib/datadog/tracing/distributed/helpers.rb +3 -3
  871. data/lib/datadog/tracing/distributed/propagation.rb +46 -11
  872. data/lib/datadog/tracing/distributed/propagation_policy.rb +5 -0
  873. data/lib/datadog/tracing/distributed/trace_context.rb +29 -263
  874. data/lib/datadog/tracing/distributed/trace_state/datadog.rb +233 -0
  875. data/lib/datadog/tracing/distributed/trace_state/ext.rb +44 -0
  876. data/lib/datadog/tracing/distributed/trace_state/open_telemetry.rb +156 -0
  877. data/lib/datadog/tracing/distributed/trace_state.rb +121 -0
  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 +76 -66
  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/otel_thread_context.rb +34 -0
  888. data/lib/datadog/tracing/pipeline/span_filter.rb +2 -2
  889. data/lib/datadog/tracing/pipeline.rb +3 -3
  890. data/lib/datadog/tracing/remote.rb +227 -21
  891. data/lib/datadog/tracing/sampling/all_sampler.rb +1 -1
  892. data/lib/datadog/tracing/sampling/ext.rb +9 -7
  893. data/lib/datadog/tracing/sampling/matcher.rb +4 -4
  894. data/lib/datadog/tracing/sampling/priority_sampler.rb +17 -4
  895. data/lib/datadog/tracing/sampling/rate_by_key_sampler.rb +3 -3
  896. data/lib/datadog/tracing/sampling/rate_by_service_sampler.rb +2 -2
  897. data/lib/datadog/tracing/sampling/rate_sampler.rb +2 -2
  898. data/lib/datadog/tracing/sampling/rule.rb +5 -5
  899. data/lib/datadog/tracing/sampling/rule_sampler.rb +68 -37
  900. data/lib/datadog/tracing/sampling/sampler.rb +2 -2
  901. data/lib/datadog/tracing/sampling/span/ext.rb +3 -3
  902. data/lib/datadog/tracing/sampling/span/matcher.rb +2 -2
  903. data/lib/datadog/tracing/sampling/span/rule.rb +1 -1
  904. data/lib/datadog/tracing/sampling/span/rule_parser.rb +10 -10
  905. data/lib/datadog/tracing/span.rb +9 -9
  906. data/lib/datadog/tracing/span_event.rb +5 -5
  907. data/lib/datadog/tracing/span_operation.rb +39 -26
  908. data/lib/datadog/tracing/sync_writer.rb +12 -7
  909. data/lib/datadog/tracing/trace_digest.rb +29 -4
  910. data/lib/datadog/tracing/trace_operation.rb +112 -31
  911. data/lib/datadog/tracing/trace_segment.rb +10 -10
  912. data/lib/datadog/tracing/tracer.rb +68 -27
  913. data/lib/datadog/tracing/transport/http/client.rb +4 -4
  914. data/lib/datadog/tracing/transport/http/statistics.rb +2 -2
  915. data/lib/datadog/tracing/transport/http/traces.rb +8 -8
  916. data/lib/datadog/tracing/transport/http.rb +10 -10
  917. data/lib/datadog/tracing/transport/io/client.rb +3 -3
  918. data/lib/datadog/tracing/transport/io/response.rb +1 -1
  919. data/lib/datadog/tracing/transport/io/traces.rb +5 -5
  920. data/lib/datadog/tracing/transport/io.rb +3 -3
  921. data/lib/datadog/tracing/transport/native/response.rb +71 -0
  922. data/lib/datadog/tracing/transport/native.rb +379 -0
  923. data/lib/datadog/tracing/transport/serializable_trace.rb +19 -19
  924. data/lib/datadog/tracing/transport/span_events_negotiation.rb +41 -0
  925. data/lib/datadog/tracing/transport/statistics.rb +2 -2
  926. data/lib/datadog/tracing/transport/trace_formatter.rb +10 -10
  927. data/lib/datadog/tracing/transport/traces.rb +11 -31
  928. data/lib/datadog/tracing/utils.rb +2 -2
  929. data/lib/datadog/tracing/workers.rb +4 -3
  930. data/lib/datadog/tracing/writer.rb +22 -9
  931. data/lib/datadog/tracing.rb +3 -3
  932. data/lib/datadog/version.rb +4 -4
  933. data/lib/datadog.rb +15 -11
  934. metadata +92 -22
  935. data/ext/datadog_profiling_native_extension/clock_id_noop.c +0 -21
  936. data/lib/datadog/ai_guard/configuration/settings.rb +0 -113
  937. data/lib/datadog/appsec/configuration/settings.rb +0 -423
  938. data/lib/datadog/core/utils/base64.rb +0 -22
  939. data/lib/datadog/data_streams/configuration/settings.rb +0 -49
  940. data/lib/datadog/di/configuration/settings.rb +0 -243
  941. data/lib/datadog/error_tracking/configuration/settings.rb +0 -63
  942. data/lib/datadog/tracing/distributed/datadog_tags_codec.rb +0 -82
@@ -1,15 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'zlib'
4
- require_relative 'pathway_context'
5
- require_relative 'transport/http'
6
- require_relative '../version'
7
- require_relative '../core/worker'
8
- require_relative '../core/workers/polling'
9
- require_relative '../core/ddsketch'
10
- require_relative '../core/buffer/cruby'
11
- require_relative '../core/utils/time'
12
- require_relative '../core/utils/fnv'
3
+ require "zlib"
4
+ require_relative "pathway_context"
5
+ require_relative "transport/http"
6
+ require_relative "../version"
7
+ require_relative "../core/worker"
8
+ require_relative "../core/workers/polling"
9
+ require_relative "../core/ddsketch"
10
+ require_relative "../core/buffer/cruby"
11
+ require_relative "../core/utils/time"
12
+ require_relative "../core/utils/fnv"
13
13
 
14
14
  module Datadog
15
15
  module DataStreams
@@ -22,7 +22,7 @@ module Datadog
22
22
  class Processor < Core::Worker
23
23
  include Core::Workers::Polling
24
24
 
25
- PROPAGATION_KEY = 'dd-pathway-ctx-base64'
25
+ PROPAGATION_KEY = "dd-pathway-ctx-base64"
26
26
 
27
27
  # Default buffer size for lock-free event queue
28
28
  # Set to handle high-throughput scenarios (e.g., 10k events/sec for 10s interval)
@@ -41,7 +41,7 @@ module Datadog
41
41
  # (default: DEFAULT_BUFFER_SIZE). Higher values support more throughput but use more memory.
42
42
  # @raise [UnsupportedError] if DDSketch is not available on this platform
43
43
  def initialize(interval:, logger:, settings:, agent_settings:, agent_info:, buffer_size: DEFAULT_BUFFER_SIZE)
44
- raise UnsupportedError, 'DDSketch is not supported' unless Datadog::Core::DDSketch.supported?
44
+ raise UnsupportedError, "DDSketch is not supported" unless Datadog::Core::DDSketch.supported?
45
45
 
46
46
  @settings = settings
47
47
  @agent_settings = agent_settings
@@ -62,10 +62,27 @@ module Datadog
62
62
 
63
63
  super()
64
64
  self.loop_base_interval = interval
65
+ # Without this, a preload-then-fork deployment model (e.g. Puma cluster mode with
66
+ # preload_app!, or Sidekiq Enterprise's sidekiqswarm with SIDEKIQ_PRELOAD_APP) leaves
67
+ # every forked child with a dead flush thread: Ruby threads don't survive fork, and the
68
+ # default FORK_POLICY_STOP means #perform would otherwise just mark the worker stopped
69
+ # instead of restarting it. See #restart_flush_thread.
70
+ self.fork_policy = Core::Workers::Async::Thread::FORK_POLICY_RESTART
65
71
 
66
72
  perform
67
73
  end
68
74
 
75
+ # Restarts the flush thread if a fork has been detected since this processor was created.
76
+ # Called by Components#after_fork. Safe to call even when no fork occurred: #perform (via
77
+ # Workers::Async::Thread) only restarts the worker when +forked?+ is true. Deliberately not
78
+ # named +after_fork+: Workers::Async::Thread already defines a protected +after_fork+
79
+ # template method that #perform's internal restart path (+restart_after_fork+) calls on
80
+ # every restart -- overriding it here would recurse.
81
+ def restart_flush_thread
82
+ discard_inherited_state_after_fork! if forked?
83
+ perform
84
+ end
85
+
69
86
  # Track Kafka produce offset for lag monitoring
70
87
  # @param topic [String] The Kafka topic name
71
88
  # @param partition [Integer] The partition number
@@ -79,7 +96,7 @@ module Datadog
79
96
  topic: topic,
80
97
  partition: partition,
81
98
  offset: offset,
82
- timestamp_ns: (now.to_f * 1e9).to_i
99
+ timestamp_ns: (now.to_f * 1e9).to_i,
83
100
  }
84
101
  )
85
102
  true
@@ -98,7 +115,7 @@ module Datadog
98
115
  topic: topic,
99
116
  partition: partition,
100
117
  offset: offset,
101
- timestamp: now
118
+ timestamp: now,
102
119
  }
103
120
  )
104
121
  true
@@ -112,8 +129,8 @@ module Datadog
112
129
  # @yield [key, value] Block to inject context into carrier
113
130
  # @return [String] Base64 encoded pathway context
114
131
  def set_produce_checkpoint(type:, destination:, manual_checkpoint: true, tags: {}, &block)
115
- checkpoint_tags = ["type:#{type}", "topic:#{destination}", 'direction:out']
116
- checkpoint_tags << 'manual_checkpoint:true' if manual_checkpoint
132
+ checkpoint_tags = ["type:#{type}", "topic:#{destination}", "direction:out"]
133
+ checkpoint_tags << "manual_checkpoint:true" if manual_checkpoint
117
134
  checkpoint_tags.concat(tags.map { |k, v| "#{k}:#{v}" }) unless tags.empty?
118
135
 
119
136
  span = Datadog::Tracing.active_span
@@ -140,8 +157,8 @@ module Datadog
140
157
  end
141
158
  end
142
159
 
143
- checkpoint_tags = ["type:#{type}", "topic:#{source}", 'direction:in']
144
- checkpoint_tags << 'manual_checkpoint:true' if manual_checkpoint
160
+ checkpoint_tags = ["type:#{type}", "topic:#{source}", "direction:in"]
161
+ checkpoint_tags << "manual_checkpoint:true" if manual_checkpoint
145
162
  checkpoint_tags.concat(tags.map { |k, v| "#{k}:#{v}" }) unless tags.empty?
146
163
 
147
164
  span = Datadog::Tracing.active_span
@@ -186,7 +203,7 @@ module Datadog
186
203
 
187
204
  bucket[:latest_produce_offsets][partition_key] = [
188
205
  event[:offset],
189
- bucket[:latest_produce_offsets][partition_key] || 0
206
+ bucket[:latest_produce_offsets][partition_key] || 0,
190
207
  ].max
191
208
  end
192
209
 
@@ -196,7 +213,7 @@ module Datadog
196
213
  partition: event[:partition],
197
214
  offset: event[:offset],
198
215
  timestamp: event[:timestamp],
199
- timestamp_sec: event[:timestamp].to_f
216
+ timestamp_sec: event[:timestamp].to_f,
200
217
  }
201
218
 
202
219
  timestamp_ns = (event[:timestamp].to_f * 1e9).to_i
@@ -216,7 +233,7 @@ module Datadog
216
233
  expected_offset: previous_offset + 1,
217
234
  actual_offset: event[:offset],
218
235
  gap_size: event[:offset] - previous_offset - 1,
219
- timestamp_sec: event[:timestamp].to_f
236
+ timestamp_sec: event[:timestamp].to_f,
220
237
  }
221
238
  end
222
239
 
@@ -228,7 +245,7 @@ module Datadog
228
245
  bucket_time_ns = now_ns - (now_ns % @bucket_size_ns)
229
246
  bucket = @buckets[bucket_time_ns] ||= create_bucket
230
247
 
231
- aggr_key = [event[:tags].join(','), event[:hash], event[:parent_hash]]
248
+ aggr_key = [event[:tags].join(","), event[:hash], event[:parent_hash]]
232
249
  stats = bucket[:pathway_stats][aggr_key] ||= create_pathway_stats
233
250
 
234
251
  stats[:edge_latency].add(event[:edge_latency_sec])
@@ -247,7 +264,7 @@ module Datadog
247
264
 
248
265
  direction = nil # : ::String?
249
266
  tags.each do |tag|
250
- if tag.start_with?('direction:')
267
+ if tag.start_with?("direction:")
251
268
  direction = tag
252
269
  break
253
270
  end
@@ -272,7 +289,7 @@ module Datadog
272
289
  new_hash = compute_pathway_hash(parent_hash, tags)
273
290
 
274
291
  # Tag the APM span with the pathway hash to link DSM and APM
275
- span&.set_tag('pathway.hash', new_hash.to_s)
292
+ span&.set_tag("pathway.hash", new_hash.to_s)
276
293
 
277
294
  edge_latency_sec = [now - current_context.current_edge_start, 0.0].max
278
295
  full_pathway_latency_sec = [now - current_context.pathway_start, 0.0].max
@@ -302,6 +319,20 @@ module Datadog
302
319
  PathwayContext.decode_b64(encoded_ctx)
303
320
  end
304
321
 
322
+ # A fork copies whatever was buffered in the parent (unflushed events, aggregated
323
+ # buckets, consumer stats) into the child. If the parent process is still alive and
324
+ # flushing (e.g. a supervisor process that stays up after forking workers), letting
325
+ # the child flush that same inherited data as well would double-report it to the
326
+ # agent. Discard it instead: losing a few seconds of pre-fork stats is preferable to
327
+ # corrupting pipeline throughput/lag numbers with duplicates.
328
+ def discard_inherited_state_after_fork!
329
+ @event_buffer.pop
330
+ @stats_mutex.synchronize do
331
+ @buckets.clear
332
+ @consumer_stats.clear
333
+ end
334
+ end
335
+
305
336
  def flush_stats
306
337
  stats_buckets = @stats_mutex.synchronize do
307
338
  return if @buckets.empty? && @consumer_stats.empty?
@@ -316,20 +347,20 @@ module Datadog
316
347
  end
317
348
 
318
349
  payload = {
319
- 'Env' => @settings.env || 'none',
320
- 'Service' => @settings.service,
321
- 'TracerVersion' => Datadog::VERSION::STRING,
322
- 'Lang' => 'ruby',
323
- 'Stats' => stats_buckets,
324
- 'Hostname' => hostname
350
+ "Env" => @settings.env || "none",
351
+ "Service" => @settings.service,
352
+ "TracerVersion" => Datadog::VERSION::STRING,
353
+ "Lang" => "ruby",
354
+ "Stats" => stats_buckets,
355
+ "Hostname" => hostname,
325
356
  } # : ::Hash[::String, (::String | ::Array[::String])]
326
357
 
327
- payload['ProcessTags'] = Core::Environment::Process.tags if @settings.experimental_propagate_process_tags_enabled
358
+ payload["ProcessTags"] = Core::Environment::Process.tags if @settings.experimental_propagate_process_tags_enabled
328
359
 
329
360
  # Send to agent outside mutex to avoid blocking customer code if agent is slow/hung.
330
361
  send_stats_to_agent(payload)
331
362
  rescue => e
332
- @logger.debug("Failed to flush DSM stats to agent: #{e.class}: #{e}")
363
+ @logger.debug("Failed to flush DSM stats to agent: #{e.class}: #{e.message}")
333
364
  end
334
365
 
335
366
  def get_current_pathway
@@ -357,9 +388,9 @@ module Datadog
357
388
  end
358
389
 
359
390
  def decode_and_set_pathway_context(headers)
360
- return unless headers && headers['dd-pathway-ctx-base64']
391
+ return unless headers && headers["dd-pathway-ctx-base64"]
361
392
 
362
- pathway_ctx = decode_pathway_context(headers['dd-pathway-ctx-base64'])
393
+ pathway_ctx = decode_pathway_context(headers["dd-pathway-ctx-base64"])
363
394
  set_pathway_context(pathway_ctx) if pathway_ctx
364
395
  end
365
396
 
@@ -369,21 +400,21 @@ module Datadog
369
400
  # The hash only needs to be internally consistent:
370
401
  # @see Datadog::Core::Environment::AgentInfo#container_tags_checksum
371
402
  def compute_pathway_hash(current_hash, tags)
372
- service = @settings.service || 'ruby-service'
373
- env = @settings.env || 'none'
403
+ service = @settings.service || "ruby-service"
404
+ env = @settings.env || "none"
374
405
 
375
406
  bytes = service.bytes + env.bytes
376
407
 
377
408
  if @settings.experimental_propagate_process_tags_enabled
378
409
  propagation_checksum = @agent_info.propagation_checksum
379
- bytes += [propagation_checksum].pack('Q<').bytes if propagation_checksum
410
+ bytes += [propagation_checksum].pack("Q<").bytes if propagation_checksum
380
411
  end
381
412
 
382
413
  tags.each { |tag| bytes += tag.bytes }
383
- byte_string = bytes.pack('C*')
414
+ byte_string = bytes.pack("C*")
384
415
 
385
416
  node_hash = Core::Utils::FNV.fnv1_64(byte_string)
386
- combined_bytes = [node_hash, current_hash].pack('QQ')
417
+ combined_bytes = [node_hash, current_hash].pack("QQ")
387
418
  Core::Utils::FNV.fnv1_64(combined_bytes)
388
419
  end
389
420
 
@@ -400,7 +431,7 @@ module Datadog
400
431
  full_pathway_latency_sec: full_pathway_latency_sec,
401
432
  payload_size: payload_size,
402
433
  tags: tags,
403
- timestamp_sec: timestamp_sec
434
+ timestamp_sec: timestamp_sec,
404
435
  }
405
436
  )
406
437
  true
@@ -433,38 +464,38 @@ module Datadog
433
464
  bucket_stats = []
434
465
  bucket[:pathway_stats].each do |aggr_key, stats|
435
466
  edge_tags_str, hash_value, parent_hash = aggr_key
436
- edge_tags_array = edge_tags_str.split(',')
467
+ edge_tags_array = edge_tags_str.split(",")
437
468
 
438
469
  bucket_stats << {
439
- 'EdgeTags' => edge_tags_array,
440
- 'Hash' => hash_value,
441
- 'ParentHash' => parent_hash,
442
- 'PathwayLatency' => stats[:full_pathway_latency].encode,
443
- 'EdgeLatency' => stats[:edge_latency].encode,
470
+ "EdgeTags" => edge_tags_array,
471
+ "Hash" => hash_value,
472
+ "ParentHash" => parent_hash,
473
+ "PathwayLatency" => stats[:full_pathway_latency].encode,
474
+ "EdgeLatency" => stats[:edge_latency].encode,
444
475
  }
445
476
  end
446
477
 
447
478
  backlogs = []
448
479
  bucket[:latest_produce_offsets].each do |key, offset|
449
- topic, partition = key.split(':', 2)
480
+ topic, partition = key.split(":", 2)
450
481
  backlogs << {
451
- 'Tags' => ['type:kafka_produce', "topic:#{topic}", "partition:#{partition}"],
452
- 'Value' => offset
482
+ "Tags" => ["type:kafka_produce", "topic:#{topic}", "partition:#{partition}"],
483
+ "Value" => offset,
453
484
  }
454
485
  end
455
486
  bucket[:latest_commit_offsets].each do |key, offset|
456
- group, topic, partition = key.split(':', 3)
487
+ group, topic, partition = key.split(":", 3)
457
488
  backlogs << {
458
- 'Tags' => ['type:kafka_commit', "consumer_group:#{group}", "topic:#{topic}", "partition:#{partition}"],
459
- 'Value' => offset
489
+ "Tags" => ["type:kafka_commit", "consumer_group:#{group}", "topic:#{topic}", "partition:#{partition}"],
490
+ "Value" => offset,
460
491
  }
461
492
  end
462
493
 
463
494
  serialized_buckets << {
464
- 'Start' => bucket_time_ns,
465
- 'Duration' => @bucket_size_ns,
466
- 'Stats' => bucket_stats,
467
- 'Backlogs' => backlogs + serialize_consumer_backlogs
495
+ "Start" => bucket_time_ns,
496
+ "Duration" => @bucket_size_ns,
497
+ "Stats" => bucket_stats,
498
+ "Backlogs" => backlogs + serialize_consumer_backlogs,
468
499
  }
469
500
  end
470
501
 
@@ -476,12 +507,12 @@ module Datadog
476
507
  def serialize_consumer_backlogs
477
508
  @consumer_stats.map do |stat|
478
509
  {
479
- 'Tags' => [
480
- 'type:kafka_commit',
510
+ "Tags" => [
511
+ "type:kafka_commit",
481
512
  "topic:#{stat[:topic]}",
482
- "partition:#{stat[:partition]}"
513
+ "partition:#{stat[:partition]}",
483
514
  ],
484
- 'Value' => stat[:offset]
515
+ "Value" => stat[:offset],
485
516
  }
486
517
  end
487
518
  end
@@ -494,7 +525,7 @@ module Datadog
494
525
  {
495
526
  pathway_stats: {},
496
527
  latest_produce_offsets: {},
497
- latest_commit_offsets: {}
528
+ latest_commit_offsets: {},
498
529
  }
499
530
  end
500
531
 
@@ -503,7 +534,7 @@ module Datadog
503
534
  edge_latency: Datadog::Core::DDSketch.new,
504
535
  full_pathway_latency: Datadog::Core::DDSketch.new,
505
536
  payload_size_sum: 0,
506
- payload_size_count: 0
537
+ payload_size_count: 0,
507
538
  }
508
539
  end
509
540
  end
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../stats'
4
- require_relative '../../../core/transport/http/api/endpoint'
5
- require_relative '../../../core/transport/http/response'
3
+ require_relative "../stats"
4
+ require_relative "../../../core/transport/http/api/endpoint"
5
+ require_relative "../../../core/transport/http/response"
6
6
 
7
7
  module Datadog
8
8
  module DataStreams
@@ -32,10 +32,10 @@ module Datadog
32
32
  env.path = path
33
33
  env.body = env.request.parcel.data
34
34
  if (content_type = env.request.parcel.content_type)
35
- env.headers['content-type'] = content_type
35
+ env.headers["content-type"] = content_type
36
36
  end
37
37
  if (content_encoding = env.request.parcel.content_encoding)
38
- env.headers['content-encoding'] = content_encoding
38
+ env.headers["content-encoding"] = content_encoding
39
39
  end
40
40
 
41
41
  # Send request
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../../core/transport/http'
4
- require_relative 'http/stats'
5
- require_relative 'stats'
3
+ require_relative "../../core/transport/http"
4
+ require_relative "http/stats"
5
+ require_relative "stats"
6
6
 
7
7
  module Datadog
8
8
  module DataStreams
@@ -10,7 +10,7 @@ module Datadog
10
10
  # HTTP transport for Data Streams Monitoring
11
11
  module HTTP
12
12
  V01 = Stats::API::Endpoint.new(
13
- '/v0.1/pipeline_stats'
13
+ "/v0.1/pipeline_stats"
14
14
  )
15
15
 
16
16
  module_function
@@ -24,7 +24,7 @@ module Datadog
24
24
  agent_settings: agent_settings,
25
25
  logger: logger,
26
26
  ) do |transport|
27
- transport.api 'v0.1', V01, default: true
27
+ transport.api "v0.1", V01, default: true
28
28
 
29
29
  # Call block to apply any customization, if provided
30
30
  yield(transport) if block_given?
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'msgpack'
4
- require 'zlib'
5
- require_relative '../../core/transport/parcel'
6
- require_relative '../../core/transport/request'
7
- require_relative '../../core/transport/transport'
3
+ require "msgpack"
4
+ require "zlib"
5
+ require_relative "../../core/transport/parcel"
6
+ require_relative "../../core/transport/request"
7
+ require_relative "../../core/transport/transport"
8
8
 
9
9
  module Datadog
10
10
  module DataStreams
@@ -24,8 +24,8 @@ module Datadog
24
24
  # Create parcel and request
25
25
  parcel = Core::Transport::Parcel.new(
26
26
  compressed_data,
27
- content_type: 'application/msgpack',
28
- content_encoding: 'gzip',
27
+ content_type: "application/msgpack",
28
+ content_encoding: "gzip",
29
29
  )
30
30
  request = Request.new(parcel)
31
31
 
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'data_streams/processor'
4
- require_relative 'data_streams/pathway_context'
5
- require_relative 'data_streams/configuration/settings'
6
- require_relative 'data_streams/extensions'
7
- require_relative 'core/utils/time'
3
+ require_relative "data_streams/processor"
4
+ require_relative "data_streams/pathway_context"
5
+ require_relative "data_streams/configuration"
6
+ require_relative "data_streams/extensions"
7
+ require_relative "core/utils/time"
8
8
 
9
9
  module Datadog
10
10
  # Datadog Data Streams Monitoring public API.
@@ -8,7 +8,11 @@
8
8
  # are loaded, and also none of the rest of datadog library which also
9
9
  # has contrib code in other products.
10
10
 
11
- require_relative 'code_tracker'
11
+ require_relative "fatal_exceptions"
12
+ require_relative "code_tracker"
13
+
14
+ # Needed since this file can be loaded without core
15
+ require_relative "../ruby_version"
12
16
 
13
17
  module Datadog
14
18
  # Namespace for Datadog dynamic instrumentation.
@@ -17,6 +21,10 @@ module Datadog
17
21
  module DI
18
22
  LOCK = Mutex.new
19
23
 
24
+ # Initialized eagerly to avoid "instance variable not initialized"
25
+ # warning on Ruby 2.6/2.7 and to simplify the type to non-nullable.
26
+ @current_components = []
27
+
20
28
  class << self
21
29
  attr_reader :code_tracker
22
30
 
@@ -40,20 +48,21 @@ module Datadog
40
48
  # DI code.
41
49
  def activate_tracking
42
50
  # :script_compiled trace point was added in Ruby 2.6.
43
- return unless RUBY_VERSION >= '2.6'
51
+ return unless RubyVersion.is?(">= 2.6")
44
52
 
45
53
  begin
46
54
  # Activate code tracking by default because line trace points will not work
47
55
  # without it.
48
56
  Datadog::DI.activate_tracking!
49
- rescue => exc
57
+ rescue Exception => exc # standard:disable Lint/RescueException
58
+ Datadog::DI.reraise_if_fatal(exc)
50
59
  if defined?(Datadog.logger)
51
- Datadog.logger.warn { "di: Failed to activate code tracking for DI: #{exc.class}: #{exc}" }
60
+ Datadog.logger.warn { "di: Failed to activate code tracking for DI: #{exc.class}: #{exc.message}" }
52
61
  else
53
62
  # We do not have Datadog logger potentially because DI code tracker is
54
63
  # being loaded early in application boot process and the rest of datadog
55
64
  # wasn't loaded yet. Output to standard error.
56
- warn("datadog: di: Failed to activate code tracking for DI: #{exc.class}: #{exc}")
65
+ warn("datadog: di: Failed to activate code tracking for DI: #{exc.class}: #{exc.message}")
57
66
  end
58
67
  end
59
68
  end
@@ -88,7 +97,7 @@ module Datadog
88
97
  # Datadog.components from the code tracker.
89
98
  def current_component
90
99
  LOCK.synchronize do
91
- @current_components&.last
100
+ @current_components.last
92
101
  end
93
102
  end
94
103
 
@@ -100,14 +109,13 @@ module Datadog
100
109
  # guaranteed to not end up with no component when one is running.
101
110
  def add_current_component(component)
102
111
  LOCK.synchronize do
103
- @current_components ||= []
104
112
  @current_components << component
105
113
  end
106
114
  end
107
115
 
108
116
  def remove_current_component(component)
109
117
  LOCK.synchronize do
110
- @current_components&.delete(component)
118
+ @current_components.delete(component)
111
119
  end
112
120
  end
113
121
  end
@@ -1,25 +1,27 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'logger'
4
- require_relative 'base'
5
- require_relative 'error'
6
- require_relative 'code_tracker'
7
- require_relative 'component'
8
- require_relative 'context'
9
- require_relative 'instrumenter'
10
- require_relative 'probe'
11
- require_relative 'probe_builder'
12
- require_relative 'probe_manager'
13
- require_relative 'probe_notification_builder'
14
- require_relative 'probe_notifier_worker'
15
- require_relative 'probe_repository'
16
- require_relative 'redactor'
17
- require_relative 'serializer'
18
- require_relative 'transport/http'
19
- require_relative 'utils'
3
+ require_relative "logger"
4
+ require_relative "base"
5
+ require_relative "error"
6
+ require_relative "code_tracker"
7
+ require_relative "component"
8
+ require_relative "context"
9
+ require_relative "capture_limits"
10
+ require_relative "capture_expression"
11
+ require_relative "capture_expression_evaluator"
12
+ require_relative "instrumenter"
13
+ require_relative "probe"
14
+ require_relative "probe_builder"
15
+ require_relative "probe_manager"
16
+ require_relative "probe_notification_builder"
17
+ require_relative "probe_notifier_worker"
18
+ require_relative "probe_repository"
19
+ require_relative "redactor"
20
+ require_relative "serializer"
21
+ require_relative "transport/http"
22
+ require_relative "utils"
20
23
 
21
- # Steep: https://github.com/ruby/rbs/pull/2715
22
- if %w[1 true yes].include?(Datadog::DATADOG_ENV['DD_DYNAMIC_INSTRUMENTATION_ENABLED']) # steep:ignore ArgumentTypeMismatch
24
+ if %w[1 true yes].include?(Datadog::DATADOG_ENV["DD_DYNAMIC_INSTRUMENTATION_ENABLED"])
23
25
 
24
26
  # For initial release of Dynamic Instrumentation, activate code tracking
25
27
  # only if DI is explicitly requested in the environment.
@@ -33,14 +35,13 @@ if %w[1 true yes].include?(Datadog::DATADOG_ENV['DD_DYNAMIC_INSTRUMENTATION_ENAB
33
35
  Datadog::DI.activate_tracking
34
36
  end
35
37
 
36
- require_relative 'contrib'
38
+ require_relative "contrib"
37
39
 
38
40
  Datadog::DI::Contrib.load_now_or_later
39
41
 
40
- # Steep: https://github.com/ruby/rbs/pull/2715
41
- if %w[1 true yes].include?(Datadog::DATADOG_ENV['DD_DYNAMIC_INSTRUMENTATION_ENABLED']) # steep:ignore ArgumentTypeMismatch
42
- if Datadog::DATADOG_ENV['DD_DYNAMIC_INSTRUMENTATION_PROBE_FILE']
43
- require_relative 'probe_file_loader'
42
+ if %w[1 true yes].include?(Datadog::DATADOG_ENV["DD_DYNAMIC_INSTRUMENTATION_ENABLED"])
43
+ if Datadog::DATADOG_ENV["DD_DYNAMIC_INSTRUMENTATION_PROBE_FILE"]
44
+ require_relative "probe_file_loader"
44
45
  Datadog::DI::ProbeFileLoader.load_now_or_later
45
46
  end
46
47
  end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "capture_limits"
4
+
5
+ module Datadog
6
+ module DI
7
+ class CaptureExpression
8
+ def initialize(name:, expr:, limits: nil)
9
+ @name = name
10
+ @expr = expr
11
+ @limits = limits
12
+ end
13
+
14
+ attr_reader :name
15
+
16
+ attr_reader :expr
17
+
18
+ attr_reader :limits
19
+ end
20
+ end
21
+ end