datadog 2.38.0 → 2.47.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 (922) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +279 -35
  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/collectors_cpu_and_wall_time_worker.c +256 -117
  7. data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.c +1 -5
  8. data/ext/datadog_profiling_native_extension/collectors_gc_profiling_helper.c +0 -2
  9. data/ext/datadog_profiling_native_extension/collectors_idle_sampling_helper.c +19 -20
  10. data/ext/datadog_profiling_native_extension/collectors_idle_sampling_helper.h +5 -1
  11. data/ext/datadog_profiling_native_extension/collectors_stack.c +267 -171
  12. data/ext/datadog_profiling_native_extension/collectors_stack.h +17 -3
  13. data/ext/datadog_profiling_native_extension/collectors_thread_context.c +307 -217
  14. data/ext/datadog_profiling_native_extension/collectors_thread_context.h +10 -5
  15. data/ext/datadog_profiling_native_extension/crashtracking_runtime_stacks.c +5 -4
  16. data/ext/datadog_profiling_native_extension/datadog_ruby_common.c +19 -11
  17. data/ext/datadog_profiling_native_extension/datadog_ruby_common.h +7 -10
  18. data/ext/datadog_profiling_native_extension/extconf.rb +68 -100
  19. data/ext/datadog_profiling_native_extension/heap_recorder.c +353 -257
  20. data/ext/datadog_profiling_native_extension/heap_recorder.h +50 -31
  21. data/ext/datadog_profiling_native_extension/native_extension_helpers.rb +3 -27
  22. data/ext/datadog_profiling_native_extension/private_vm_api_access.c +853 -496
  23. data/ext/datadog_profiling_native_extension/private_vm_api_access.h +42 -15
  24. data/ext/datadog_profiling_native_extension/profiling.c +30 -23
  25. data/ext/datadog_profiling_native_extension/ruby_helpers.c +4 -80
  26. data/ext/datadog_profiling_native_extension/ruby_helpers.h +4 -7
  27. data/ext/datadog_profiling_native_extension/stack_recorder.c +116 -89
  28. data/ext/datadog_profiling_native_extension/stack_recorder.h +12 -5
  29. data/ext/datadog_profiling_native_extension/time_helpers.c +2 -4
  30. data/ext/datadog_profiling_native_extension/time_helpers.h +15 -15
  31. data/ext/libdatadog_api/datadog_ruby_common.c +19 -11
  32. data/ext/libdatadog_api/datadog_ruby_common.h +7 -10
  33. data/ext/libdatadog_api/di.c +43 -3
  34. data/ext/libdatadog_api/extconf.rb +29 -24
  35. data/ext/libdatadog_api/feature_flags.c +34 -0
  36. data/ext/libdatadog_api/init.c +9 -1
  37. data/ext/libdatadog_api/otel_thread_context.c +274 -0
  38. data/ext/libdatadog_api/otel_thread_context.h +5 -0
  39. data/ext/libdatadog_api/process_discovery.c +15 -1
  40. data/ext/libdatadog_api/trace_exporter.c +2078 -0
  41. data/ext/libdatadog_api/trace_exporter.h +5 -0
  42. data/ext/libdatadog_extconf_helpers.rb +22 -17
  43. data/lib/datadog/ai_guard/component.rb +24 -15
  44. data/lib/datadog/ai_guard/configuration/ext.rb +2 -0
  45. data/lib/datadog/ai_guard/configuration.rb +13 -0
  46. data/lib/datadog/ai_guard/contrib/ruby_llm/chat_instrumentation.rb +48 -55
  47. data/lib/datadog/ai_guard/contrib/ruby_llm/integration.rb +1 -1
  48. data/lib/datadog/ai_guard/contrib/ruby_llm/message_adapter.rb +76 -0
  49. data/lib/datadog/ai_guard/contrib/ruby_llm/patcher.rb +1 -0
  50. data/lib/datadog/ai_guard/contrib/ruby_llm/redaction_change_set.rb +135 -0
  51. data/lib/datadog/ai_guard/evaluation/client.rb +50 -0
  52. data/lib/datadog/ai_guard/evaluation/content_part.rb +12 -0
  53. data/lib/datadog/ai_guard/evaluation/message.rb +25 -7
  54. data/lib/datadog/ai_guard/evaluation/message_builder.rb +31 -0
  55. data/lib/datadog/ai_guard/evaluation/no_op_result.rb +6 -6
  56. data/lib/datadog/ai_guard/evaluation/outcome.rb +24 -0
  57. data/lib/datadog/ai_guard/evaluation/request.rb +8 -64
  58. data/lib/datadog/ai_guard/evaluation/response.rb +33 -0
  59. data/lib/datadog/ai_guard/evaluation/result.rb +11 -18
  60. data/lib/datadog/ai_guard/evaluation/tool_call.rb +15 -2
  61. data/lib/datadog/ai_guard/evaluation.rb +36 -14
  62. data/lib/datadog/ai_guard/ext.rb +4 -1
  63. data/lib/datadog/ai_guard/{api_client.rb → http_client.rb} +9 -7
  64. data/lib/datadog/ai_guard/metrics/telemetry.rb +43 -0
  65. data/lib/datadog/ai_guard/redaction/replacements.rb +97 -0
  66. data/lib/datadog/ai_guard/redaction/result.rb +29 -0
  67. data/lib/datadog/ai_guard/redaction.rb +80 -0
  68. data/lib/datadog/ai_guard.rb +58 -57
  69. data/lib/datadog/appsec/actions_handler/serializable_backtrace.rb +22 -43
  70. data/lib/datadog/appsec/actions_handler.rb +6 -6
  71. data/lib/datadog/appsec/anonymizer.rb +1 -1
  72. data/lib/datadog/appsec/api_security/endpoint_collection/grape_route_serializer.rb +2 -2
  73. data/lib/datadog/appsec/api_security/endpoint_collection/rails_collector.rb +6 -6
  74. data/lib/datadog/appsec/api_security/endpoint_collection/rails_route_serializer.rb +1 -1
  75. data/lib/datadog/appsec/api_security/endpoint_collection/sinatra_route_serializer.rb +2 -2
  76. data/lib/datadog/appsec/api_security/route_extractor.rb +11 -11
  77. data/lib/datadog/appsec/api_security/sampler.rb +5 -5
  78. data/lib/datadog/appsec/api_security.rb +1 -1
  79. data/lib/datadog/appsec/assets/blocked.html +1 -108
  80. data/lib/datadog/appsec/assets.rb +7 -7
  81. data/lib/datadog/appsec/autoload.rb +3 -3
  82. data/lib/datadog/appsec/component.rb +15 -15
  83. data/lib/datadog/appsec/compressed_json.rb +6 -6
  84. data/lib/datadog/appsec/configuration.rb +70 -61
  85. data/lib/datadog/appsec/context.rb +7 -7
  86. data/lib/datadog/appsec/contrib/active_record/instrumentation.rb +6 -6
  87. data/lib/datadog/appsec/contrib/active_record/integration.rb +4 -4
  88. data/lib/datadog/appsec/contrib/active_record/patcher.rb +4 -4
  89. data/lib/datadog/appsec/contrib/aws_lambda/gateway/watcher.rb +7 -7
  90. data/lib/datadog/appsec/contrib/aws_lambda/integration.rb +2 -2
  91. data/lib/datadog/appsec/contrib/aws_lambda/patcher.rb +2 -2
  92. data/lib/datadog/appsec/contrib/aws_lambda/waf_addresses.rb +36 -34
  93. data/lib/datadog/appsec/contrib/devise/configuration.rb +1 -1
  94. data/lib/datadog/appsec/contrib/devise/data_extractor.rb +3 -3
  95. data/lib/datadog/appsec/contrib/devise/ext.rb +20 -20
  96. data/lib/datadog/appsec/contrib/devise/integration.rb +4 -4
  97. data/lib/datadog/appsec/contrib/devise/patcher.rb +8 -8
  98. data/lib/datadog/appsec/contrib/devise/patches/signin_tracking_patch.rb +12 -12
  99. data/lib/datadog/appsec/contrib/devise/patches/signup_tracking_patch.rb +8 -8
  100. data/lib/datadog/appsec/contrib/devise/tracking_middleware.rb +24 -9
  101. data/lib/datadog/appsec/contrib/excon/integration.rb +4 -4
  102. data/lib/datadog/appsec/contrib/excon/patcher.rb +1 -1
  103. data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +26 -26
  104. data/lib/datadog/appsec/contrib/faraday/integration.rb +4 -4
  105. data/lib/datadog/appsec/contrib/faraday/patcher.rb +4 -4
  106. data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +22 -22
  107. data/lib/datadog/appsec/contrib/graphql/appsec_trace.rb +4 -4
  108. data/lib/datadog/appsec/contrib/graphql/gateway/multiplex.rb +2 -2
  109. data/lib/datadog/appsec/contrib/graphql/gateway/watcher.rb +7 -7
  110. data/lib/datadog/appsec/contrib/graphql/integration.rb +9 -9
  111. data/lib/datadog/appsec/contrib/graphql/patcher.rb +3 -3
  112. data/lib/datadog/appsec/contrib/rack/buffered_input.rb +1 -1
  113. data/lib/datadog/appsec/contrib/rack/ext.rb +29 -29
  114. data/lib/datadog/appsec/contrib/rack/gateway/request.rb +14 -18
  115. data/lib/datadog/appsec/contrib/rack/gateway/response.rb +1 -1
  116. data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +24 -24
  117. data/lib/datadog/appsec/contrib/rack/input_peeker.rb +6 -6
  118. data/lib/datadog/appsec/contrib/rack/integration.rb +6 -6
  119. data/lib/datadog/appsec/contrib/rack/patcher.rb +3 -3
  120. data/lib/datadog/appsec/contrib/rack/request_body_middleware.rb +11 -8
  121. data/lib/datadog/appsec/contrib/rack/request_middleware.rb +26 -26
  122. data/lib/datadog/appsec/contrib/rack/response_body.rb +1 -1
  123. data/lib/datadog/appsec/contrib/rails/gateway/request.rb +10 -10
  124. data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +38 -11
  125. data/lib/datadog/appsec/contrib/rails/integration.rb +5 -5
  126. data/lib/datadog/appsec/contrib/rails/patcher.rb +17 -17
  127. data/lib/datadog/appsec/contrib/rails/patches/process_action_patch.rb +2 -2
  128. data/lib/datadog/appsec/contrib/rails/patches/render_to_body_patch.rb +10 -9
  129. data/lib/datadog/appsec/contrib/rails/request.rb +3 -3
  130. data/lib/datadog/appsec/contrib/rails/request_middleware.rb +2 -1
  131. data/lib/datadog/appsec/contrib/rest_client/integration.rb +5 -5
  132. data/lib/datadog/appsec/contrib/rest_client/patcher.rb +1 -1
  133. data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +23 -23
  134. data/lib/datadog/appsec/contrib/sinatra/gateway/request.rb +1 -1
  135. data/lib/datadog/appsec/contrib/sinatra/gateway/route_params.rb +1 -1
  136. data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +28 -16
  137. data/lib/datadog/appsec/contrib/sinatra/integration.rb +5 -5
  138. data/lib/datadog/appsec/contrib/sinatra/patcher.rb +11 -11
  139. data/lib/datadog/appsec/contrib/sinatra/patches/json_patch.rb +10 -9
  140. data/lib/datadog/appsec/contrib/sinatra/request_middleware.rb +2 -1
  141. data/lib/datadog/appsec/counter_sampler.rb +1 -1
  142. data/lib/datadog/appsec/event.rb +14 -14
  143. data/lib/datadog/appsec/ext.rb +11 -11
  144. data/lib/datadog/appsec/extensions.rb +2 -2
  145. data/lib/datadog/appsec/instrumentation/gateway.rb +1 -1
  146. data/lib/datadog/appsec/metrics/exporter.rb +8 -8
  147. data/lib/datadog/appsec/metrics/telemetry.rb +7 -7
  148. data/lib/datadog/appsec/metrics/telemetry_exporter.rb +4 -4
  149. data/lib/datadog/appsec/metrics.rb +4 -4
  150. data/lib/datadog/appsec/monitor/gateway/watcher.rb +16 -12
  151. data/lib/datadog/appsec/monitor.rb +1 -1
  152. data/lib/datadog/appsec/processor/rule_loader.rb +32 -32
  153. data/lib/datadog/appsec/rate_limiter.rb +1 -1
  154. data/lib/datadog/appsec/remote.rb +6 -6
  155. data/lib/datadog/appsec/response.rb +22 -22
  156. data/lib/datadog/appsec/route_normalizer/rails_route_pattern.rb +11 -11
  157. data/lib/datadog/appsec/route_normalizer/route_pattern.rb +18 -18
  158. data/lib/datadog/appsec/route_normalizer/route_text.rb +3 -3
  159. data/lib/datadog/appsec/route_normalizer.rb +15 -15
  160. data/lib/datadog/appsec/security_engine/engine.rb +41 -40
  161. data/lib/datadog/appsec/security_engine/runner.rb +2 -2
  162. data/lib/datadog/appsec/security_event.rb +2 -2
  163. data/lib/datadog/appsec/utils/http/body.rb +11 -8
  164. data/lib/datadog/appsec/utils/http/body_reader.rb +1 -1
  165. data/lib/datadog/appsec/utils/http/media_range.rb +15 -15
  166. data/lib/datadog/appsec/utils/http/media_type.rb +4 -4
  167. data/lib/datadog/appsec/utils/http/url_encoded.rb +80 -25
  168. data/lib/datadog/appsec.rb +16 -16
  169. data/lib/datadog/auto_instrument.rb +2 -2
  170. data/lib/datadog/core/buffer/cruby.rb +1 -1
  171. data/lib/datadog/core/buffer/thread_safe.rb +1 -1
  172. data/lib/datadog/core/configuration/agent_settings.rb +1 -1
  173. data/lib/datadog/core/configuration/agent_settings_resolver.rb +15 -15
  174. data/lib/datadog/core/configuration/base.rb +2 -2
  175. data/lib/datadog/core/configuration/components.rb +82 -47
  176. data/lib/datadog/core/configuration/components_state.rb +8 -1
  177. data/lib/datadog/core/configuration/config_helper.rb +3 -3
  178. data/lib/datadog/core/configuration/deprecations.rb +6 -6
  179. data/lib/datadog/core/configuration/ext.rb +11 -11
  180. data/lib/datadog/core/configuration/option.rb +16 -16
  181. data/lib/datadog/core/configuration/option_definition.rb +5 -5
  182. data/lib/datadog/core/configuration/options.rb +2 -2
  183. data/lib/datadog/core/configuration/settings.rb +95 -100
  184. data/lib/datadog/core/configuration/stable_config.rb +1 -1
  185. data/lib/datadog/core/configuration/supported_configurations.rb +20 -3
  186. data/lib/datadog/core/configuration.rb +8 -8
  187. data/lib/datadog/core/contrib/rails/railtie.rb +3 -3
  188. data/lib/datadog/core/crashtracking/component.rb +14 -10
  189. data/lib/datadog/core/crashtracking/tag_builder.rb +5 -5
  190. data/lib/datadog/core/deprecations.rb +1 -1
  191. data/lib/datadog/core/diagnostics/environment_logger.rb +42 -7
  192. data/lib/datadog/core/diagnostics/health.rb +2 -2
  193. data/lib/datadog/core/encoding.rb +4 -4
  194. data/lib/datadog/core/environment/agent_info.rb +2 -2
  195. data/lib/datadog/core/environment/cgroup.rb +4 -4
  196. data/lib/datadog/core/environment/container.rb +9 -9
  197. data/lib/datadog/core/environment/execution.rb +3 -3
  198. data/lib/datadog/core/environment/ext.rb +18 -18
  199. data/lib/datadog/core/environment/gc.rb +1 -1
  200. data/lib/datadog/core/environment/git.rb +2 -2
  201. data/lib/datadog/core/environment/identity.rb +10 -10
  202. data/lib/datadog/core/environment/platform.rb +8 -8
  203. data/lib/datadog/core/environment/process.rb +3 -3
  204. data/lib/datadog/core/environment/socket.rb +2 -2
  205. data/lib/datadog/core/environment/variable_helpers.rb +1 -1
  206. data/lib/datadog/core/environment/vm_cache.rb +1 -1
  207. data/lib/datadog/core/environment/yjit.rb +2 -2
  208. data/lib/datadog/core/error.rb +5 -5
  209. data/lib/datadog/core/evp.rb +2 -2
  210. data/lib/datadog/core/extensions.rb +1 -1
  211. data/lib/datadog/core/feature_flags.rb +2 -2
  212. data/lib/datadog/core/git/ext.rb +4 -4
  213. data/lib/datadog/core/logger.rb +3 -3
  214. data/lib/datadog/core/logging/ext.rb +1 -1
  215. data/lib/datadog/core/metrics/client.rb +20 -20
  216. data/lib/datadog/core/metrics/ext.rb +5 -5
  217. data/lib/datadog/core/metrics/helpers.rb +1 -1
  218. data/lib/datadog/core/metrics/logging.rb +2 -2
  219. data/lib/datadog/core/metrics/options.rb +5 -5
  220. data/lib/datadog/core/pin.rb +1 -1
  221. data/lib/datadog/core/process_discovery.rb +13 -9
  222. data/lib/datadog/core/rate_limiter.rb +1 -1
  223. data/lib/datadog/core/remote/client/capabilities.rb +60 -33
  224. data/lib/datadog/core/remote/client.rb +61 -20
  225. data/lib/datadog/core/remote/component.rb +48 -17
  226. data/lib/datadog/core/remote/configuration/content.rb +3 -3
  227. data/lib/datadog/core/remote/configuration/digest.rb +1 -1
  228. data/lib/datadog/core/remote/configuration/path.rb +9 -9
  229. data/lib/datadog/core/remote/configuration/repository.rb +4 -4
  230. data/lib/datadog/core/remote/configuration/target.rb +9 -9
  231. data/lib/datadog/core/remote/configuration.rb +4 -4
  232. data/lib/datadog/core/remote/dispatcher.rb +47 -6
  233. data/lib/datadog/core/remote/ext.rb +3 -3
  234. data/lib/datadog/core/remote/negotiation.rb +1 -1
  235. data/lib/datadog/core/remote/tie/tracing.rb +7 -7
  236. data/lib/datadog/core/remote/transport/config.rb +4 -4
  237. data/lib/datadog/core/remote/transport/http/config.rb +7 -7
  238. data/lib/datadog/core/remote/transport/http/negotiation.rb +4 -4
  239. data/lib/datadog/core/remote/transport/http.rb +10 -10
  240. data/lib/datadog/core/remote/transport/negotiation.rb +3 -3
  241. data/lib/datadog/core/remote/worker.rb +13 -5
  242. data/lib/datadog/core/runtime/ext.rb +22 -22
  243. data/lib/datadog/core/runtime/metrics.rb +9 -9
  244. data/lib/datadog/core/tag_builder.rb +18 -18
  245. data/lib/datadog/core/tag_normalizer.rb +7 -7
  246. data/lib/datadog/core/telemetry/component.rb +13 -13
  247. data/lib/datadog/core/telemetry/configuration_value.rb +38 -0
  248. data/lib/datadog/core/telemetry/emitter.rb +4 -4
  249. data/lib/datadog/core/telemetry/event/app_client_configuration_change.rb +8 -6
  250. data/lib/datadog/core/telemetry/event/app_closing.rb +2 -2
  251. data/lib/datadog/core/telemetry/event/app_dependencies_loaded.rb +2 -2
  252. data/lib/datadog/core/telemetry/event/app_endpoints_loaded.rb +3 -3
  253. data/lib/datadog/core/telemetry/event/app_extended_heartbeat.rb +2 -2
  254. data/lib/datadog/core/telemetry/event/app_heartbeat.rb +2 -2
  255. data/lib/datadog/core/telemetry/event/app_integrations_change.rb +2 -2
  256. data/lib/datadog/core/telemetry/event/app_started.rb +36 -55
  257. data/lib/datadog/core/telemetry/event/base.rb +1 -1
  258. data/lib/datadog/core/telemetry/event/distributions.rb +2 -2
  259. data/lib/datadog/core/telemetry/event/generate_metrics.rb +3 -3
  260. data/lib/datadog/core/telemetry/event/log.rb +6 -6
  261. data/lib/datadog/core/telemetry/event/message_batch.rb +1 -1
  262. data/lib/datadog/core/telemetry/event/synth_app_client_configuration_change.rb +3 -3
  263. data/lib/datadog/core/telemetry/event.rb +16 -16
  264. data/lib/datadog/core/telemetry/ext.rb +11 -11
  265. data/lib/datadog/core/telemetry/logger.rb +1 -1
  266. data/lib/datadog/core/telemetry/logging.rb +5 -5
  267. data/lib/datadog/core/telemetry/metric.rb +9 -9
  268. data/lib/datadog/core/telemetry/metrics_collection.rb +2 -2
  269. data/lib/datadog/core/telemetry/metrics_manager.rb +1 -1
  270. data/lib/datadog/core/telemetry/request.rb +6 -6
  271. data/lib/datadog/core/telemetry/transport/http/telemetry.rb +14 -14
  272. data/lib/datadog/core/telemetry/transport/http.rb +7 -7
  273. data/lib/datadog/core/telemetry/transport/telemetry.rb +3 -3
  274. data/lib/datadog/core/telemetry/worker.rb +6 -6
  275. data/lib/datadog/core/transport/ext.rb +14 -14
  276. data/lib/datadog/core/transport/http/adapters/net.rb +4 -4
  277. data/lib/datadog/core/transport/http/adapters/test.rb +1 -1
  278. data/lib/datadog/core/transport/http/adapters/unix_socket.rb +4 -4
  279. data/lib/datadog/core/transport/http/api/endpoint.rb +1 -1
  280. data/lib/datadog/core/transport/http/api/map.rb +1 -1
  281. data/lib/datadog/core/transport/http/builder.rb +5 -5
  282. data/lib/datadog/core/transport/http/client.rb +2 -2
  283. data/lib/datadog/core/transport/http/response.rb +1 -1
  284. data/lib/datadog/core/transport/http.rb +9 -9
  285. data/lib/datadog/core/transport/transport.rb +2 -2
  286. data/lib/datadog/core/utils/at_fork_monkey_patch.rb +172 -20
  287. data/lib/datadog/core/utils/base64_codec.rb +3 -3
  288. data/lib/datadog/core/utils/duration.rb +1 -1
  289. data/lib/datadog/core/utils/forking.rb +2 -2
  290. data/lib/datadog/core/utils/lru_cache.rb +3 -3
  291. data/lib/datadog/core/utils/network.rb +11 -11
  292. data/lib/datadog/core/utils/only_once_successful.rb +1 -1
  293. data/lib/datadog/core/utils/safe_dup.rb +2 -1
  294. data/lib/datadog/core/utils/sequence.rb +3 -6
  295. data/lib/datadog/core/utils/spawn_monkey_patch.rb +2 -2
  296. data/lib/datadog/core/utils/time.rb +16 -54
  297. data/lib/datadog/core/utils/url.rb +1 -1
  298. data/lib/datadog/core/utils.rb +4 -4
  299. data/lib/datadog/core/workers/async.rb +1 -1
  300. data/lib/datadog/core/workers/polling.rb +2 -2
  301. data/lib/datadog/core/workers/runtime_metrics.rb +5 -5
  302. data/lib/datadog/core.rb +4 -4
  303. data/lib/datadog/data_streams/configuration.rb +3 -3
  304. data/lib/datadog/data_streams/ext.rb +1 -1
  305. data/lib/datadog/data_streams/extensions.rb +2 -2
  306. data/lib/datadog/data_streams/pathway_context.rb +25 -27
  307. data/lib/datadog/data_streams/processor.rb +92 -61
  308. data/lib/datadog/data_streams/transport/http/stats.rb +5 -5
  309. data/lib/datadog/data_streams/transport/http.rb +5 -5
  310. data/lib/datadog/data_streams/transport/stats.rb +7 -7
  311. data/lib/datadog/data_streams.rb +5 -5
  312. data/lib/datadog/di/base.rb +4 -4
  313. data/lib/datadog/di/boot.rb +26 -25
  314. data/lib/datadog/di/capture_expression_evaluator/result.rb +30 -0
  315. data/lib/datadog/di/capture_expression_evaluator.rb +39 -9
  316. data/lib/datadog/di/code_tracker.rb +6 -6
  317. data/lib/datadog/di/component.rb +119 -6
  318. data/lib/datadog/di/configuration.rb +54 -3
  319. data/lib/datadog/di/context.rb +7 -2
  320. data/lib/datadog/di/contrib/active_record.rb +8 -2
  321. data/lib/datadog/di/contrib/railtie.rb +1 -1
  322. data/lib/datadog/di/contrib.rb +5 -5
  323. data/lib/datadog/di/el/compiler.rb +113 -37
  324. data/lib/datadog/di/el/evaluator.rb +82 -2
  325. data/lib/datadog/di/el/expression.rb +13 -2
  326. data/lib/datadog/di/el.rb +3 -3
  327. data/lib/datadog/di/evaluation_failure.rb +28 -0
  328. data/lib/datadog/di/guardrails_telemetry/reason.rb +87 -0
  329. data/lib/datadog/di/guardrails_telemetry.rb +203 -0
  330. data/lib/datadog/di/instrumenter.rb +124 -23
  331. data/lib/datadog/di/logger.rb +32 -10
  332. data/lib/datadog/di/preload.rb +1 -1
  333. data/lib/datadog/di/probe.rb +9 -1
  334. data/lib/datadog/di/probe_builder.rb +25 -24
  335. data/lib/datadog/di/probe_file_loader/railtie.rb +1 -1
  336. data/lib/datadog/di/probe_file_loader.rb +5 -5
  337. data/lib/datadog/di/probe_manager.rb +57 -9
  338. data/lib/datadog/di/probe_notification_builder.rb +46 -43
  339. data/lib/datadog/di/probe_notifier_worker.rb +62 -12
  340. data/lib/datadog/di/probe_repository.rb +1 -1
  341. data/lib/datadog/di/proc_responder.rb +1 -1
  342. data/lib/datadog/di/remote.rb +52 -8
  343. data/lib/datadog/di/serializer.rb +185 -68
  344. data/lib/datadog/di/snapshot_event.rb +38 -0
  345. data/lib/datadog/di/transport/diagnostics.rb +5 -5
  346. data/lib/datadog/di/transport/http/diagnostics.rb +3 -3
  347. data/lib/datadog/di/transport/http/input.rb +2 -2
  348. data/lib/datadog/di/transport/http.rb +23 -13
  349. data/lib/datadog/di/transport/input.rb +41 -16
  350. data/lib/datadog/di/utils.rb +4 -4
  351. data/lib/datadog/di.rb +5 -5
  352. data/lib/datadog/error_tracking/collector.rb +2 -2
  353. data/lib/datadog/error_tracking/component.rb +12 -12
  354. data/lib/datadog/error_tracking/configuration.rb +2 -2
  355. data/lib/datadog/error_tracking/ext.rb +7 -7
  356. data/lib/datadog/error_tracking/extensions.rb +2 -2
  357. data/lib/datadog/error_tracking/filters.rb +4 -4
  358. data/lib/datadog/error_tracking.rb +6 -6
  359. data/lib/datadog/kit/appsec/events/v2.rb +40 -40
  360. data/lib/datadog/kit/appsec/events.rb +25 -25
  361. data/lib/datadog/kit/enable_core_dumps.rb +2 -2
  362. data/lib/datadog/kit/identity.rb +18 -18
  363. data/lib/datadog/kit/tracing/method_tracer.rb +7 -7
  364. data/lib/datadog/kit.rb +1 -1
  365. data/lib/datadog/open_feature/activation.rb +268 -0
  366. data/lib/datadog/open_feature/agentless/configuration_source.rb +246 -0
  367. data/lib/datadog/open_feature/agentless/parser.rb +43 -0
  368. data/lib/datadog/open_feature/agentless/response.rb +19 -0
  369. data/lib/datadog/open_feature/agentless/transport.rb +103 -0
  370. data/lib/datadog/open_feature/component.rb +112 -31
  371. data/lib/datadog/open_feature/configuration/agentless_endpoint.rb +90 -0
  372. data/lib/datadog/open_feature/configuration/source/resolution.rb +22 -0
  373. data/lib/datadog/open_feature/configuration/source.rb +43 -0
  374. data/lib/datadog/open_feature/configuration.rb +139 -2
  375. data/lib/datadog/open_feature/evaluation_engine.rb +36 -10
  376. data/lib/datadog/open_feature/exposures/batch_builder.rb +1 -1
  377. data/lib/datadog/open_feature/exposures/buffer.rb +1 -1
  378. data/lib/datadog/open_feature/exposures/deduplicator.rb +1 -1
  379. data/lib/datadog/open_feature/exposures/event.rb +17 -10
  380. data/lib/datadog/open_feature/exposures/reporter.rb +3 -3
  381. data/lib/datadog/open_feature/exposures/worker.rb +6 -6
  382. data/lib/datadog/open_feature/ext.rb +32 -8
  383. data/lib/datadog/open_feature/flag_evaluation/aggregator.rb +242 -86
  384. data/lib/datadog/open_feature/flag_evaluation/writer.rb +211 -100
  385. data/lib/datadog/open_feature/hooks/evaluation_telemetry_opt_out_hook.rb +25 -0
  386. data/lib/datadog/open_feature/hooks/flag_eval_evp_hook.rb +28 -24
  387. data/lib/datadog/open_feature/hooks/flag_eval_metrics_hook.rb +3 -1
  388. data/lib/datadog/open_feature/hooks/span_enrichment_hook/codec.rb +58 -0
  389. data/lib/datadog/open_feature/hooks/span_enrichment_hook/span_enrichment_state.rb +96 -0
  390. data/lib/datadog/open_feature/hooks/span_enrichment_hook/span_enrichment_state_store.rb +49 -0
  391. data/lib/datadog/open_feature/hooks/span_enrichment_hook.rb +184 -0
  392. data/lib/datadog/open_feature/metrics/flag_eval_metrics.rb +24 -24
  393. data/lib/datadog/open_feature/native_evaluator.rb +24 -10
  394. data/lib/datadog/open_feature/noop_evaluator.rb +8 -3
  395. data/lib/datadog/open_feature/provider.rb +357 -17
  396. data/lib/datadog/open_feature/remote.rb +7 -7
  397. data/lib/datadog/open_feature/resolution_details.rb +4 -2
  398. data/lib/datadog/open_feature/transport.rb +19 -14
  399. data/lib/datadog/open_feature.rb +33 -3
  400. data/lib/datadog/opentelemetry/api/baggage.rb +3 -3
  401. data/lib/datadog/opentelemetry/api/context.rb +4 -4
  402. data/lib/datadog/opentelemetry/configuration/settings.rb +41 -41
  403. data/lib/datadog/opentelemetry/ext.rb +1 -1
  404. data/lib/datadog/opentelemetry/logs.rb +5 -5
  405. data/lib/datadog/opentelemetry/metrics.rb +7 -7
  406. data/lib/datadog/opentelemetry/sdk/configurator.rb +8 -8
  407. data/lib/datadog/opentelemetry/sdk/id_generator.rb +2 -2
  408. data/lib/datadog/opentelemetry/sdk/logs_exporter.rb +6 -6
  409. data/lib/datadog/opentelemetry/sdk/metrics_exporter.rb +5 -5
  410. data/lib/datadog/opentelemetry/sdk/propagator.rb +8 -8
  411. data/lib/datadog/opentelemetry/sdk/span_processor.rb +15 -15
  412. data/lib/datadog/opentelemetry/sdk/trace/span.rb +32 -32
  413. data/lib/datadog/opentelemetry/sdk.rb +2 -2
  414. data/lib/datadog/opentelemetry/signal_configuration.rb +20 -16
  415. data/lib/datadog/opentelemetry/trace.rb +4 -1
  416. data/lib/datadog/opentelemetry.rb +8 -8
  417. data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +10 -2
  418. data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +5 -7
  419. data/lib/datadog/profiling/collectors/info.rb +40 -13
  420. data/lib/datadog/profiling/collectors/thread_context.rb +6 -17
  421. data/lib/datadog/profiling/component.rb +33 -39
  422. data/lib/datadog/profiling/exporter.rb +11 -11
  423. data/lib/datadog/profiling/http_transport.rb +1 -1
  424. data/lib/datadog/profiling/sequence_tracker.rb +1 -1
  425. data/lib/datadog/profiling/tag_builder.rb +19 -19
  426. data/lib/datadog/profiling/tasks/exec.rb +1 -1
  427. data/lib/datadog/profiling.rb +31 -27
  428. data/lib/datadog/single_step_instrument.rb +1 -1
  429. data/lib/datadog/symbol_database/component.rb +15 -15
  430. data/lib/datadog/symbol_database/configuration.rb +3 -3
  431. data/lib/datadog/symbol_database/extensions.rb +2 -2
  432. data/lib/datadog/symbol_database/extractor.rb +141 -159
  433. data/lib/datadog/symbol_database/file_hash.rb +3 -3
  434. data/lib/datadog/symbol_database/logger.rb +1 -1
  435. data/lib/datadog/symbol_database/remote.rb +21 -6
  436. data/lib/datadog/symbol_database/scope.rb +2 -2
  437. data/lib/datadog/symbol_database/scope_batcher.rb +2 -2
  438. data/lib/datadog/symbol_database/service_version.rb +4 -4
  439. data/lib/datadog/symbol_database/symbol.rb +1 -1
  440. data/lib/datadog/symbol_database/transport/http/endpoint.rb +1 -1
  441. data/lib/datadog/symbol_database/transport/http.rb +6 -6
  442. data/lib/datadog/symbol_database/transport.rb +4 -4
  443. data/lib/datadog/symbol_database/uploader.rb +22 -22
  444. data/lib/datadog/symbol_database.rb +2 -2
  445. data/lib/datadog/tracing/analytics.rb +1 -1
  446. data/lib/datadog/tracing/buffer.rb +5 -5
  447. data/lib/datadog/tracing/client_ip.rb +4 -4
  448. data/lib/datadog/tracing/component.rb +51 -9
  449. data/lib/datadog/tracing/configuration/dynamic/option.rb +4 -0
  450. data/lib/datadog/tracing/configuration/dynamic.rb +13 -11
  451. data/lib/datadog/tracing/configuration/ext.rb +46 -42
  452. data/lib/datadog/tracing/configuration/http.rb +2 -2
  453. data/lib/datadog/tracing/configuration/settings.rb +52 -16
  454. data/lib/datadog/tracing/context.rb +25 -3
  455. data/lib/datadog/tracing/context_provider.rb +19 -7
  456. data/lib/datadog/tracing/contrib/action_cable/configuration/settings.rb +2 -2
  457. data/lib/datadog/tracing/contrib/action_cable/event.rb +4 -4
  458. data/lib/datadog/tracing/contrib/action_cable/events/broadcast.rb +5 -5
  459. data/lib/datadog/tracing/contrib/action_cable/events/perform_action.rb +4 -4
  460. data/lib/datadog/tracing/contrib/action_cable/events/transmit.rb +5 -5
  461. data/lib/datadog/tracing/contrib/action_cable/events.rb +5 -5
  462. data/lib/datadog/tracing/contrib/action_cable/ext.rb +18 -18
  463. data/lib/datadog/tracing/contrib/action_cable/instrumentation.rb +4 -4
  464. data/lib/datadog/tracing/contrib/action_cable/integration.rb +7 -7
  465. data/lib/datadog/tracing/contrib/action_cable/patcher.rb +4 -4
  466. data/lib/datadog/tracing/contrib/action_mailer/configuration/settings.rb +2 -2
  467. data/lib/datadog/tracing/contrib/action_mailer/event.rb +3 -3
  468. data/lib/datadog/tracing/contrib/action_mailer/events/deliver.rb +8 -8
  469. data/lib/datadog/tracing/contrib/action_mailer/events/process.rb +4 -4
  470. data/lib/datadog/tracing/contrib/action_mailer/events.rb +3 -3
  471. data/lib/datadog/tracing/contrib/action_mailer/ext.rb +18 -18
  472. data/lib/datadog/tracing/contrib/action_mailer/integration.rb +7 -7
  473. data/lib/datadog/tracing/contrib/action_mailer/patcher.rb +3 -3
  474. data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +9 -9
  475. data/lib/datadog/tracing/contrib/action_pack/action_controller/patcher.rb +2 -2
  476. data/lib/datadog/tracing/contrib/action_pack/action_dispatch/instrumentation.rb +4 -4
  477. data/lib/datadog/tracing/contrib/action_pack/action_dispatch/patcher.rb +4 -4
  478. data/lib/datadog/tracing/contrib/action_pack/configuration/settings.rb +3 -3
  479. data/lib/datadog/tracing/contrib/action_pack/ext.rb +10 -10
  480. data/lib/datadog/tracing/contrib/action_pack/integration.rb +7 -7
  481. data/lib/datadog/tracing/contrib/action_pack/patcher.rb +3 -3
  482. data/lib/datadog/tracing/contrib/action_pack/utils.rb +1 -1
  483. data/lib/datadog/tracing/contrib/action_view/configuration/settings.rb +3 -3
  484. data/lib/datadog/tracing/contrib/action_view/event.rb +1 -1
  485. data/lib/datadog/tracing/contrib/action_view/events/render_partial.rb +6 -6
  486. data/lib/datadog/tracing/contrib/action_view/events/render_template.rb +6 -6
  487. data/lib/datadog/tracing/contrib/action_view/events.rb +3 -3
  488. data/lib/datadog/tracing/contrib/action_view/ext.rb +10 -10
  489. data/lib/datadog/tracing/contrib/action_view/integration.rb +11 -11
  490. data/lib/datadog/tracing/contrib/action_view/patcher.rb +5 -5
  491. data/lib/datadog/tracing/contrib/action_view/utils.rb +2 -2
  492. data/lib/datadog/tracing/contrib/active_job/configuration/settings.rb +2 -2
  493. data/lib/datadog/tracing/contrib/active_job/data_streams.rb +2 -2
  494. data/lib/datadog/tracing/contrib/active_job/event.rb +3 -3
  495. data/lib/datadog/tracing/contrib/active_job/events/discard.rb +5 -5
  496. data/lib/datadog/tracing/contrib/active_job/events/enqueue.rb +5 -5
  497. data/lib/datadog/tracing/contrib/active_job/events/enqueue_at.rb +5 -5
  498. data/lib/datadog/tracing/contrib/active_job/events/enqueue_retry.rb +5 -5
  499. data/lib/datadog/tracing/contrib/active_job/events/perform.rb +5 -5
  500. data/lib/datadog/tracing/contrib/active_job/events/retry_stopped.rb +5 -5
  501. data/lib/datadog/tracing/contrib/active_job/events.rb +6 -6
  502. data/lib/datadog/tracing/contrib/active_job/ext.rb +23 -23
  503. data/lib/datadog/tracing/contrib/active_job/integration.rb +7 -7
  504. data/lib/datadog/tracing/contrib/active_job/patcher.rb +7 -7
  505. data/lib/datadog/tracing/contrib/active_model_serializers/configuration/settings.rb +2 -2
  506. data/lib/datadog/tracing/contrib/active_model_serializers/event.rb +4 -4
  507. data/lib/datadog/tracing/contrib/active_model_serializers/events/render.rb +6 -6
  508. data/lib/datadog/tracing/contrib/active_model_serializers/events/serialize.rb +6 -6
  509. data/lib/datadog/tracing/contrib/active_model_serializers/events.rb +3 -3
  510. data/lib/datadog/tracing/contrib/active_model_serializers/ext.rb +10 -10
  511. data/lib/datadog/tracing/contrib/active_model_serializers/integration.rb +5 -5
  512. data/lib/datadog/tracing/contrib/active_model_serializers/patcher.rb +3 -3
  513. data/lib/datadog/tracing/contrib/active_record/configuration/makara_resolver.rb +1 -1
  514. data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +7 -7
  515. data/lib/datadog/tracing/contrib/active_record/configuration/settings.rb +4 -4
  516. data/lib/datadog/tracing/contrib/active_record/event.rb +1 -1
  517. data/lib/datadog/tracing/contrib/active_record/events/instantiation.rb +8 -8
  518. data/lib/datadog/tracing/contrib/active_record/events/sql.rb +10 -9
  519. data/lib/datadog/tracing/contrib/active_record/events.rb +3 -3
  520. data/lib/datadog/tracing/contrib/active_record/ext.rb +15 -15
  521. data/lib/datadog/tracing/contrib/active_record/integration.rb +11 -11
  522. data/lib/datadog/tracing/contrib/active_record/patcher.rb +2 -2
  523. data/lib/datadog/tracing/contrib/active_record/utils.rb +3 -3
  524. data/lib/datadog/tracing/contrib/active_support/cache/event.rb +1 -1
  525. data/lib/datadog/tracing/contrib/active_support/cache/events/cache.rb +12 -12
  526. data/lib/datadog/tracing/contrib/active_support/cache/events.rb +1 -1
  527. data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +4 -4
  528. data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +5 -5
  529. data/lib/datadog/tracing/contrib/active_support/cache/redis.rb +4 -4
  530. data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +3 -3
  531. data/lib/datadog/tracing/contrib/active_support/ext.rb +16 -16
  532. data/lib/datadog/tracing/contrib/active_support/integration.rb +8 -8
  533. data/lib/datadog/tracing/contrib/active_support/notifications/event.rb +1 -1
  534. data/lib/datadog/tracing/contrib/active_support/notifications/subscriber.rb +2 -2
  535. data/lib/datadog/tracing/contrib/active_support/notifications/subscription.rb +1 -1
  536. data/lib/datadog/tracing/contrib/active_support/patcher.rb +2 -2
  537. data/lib/datadog/tracing/contrib/analytics.rb +1 -1
  538. data/lib/datadog/tracing/contrib/auto_instrument.rb +4 -4
  539. data/lib/datadog/tracing/contrib/aws/configuration/settings.rb +3 -3
  540. data/lib/datadog/tracing/contrib/aws/ext.rb +26 -26
  541. data/lib/datadog/tracing/contrib/aws/instrumentation.rb +5 -5
  542. data/lib/datadog/tracing/contrib/aws/integration.rb +9 -9
  543. data/lib/datadog/tracing/contrib/aws/parsed_context.rb +1 -1
  544. data/lib/datadog/tracing/contrib/aws/patcher.rb +5 -5
  545. data/lib/datadog/tracing/contrib/aws/service/dynamodb.rb +2 -2
  546. data/lib/datadog/tracing/contrib/aws/service/eventbridge.rb +2 -2
  547. data/lib/datadog/tracing/contrib/aws/service/kinesis.rb +4 -4
  548. data/lib/datadog/tracing/contrib/aws/service/s3.rb +2 -2
  549. data/lib/datadog/tracing/contrib/aws/service/sns.rb +3 -3
  550. data/lib/datadog/tracing/contrib/aws/service/sqs.rb +3 -3
  551. data/lib/datadog/tracing/contrib/aws/service/states.rb +5 -5
  552. data/lib/datadog/tracing/contrib/aws/services.rb +14 -14
  553. data/lib/datadog/tracing/contrib/concurrent_ruby/async_patch.rb +1 -1
  554. data/lib/datadog/tracing/contrib/concurrent_ruby/configuration/settings.rb +2 -2
  555. data/lib/datadog/tracing/contrib/concurrent_ruby/context_composite_executor_service.rb +1 -1
  556. data/lib/datadog/tracing/contrib/concurrent_ruby/ext.rb +2 -2
  557. data/lib/datadog/tracing/contrib/concurrent_ruby/future_patch.rb +1 -1
  558. data/lib/datadog/tracing/contrib/concurrent_ruby/integration.rb +6 -6
  559. data/lib/datadog/tracing/contrib/concurrent_ruby/patcher.rb +4 -4
  560. data/lib/datadog/tracing/contrib/concurrent_ruby/promises_future_patch.rb +1 -1
  561. data/lib/datadog/tracing/contrib/configurable.rb +2 -2
  562. data/lib/datadog/tracing/contrib/configuration/resolvers/pattern_resolver.rb +1 -1
  563. data/lib/datadog/tracing/contrib/configuration/settings.rb +2 -2
  564. data/lib/datadog/tracing/contrib/dalli/configuration/settings.rb +2 -2
  565. data/lib/datadog/tracing/contrib/dalli/ext.rb +13 -13
  566. data/lib/datadog/tracing/contrib/dalli/instrumentation.rb +5 -5
  567. data/lib/datadog/tracing/contrib/dalli/integration.rb +7 -7
  568. data/lib/datadog/tracing/contrib/dalli/patcher.rb +3 -3
  569. data/lib/datadog/tracing/contrib/dalli/quantize.rb +2 -2
  570. data/lib/datadog/tracing/contrib/delayed_job/configuration/settings.rb +2 -2
  571. data/lib/datadog/tracing/contrib/delayed_job/ext.rb +14 -14
  572. data/lib/datadog/tracing/contrib/delayed_job/integration.rb +5 -5
  573. data/lib/datadog/tracing/contrib/delayed_job/patcher.rb +3 -3
  574. data/lib/datadog/tracing/contrib/delayed_job/plugin.rb +5 -5
  575. data/lib/datadog/tracing/contrib/elasticsearch/configuration/settings.rb +2 -2
  576. data/lib/datadog/tracing/contrib/elasticsearch/ext.rb +15 -15
  577. data/lib/datadog/tracing/contrib/elasticsearch/integration.rb +6 -6
  578. data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +10 -10
  579. data/lib/datadog/tracing/contrib/elasticsearch/quantize.rb +3 -3
  580. data/lib/datadog/tracing/contrib/ethon/configuration/settings.rb +2 -2
  581. data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +18 -13
  582. data/lib/datadog/tracing/contrib/ethon/ext.rb +13 -13
  583. data/lib/datadog/tracing/contrib/ethon/integration.rb +6 -6
  584. data/lib/datadog/tracing/contrib/ethon/multi_patch.rb +3 -3
  585. data/lib/datadog/tracing/contrib/ethon/patcher.rb +3 -3
  586. data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +5 -5
  587. data/lib/datadog/tracing/contrib/excon/ext.rb +11 -11
  588. data/lib/datadog/tracing/contrib/excon/integration.rb +6 -6
  589. data/lib/datadog/tracing/contrib/excon/middleware.rb +17 -10
  590. data/lib/datadog/tracing/contrib/excon/patcher.rb +2 -2
  591. data/lib/datadog/tracing/contrib/ext.rb +18 -18
  592. data/lib/datadog/tracing/contrib/extensions.rb +2 -2
  593. data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +4 -4
  594. data/lib/datadog/tracing/contrib/faraday/ext.rb +11 -11
  595. data/lib/datadog/tracing/contrib/faraday/integration.rb +6 -6
  596. data/lib/datadog/tracing/contrib/faraday/middleware.rb +17 -11
  597. data/lib/datadog/tracing/contrib/faraday/patcher.rb +6 -6
  598. data/lib/datadog/tracing/contrib/grape/configuration/settings.rb +4 -4
  599. data/lib/datadog/tracing/contrib/grape/endpoint.rb +51 -24
  600. data/lib/datadog/tracing/contrib/grape/ext.rb +15 -15
  601. data/lib/datadog/tracing/contrib/grape/instrumentation.rb +3 -3
  602. data/lib/datadog/tracing/contrib/grape/integration.rb +5 -5
  603. data/lib/datadog/tracing/contrib/grape/patcher.rb +5 -5
  604. data/lib/datadog/tracing/contrib/graphql/configuration/error_extension_env_parser.rb +1 -1
  605. data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +3 -3
  606. data/lib/datadog/tracing/contrib/graphql/ext.rb +9 -9
  607. data/lib/datadog/tracing/contrib/graphql/integration.rb +9 -9
  608. data/lib/datadog/tracing/contrib/graphql/patcher.rb +7 -7
  609. data/lib/datadog/tracing/contrib/graphql/unified_trace.rb +37 -37
  610. data/lib/datadog/tracing/contrib/graphql/unified_trace_patcher.rb +2 -2
  611. data/lib/datadog/tracing/contrib/grpc/configuration/settings.rb +2 -2
  612. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +8 -8
  613. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +8 -8
  614. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor.rb +6 -6
  615. data/lib/datadog/tracing/contrib/grpc/distributed/fetcher.rb +1 -1
  616. data/lib/datadog/tracing/contrib/grpc/distributed/propagation.rb +9 -9
  617. data/lib/datadog/tracing/contrib/grpc/ext.rb +14 -14
  618. data/lib/datadog/tracing/contrib/grpc/formatting.rb +7 -7
  619. data/lib/datadog/tracing/contrib/grpc/integration.rb +5 -5
  620. data/lib/datadog/tracing/contrib/grpc/intercept_with_datadog.rb +1 -1
  621. data/lib/datadog/tracing/contrib/grpc/patcher.rb +3 -3
  622. data/lib/datadog/tracing/contrib/grpc.rb +6 -6
  623. data/lib/datadog/tracing/contrib/hanami/action_tracer.rb +3 -3
  624. data/lib/datadog/tracing/contrib/hanami/configuration/settings.rb +2 -2
  625. data/lib/datadog/tracing/contrib/hanami/ext.rb +8 -8
  626. data/lib/datadog/tracing/contrib/hanami/integration.rb +6 -6
  627. data/lib/datadog/tracing/contrib/hanami/patcher.rb +5 -5
  628. data/lib/datadog/tracing/contrib/hanami/renderer_policy_tracing.rb +3 -3
  629. data/lib/datadog/tracing/contrib/hanami/router_tracing.rb +5 -4
  630. data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +1 -1
  631. data/lib/datadog/tracing/contrib/http/configuration/settings.rb +4 -4
  632. data/lib/datadog/tracing/contrib/http/distributed/fetcher.rb +3 -3
  633. data/lib/datadog/tracing/contrib/http/distributed/propagation.rb +8 -8
  634. data/lib/datadog/tracing/contrib/http/ext.rb +11 -11
  635. data/lib/datadog/tracing/contrib/http/instrumentation.rb +22 -7
  636. data/lib/datadog/tracing/contrib/http/integration.rb +7 -7
  637. data/lib/datadog/tracing/contrib/http/patcher.rb +3 -3
  638. data/lib/datadog/tracing/contrib/http.rb +6 -6
  639. data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +4 -4
  640. data/lib/datadog/tracing/contrib/httpclient/ext.rb +11 -11
  641. data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +13 -7
  642. data/lib/datadog/tracing/contrib/httpclient/integration.rb +6 -6
  643. data/lib/datadog/tracing/contrib/httpclient/patcher.rb +3 -3
  644. data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +4 -4
  645. data/lib/datadog/tracing/contrib/httprb/ext.rb +11 -11
  646. data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +16 -10
  647. data/lib/datadog/tracing/contrib/httprb/integration.rb +7 -7
  648. data/lib/datadog/tracing/contrib/httprb/patcher.rb +3 -3
  649. data/lib/datadog/tracing/contrib/integration.rb +3 -3
  650. data/lib/datadog/tracing/contrib/kafka/configuration/settings.rb +2 -2
  651. data/lib/datadog/tracing/contrib/kafka/event.rb +3 -3
  652. data/lib/datadog/tracing/contrib/kafka/events/connection/request.rb +7 -3
  653. data/lib/datadog/tracing/contrib/kafka/events/consumer/process_batch.rb +4 -4
  654. data/lib/datadog/tracing/contrib/kafka/events/consumer/process_message.rb +4 -4
  655. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/heartbeat.rb +5 -5
  656. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/join_group.rb +5 -5
  657. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/leave_group.rb +5 -5
  658. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/sync_group.rb +5 -5
  659. data/lib/datadog/tracing/contrib/kafka/events/produce_operation/send_messages.rb +10 -5
  660. data/lib/datadog/tracing/contrib/kafka/events/producer/deliver_messages.rb +10 -5
  661. data/lib/datadog/tracing/contrib/kafka/events.rb +10 -10
  662. data/lib/datadog/tracing/contrib/kafka/ext.rb +40 -40
  663. data/lib/datadog/tracing/contrib/kafka/instrumentation/consumer.rb +2 -2
  664. data/lib/datadog/tracing/contrib/kafka/instrumentation/producer.rb +4 -4
  665. data/lib/datadog/tracing/contrib/kafka/integration.rb +6 -6
  666. data/lib/datadog/tracing/contrib/kafka/patcher.rb +5 -5
  667. data/lib/datadog/tracing/contrib/karafka/configuration/settings.rb +2 -2
  668. data/lib/datadog/tracing/contrib/karafka/distributed/propagation.rb +9 -9
  669. data/lib/datadog/tracing/contrib/karafka/ext.rb +13 -13
  670. data/lib/datadog/tracing/contrib/karafka/integration.rb +5 -5
  671. data/lib/datadog/tracing/contrib/karafka/monitor.rb +14 -14
  672. data/lib/datadog/tracing/contrib/karafka/patcher.rb +8 -8
  673. data/lib/datadog/tracing/contrib/karafka.rb +6 -6
  674. data/lib/datadog/tracing/contrib/lograge/configuration/settings.rb +2 -2
  675. data/lib/datadog/tracing/contrib/lograge/ext.rb +1 -1
  676. data/lib/datadog/tracing/contrib/lograge/integration.rb +5 -5
  677. data/lib/datadog/tracing/contrib/lograge/patcher.rb +9 -9
  678. data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +2 -2
  679. data/lib/datadog/tracing/contrib/mongodb/ext.rb +18 -18
  680. data/lib/datadog/tracing/contrib/mongodb/instrumentation.rb +3 -3
  681. data/lib/datadog/tracing/contrib/mongodb/integration.rb +7 -7
  682. data/lib/datadog/tracing/contrib/mongodb/parsers.rb +5 -5
  683. data/lib/datadog/tracing/contrib/mongodb/patcher.rb +3 -3
  684. data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +13 -13
  685. data/lib/datadog/tracing/contrib/mysql2/configuration/settings.rb +3 -3
  686. data/lib/datadog/tracing/contrib/mysql2/ext.rb +11 -11
  687. data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +6 -6
  688. data/lib/datadog/tracing/contrib/mysql2/integration.rb +5 -5
  689. data/lib/datadog/tracing/contrib/mysql2/patcher.rb +2 -2
  690. data/lib/datadog/tracing/contrib/opensearch/configuration/settings.rb +2 -2
  691. data/lib/datadog/tracing/contrib/opensearch/ext.rb +23 -23
  692. data/lib/datadog/tracing/contrib/opensearch/integration.rb +6 -6
  693. data/lib/datadog/tracing/contrib/opensearch/patcher.rb +13 -13
  694. data/lib/datadog/tracing/contrib/opensearch/quantize.rb +4 -4
  695. data/lib/datadog/tracing/contrib/patchable.rb +1 -1
  696. data/lib/datadog/tracing/contrib/patcher.rb +3 -3
  697. data/lib/datadog/tracing/contrib/pg/configuration/settings.rb +3 -3
  698. data/lib/datadog/tracing/contrib/pg/ext.rb +19 -19
  699. data/lib/datadog/tracing/contrib/pg/instrumentation.rb +6 -6
  700. data/lib/datadog/tracing/contrib/pg/integration.rb +5 -5
  701. data/lib/datadog/tracing/contrib/pg/patcher.rb +2 -2
  702. data/lib/datadog/tracing/contrib/presto/configuration/settings.rb +2 -2
  703. data/lib/datadog/tracing/contrib/presto/ext.rb +21 -21
  704. data/lib/datadog/tracing/contrib/presto/instrumentation.rb +2 -2
  705. data/lib/datadog/tracing/contrib/presto/integration.rb +6 -6
  706. data/lib/datadog/tracing/contrib/presto/patcher.rb +4 -4
  707. data/lib/datadog/tracing/contrib/propagation/sql_comment/comment.rb +2 -2
  708. data/lib/datadog/tracing/contrib/propagation/sql_comment/ext.rb +17 -17
  709. data/lib/datadog/tracing/contrib/propagation/sql_comment/mode.rb +1 -1
  710. data/lib/datadog/tracing/contrib/propagation/sql_comment.rb +5 -5
  711. data/lib/datadog/tracing/contrib/que/configuration/settings.rb +2 -2
  712. data/lib/datadog/tracing/contrib/que/ext.rb +19 -19
  713. data/lib/datadog/tracing/contrib/que/integration.rb +6 -6
  714. data/lib/datadog/tracing/contrib/que/patcher.rb +1 -1
  715. data/lib/datadog/tracing/contrib/que/tracer.rb +2 -2
  716. data/lib/datadog/tracing/contrib/racecar/configuration/settings.rb +3 -3
  717. data/lib/datadog/tracing/contrib/racecar/event.rb +4 -4
  718. data/lib/datadog/tracing/contrib/racecar/events/batch.rb +3 -3
  719. data/lib/datadog/tracing/contrib/racecar/events/consume.rb +3 -3
  720. data/lib/datadog/tracing/contrib/racecar/events/message.rb +3 -3
  721. data/lib/datadog/tracing/contrib/racecar/events.rb +4 -4
  722. data/lib/datadog/tracing/contrib/racecar/ext.rb +18 -18
  723. data/lib/datadog/tracing/contrib/racecar/integration.rb +5 -5
  724. data/lib/datadog/tracing/contrib/racecar/patcher.rb +3 -3
  725. data/lib/datadog/tracing/contrib/rack/configuration/settings.rb +3 -3
  726. data/lib/datadog/tracing/contrib/rack/ext.rb +33 -33
  727. data/lib/datadog/tracing/contrib/rack/header_collection.rb +3 -3
  728. data/lib/datadog/tracing/contrib/rack/header_tagging.rb +4 -4
  729. data/lib/datadog/tracing/contrib/rack/integration.rb +6 -6
  730. data/lib/datadog/tracing/contrib/rack/middlewares.rb +24 -24
  731. data/lib/datadog/tracing/contrib/rack/patcher.rb +3 -3
  732. data/lib/datadog/tracing/contrib/rack/request_queue.rb +3 -3
  733. data/lib/datadog/tracing/contrib/rack/route_inference.rb +11 -11
  734. data/lib/datadog/tracing/contrib/rack/trace_proxy_middleware.rb +16 -16
  735. data/lib/datadog/tracing/contrib/rails/auto_instrument_railtie.rb +1 -1
  736. data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +3 -3
  737. data/lib/datadog/tracing/contrib/rails/ext.rb +15 -15
  738. data/lib/datadog/tracing/contrib/rails/framework.rb +11 -11
  739. data/lib/datadog/tracing/contrib/rails/integration.rb +5 -5
  740. data/lib/datadog/tracing/contrib/rails/middlewares.rb +1 -1
  741. data/lib/datadog/tracing/contrib/rails/patcher.rb +8 -8
  742. data/lib/datadog/tracing/contrib/rails/railtie.rb +4 -4
  743. data/lib/datadog/tracing/contrib/rails/runner.rb +1 -1
  744. data/lib/datadog/tracing/contrib/rake/configuration/settings.rb +3 -3
  745. data/lib/datadog/tracing/contrib/rake/ext.rb +12 -12
  746. data/lib/datadog/tracing/contrib/rake/instrumentation.rb +4 -4
  747. data/lib/datadog/tracing/contrib/rake/integration.rb +5 -5
  748. data/lib/datadog/tracing/contrib/rake/patcher.rb +3 -3
  749. data/lib/datadog/tracing/contrib/redis/configuration/resolver.rb +3 -3
  750. data/lib/datadog/tracing/contrib/redis/configuration/settings.rb +2 -2
  751. data/lib/datadog/tracing/contrib/redis/ext.rb +16 -16
  752. data/lib/datadog/tracing/contrib/redis/instrumentation.rb +6 -6
  753. data/lib/datadog/tracing/contrib/redis/integration.rb +7 -7
  754. data/lib/datadog/tracing/contrib/redis/patcher.rb +10 -10
  755. data/lib/datadog/tracing/contrib/redis/quantize.rb +39 -5
  756. data/lib/datadog/tracing/contrib/redis/tags.rb +5 -5
  757. data/lib/datadog/tracing/contrib/redis/trace_middleware.rb +14 -8
  758. data/lib/datadog/tracing/contrib/resque/configuration/settings.rb +2 -2
  759. data/lib/datadog/tracing/contrib/resque/ext.rb +7 -7
  760. data/lib/datadog/tracing/contrib/resque/integration.rb +5 -5
  761. data/lib/datadog/tracing/contrib/resque/patcher.rb +3 -3
  762. data/lib/datadog/tracing/contrib/resque/resque_job.rb +5 -5
  763. data/lib/datadog/tracing/contrib/rest_client/configuration/settings.rb +2 -2
  764. data/lib/datadog/tracing/contrib/rest_client/ext.rb +10 -10
  765. data/lib/datadog/tracing/contrib/rest_client/integration.rb +6 -6
  766. data/lib/datadog/tracing/contrib/rest_client/patcher.rb +2 -2
  767. data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +15 -8
  768. data/lib/datadog/tracing/contrib/roda/configuration/settings.rb +2 -2
  769. data/lib/datadog/tracing/contrib/roda/ext.rb +6 -6
  770. data/lib/datadog/tracing/contrib/roda/instrumentation.rb +4 -4
  771. data/lib/datadog/tracing/contrib/roda/integration.rb +6 -6
  772. data/lib/datadog/tracing/contrib/roda/patcher.rb +3 -3
  773. data/lib/datadog/tracing/contrib/semantic_logger/configuration/settings.rb +2 -2
  774. data/lib/datadog/tracing/contrib/semantic_logger/ext.rb +1 -1
  775. data/lib/datadog/tracing/contrib/semantic_logger/integration.rb +5 -5
  776. data/lib/datadog/tracing/contrib/semantic_logger/patcher.rb +2 -2
  777. data/lib/datadog/tracing/contrib/sequel/configuration/settings.rb +2 -2
  778. data/lib/datadog/tracing/contrib/sequel/database.rb +6 -10
  779. data/lib/datadog/tracing/contrib/sequel/dataset.rb +5 -5
  780. data/lib/datadog/tracing/contrib/sequel/ext.rb +12 -8
  781. data/lib/datadog/tracing/contrib/sequel/integration.rb +5 -5
  782. data/lib/datadog/tracing/contrib/sequel/jdbc_connection_string.rb +140 -0
  783. data/lib/datadog/tracing/contrib/sequel/patcher.rb +3 -3
  784. data/lib/datadog/tracing/contrib/sequel/utils.rb +101 -9
  785. data/lib/datadog/tracing/contrib/shoryuken/configuration/settings.rb +2 -2
  786. data/lib/datadog/tracing/contrib/shoryuken/ext.rb +12 -12
  787. data/lib/datadog/tracing/contrib/shoryuken/integration.rb +6 -6
  788. data/lib/datadog/tracing/contrib/shoryuken/patcher.rb +1 -1
  789. data/lib/datadog/tracing/contrib/shoryuken/tracer.rb +2 -2
  790. data/lib/datadog/tracing/contrib/sidekiq/client_tracer.rb +8 -8
  791. data/lib/datadog/tracing/contrib/sidekiq/configuration/settings.rb +2 -2
  792. data/lib/datadog/tracing/contrib/sidekiq/distributed/propagation.rb +10 -10
  793. data/lib/datadog/tracing/contrib/sidekiq/ext.rb +30 -30
  794. data/lib/datadog/tracing/contrib/sidekiq/integration.rb +7 -7
  795. data/lib/datadog/tracing/contrib/sidekiq/patcher.rb +8 -8
  796. data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +13 -13
  797. data/lib/datadog/tracing/contrib/sidekiq/utils.rb +9 -9
  798. data/lib/datadog/tracing/contrib/sidekiq.rb +6 -6
  799. data/lib/datadog/tracing/contrib/sinatra/configuration/settings.rb +3 -3
  800. data/lib/datadog/tracing/contrib/sinatra/env.rb +6 -6
  801. data/lib/datadog/tracing/contrib/sinatra/ext.rb +17 -17
  802. data/lib/datadog/tracing/contrib/sinatra/framework.rb +1 -1
  803. data/lib/datadog/tracing/contrib/sinatra/integration.rb +5 -5
  804. data/lib/datadog/tracing/contrib/sinatra/patcher.rb +5 -5
  805. data/lib/datadog/tracing/contrib/sinatra/tracer.rb +10 -10
  806. data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +8 -8
  807. data/lib/datadog/tracing/contrib/sneakers/configuration/settings.rb +1 -1
  808. data/lib/datadog/tracing/contrib/sneakers/ext.rb +12 -12
  809. data/lib/datadog/tracing/contrib/sneakers/integration.rb +7 -7
  810. data/lib/datadog/tracing/contrib/sneakers/patcher.rb +2 -2
  811. data/lib/datadog/tracing/contrib/sneakers/tracer.rb +4 -4
  812. data/lib/datadog/tracing/contrib/span_attribute_schema.rb +2 -2
  813. data/lib/datadog/tracing/contrib/status_range_env_parser.rb +2 -2
  814. data/lib/datadog/tracing/contrib/status_range_matcher.rb +1 -1
  815. data/lib/datadog/tracing/contrib/stripe/configuration/settings.rb +2 -2
  816. data/lib/datadog/tracing/contrib/stripe/ext.rb +12 -12
  817. data/lib/datadog/tracing/contrib/stripe/integration.rb +5 -5
  818. data/lib/datadog/tracing/contrib/stripe/patcher.rb +2 -2
  819. data/lib/datadog/tracing/contrib/stripe/request.rb +3 -3
  820. data/lib/datadog/tracing/contrib/sucker_punch/configuration/settings.rb +2 -2
  821. data/lib/datadog/tracing/contrib/sucker_punch/exception_handler.rb +1 -1
  822. data/lib/datadog/tracing/contrib/sucker_punch/ext.rb +13 -13
  823. data/lib/datadog/tracing/contrib/sucker_punch/instrumentation.rb +4 -4
  824. data/lib/datadog/tracing/contrib/sucker_punch/integration.rb +5 -5
  825. data/lib/datadog/tracing/contrib/sucker_punch/patcher.rb +4 -4
  826. data/lib/datadog/tracing/contrib/trilogy/configuration/settings.rb +3 -3
  827. data/lib/datadog/tracing/contrib/trilogy/ext.rb +11 -11
  828. data/lib/datadog/tracing/contrib/trilogy/instrumentation.rb +6 -6
  829. data/lib/datadog/tracing/contrib/trilogy/integration.rb +5 -5
  830. data/lib/datadog/tracing/contrib/trilogy/patcher.rb +2 -2
  831. data/lib/datadog/tracing/contrib/utils/database.rb +5 -5
  832. data/lib/datadog/tracing/contrib/utils/quantization/hash_formatter.rb +2 -2
  833. data/lib/datadog/tracing/contrib/utils/quantization/http.rb +118 -13
  834. data/lib/datadog/tracing/contrib/waterdrop/configuration/settings.rb +2 -2
  835. data/lib/datadog/tracing/contrib/waterdrop/distributed/propagation.rb +9 -9
  836. data/lib/datadog/tracing/contrib/waterdrop/ext.rb +4 -4
  837. data/lib/datadog/tracing/contrib/waterdrop/integration.rb +5 -5
  838. data/lib/datadog/tracing/contrib/waterdrop/middleware.rb +2 -2
  839. data/lib/datadog/tracing/contrib/waterdrop/patcher.rb +7 -7
  840. data/lib/datadog/tracing/contrib/waterdrop/producer.rb +3 -3
  841. data/lib/datadog/tracing/contrib/waterdrop.rb +6 -6
  842. data/lib/datadog/tracing/contrib.rb +54 -54
  843. data/lib/datadog/tracing/correlation.rb +12 -12
  844. data/lib/datadog/tracing/diagnostics/environment_logger.rb +12 -11
  845. data/lib/datadog/tracing/diagnostics/ext.rb +19 -19
  846. data/lib/datadog/tracing/diagnostics/health.rb +1 -1
  847. data/lib/datadog/tracing/distributed/b3_multi.rb +8 -8
  848. data/lib/datadog/tracing/distributed/b3_single.rb +4 -4
  849. data/lib/datadog/tracing/distributed/baggage.rb +27 -29
  850. data/lib/datadog/tracing/distributed/datadog.rb +23 -23
  851. data/lib/datadog/tracing/distributed/fetcher.rb +1 -1
  852. data/lib/datadog/tracing/distributed/helpers.rb +3 -3
  853. data/lib/datadog/tracing/distributed/propagation.rb +15 -12
  854. data/lib/datadog/tracing/distributed/propagation_policy.rb +5 -0
  855. data/lib/datadog/tracing/distributed/trace_context.rb +21 -278
  856. data/lib/datadog/tracing/distributed/trace_state/datadog.rb +233 -0
  857. data/lib/datadog/tracing/distributed/trace_state/ext.rb +44 -0
  858. data/lib/datadog/tracing/distributed/trace_state/open_telemetry.rb +156 -0
  859. data/lib/datadog/tracing/distributed/trace_state.rb +121 -0
  860. data/lib/datadog/tracing/event.rb +1 -1
  861. data/lib/datadog/tracing/ext.rb +1 -1
  862. data/lib/datadog/tracing/metadata/analytics.rb +2 -2
  863. data/lib/datadog/tracing/metadata/errors.rb +4 -4
  864. data/lib/datadog/tracing/metadata/ext.rb +72 -69
  865. data/lib/datadog/tracing/metadata/metastruct.rb +1 -1
  866. data/lib/datadog/tracing/metadata/metastruct_tagging.rb +1 -1
  867. data/lib/datadog/tracing/metadata/tagging.rb +3 -3
  868. data/lib/datadog/tracing/metadata.rb +4 -4
  869. data/lib/datadog/tracing/otel_thread_context.rb +97 -0
  870. data/lib/datadog/tracing/pipeline/span_filter.rb +2 -2
  871. data/lib/datadog/tracing/pipeline.rb +2 -2
  872. data/lib/datadog/tracing/remote.rb +250 -44
  873. data/lib/datadog/tracing/sampling/all_sampler.rb +1 -1
  874. data/lib/datadog/tracing/sampling/ext.rb +8 -8
  875. data/lib/datadog/tracing/sampling/matcher.rb +4 -4
  876. data/lib/datadog/tracing/sampling/priority_sampler.rb +4 -4
  877. data/lib/datadog/tracing/sampling/rate_by_key_sampler.rb +3 -3
  878. data/lib/datadog/tracing/sampling/rate_by_service_sampler.rb +2 -2
  879. data/lib/datadog/tracing/sampling/rate_sampler.rb +2 -2
  880. data/lib/datadog/tracing/sampling/rule.rb +4 -4
  881. data/lib/datadog/tracing/sampling/rule_sampler.rb +14 -12
  882. data/lib/datadog/tracing/sampling/sampler.rb +2 -2
  883. data/lib/datadog/tracing/sampling/span/ext.rb +3 -3
  884. data/lib/datadog/tracing/sampling/span/matcher.rb +2 -2
  885. data/lib/datadog/tracing/sampling/span/rule.rb +1 -1
  886. data/lib/datadog/tracing/sampling/span/rule_parser.rb +8 -8
  887. data/lib/datadog/tracing/span.rb +9 -9
  888. data/lib/datadog/tracing/span_event.rb +5 -5
  889. data/lib/datadog/tracing/span_operation.rb +22 -22
  890. data/lib/datadog/tracing/sync_writer.rb +12 -7
  891. data/lib/datadog/tracing/trace_digest.rb +22 -4
  892. data/lib/datadog/tracing/trace_operation.rb +33 -21
  893. data/lib/datadog/tracing/trace_segment.rb +10 -10
  894. data/lib/datadog/tracing/tracer.rb +43 -22
  895. data/lib/datadog/tracing/transport/http/client.rb +4 -4
  896. data/lib/datadog/tracing/transport/http/statistics.rb +2 -2
  897. data/lib/datadog/tracing/transport/http/telemetry.rb +94 -0
  898. data/lib/datadog/tracing/transport/http/traces.rb +10 -8
  899. data/lib/datadog/tracing/transport/http.rb +10 -10
  900. data/lib/datadog/tracing/transport/io/client.rb +2 -2
  901. data/lib/datadog/tracing/transport/io/response.rb +1 -1
  902. data/lib/datadog/tracing/transport/io/traces.rb +5 -5
  903. data/lib/datadog/tracing/transport/io.rb +3 -3
  904. data/lib/datadog/tracing/transport/native/response.rb +71 -0
  905. data/lib/datadog/tracing/transport/native/telemetry.rb +17 -0
  906. data/lib/datadog/tracing/transport/native.rb +395 -0
  907. data/lib/datadog/tracing/transport/serializable_trace.rb +19 -19
  908. data/lib/datadog/tracing/transport/span_events_negotiation.rb +41 -0
  909. data/lib/datadog/tracing/transport/statistics.rb +2 -2
  910. data/lib/datadog/tracing/transport/telemetry.rb +62 -0
  911. data/lib/datadog/tracing/transport/trace_formatter.rb +23 -13
  912. data/lib/datadog/tracing/transport/traces.rb +93 -46
  913. data/lib/datadog/tracing/utils.rb +2 -2
  914. data/lib/datadog/tracing/workers.rb +2 -2
  915. data/lib/datadog/tracing/writer.rb +22 -9
  916. data/lib/datadog/tracing.rb +3 -3
  917. data/lib/datadog/version.rb +4 -4
  918. data/lib/datadog.rb +13 -13
  919. metadata +55 -13
  920. data/lib/datadog/ai_guard/evaluation/content_builder.rb +0 -31
  921. data/lib/datadog/appsec/utils/hash_coercion.rb +0 -23
  922. data/lib/datadog/tracing/distributed/datadog_tags_codec.rb +0 -69
@@ -6,24 +6,29 @@
6
6
 
7
7
  #include "gvl_profiling_helper.h"
8
8
 
9
- void thread_context_collector_sample(
9
+ // Returns true if `thread_context_collector_resolve_otel_span_key_may_lose_gvl` needs to be called (which the caller
10
+ // must only do once the sample is over)
11
+ __attribute__((warn_unused_result)) bool thread_context_collector_sample(
10
12
  VALUE self_instance,
11
13
  long current_monotonic_wall_time_ns
12
14
  );
13
15
  __attribute__((warn_unused_result)) bool thread_context_collector_prepare_sample_inside_signal_handler(void);
16
+ void thread_context_collector_prepare_sample_on_gc_finish(void);
14
17
  __attribute__((warn_unused_result)) bool thread_context_collector_sample_allocation(VALUE self_instance, per_thread_context *thread_context, unsigned int sample_weight, VALUE new_object);
15
- void thread_context_collector_after_allocation(VALUE self_instance);
18
+ void thread_context_collector_commit_heap_recordings_may_lose_gvl(VALUE self_instance);
16
19
  void thread_context_collector_sample_skipped_allocation_samples(VALUE self_instance, unsigned int skipped_samples);
17
20
  VALUE thread_context_collector_sample_after_gc(VALUE self_instance);
21
+ VALUE thread_context_collector_heap_update_may_lose_gvl(VALUE self_instance);
22
+ void thread_context_collector_resolve_otel_span_key_may_lose_gvl(VALUE self_instance);
18
23
  void thread_context_collector_on_gc_start(VALUE self_instance);
19
24
  __attribute__((warn_unused_result)) bool thread_context_collector_on_gc_finish(VALUE self_instance);
20
25
  VALUE enforce_thread_context_collector_instance(VALUE object);
21
26
  void thread_context_collector_stats(VALUE self_instance, VALUE stats_hash);
22
27
  void thread_context_collector_stats_reset_not_thread_safe(VALUE self_instance);
23
- void thread_context_collector_on_serialize(VALUE self_instance);
28
+ VALUE thread_context_prepare_serialize(VALUE self_instance);
24
29
  void thread_context_collector_reset_all_per_thread_contexts(VALUE self_instance);
25
30
  void thread_context_collector_profiler_internal_thread_started(void);
26
- void thread_context_collector_profiler_internal_thread_done(VALUE self_instance);
31
+ VALUE thread_context_collector_profiler_internal_thread_done(VALUE self_instance);
27
32
 
28
33
  #ifndef NO_GVL_INSTRUMENTATION
29
34
  typedef enum {
@@ -38,7 +43,7 @@ void thread_context_collector_profiler_internal_thread_done(VALUE self_instance)
38
43
  } on_gvl_running_result;
39
44
 
40
45
  void thread_context_collector_on_gvl_waiting(per_thread_context *thread_context);
41
- __attribute__((warn_unused_result)) on_gvl_running_result thread_context_collector_on_gvl_running(VALUE self_instance, VALUE thread, per_thread_context *thread_context);
46
+ __attribute__((warn_unused_result)) on_gvl_running_result thread_context_collector_on_gvl_running(VALUE thread, per_thread_context *thread_context, uint32_t waiting_for_gvl_threshold_ns);
42
47
  VALUE thread_context_collector_sample_after_gvl_running(VALUE self_instance, VALUE current_thread, long current_monotonic_wall_time_ns);
43
48
  void thread_context_collector_on_gvl_released(per_thread_context *thread_context);
44
49
  #endif
@@ -159,7 +159,7 @@ static void ruby_runtime_stack_callback(
159
159
  frame_info *info = &runtime_stack_buffer[i];
160
160
 
161
161
  if (info->is_ruby_frame) {
162
- const void *iseq = (const void *)info->as.ruby_frame.iseq;
162
+ const rb_iseq_t *iseq = info->as.ruby_frame.iseq;
163
163
  ddog_CharSlice function_slice = DDOG_CHARSLICE_C("<unknown>");
164
164
  ddog_CharSlice file_slice = DDOG_CHARSLICE_C("<unknown>");
165
165
 
@@ -181,9 +181,10 @@ static void ruby_runtime_stack_callback(
181
181
  ddog_CharSlice function_slice = DDOG_CHARSLICE_C("<C method>");
182
182
  ddog_CharSlice file_slice = DDOG_CHARSLICE_C("<C extension>");
183
183
 
184
- if (info->as.native_frame.method_id) {
185
- const char *method_name = rb_id2name(info->as.native_frame.method_id);
186
- if (is_pointer_readable(method_name, 256)) {
184
+ const rb_callable_method_entry_t *cme = info->cme;
185
+ if (cme && is_pointer_readable(cme, sizeof_rb_callable_method_entry_t())) {
186
+ const char *method_name = ddtrace_cme_original_method_name(cme);
187
+ if (method_name && is_pointer_readable(method_name, 256)) {
187
188
  size_t method_name_len = strnlen(method_name, 256);
188
189
  if (method_name_len > 0 && method_name_len < 256) {
189
190
  function_slice = char_slice_from_cstr(method_name);
@@ -6,19 +6,27 @@
6
6
  static ID telemetry_message_id;
7
7
 
8
8
  void raise_unexpected_type(VALUE value, const char *value_name, const char *type_name, const char *file, int line, const char *function_name) {
9
- rb_exc_raise(
10
- rb_exc_new_str(
11
- rb_eTypeError,
12
- rb_sprintf("wrong argument %"PRIsVALUE" for '%s' (expected a %s) at %s:%d:in `%s'",
13
- rb_inspect(value),
14
- value_name,
15
- type_name,
16
- file,
17
- line,
18
- function_name
19
- )
9
+ // All of the below come from `ENFORCE_TYPE` and are constant for their call-site
10
+ VALUE simple_message = rb_sprintf("wrong argument for '%s' (expected a %s) at %s:%d:in `%s'",
11
+ value_name,
12
+ type_name,
13
+ file,
14
+ line,
15
+ function_name
16
+ );
17
+ VALUE exception = rb_exc_new_str(
18
+ rb_eTypeError,
19
+ rb_sprintf("wrong argument %"PRIsVALUE" for '%s' (expected a %s) at %s:%d:in `%s'",
20
+ rb_inspect(value),
21
+ value_name,
22
+ type_name,
23
+ file,
24
+ line,
25
+ function_name
20
26
  )
21
27
  );
28
+ rb_ivar_set(exception, telemetry_message_id, simple_message);
29
+ rb_exc_raise(exception);
22
30
  }
23
31
 
24
32
  // Raises an exception with separate telemetry-safe and detailed messages.
@@ -5,6 +5,13 @@
5
5
  #include <ruby.h>
6
6
  #include <datadog/common.h>
7
7
 
8
+ // All recommended backward compatible macros for keyword argument functions can be found here:
9
+ // https://github.com/ruby/ruby/blob/master/doc/extension.rdoc#defining-backward-compatible-macros-for-keyword-argument-functions
10
+ #ifndef RB_PASS_KEYWORDS
11
+ /* Only define macros on Ruby <2.7 */
12
+ #define rb_funcallv_kw(o, m, c, v, kw) rb_funcallv(o, m, c, v)
13
+ #endif
14
+
8
15
  // Must be called once during initialization
9
16
  void datadog_ruby_common_init(void);
10
17
 
@@ -90,13 +97,3 @@ static inline VALUE get_error_details_and_drop(ddog_Error *error) {
90
97
  // Returns the amount of characters written to string (which are necessarily
91
98
  // bounded by capacity - 1 since the string will be null-terminated).
92
99
  size_t read_ddogerr_string_and_drop(ddog_Error *error, char *string, size_t capacity);
93
-
94
- #define IMEMO_MASK 0x0f
95
-
96
- // Returns the imemo type of an imemo object.
97
- // This mask is the same between Ruby 2.5 and 3.3-preview3. Furthermore, the intention of this method is to be used
98
- // to call `rb_imemo_name` which correctly handles invalid numbers so even if the mask changes in the future, at most
99
- // we'll get incorrect results (and never a VM crash)
100
- static inline int ddtrace_imemo_type(VALUE imemo) {
101
- return (RBASIC(imemo)->flags >> FL_USHIFT) & IMEMO_MASK;
102
- }
@@ -94,9 +94,9 @@ append_cflags "-Wno-error=typedef-redefinition" if ENV["DATADOG_GEM_CI"] == "tru
94
94
  # * by msgpack, another datadog gem dependency
95
95
  # (https://github.com/msgpack/msgpack-ruby/blob/18ce08f6d612fe973843c366ac9a0b74c4e50599/ext/msgpack/extconf.rb#L8)
96
96
  # @ivoanjo: We could probably start using C11/gnu11 for non macOS-too but it's somewhat hard to validate so I chickened out for now
97
- append_cflags RUBY_PLATFORM.include?('darwin') ? '-std=gnu11' : '-std=gnu99'
97
+ append_cflags RUBY_PLATFORM.include?("darwin") ? "-std=gnu11" : "-std=gnu99"
98
98
 
99
- # Gets really noisy when we include the MJIT header, let's omit it (TODO: Use #pragma GCC diagnostic instead?)
99
+ # Gets really noisy when we include the private VM headers, let's omit it (TODO: Use #pragma GCC diagnostic instead?)
100
100
  append_cflags "-Wno-unused-function"
101
101
 
102
102
  # Allow defining variables at any point in a function
@@ -139,29 +139,11 @@ end
139
139
 
140
140
  have_func "malloc_stats"
141
141
 
142
- # Used to get native filenames (dladdr1 is preferred, so we only check for the other if not available)
143
- # Note it's possible none are available
144
- if have_header("dlfcn.h")
145
- (have_struct_member("struct link_map", "l_name", "link.h") && have_func("dladdr1")) ||
146
- have_func("dladdr")
147
- end
142
+ $defs << "-DHAVE_ZJIT_FRAME" if RUBY_VERSION >= "4.1"
148
143
 
149
144
  # On older Rubies, there was no primitive mutex and condition variable implemented in `thread_sync.rb` (internal)
150
145
  $defs << "-DNO_PRIMITIVE_MUTEX_AND_CONDITION_VARIABLE" if RUBY_VERSION < "4"
151
146
 
152
- # On Ruby 4, we can't ask the object_id from IMEMOs (https://github.com/ruby/ruby/pull/13347)
153
- $defs << "-DNO_IMEMO_OBJECT_ID" unless RUBY_VERSION < "4"
154
-
155
- # On Ruby 4, we need to defer calling rb_obj_id during heap allocation recording
156
- # because it's not safe to mutate objects during the newobj tracepoint
157
- # (see https://bugs.ruby-lang.org/issues/21710)
158
- $defs << "-DUSE_DEFERRED_HEAP_ALLOCATION_RECORDING" unless RUBY_VERSION < "4"
159
-
160
- # On Ruby 4.0, we've seen crashes when computing the memsize of a class/module/iclass:
161
- # rb_obj_memsize_of walks the per-namespace class extensions (classext_memsize), which seem to sometimes be in an inconsistent state
162
- # (see https://github.com/DataDog/dd-trace-rb/issues/5936)
163
- $defs << "-DNO_SAFE_CLASS_MEMSIZE" unless RUBY_VERSION < "4"
164
-
165
147
  # This symbol is exclusively visible on certain Ruby versions: 2.6 to 3.2, as well as 3.4 (but not 4.0+)
166
148
  # It's only used to get extra information about an object when a failure happens, so it's a "very nice to have" but not
167
149
  # actually required for correct behavior of the profiler.
@@ -173,8 +155,8 @@ $defs << "-DNO_POSTPONED_TRIGGER" if RUBY_VERSION < "3.3"
173
155
  # On older Rubies, M:N threads were not available
174
156
  $defs << "-DNO_MN_THREADS_AVAILABLE" if RUBY_VERSION < "3.3"
175
157
 
176
- # On older Rubies, we did not need to include the ractor header (this was built into the MJIT header)
177
- $defs << "-DNO_RACTOR_HEADER_INCLUDE" if RUBY_VERSION < "3.3"
158
+ # On Rubies before 3.0, there were no Ractors, so there's no need to include the ractor header at all
159
+ $defs << "-DNO_RACTOR_HEADER_INCLUDE" if RUBY_VERSION < "3"
178
160
 
179
161
  # On older Rubies, some of the Ractor internal APIs were directly accessible
180
162
  $defs << "-DUSE_RACTOR_INTERNAL_APIS_DIRECTLY" if RUBY_VERSION < "3.3"
@@ -182,9 +164,18 @@ $defs << "-DUSE_RACTOR_INTERNAL_APIS_DIRECTLY" if RUBY_VERSION < "3.3"
182
164
  # On older Rubies, there was no GVL instrumentation API and APIs created to support it
183
165
  $defs << "-DNO_GVL_INSTRUMENTATION" if RUBY_VERSION < "3.2"
184
166
 
167
+ # On older Rubies, rb_class_attached_object is not available
168
+ $defs << "-DNO_CLASS_ATTACHED_OBJECT" if RUBY_VERSION < "3.2"
169
+
170
+ # On older Rubies, rb_mod_name allocates (rb_str_dup); use rb_attr_get(__classpath__) instead
171
+ $defs << "-DNO_ALLOC_FREE_MOD_NAME" if RUBY_VERSION < "2.7"
172
+
185
173
  # rb_internal_thread_specific_*()
186
174
  $defs << "-DHAVE_RUBY_THREAD_STORAGE_API" if RUBY_VERSION >= "3.3"
187
175
 
176
+ # RCLASS_EXT(mod)->permanent_classpath
177
+ $defs << "-DHAVE_PERMANENT_CLASSPATH" if RUBY_VERSION >= "3.3"
178
+
188
179
  # On older Rubies, there was no struct rb_native_thread. See private_vm_api_acccess.c for details.
189
180
  $defs << "-DNO_RB_NATIVE_THREAD" if RUBY_VERSION < "3.2"
190
181
 
@@ -207,6 +198,9 @@ $defs << "-DNO_THREAD_TID" if RUBY_VERSION < "3.1"
207
198
  # On older Rubies, there was no jit_return member on the rb_control_frame_t struct
208
199
  $defs << "-DNO_JIT_RETURN" if RUBY_VERSION < "3.1"
209
200
 
201
+ # internal/class.h is available since 3.0
202
+ $defs << "-DNO_INTERNAL_CLASS_HEADER_INCLUDE" if RUBY_VERSION < "3"
203
+
210
204
  # On older Rubies, there are no Ractors
211
205
  $defs << "-DNO_RACTORS" if RUBY_VERSION < "3"
212
206
 
@@ -241,85 +235,59 @@ end
241
235
  # When requiring, we need to use the exact same string, including the version and the platform.
242
236
  EXTENSION_NAME = "datadog_profiling_native_extension.#{RUBY_VERSION}_#{RUBY_PLATFORM}".freeze
243
237
 
244
- if Datadog::Profiling::NativeExtensionHelpers::CAN_USE_MJIT_HEADER
245
- mjit_header_file_name = "rb_mjit_min_header-#{RUBY_VERSION}.h"
246
-
247
- # Validate that the mjit header can actually be compiled on this system. We learned via
248
- # https://github.com/DataDog/dd-trace-rb/issues/1799 and https://github.com/DataDog/dd-trace-rb/issues/1792
249
- # that even if the header seems to exist, it may not even compile.
250
- # `have_macro` actually tries to compile a file that mentions the given macro, so if this passes, we should be good to
251
- # use the MJIT header.
252
- # Finally, the `COMMON_HEADERS` conflict with the MJIT header so we need to temporarily disable them for this check.
253
- original_common_headers = MakeMakefile::COMMON_HEADERS
254
- MakeMakefile::COMMON_HEADERS = "".freeze
255
- unless have_macro("RUBY_MJIT_H", mjit_header_file_name)
256
- skip_building_extension!(Datadog::Profiling::NativeExtensionHelpers::Supported::COMPILATION_BROKEN)
257
- end
258
- MakeMakefile::COMMON_HEADERS = original_common_headers
259
-
260
- $defs << "-DRUBY_MJIT_HEADER='\"#{mjit_header_file_name}\"'"
261
-
262
- # NOTE: This needs to come after all changes to $defs
263
- create_header
264
-
265
- # Warn on unused parameters to functions. Use `DDTRACE_UNUSED` to mark things as known-to-not-be-used.
266
- # See the comment on the same flag below for why this is done last.
267
- append_cflags "-Wunused-parameter"
268
-
269
- create_makefile EXTENSION_NAME
270
- else
271
- # The MJIT header was introduced on 2.6 and removed on 3.3; for other Rubies we rely on
272
- # the datadog-ruby_core_source gem to get access to private VM headers.
273
- # This gem ships source code copies of these VM headers for the different Ruby VM versions;
274
- # see https://github.com/DataDog/datadog-ruby_core_source for details
275
-
276
- create_header
277
-
278
- require "datadog/ruby_core_source"
279
- dir_config("ruby") # allow user to pass in non-standard core include directory
280
-
281
- # This is a workaround for a weird issue...
282
- #
283
- # The mkmf tool defines a `with_cppflags` helper that datadog-ruby_core_source uses. This helper temporarily
284
- # replaces `$CPPFLAGS` (aka the C pre-processor [not c++!] flags) with a different set when doing something.
285
- #
286
- # The datadog-ruby_core_source gem uses `with_cppflags` during makefile generation to inject extra headers into the
287
- # path. But because `with_cppflags` replaces `$CPPFLAGS`, well, the default `$CPPFLAGS` are not included in the
288
- # makefile.
289
- #
290
- # This is a problem because the default `$CPPFLAGS` carries configuration that was set when Ruby was being built.
291
- # Thus, if we ignore it, we don't compile the profiler with the exact same configuration as Ruby.
292
- # In practice, this can generate crashes and weird bugs if the Ruby configuration is tweaked in a manner that
293
- # changes some of the internal structures that the profiler relies on. Concretely, setting for instance
294
- # `VM_CHECK_MODE=1` when building Ruby will trigger this issue (because somethings in structures the profiler reads
295
- # are ifdef'd out using this setting).
296
- #
297
- # To workaround this issue, we override `with_cppflags` for datadog-ruby_core_source to still include `$CPPFLAGS`.
298
- Datadog::RubyCoreSource.define_singleton_method(:with_cppflags) do |newflags, &block|
299
- super("#{newflags} #{$CPPFLAGS}", &block)
300
- end
238
+ # We rely on the datadog-ruby_core_source gem to get access to private VM headers.
239
+ # This gem ships source code copies of these VM headers for the different Ruby VM versions;
240
+ # see https://github.com/DataDog/datadog-ruby_core_source for details
301
241
 
302
- Datadog::RubyCoreSource
303
- .create_makefile_with_core(
304
- proc do
305
- headers_available =
306
- have_header("vm_core.h") &&
307
- have_header("iseq.h") &&
308
- (RUBY_VERSION < "3.3" || have_header("ractor_core.h"))
309
-
310
- if headers_available
311
- # Warn on unused parameters to functions. Use `DDTRACE_UNUSED` to mark things as known-to-not-be-used.
312
- # This is added as late as possible because in some Rubies we support (e.g. 3.3), adding this flag before
313
- # checking if internal VM headers are available causes those checks to fail because of this warning (and not
314
- # because the headers are not available.)
315
- append_cflags "-Wunused-parameter"
316
- end
317
-
318
- headers_available
319
- end,
320
- EXTENSION_NAME,
321
- )
242
+ create_header
243
+
244
+ require "datadog/ruby_core_source"
245
+ dir_config("ruby") # allow user to pass in non-standard core include directory
246
+
247
+ # This is a workaround for a weird issue...
248
+ #
249
+ # The mkmf tool defines a `with_cppflags` helper that datadog-ruby_core_source uses. This helper temporarily
250
+ # replaces `$CPPFLAGS` (aka the C pre-processor [not c++!] flags) with a different set when doing something.
251
+ #
252
+ # The datadog-ruby_core_source gem uses `with_cppflags` during makefile generation to inject extra headers into the
253
+ # path. But because `with_cppflags` replaces `$CPPFLAGS`, well, the default `$CPPFLAGS` are not included in the
254
+ # makefile.
255
+ #
256
+ # This is a problem because the default `$CPPFLAGS` carries configuration that was set when Ruby was being built.
257
+ # Thus, if we ignore it, we don't compile the profiler with the exact same configuration as Ruby.
258
+ # In practice, this can generate crashes and weird bugs if the Ruby configuration is tweaked in a manner that
259
+ # changes some of the internal structures that the profiler relies on. Concretely, setting for instance
260
+ # `VM_CHECK_MODE=1` when building Ruby will trigger this issue (because somethings in structures the profiler reads
261
+ # are ifdef'd out using this setting).
262
+ #
263
+ # To workaround this issue, we override `with_cppflags` for datadog-ruby_core_source to still include `$CPPFLAGS`.
264
+ Datadog::RubyCoreSource.define_singleton_method(:with_cppflags) do |newflags, &block|
265
+ # Note: The `Shellwords.escape` is an additional workaround for ruby_core_source supplying
266
+ # one unescaped -I argument containing the complete header path, not the CPPFLAGS thing above.
267
+ super("#{Shellwords.escape(newflags)} #{$CPPFLAGS}", &block)
322
268
  end
323
269
 
270
+ Datadog::RubyCoreSource
271
+ .create_makefile_with_core(
272
+ proc do
273
+ headers_available =
274
+ have_header("vm_core.h") &&
275
+ have_header("iseq.h", "vm_core.h") &&
276
+ # These are only used on Ruby 3+
277
+ (RUBY_VERSION < "3" || have_header("ractor_core.h") && have_header("internal/class.h", "vm_core.h"))
278
+
279
+ if headers_available
280
+ # Warn on unused parameters to functions. Use `DDTRACE_UNUSED` to mark things as known-to-not-be-used.
281
+ # This is added as late as possible because in some Rubies we support (e.g. 3.3), adding this flag before
282
+ # checking if internal VM headers are available causes those checks to fail because of this warning (and not
283
+ # because the headers are not available.)
284
+ append_cflags "-Wunused-parameter"
285
+ end
286
+
287
+ headers_available
288
+ end,
289
+ EXTENSION_NAME,
290
+ )
291
+
324
292
  # rubocop:enable Style/GlobalVars
325
293
  # rubocop:enable Style/StderrPuts