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
@@ -22,6 +22,9 @@ module Datadog
22
22
  # @!attribute [r] span_type
23
23
  # The type of the currently active span.
24
24
  # @return [String]
25
+ # @!attribute [r] span_links
26
+ # Span links associated with this trace context.
27
+ # @return [Array<Datadog::Tracing::SpanLink>, nil]
25
28
  # @!attribute [r] trace_distributed_tags
26
29
  # Datadog-specific tags that support richer distributed tracing association.
27
30
  # @return [Hash<String,String>]
@@ -69,10 +72,7 @@ module Datadog
69
72
  # @return [Integer]
70
73
  # @see https://www.w3.org/TR/trace-context/#trace-flags
71
74
  # @!attribute [r] trace_state
72
- # The W3C "tracestate" extracted from a distributed context.
73
- # This field is a string representing vendor-specific distribution data.
74
- # The `dd=` entry is removed from `trace_state` as its value is dynamically calculated
75
- # on every propagation injection.
75
+ # W3C "tracestate" members other than `dd=` and `ot=`, which are stored in parsed fields.
76
76
  # @return [String]
77
77
  # @see https://www.w3.org/TR/trace-context/#tracestate-header
78
78
  # @!attribute [r] trace_state_unknown_fields
@@ -80,6 +80,15 @@ module Datadog
80
80
  # This allows later propagation to include those unknown fields, as they can represent future versions of the spec
81
81
  # sending data through this service. This value ends in a trailing `;` to facilitate serialization.
82
82
  # @return [String]
83
+ # @!attribute [r] trace_otel_random_value
84
+ # OpenTelemetry consistent probability sampling random value.
85
+ # @return [String]
86
+ # @!attribute [r] trace_otel_threshold
87
+ # OpenTelemetry consistent probability sampling threshold.
88
+ # @return [String]
89
+ # @!attribute [r] trace_otel_unknown_fields
90
+ # Unrecognized `ot=` fields, retained with a trailing `;` for propagation.
91
+ # @return [String]
83
92
  # @!attribute [r] baggage
84
93
  # The W3C "baggage" extracted from a distributed context. This field is a hash of key/value pairs.
85
94
  # @return [Hash<String,String>]
@@ -91,6 +100,7 @@ module Datadog
91
100
  :span_resource,
92
101
  :span_service,
93
102
  :span_type,
103
+ :span_links,
94
104
  :trace_distributed_tags,
95
105
  :trace_hostname,
96
106
  :trace_id,
@@ -105,6 +115,9 @@ module Datadog
105
115
  :trace_flags,
106
116
  :trace_state,
107
117
  :trace_state_unknown_fields,
118
+ :trace_otel_random_value,
119
+ :trace_otel_threshold,
120
+ :trace_otel_unknown_fields,
108
121
  :span_remote,
109
122
  :baggage
110
123
 
@@ -114,6 +127,7 @@ module Datadog
114
127
  span_resource: nil,
115
128
  span_service: nil,
116
129
  span_type: nil,
130
+ span_links: nil,
117
131
  trace_distributed_tags: nil,
118
132
  trace_hostname: nil,
119
133
  trace_id: nil,
@@ -128,6 +142,9 @@ module Datadog
128
142
  trace_flags: nil,
129
143
  trace_state: nil,
130
144
  trace_state_unknown_fields: nil,
145
+ trace_otel_random_value: nil,
146
+ trace_otel_threshold: nil,
147
+ trace_otel_unknown_fields: nil,
131
148
  span_remote: true,
132
149
  baggage: nil
133
150
  )
@@ -136,6 +153,7 @@ module Datadog
136
153
  @span_resource = span_resource && span_resource.dup.freeze
137
154
  @span_service = span_service && span_service.dup.freeze
138
155
  @span_type = span_type && span_type.dup.freeze
156
+ @span_links = span_links && span_links.dup.freeze
139
157
  @trace_distributed_tags = trace_distributed_tags && trace_distributed_tags.dup.freeze
140
158
  @trace_hostname = trace_hostname && trace_hostname.dup.freeze
141
159
  @trace_id = trace_id
@@ -150,6 +168,9 @@ module Datadog
150
168
  @trace_flags = trace_flags
151
169
  @trace_state = trace_state && trace_state.dup.freeze
152
170
  @trace_state_unknown_fields = trace_state_unknown_fields && trace_state_unknown_fields.dup.freeze
171
+ @trace_otel_random_value = trace_otel_random_value && trace_otel_random_value.dup.freeze
172
+ @trace_otel_threshold = trace_otel_threshold && trace_otel_threshold.dup.freeze
173
+ @trace_otel_unknown_fields = trace_otel_unknown_fields && trace_otel_unknown_fields.dup.freeze
153
174
  @span_remote = span_remote
154
175
  @baggage = baggage && baggage.dup.freeze
155
176
  freeze
@@ -167,6 +188,7 @@ module Datadog
167
188
  span_resource: span_resource,
168
189
  span_service: span_service,
169
190
  span_type: span_type,
191
+ span_links: span_links,
170
192
  trace_distributed_tags: trace_distributed_tags,
171
193
  trace_hostname: trace_hostname,
172
194
  trace_id: trace_id,
@@ -181,6 +203,9 @@ module Datadog
181
203
  trace_flags: trace_flags,
182
204
  trace_state: trace_state,
183
205
  trace_state_unknown_fields: trace_state_unknown_fields,
206
+ trace_otel_random_value: trace_otel_random_value,
207
+ trace_otel_threshold: trace_otel_threshold,
208
+ trace_otel_unknown_fields: trace_otel_unknown_fields,
184
209
  span_remote: span_remote,
185
210
  baggage: baggage, **field_value_pairs
186
211
  )
@@ -1,15 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../core/environment/identity'
4
- require_relative '../core/utils'
5
- require_relative 'event'
6
- require_relative 'metadata/tagging'
7
- require_relative 'sampling/ext'
8
- require_relative 'span_operation'
9
- require_relative 'trace_digest'
10
- require_relative 'correlation'
11
- require_relative 'trace_segment'
12
- require_relative 'utils'
3
+ require_relative "../core/environment/identity"
4
+ require_relative "../core/utils"
5
+ require_relative "event"
6
+ require_relative "metadata/tagging"
7
+ require_relative "sampling/ext"
8
+ require_relative "distributed/trace_state"
9
+ require_relative "span_operation"
10
+ require_relative "trace_digest"
11
+ require_relative "correlation"
12
+ require_relative "trace_segment"
13
+ require_relative "utils"
13
14
 
14
15
  module Datadog
15
16
  module Tracing
@@ -27,6 +28,8 @@ module Datadog
27
28
  include Metadata::Tagging
28
29
 
29
30
  DEFAULT_MAX_LENGTH = 100_000
31
+ AUTO_SAMPLING_PRIORITIES = [Sampling::Ext::Priority::AUTO_KEEP, Sampling::Ext::Priority::AUTO_REJECT].freeze
32
+ RECONSIDERABLE_DECISIONS = [Sampling::Ext::Decision::DEFAULT, Sampling::Ext::Decision::AGENT_RATE].freeze
30
33
 
31
34
  attr_accessor \
32
35
  :agent_sample_rate,
@@ -46,17 +49,16 @@ module Datadog
46
49
  :id,
47
50
  :max_length,
48
51
  :parent_span_id,
49
- :trace_state,
50
- :trace_state_unknown_fields
52
+ :trace_state
51
53
 
52
54
  attr_writer \
53
55
  :name,
54
- :resource,
55
56
  :sampled,
56
57
  :service
57
58
 
58
59
  # Creates a new TraceOperation.
59
60
  #
61
+ # @param span_links [Array<Datadog::Tracing::SpanLink>, nil] links to attach to the local root span.
60
62
  # @param auto_finish [Boolean] when true, automatically finishes the trace when the local root span finishes.
61
63
  # When false, the trace remains unfinished until {#finish!} is called.
62
64
  # This is useful when this {TraceOperation} represents the continuation of a remote {TraceDigest},
@@ -71,6 +73,7 @@ module Datadog
71
73
  name: nil,
72
74
  origin: nil,
73
75
  parent_span_id: nil,
76
+ span_links: nil,
74
77
  rate_limiter_rate: nil,
75
78
  resource: nil,
76
79
  rule_sample_rate: nil,
@@ -83,8 +86,8 @@ module Datadog
83
86
  tags: nil,
84
87
  metrics: nil,
85
88
  trace_state: nil,
86
- trace_state_unknown_fields: nil,
87
89
  remote_parent: false,
90
+ distributed_sampling_priority: false,
88
91
  tracer: nil, # DEV-3.0: deprecated, remove in 3.0
89
92
  baggage: nil,
90
93
  auto_finish: true
@@ -97,7 +100,8 @@ module Datadog
97
100
  @parent_span_id = parent_span_id
98
101
  @sampled = sampled.nil? || sampled
99
102
  @remote_parent = remote_parent
100
-
103
+ @distributed_sampling_priority = distributed_sampling_priority
104
+ @span_links = span_links
101
105
  # Tags
102
106
  @agent_sample_rate = agent_sample_rate
103
107
  @hostname = hostname
@@ -111,8 +115,7 @@ module Datadog
111
115
  @service = service
112
116
  @profiling_enabled = profiling_enabled
113
117
  @apm_tracing_enabled = apm_tracing_enabled
114
- @trace_state = trace_state
115
- @trace_state_unknown_fields = trace_state_unknown_fields
118
+ @trace_state = trace_state || Distributed::TraceState.new
116
119
  @baggage = baggage
117
120
 
118
121
  # Generic tags
@@ -127,6 +130,8 @@ module Datadog
127
130
  @finished = false
128
131
  @spans = []
129
132
  @auto_finish = !!auto_finish
133
+ @flushed = false
134
+ @propagated = false
130
135
  end
131
136
 
132
137
  def full?
@@ -170,6 +175,17 @@ module Datadog
170
175
  set_tag(Tracing::Metadata::Ext::Distributed::TAG_DECISION_MAKER, Tracing::Sampling::Ext::Decision::MANUAL)
171
176
  end
172
177
 
178
+ def resource=(value)
179
+ previous_resource = @resource
180
+ @resource = value
181
+
182
+ return if !!previous_resource || value.nil?
183
+
184
+ events.trace_resource_change.publish(self)
185
+ rescue => e
186
+ logger.debug { "Error updating trace resource: #{e.class}: #{e.message} Backtrace: #{e.backtrace.first(3)}" }
187
+ end
188
+
173
189
  def name
174
190
  @name || root_span&.name
175
191
  end
@@ -190,7 +206,7 @@ module Datadog
190
206
  def set_distributed_source(product_bit)
191
207
  source = get_tag(Metadata::Ext::Distributed::TAG_TRACE_SOURCE)&.to_i(16) || 0
192
208
  source |= product_bit
193
- set_tag(Metadata::Ext::Distributed::TAG_TRACE_SOURCE, format('%02X', source))
209
+ set_tag(Metadata::Ext::Distributed::TAG_TRACE_SOURCE, format("%02X", source))
194
210
  end
195
211
 
196
212
  def tags
@@ -208,6 +224,12 @@ module Datadog
208
224
  !@resource.nil?
209
225
  end
210
226
 
227
+ def reconsider_resource_sample?
228
+ return false if @resource.nil?
229
+
230
+ reconsider_rule_sample?
231
+ end
232
+
211
233
  def service
212
234
  @service || root_span&.service
213
235
  end
@@ -274,15 +296,20 @@ module Datadog
274
296
  parent_id = parent ? parent.id : @parent_span_id || 0
275
297
 
276
298
  # Build events
277
- events ||= SpanOperation::Events.new(logger: logger)
299
+ span_events = events || SpanOperation::Events.new(logger: logger)
278
300
 
279
301
  # Before start: activate the span, publish events.
280
- events.before_start.subscribe do |span_op|
302
+ span_events.before_start.subscribe do |span_op|
281
303
  start_span(span_op)
282
304
  end
283
305
 
306
+ # Before finish: allow enrichment before the span is finalized, publish events.
307
+ span_events.before_finish.subscribe do |span_op|
308
+ before_finish_span(span_op)
309
+ end
310
+
284
311
  # After finish: deactivate the span, record, publish events.
285
- events.after_finish.subscribe do |span, span_op|
312
+ span_events.after_finish.subscribe do |span, span_op|
286
313
  finish_span(span, span_op, parent)
287
314
  end
288
315
 
@@ -290,9 +317,10 @@ module Datadog
290
317
  SpanOperation.new(
291
318
  op_name,
292
319
  logger: logger,
293
- events: events,
320
+ events: span_events,
294
321
  on_error: on_error,
295
322
  parent_id: parent_id,
323
+ links: (@root_span.nil? ? @span_links : nil),
296
324
  resource: resource || op_name,
297
325
  service: service,
298
326
  start_time: start_time,
@@ -302,7 +330,7 @@ module Datadog
302
330
  id: id
303
331
  )
304
332
  rescue => e
305
- logger.debug { "Failed to build new span: #{e}" }
333
+ logger.debug { "Failed to build new span: #{e.class}: #{e.message}" }
306
334
 
307
335
  # Return dummy span
308
336
  SpanOperation.new(op_name, logger: logger)
@@ -319,6 +347,7 @@ module Datadog
319
347
  # Copy out completed spans
320
348
  spans = @spans.dup
321
349
  @spans = []
350
+ @flushed = true
322
351
 
323
352
  spans = yield(spans) if block_given?
324
353
 
@@ -359,8 +388,18 @@ module Datadog
359
388
  span_id = @active_span&.id
360
389
  span_id ||= @parent_span_id unless finished?
361
390
  # sample the trace_operation with the tracer
391
+ @propagated = true
362
392
  events.trace_propagated.publish(self)
363
393
 
394
+ open_telemetry = @trace_state.open_telemetry.outbound(
395
+ trace_id: @id,
396
+ sampling_priority: @sampling_priority,
397
+ decision_maker: get_tag(Tracing::Metadata::Ext::Distributed::TAG_DECISION_MAKER),
398
+ applied_rate: @rule_sample_rate || @agent_sample_rate,
399
+ rate_limiter_rate: @rate_limiter_rate,
400
+ distributed_sampling_priority: @distributed_sampling_priority,
401
+ )
402
+
364
403
  TraceDigest.new(
365
404
  span_id: span_id,
366
405
  span_name: @active_span && @active_span.name,
@@ -377,8 +416,11 @@ module Datadog
377
416
  trace_runtime_id: Core::Environment::Identity.id,
378
417
  trace_sampling_priority: @sampling_priority,
379
418
  trace_service: service,
380
- trace_state: @trace_state,
381
- trace_state_unknown_fields: @trace_state_unknown_fields,
419
+ trace_state: @trace_state.unknown_vendors,
420
+ trace_state_unknown_fields: @trace_state.datadog.unknown_fields,
421
+ trace_otel_random_value: open_telemetry.random_value,
422
+ trace_otel_threshold: open_telemetry.threshold,
423
+ trace_otel_unknown_fields: open_telemetry.unknown_fields,
382
424
  span_remote: @remote_parent && @active_span.nil?,
383
425
  baggage: (@baggage.nil? || @baggage.empty?) ? nil : @baggage
384
426
  ).freeze
@@ -414,11 +456,11 @@ module Datadog
414
456
  sampled: @sampled,
415
457
  sampling_priority: @sampling_priority,
416
458
  service: service&.dup,
417
- trace_state: @trace_state&.dup,
418
- trace_state_unknown_fields: @trace_state_unknown_fields&.dup,
459
+ trace_state: @trace_state,
419
460
  tags: meta.dup,
420
461
  metrics: metrics.dup,
421
- remote_parent: @remote_parent
462
+ remote_parent: @remote_parent,
463
+ distributed_sampling_priority: @distributed_sampling_priority
422
464
  )
423
465
  end
424
466
 
@@ -427,16 +469,28 @@ module Datadog
427
469
  include Tracing::Events
428
470
 
429
471
  attr_reader \
472
+ :span_before_finish,
430
473
  :span_before_start,
431
474
  :span_finished,
432
475
  :trace_finished,
433
- :trace_propagated
476
+ :trace_propagated,
477
+ :trace_resource_change
434
478
 
435
479
  def initialize
480
+ @span_before_finish = SpanBeforeFinish.new
436
481
  @span_before_start = SpanBeforeStart.new
437
482
  @span_finished = SpanFinished.new
438
483
  @trace_finished = TraceFinished.new
439
484
  @trace_propagated = TracePropagated.new
485
+ @trace_resource_change = TraceResourceChange.new
486
+ end
487
+
488
+ # Triggered just before a span is finalized, mirroring SpanOperation::Events::BeforeFinish.
489
+ # Subscribers can still mutate tags on the SpanOperation at this point.
490
+ class SpanBeforeFinish < Tracing::Event
491
+ def initialize
492
+ super(:span_before_finish)
493
+ end
440
494
  end
441
495
 
442
496
  # Triggered before a span starts.
@@ -476,6 +530,14 @@ module Datadog
476
530
  subscribe(&block)
477
531
  end
478
532
  end
533
+
534
+ # Triggered when the resource name is set
535
+ # This is used to reconsider trace sampling on resource name change
536
+ class TraceResourceChange < Tracing::Event
537
+ def initialize
538
+ super(:trace_resource_change)
539
+ end
540
+ end
479
541
  end
480
542
 
481
543
  private
@@ -511,7 +573,14 @@ module Datadog
511
573
  # Publish :span_before_start event
512
574
  events.span_before_start.publish(span_op, self)
513
575
  rescue => e
514
- logger.debug { "Error starting span on trace: #{e} Backtrace: #{e.backtrace.first(3)}" }
576
+ logger.debug { "Error starting span on trace: #{e.class}: #{e.message} Backtrace: #{e.backtrace.first(3)}" }
577
+ end
578
+
579
+ def before_finish_span(span_op)
580
+ # Publish :span_before_finish event
581
+ events.span_before_finish.publish(span_op, self)
582
+ rescue => e
583
+ logger.debug { "Error in before_finish_span on trace: #{e.class}: #{e.message} Backtrace: #{e.backtrace.first(3)}" }
515
584
  end
516
585
 
517
586
  # For traces with automatic context management (auto_finish),
@@ -540,7 +609,7 @@ module Datadog
540
609
  # Publish :trace_finished event
541
610
  events.trace_finished.publish(self) if finished?
542
611
  rescue => e
543
- logger.debug { "Error finishing span on trace: #{e} Backtrace: #{e.backtrace.first(3)}" }
612
+ logger.debug { "Error finishing span on trace: #{e.class}: #{e.message} Backtrace: #{e.backtrace.first(3)}" }
544
613
  end
545
614
 
546
615
  # Track the root {SpanOperation} object from the current execution context.
@@ -582,12 +651,24 @@ module Datadog
582
651
  meta.select { |name, _| name.start_with?(Metadata::Ext::Distributed::TAGS_PREFIX) }
583
652
  end
584
653
 
654
+ def reconsider_rule_sample?
655
+ decision = get_tag(Metadata::Ext::Distributed::TAG_DECISION_MAKER)
656
+
657
+ return false if remote_parent || @propagated || @flushed
658
+ return false unless AUTO_SAMPLING_PRIORITIES.include?(@sampling_priority)
659
+ return false if decision && !RECONSIDERABLE_DECISIONS.include?(decision)
660
+
661
+ true
662
+ end
663
+
585
664
  def reset
586
665
  @root_span = nil
587
666
  @active_span = nil
588
667
  @active_span_count = 0
589
668
  @finished = false
590
669
  @spans = []
670
+ @flushed = false
671
+ @propagated = false
591
672
  end
592
673
  end
593
674
  end
@@ -1,21 +1,21 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../core/runtime/ext'
4
- require_relative '../core/utils/safe_dup'
3
+ require_relative "../core/runtime/ext"
4
+ require_relative "../core/utils/safe_dup"
5
5
 
6
- require_relative 'sampling/ext'
7
- require_relative 'metadata/ext'
8
- require_relative 'metadata/tagging'
9
- require_relative 'utils'
6
+ require_relative "sampling/ext"
7
+ require_relative "metadata/ext"
8
+ require_relative "metadata/tagging"
9
+ require_relative "utils"
10
10
 
11
11
  module Datadog
12
12
  module Tracing
13
13
  # Serializable construct representing a trace
14
14
  # @public_api
15
15
  class TraceSegment
16
- TAG_NAME = 'name'
17
- TAG_RESOURCE = 'resource'
18
- TAG_SERVICE = 'service'
16
+ TAG_NAME = "name"
17
+ TAG_RESOURCE = "resource"
18
+ TAG_SERVICE = "service"
19
19
 
20
20
  attr_reader \
21
21
  :id,
@@ -140,7 +140,7 @@ module Datadog
140
140
  def high_order_tid
141
141
  high_order = Tracing::Utils::TraceId.to_high_order(@id)
142
142
 
143
- format('%016x', high_order) if high_order != 0
143
+ format("%016x", high_order) if high_order != 0
144
144
  end
145
145
 
146
146
  protected
@@ -1,20 +1,20 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../core/environment/ext'
4
- require_relative '../core/environment/socket'
5
-
6
- require_relative 'correlation'
7
- require_relative 'event'
8
- require_relative 'flush'
9
- require_relative 'context_provider'
10
- require_relative 'sampling/all_sampler'
11
- require_relative 'sampling/rule_sampler'
12
- require_relative 'sampling/priority_sampler'
13
- require_relative 'sampling/span/sampler'
14
- require_relative 'span_operation'
15
- require_relative 'trace_digest'
16
- require_relative 'trace_operation'
17
- require_relative 'writer'
3
+ require_relative "../core/environment/ext"
4
+ require_relative "../core/environment/socket"
5
+
6
+ require_relative "correlation"
7
+ require_relative "event"
8
+ require_relative "flush"
9
+ require_relative "context_provider"
10
+ require_relative "sampling/all_sampler"
11
+ require_relative "sampling/rule_sampler"
12
+ require_relative "sampling/priority_sampler"
13
+ require_relative "sampling/span/sampler"
14
+ require_relative "span_operation"
15
+ require_relative "trace_digest"
16
+ require_relative "trace_operation"
17
+ require_relative "writer"
18
18
 
19
19
  module Datadog
20
20
  module Tracing
@@ -153,7 +153,7 @@ module Datadog
153
153
  active_trace
154
154
  end
155
155
  rescue => e
156
- logger.debug { "Failed to trace: #{e}" }
156
+ logger.debug { "Failed to trace: #{e.class}: #{e.message}" }
157
157
 
158
158
  # Tracing failed: fallback and run code without tracing.
159
159
  return skip_trace(name, &block)
@@ -303,7 +303,20 @@ module Datadog
303
303
  @sampler.sample!(trace_op) if trace_op.sampling_priority.nil?
304
304
  rescue => e
305
305
  SAMPLE_TRACE_LOG_ONLY_ONCE.run do
306
- logger.warn { "Failed to sample trace: #{e.class.name} #{e} at #{Array(e.backtrace).first}" }
306
+ logger.warn { "Failed to sample trace: #{e.class}: #{e.message} at #{Array(e.backtrace).first}" }
307
+ end
308
+ end
309
+
310
+ def reconsider_trace_sampling_on_resource(trace_op)
311
+ return unless trace_op.reconsider_resource_sample?
312
+ return unless @sampler.respond_to?(:reconsider_sample_resource!)
313
+
314
+ @sampler.reconsider_sample_resource!(trace_op)
315
+ rescue => e
316
+ RECONSIDER_RESOURCE_SAMPLE_TRACE_LOG_ONLY_ONCE.run do
317
+ logger.warn do
318
+ "Failed to reconsider trace sampling: #{e.class}: #{e.message} at #{Array(e.backtrace).first}"
319
+ end
307
320
  end
308
321
  end
309
322
 
@@ -359,14 +372,12 @@ module Datadog
359
372
  end
360
373
 
361
374
  def build_trace(digest, auto_finish)
362
- # Resolve hostname if configured
363
- hostname = Core::Environment::Socket.hostname if Datadog.configuration.tracing.report_hostname
364
- hostname = (hostname && !hostname.empty?) ? hostname : nil
375
+ hostname = Core::Environment::Socket.resolved_hostname(Datadog.configuration)
365
376
 
366
377
  if digest
367
- sampling_priority = if propagate_sampling_priority?(upstream_tags: digest.trace_distributed_tags)
368
- digest.trace_sampling_priority
369
- end
378
+ propagate_sampling = propagate_sampling_priority?(upstream_tags: digest.trace_distributed_tags)
379
+ sampling_priority = digest.trace_sampling_priority if propagate_sampling
380
+ trace_state = Distributed::TraceState.from_digest(digest, propagate_sampling: propagate_sampling)
370
381
  TraceOperation.new(
371
382
  logger: logger,
372
383
  hostname: hostname,
@@ -376,11 +387,12 @@ module Datadog
376
387
  origin: digest.trace_origin,
377
388
  parent_span_id: digest.span_id,
378
389
  sampling_priority: sampling_priority,
390
+ span_links: digest.span_links,
379
391
  # Distributed tags are just regular trace tags with special meaning to Datadog
380
392
  tags: digest.trace_distributed_tags,
381
- trace_state: digest.trace_state,
382
- trace_state_unknown_fields: digest.trace_state_unknown_fields,
393
+ trace_state: trace_state,
383
394
  remote_parent: digest.span_remote,
395
+ distributed_sampling_priority: !!sampling_priority,
384
396
  tracer: self,
385
397
  baggage: digest.baggage,
386
398
  auto_finish: auto_finish
@@ -406,6 +418,15 @@ module Datadog
406
418
  event_span_op.service ||= @default_service
407
419
  end
408
420
 
421
+ events.span_before_finish.subscribe do |event_span_op, _event_trace_op|
422
+ if event_span_op.service && event_span_op.service != @default_service
423
+ event_span_op.set_tag(Tracing::Metadata::Ext::TAG_BASE_SERVICE, @default_service)
424
+ event_span_op.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Tracing::Metadata::Ext::SVC_SRC_MANUAL) unless event_span_op.get_tag(Tracing::Metadata::Ext::TAG_SVC_SRC)
425
+ else
426
+ event_span_op.send(:meta).delete(Tracing::Metadata::Ext::TAG_SVC_SRC)
427
+ end
428
+ end
429
+
409
430
  events.trace_propagated.subscribe do |event_trace_op|
410
431
  sample_trace(event_trace_op)
411
432
  end
@@ -415,6 +436,15 @@ module Datadog
415
436
  sample_span(event_trace_op, event_span)
416
437
  flush_trace(event_trace_op)
417
438
  end
439
+
440
+ # Conditionally subscribe to the less common sampling rules below, to avoid
441
+ # measurable unnecessary performance overhead when they are not present.
442
+
443
+ if @sampler.respond_to?(:resource_sampling?) && @sampler.resource_sampling?
444
+ events.trace_resource_change.subscribe do |event_trace_op|
445
+ reconsider_trace_sampling_on_resource(event_trace_op)
446
+ end
447
+ end
418
448
  end
419
449
 
420
450
  # Creates a new TraceOperation, with events bounds to this Tracer instance.
@@ -534,11 +564,14 @@ module Datadog
534
564
  SAMPLE_TRACE_LOG_ONLY_ONCE = Core::Utils::OnlyOnce.new
535
565
  private_constant :SAMPLE_TRACE_LOG_ONLY_ONCE
536
566
 
567
+ RECONSIDER_RESOURCE_SAMPLE_TRACE_LOG_ONLY_ONCE = Core::Utils::OnlyOnce.new
568
+ private_constant :RECONSIDER_RESOURCE_SAMPLE_TRACE_LOG_ONLY_ONCE
569
+
537
570
  def sample_span(trace_op, span)
538
571
  @span_sampler.sample!(trace_op, span)
539
572
  rescue => e
540
573
  SAMPLE_SPAN_LOG_ONLY_ONCE.run do
541
- logger.warn { "Failed to sample span: #{e.class.name} #{e} at #{Array(e.backtrace).first}" }
574
+ logger.warn { "Failed to sample span: #{e.class}: #{e.message} at #{Array(e.backtrace).first}" }
542
575
  end
543
576
  end
544
577
 
@@ -551,7 +584,7 @@ module Datadog
551
584
  write(trace) if trace && !trace.empty?
552
585
  rescue => e
553
586
  FLUSH_TRACE_LOG_ONLY_ONCE.run do
554
- logger.warn { "Failed to flush trace: #{e.class.name} #{e} at #{Array(e.backtrace).first}" }
587
+ logger.warn { "Failed to flush trace: #{e.class}: #{e.message} at #{Array(e.backtrace).first}" }
555
588
  end
556
589
  end
557
590
 
@@ -595,6 +628,10 @@ module Datadog
595
628
  appsec_bit = upstream_tags[Tracing::Metadata::Ext::Distributed::TAG_TRACE_SOURCE].to_i(16) &
596
629
  Datadog::AppSec::Ext::PRODUCT_BIT
597
630
  return appsec_enabled if appsec_bit != 0
631
+
632
+ ai_guard_bit = upstream_tags[Tracing::Metadata::Ext::Distributed::TAG_TRACE_SOURCE].to_i(16) &
633
+ Datadog::AIGuard::Ext::PRODUCT_BIT
634
+ return ai_guard_enabled if ai_guard_bit != 0
598
635
  end
599
636
 
600
637
  false
@@ -609,6 +646,10 @@ module Datadog
609
646
  @appsec_enabled ||= Datadog.configuration.appsec.enabled
610
647
  end
611
648
 
649
+ def ai_guard_enabled
650
+ @ai_guard_enabled ||= Datadog.configuration.respond_to?(:ai_guard) && Datadog.configuration.ai_guard.enabled
651
+ end
652
+
612
653
  # Due to APM Tracing (the product) and Tracing (the transport) being intertwined, we cannot completely disabled APM
613
654
  # without also disabling the tracer. When setting `@apm_tracing_enabled` to `false`, it does not disable the tracer,
614
655
  # but rather only sends heartbeat traces (1 per minutes), so that the service is considered alive in the backend.
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'statistics'
4
- require_relative '../../../core/transport/http/client'
5
- require_relative '../../../core/transport/http/env'
6
- require_relative '../../../core/transport/http/response'
3
+ require_relative "statistics"
4
+ require_relative "../../../core/transport/http/client"
5
+ require_relative "../../../core/transport/http/env"
6
+ require_relative "../../../core/transport/http/response"
7
7
 
8
8
  module Datadog
9
9
  module Tracing