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,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../statistics'
3
+ require_relative "../statistics"
4
4
 
5
5
  module Datadog
6
6
  module Tracing
@@ -30,7 +30,7 @@ module Datadog
30
30
  private
31
31
 
32
32
  # The most common status code on a healthy tracer
33
- STATUS_CODE_200 = 'status_code:200'
33
+ STATUS_CODE_200 = "status_code:200"
34
34
 
35
35
  def metrics_tag_value(status_code)
36
36
  if status_code == 200
@@ -1,11 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'json'
3
+ require "json"
4
4
 
5
- require_relative '../../../core/transport/http/response'
6
- require_relative '../../../core/transport/http/api/endpoint'
7
- require_relative '../../../core/transport/http/api/instance'
8
- require_relative '../traces'
5
+ require_relative "../../../core/transport/http/response"
6
+ require_relative "../../../core/transport/http/api/endpoint"
7
+ require_relative "../../../core/transport/http/api/instance"
8
+ require_relative "../traces"
9
9
 
10
10
  module Datadog
11
11
  module Tracing
@@ -28,9 +28,9 @@ module Datadog
28
28
  module API
29
29
  # Endpoint for submitting trace data
30
30
  class Endpoint < Datadog::Core::Transport::HTTP::API::Endpoint
31
- HEADER_CONTENT_TYPE = 'Content-Type'
32
- HEADER_TRACE_COUNT = 'X-Datadog-Trace-Count'
33
- SERVICE_RATE_KEY = 'rate_by_service'
31
+ HEADER_CONTENT_TYPE = "Content-Type"
32
+ HEADER_TRACE_COUNT = "X-Datadog-Trace-Count"
33
+ SERVICE_RATE_KEY = "rate_by_service"
34
34
 
35
35
  def initialize(path, encoder, options = {})
36
36
  super(:post, path, encoder: encoder)
@@ -1,11 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../../core/encoding'
4
- require_relative '../../core/environment/container'
5
- require_relative '../../core/environment/ext'
6
- require_relative '../../core/transport/ext'
7
- require_relative '../../core/transport/http'
8
- require_relative 'http/traces'
3
+ require_relative "../../core/encoding"
4
+ require_relative "../../core/environment/container"
5
+ require_relative "../../core/environment/ext"
6
+ require_relative "../../core/transport/ext"
7
+ require_relative "../../core/transport/http"
8
+ require_relative "http/traces"
9
9
 
10
10
  module Datadog
11
11
  module Tracing
@@ -13,13 +13,13 @@ module Datadog
13
13
  # Namespace for HTTP transport components
14
14
  module HTTP
15
15
  V4 = Traces::API::Endpoint.new(
16
- '/v0.4/traces',
16
+ "/v0.4/traces",
17
17
  Core::Encoding::MsgpackEncoder,
18
18
  service_rates: true
19
19
  )
20
20
 
21
21
  V3 = Traces::API::Endpoint.new(
22
- '/v0.3/traces',
22
+ "/v0.3/traces",
23
23
  Core::Encoding::MsgpackEncoder,
24
24
  )
25
25
 
@@ -37,8 +37,8 @@ module Datadog
37
37
  logger: logger,
38
38
  headers: headers
39
39
  ) do |transport|
40
- transport.api 'v0.4', V4, fallback: 'v0.3', default: true
41
- transport.api 'v0.3', V3
40
+ transport.api "v0.4", V4, fallback: "v0.3", default: true
41
+ transport.api "v0.3", V3
42
42
 
43
43
  # Call block to apply any customization, if provided
44
44
  yield(transport) if block_given?
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../statistics'
4
- require_relative 'response'
3
+ require_relative "../statistics"
4
+ require_relative "response"
5
5
 
6
6
  module Datadog
7
7
  module Tracing
@@ -44,7 +44,7 @@ module Datadog
44
44
  response
45
45
  rescue => e
46
46
  message =
47
- "Internal error during IO transport request. Cause: #{e.class.name}: #{e.message} " \
47
+ "Internal error during IO transport request. Cause: #{e.class}: #{e.message} " \
48
48
  "Location: #{Array(e.backtrace).first}"
49
49
 
50
50
  # Log error
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../../../core/transport/response'
3
+ require_relative "../../../core/transport/response"
4
4
 
5
5
  module Datadog
6
6
  module Tracing
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../../transport/traces'
4
- require_relative '../../../core/transport/parcel'
5
- require_relative 'response'
6
- require_relative 'client'
3
+ require_relative "../../transport/traces"
4
+ require_relative "../../../core/transport/parcel"
5
+ require_relative "response"
6
+ require_relative "client"
7
7
 
8
8
  module Datadog
9
9
  module Tracing
@@ -27,7 +27,7 @@ module Datadog
27
27
  ENCODED_IDS = [
28
28
  :trace_id,
29
29
  :span_id,
30
- :parent_id
30
+ :parent_id,
31
31
  ].freeze
32
32
 
33
33
  # Encodes a list of traces
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../../core/encoding'
4
- require_relative 'io/client'
5
- require_relative 'io/traces'
3
+ require_relative "../../core/encoding"
4
+ require_relative "io/client"
5
+ require_relative "io/traces"
6
6
 
7
7
  module Datadog
8
8
  module Tracing
@@ -0,0 +1,71 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "json"
4
+
5
+ module Datadog
6
+ module Tracing
7
+ module Transport
8
+ module Native
9
+ # Response from the native trace exporter.
10
+ #
11
+ # Constructed by the C extension after a send completes (or fails).
12
+ # Implements the same predicate interface as the HTTP transport's
13
+ # response so callers can treat both uniformly.
14
+ class Response
15
+ SERVICE_RATE_KEY = "rate_by_service"
16
+
17
+ attr_reader :trace_count, :payload
18
+
19
+ def initialize(ok:, internal_error: false, server_error: false, client_error: false,
20
+ not_found: false, unsupported: false, trace_count: 0, payload: nil)
21
+ @ok = ok
22
+ @internal_error = internal_error
23
+ @server_error = server_error
24
+ @client_error = client_error
25
+ @not_found = not_found
26
+ @unsupported = unsupported
27
+ @trace_count = trace_count
28
+ @payload = payload
29
+ end
30
+
31
+ def ok?
32
+ @ok
33
+ end
34
+
35
+ def internal_error?
36
+ @internal_error
37
+ end
38
+
39
+ def server_error?
40
+ @server_error
41
+ end
42
+
43
+ def client_error?
44
+ @client_error
45
+ end
46
+
47
+ def not_found?
48
+ @not_found
49
+ end
50
+
51
+ def unsupported?
52
+ @unsupported
53
+ end
54
+
55
+ # Parse the agent's JSON response body and extract the
56
+ # +rate_by_service+ map. Returns +nil+ when the payload
57
+ # is absent or does not contain sampling rates.
58
+ def service_rates
59
+ payload = @payload
60
+ return nil if payload.nil? || payload.empty?
61
+
62
+ parsed = JSON.parse(payload)
63
+ parsed[SERVICE_RATE_KEY] if parsed.is_a?(Hash)
64
+ rescue JSON::ParserError
65
+ nil
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,379 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "json"
4
+ require_relative "trace_formatter"
5
+ require_relative "statistics"
6
+ require_relative "span_events_negotiation"
7
+
8
+ module Datadog
9
+ module Tracing
10
+ module Transport
11
+ # Transport backed by the native trace exporter (Rust via C FFI).
12
+ #
13
+ # Converts Ruby Span objects directly to Rust spans and delegates
14
+ # serialization and sending to the Rust data pipeline, which handles
15
+ # stats computation, msgpack encoding, and HTTP transport with retry
16
+ # logic.
17
+ #
18
+ # Implements the same +send_traces+ / +stats+ interface as
19
+ # {Datadog::Tracing::Transport::Traces::Transport} so it can be used
20
+ # as a drop-in replacement via the +Writer+'s +:transport+ option.
21
+ module Native
22
+ # Returns +nil+ when the native extension is available, or a +String+
23
+ # describing why it is not.
24
+ UNSUPPORTED_REASON = begin
25
+ require "datadog/core"
26
+ Datadog::Core::LIBDATADOG_API_FAILURE
27
+ rescue => e
28
+ e.message
29
+ end
30
+
31
+ def self.supported?
32
+ UNSUPPORTED_REASON.nil?
33
+ end
34
+
35
+ # +TraceExporter+ and +TracerSpan+ are defined by the C extension in
36
+ # +ext/libdatadog_api/trace_exporter.c+ and become available after the
37
+ # native extension is loaded. +Response+ is a plain Ruby class (see
38
+ # +native/response.rb+); the C side only resolves and instantiates it.
39
+ #
40
+ # The hierarchy is:
41
+ # Datadog::Tracing::Transport::Native::TraceExporter (C)
42
+ # Datadog::Tracing::Transport::Native::TracerSpan (C)
43
+ # Datadog::Tracing::Transport::Native::Response (Ruby)
44
+
45
+ # Drop-in transport that delegates to the native trace exporter.
46
+ class Transport
47
+ include Statistics
48
+ include SpanEventsNegotiation
49
+
50
+ attr_reader :logger
51
+
52
+ # @param agent_settings [Datadog::Core::Configuration::AgentSettingsResolver::AgentSettings]
53
+ # Agent connection settings (provides +#url+).
54
+ # @param logger [Logger]
55
+ def initialize(agent_settings:, logger:)
56
+ unless Native.supported?
57
+ raise "Native transport is not supported: #{UNSUPPORTED_REASON}"
58
+ end
59
+
60
+ @logger = logger
61
+
62
+ # Serializes native sends and is held across a fork. See the
63
+ # fork-safety note below.
64
+ @send_mutex = Mutex.new
65
+
66
+ # Serializes concurrent fork-hook lifecycles. Unlike @send_mutex,
67
+ # this is held across the fork through the matching completion hook.
68
+ @fork_mutex = Mutex.new
69
+
70
+ url = agent_settings.url
71
+ tracer_version = tracer_version_string
72
+ language = Core::Environment::Ext::LANG
73
+ language_version = Core::Environment::Ext::LANG_VERSION
74
+ language_interpreter = Core::Environment::Ext::LANG_INTERPRETER
75
+ hostname = begin
76
+ Core::Environment::Socket.hostname
77
+ rescue
78
+ nil
79
+ end
80
+ env = Datadog.configuration.env
81
+ service = Datadog.configuration.service
82
+ version = Datadog.configuration.version
83
+
84
+ exporter = Native::TraceExporter._native_new(
85
+ url: url,
86
+ tracer_version: tracer_version,
87
+ language: language,
88
+ language_version: language_version,
89
+ language_interpreter: language_interpreter,
90
+ hostname: hostname,
91
+ env: env,
92
+ service: service,
93
+ version: version
94
+ )
95
+ @exporter = exporter
96
+
97
+ # Fork safety: the native exporter owns a long-lived tokio runtime
98
+ # with background worker threads. Around a fork we must quiesce the
99
+ # runtime before forking and restore it afterwards in both the parent
100
+ # and the child (where the inherited runtime is dead).
101
+ #
102
+ # A libdatadog Rust call must NOT be interrupted by `fork()`. A
103
+ # native send releases the GVL during the Rust
104
+ # `ddog_trace_exporter_send_trace_chunks` call, so if another thread
105
+ # forks while a (typically the writer/`AsyncTransport`) thread is
106
+ # mid-send, the child would inherit a half-completed send and
107
+ # Rust-internal locks, deadlocking or crashing. `_native_before_fork`
108
+ # also tears down and replaces the runtime, so it must not run while
109
+ # a send is still using that runtime.
110
+ #
111
+ # `@fork_mutex` serializes concurrent forks for this exporter. The
112
+ # `:before` hook locks it first, then calls `_native_before_fork`,
113
+ # and finally locks `@send_mutex`, which serializes sends and is
114
+ # held across the fork. Sends and #close only acquire @send_mutex,
115
+ # so there is no lock-order inversion.
116
+ #
117
+ # `_native_before_fork` must run before locking `@send_mutex` to
118
+ # pause the runtime before waiting for an in-flight send to drain.
119
+ # The hook first calls
120
+ # `_native_before_fork` to pause the runtime, THEN locks the mutex.
121
+ # This ordering minimizes the serialized section and is safe to run
122
+ # concurrently with an in-flight send: `block_on` (used by
123
+ # `send_trace_chunks`) only briefly locks the runtime mutex to clone
124
+ # the `Arc<Runtime>` (or build a throwaway `current_thread` runtime
125
+ # if it has been taken) and then drives the send on its own clone
126
+ # holding no mutex, while `_native_before_fork` just `take()`s the
127
+ # shared `Arc` and pauses workers -- so neither deadlocks the other.
128
+ # Locking the mutex AFTER `_native_before_fork` still guarantees the
129
+ # drain: it BLOCKS until any in-flight send finishes (bounded by the
130
+ # exporter's request timeout), which drops the send's last `Arc` and
131
+ # fully shuts the runtime down, and prevents new sends from starting.
132
+ # The lock is released in the `:parent` and `:child` hooks. In
133
+ # practice only one writer thread sends, so serializing adds no real
134
+ # contention.
135
+ #
136
+ # Note: the `:before` block runs before genuine forks (web-server
137
+ # workers, `Process.daemon`) that go through `Process._fork`. It
138
+ # does NOT run for `system`/backtick/`IO.popen`/`Process.spawn`,
139
+ # which spawn via `posix_spawn`/`vfork`+`exec` and replace the
140
+ # process image rather than carrying over the parent's work. Keeping
141
+ # it cheap is still worthwhile since real forks can be frequent.
142
+ #
143
+ # The hooks below are process-global and are never auto-removed by
144
+ # the fork machinery, so each transport must deregister its own
145
+ # hooks when it goes away (see #close and the finalizer): otherwise
146
+ # the closures keep the exporter -- and its runtime threads -- alive
147
+ # forever, and every later fork runs them against every
148
+ # historically-created exporter. The closures intentionally close
149
+ # over only locals (NOT `self`), so the Transport stays GC-eligible and
150
+ # its finalizer can fire even when #close was not called explicitly.
151
+ send_mutex = @send_mutex
152
+ fork_mutex = @fork_mutex
153
+ before_hook = proc do
154
+ fork_mutex.lock
155
+
156
+ begin
157
+ # Pause the runtime first (safe to run concurrently with an
158
+ # in-flight send), then wait for it to drain by acquiring the
159
+ # mutex. The lock must happen even if `_native_before_fork` raises, so the
160
+ # in-flight send has returned before the fork. Held across the
161
+ # fork; released in :parent/:child.
162
+ exporter._native_before_fork
163
+ rescue => e
164
+ Datadog.logger.warn { "Native transport before-fork preparation failed; traces may not be sent to Datadog: #{e.class}: #{e.message}" }
165
+ ensure
166
+ send_mutex.lock
167
+ end
168
+ end
169
+ parent_hook = proc do
170
+ exporter._native_after_fork_in_parent if fork_mutex.owned?
171
+ rescue => e
172
+ Datadog.logger.warn { "Native transport after-fork reset failed; traces may not be sent to Datadog: #{e.class}: #{e.message}" }
173
+ ensure
174
+ # `:before`'s ensure always locks the mutex on the forking thread
175
+ # before any fork outcome, so it is normally owned here; the guard
176
+ # only covers `:before` being interrupted mid-lock (e.g. a kill
177
+ # between `_native_before_fork` and the lock). Released even if the
178
+ # native call raised, so a failure can't leave the mutex locked.
179
+ send_mutex.unlock if send_mutex.owned?
180
+ fork_mutex.unlock if fork_mutex.owned?
181
+ end
182
+ child_hook = proc do
183
+ exporter._native_after_fork_in_child if fork_mutex.owned?
184
+ rescue => e
185
+ Datadog.logger.warn { "Native transport after-fork reset failed; traces may not be sent to Datadog: #{e.class}: #{e.message}" }
186
+ ensure
187
+ # See the :parent hook: normally owned (the forking thread is the
188
+ # lone survivor in the child); the guard only covers `:before`
189
+ # being interrupted mid-lock.
190
+ send_mutex.unlock if send_mutex.owned?
191
+ fork_mutex.unlock if fork_mutex.owned?
192
+ end
193
+
194
+ @fork_hooks = Core::Utils::AtForkMonkeyPatch.at_fork_blocks(
195
+ before: before_hook,
196
+ parent: parent_hook,
197
+ child: child_hook
198
+ )
199
+ remove_fork_hooks = self.class.send(:fork_hooks_remover, @fork_hooks)
200
+
201
+ # Fallback so a dropped (un-#close'd) transport doesn't leak its
202
+ # global fork hooks (and, through them, the exporter/runtime). The
203
+ # removal proc is built by a class method capturing ONLY the
204
+ # stage->block handles, never `self` -- a finalizer that closed over
205
+ # the object it is attached to would keep that object reachable and
206
+ # never run. A fork that already copied these callbacks still owns
207
+ # them through its matching completion stage.
208
+ ObjectSpace.define_finalizer(
209
+ self,
210
+ remove_fork_hooks
211
+ )
212
+ end
213
+
214
+ # Deregister this transport's process-global fork hooks and release the
215
+ # native exporter so its runtime can shut down. Idempotent: safe to
216
+ # call multiple times and safe to call after the finalizer has run.
217
+ def close
218
+ fork_hooks = @send_mutex.synchronize do
219
+ hooks = @fork_hooks
220
+ return if hooks.nil?
221
+
222
+ @fork_hooks = nil
223
+ @exporter = nil
224
+ hooks
225
+ end
226
+
227
+ fork_hooks.each do |stage, block|
228
+ Core::Utils::AtForkMonkeyPatch.remove_at_fork(stage, block)
229
+ end
230
+
231
+ # The finalizer only exists to deregister the hooks for a transport
232
+ # dropped without #close. We have just done that, so remove it;
233
+ # otherwise its closed-over hook blocks keep the exporter alive until
234
+ # this transport is itself collected.
235
+ ObjectSpace.undefine_finalizer(self)
236
+
237
+ nil
238
+ end
239
+
240
+ # Builds the proc that deregisters a transport's fork hooks.
241
+ #
242
+ # Defined as a class method so the proc closes over ONLY the
243
+ # stage->block handles passed in and never over a Transport instance
244
+ # (which would keep the instance reachable and prevent the finalizer
245
+ # from ever running). Removing the hooks unpins the exporter captured
246
+ # by those closures, allowing it (and its runtime) to be freed.
247
+ def self.fork_hooks_remover(fork_hooks)
248
+ proc do
249
+ fork_hooks.each do |stage, block|
250
+ Core::Utils::AtForkMonkeyPatch.remove_at_fork(stage, block)
251
+ end
252
+ end
253
+ end
254
+ private_class_method :fork_hooks_remover
255
+
256
+ # Send a list of traces to the agent.
257
+ #
258
+ # Each trace is a {Datadog::Tracing::TraceSegment} whose +#spans+
259
+ # returns an +Array+ of {Datadog::Tracing::Span}.
260
+ #
261
+ # @param traces [Array<Datadog::Tracing::TraceSegment>]
262
+ # @return [Array<Response>] one response per batch sent
263
+ def send_traces(traces)
264
+ return [] if traces.empty?
265
+
266
+ # Apply trace-level tags to root spans (same as the HTTP transport)
267
+ traces.each { |trace| TraceFormatter.format!(trace) }
268
+
269
+ # Build the Array<Array<Span>> structure expected by the C extension.
270
+ # Each trace segment becomes one inner array (one trace chunk).
271
+ chunks = traces.map(&:spans)
272
+
273
+ native_events_supported = native_events_supported?
274
+ apply_legacy_span_events!(chunks, native_events_supported)
275
+
276
+ # Serialize the native send and hold the mutex across it so a
277
+ # concurrent fork's :before hook blocks until this send drains
278
+ # (and `_native_before_fork` cannot tear down the runtime mid-send).
279
+ # `Mutex#synchronize` releases on exception / `rb_jump_tag` via its
280
+ # ensure, so interrupt propagation stays correct.
281
+ responses = @send_mutex.synchronize do
282
+ # Resolve the exporter under the same lock used by #close, so
283
+ # close either drains this send or prevents it from starting.
284
+ exporter = @exporter
285
+ raise "Native transport has been closed" if exporter.nil?
286
+
287
+ exporter._native_send_traces(chunks, native_events_supported)
288
+ end
289
+
290
+ # Update statistics from the response
291
+ responses.each { |response| update_stats_from_response!(response) }
292
+
293
+ responses
294
+ rescue => e
295
+ logger.debug { "Native transport error: #{e.class} #{e.message}" }
296
+ update_stats_from_exception!(e)
297
+ [InternalErrorResponse.new(e)]
298
+ end
299
+
300
+ private
301
+
302
+ # Writes each span's events into the legacy JSON +events+ meta tag
303
+ # when the agent lacks typed-event support, mutating spans in place.
304
+ #
305
+ # @param chunks [Array<Array<Datadog::Tracing::Span>>] trace chunks to serialize
306
+ # @param native_events_supported [Boolean] whether the agent accepts typed events
307
+ # @return [void]
308
+ def apply_legacy_span_events!(chunks, native_events_supported)
309
+ return if native_events_supported
310
+
311
+ chunks.each do |spans|
312
+ spans.each do |span|
313
+ next if span.events.empty?
314
+
315
+ span.set_tag("events", span.events.map(&:to_hash).to_json)
316
+ end
317
+ end
318
+
319
+ nil
320
+ end
321
+
322
+ def tracer_version_string
323
+ defined?(Datadog::VERSION::STRING) ? Datadog::VERSION::STRING : "unknown"
324
+ end
325
+ end
326
+
327
+ # Response for internal errors (exceptions raised before reaching
328
+ # the native transport).
329
+ class InternalErrorResponse
330
+ attr_reader :error
331
+
332
+ def initialize(error)
333
+ @error = error
334
+ end
335
+
336
+ def ok?
337
+ false
338
+ end
339
+
340
+ def internal_error?
341
+ true
342
+ end
343
+
344
+ def server_error?
345
+ false
346
+ end
347
+
348
+ def client_error?
349
+ false
350
+ end
351
+
352
+ def not_found?
353
+ false
354
+ end
355
+
356
+ def unsupported?
357
+ false
358
+ end
359
+
360
+ def payload
361
+ nil
362
+ end
363
+
364
+ def trace_count
365
+ 0
366
+ end
367
+
368
+ def service_rates
369
+ nil
370
+ end
371
+
372
+ def inspect
373
+ "#<#{self.class} error=#{error.inspect}>"
374
+ end
375
+ end
376
+ end
377
+ end
378
+ end
379
+ end