datadog 2.39.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 (296) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +269 -44
  3. data/README.md +3 -0
  4. data/ext/datadog_profiling_native_extension/NativeExtensionDesign.md +12 -24
  5. data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +256 -193
  6. data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.c +1 -5
  7. data/ext/datadog_profiling_native_extension/collectors_gc_profiling_helper.c +0 -2
  8. data/ext/datadog_profiling_native_extension/collectors_idle_sampling_helper.c +19 -20
  9. data/ext/datadog_profiling_native_extension/collectors_idle_sampling_helper.h +5 -1
  10. data/ext/datadog_profiling_native_extension/collectors_stack.c +267 -171
  11. data/ext/datadog_profiling_native_extension/collectors_stack.h +17 -3
  12. data/ext/datadog_profiling_native_extension/collectors_thread_context.c +307 -217
  13. data/ext/datadog_profiling_native_extension/collectors_thread_context.h +10 -5
  14. data/ext/datadog_profiling_native_extension/crashtracking_runtime_stacks.c +5 -4
  15. data/ext/datadog_profiling_native_extension/datadog_ruby_common.c +19 -11
  16. data/ext/datadog_profiling_native_extension/datadog_ruby_common.h +7 -10
  17. data/ext/datadog_profiling_native_extension/extconf.rb +67 -99
  18. data/ext/datadog_profiling_native_extension/heap_recorder.c +353 -257
  19. data/ext/datadog_profiling_native_extension/heap_recorder.h +50 -31
  20. data/ext/datadog_profiling_native_extension/native_extension_helpers.rb +3 -27
  21. data/ext/datadog_profiling_native_extension/private_vm_api_access.c +853 -496
  22. data/ext/datadog_profiling_native_extension/private_vm_api_access.h +42 -15
  23. data/ext/datadog_profiling_native_extension/profiling.c +30 -23
  24. data/ext/datadog_profiling_native_extension/ruby_helpers.c +4 -80
  25. data/ext/datadog_profiling_native_extension/ruby_helpers.h +4 -7
  26. data/ext/datadog_profiling_native_extension/setup_signal_handler.c +0 -2
  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 +6 -1
  35. data/ext/libdatadog_api/feature_flags.c +8 -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 +14 -9
  43. data/lib/datadog/ai_guard/component.rb +17 -8
  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} +7 -5
  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 +21 -42
  70. data/lib/datadog/appsec/api_security/endpoint_collection/grape_route_serializer.rb +1 -1
  71. data/lib/datadog/appsec/api_security/endpoint_collection/rails_route_serializer.rb +1 -1
  72. data/lib/datadog/appsec/api_security/endpoint_collection/sinatra_route_serializer.rb +1 -1
  73. data/lib/datadog/appsec/assets/blocked.html +1 -108
  74. data/lib/datadog/appsec/configuration.rb +11 -2
  75. data/lib/datadog/appsec/context.rb +1 -1
  76. data/lib/datadog/appsec/contrib/active_record/instrumentation.rb +1 -1
  77. data/lib/datadog/appsec/contrib/aws_lambda/waf_addresses.rb +2 -2
  78. data/lib/datadog/appsec/contrib/devise/configuration.rb +1 -1
  79. data/lib/datadog/appsec/contrib/devise/patcher.rb +1 -1
  80. data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +2 -2
  81. data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +2 -2
  82. data/lib/datadog/appsec/contrib/graphql/gateway/watcher.rb +1 -1
  83. data/lib/datadog/appsec/contrib/rack/ext.rb +2 -2
  84. data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +2 -2
  85. data/lib/datadog/appsec/contrib/rack/patcher.rb +1 -1
  86. data/lib/datadog/appsec/contrib/rack/request_body_middleware.rb +6 -3
  87. data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +30 -3
  88. data/lib/datadog/appsec/contrib/rails/patches/render_to_body_patch.rb +8 -7
  89. data/lib/datadog/appsec/contrib/rails/request_middleware.rb +2 -1
  90. data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +2 -2
  91. data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +15 -3
  92. data/lib/datadog/appsec/contrib/sinatra/patches/json_patch.rb +8 -7
  93. data/lib/datadog/appsec/contrib/sinatra/request_middleware.rb +2 -1
  94. data/lib/datadog/appsec/processor/rule_loader.rb +12 -12
  95. data/lib/datadog/appsec/response.rb +1 -1
  96. data/lib/datadog/appsec/route_normalizer/route_pattern.rb +3 -3
  97. data/lib/datadog/appsec/security_engine/engine.rb +5 -4
  98. data/lib/datadog/core/configuration/components.rb +50 -19
  99. data/lib/datadog/core/configuration/components_state.rb +8 -1
  100. data/lib/datadog/core/configuration/option_definition.rb +1 -1
  101. data/lib/datadog/core/configuration/options.rb +1 -1
  102. data/lib/datadog/core/configuration/settings.rb +38 -43
  103. data/lib/datadog/core/configuration/supported_configurations.rb +18 -2
  104. data/lib/datadog/core/crashtracking/component.rb +5 -1
  105. data/lib/datadog/core/diagnostics/environment_logger.rb +36 -1
  106. data/lib/datadog/core/environment/gc.rb +1 -1
  107. data/lib/datadog/core/environment/vm_cache.rb +1 -1
  108. data/lib/datadog/core/environment/yjit.rb +2 -2
  109. data/lib/datadog/core/metrics/helpers.rb +1 -1
  110. data/lib/datadog/core/metrics/options.rb +2 -2
  111. data/lib/datadog/core/process_discovery.rb +6 -2
  112. data/lib/datadog/core/remote/client/capabilities.rb +32 -21
  113. data/lib/datadog/core/remote/client.rb +45 -4
  114. data/lib/datadog/core/remote/component.rb +30 -7
  115. data/lib/datadog/core/remote/configuration/repository.rb +2 -2
  116. data/lib/datadog/core/remote/dispatcher.rb +47 -6
  117. data/lib/datadog/core/remote/worker.rb +8 -0
  118. data/lib/datadog/core/telemetry/configuration_value.rb +38 -0
  119. data/lib/datadog/core/telemetry/event/app_client_configuration_change.rb +3 -1
  120. data/lib/datadog/core/telemetry/event/app_endpoints_loaded.rb +1 -1
  121. data/lib/datadog/core/telemetry/event/app_started.rb +5 -24
  122. data/lib/datadog/core/telemetry/event/generate_metrics.rb +1 -1
  123. data/lib/datadog/core/telemetry/event/log.rb +2 -2
  124. data/lib/datadog/core/telemetry/event/synth_app_client_configuration_change.rb +1 -1
  125. data/lib/datadog/core/telemetry/metric.rb +2 -2
  126. data/lib/datadog/core/telemetry/request.rb +2 -2
  127. data/lib/datadog/core/transport/http.rb +1 -1
  128. data/lib/datadog/core/transport/transport.rb +1 -1
  129. data/lib/datadog/core/utils/at_fork_monkey_patch.rb +170 -18
  130. data/lib/datadog/core/utils/sequence.rb +3 -6
  131. data/lib/datadog/core/utils/time.rb +16 -54
  132. data/lib/datadog/core/workers/runtime_metrics.rb +1 -1
  133. data/lib/datadog/data_streams/pathway_context.rb +20 -22
  134. data/lib/datadog/data_streams/processor.rb +45 -14
  135. data/lib/datadog/di/boot.rb +1 -0
  136. data/lib/datadog/di/capture_expression_evaluator/result.rb +30 -0
  137. data/lib/datadog/di/capture_expression_evaluator.rb +39 -9
  138. data/lib/datadog/di/component.rb +108 -3
  139. data/lib/datadog/di/configuration.rb +53 -2
  140. data/lib/datadog/di/context.rb +7 -2
  141. data/lib/datadog/di/contrib/active_record.rb +8 -2
  142. data/lib/datadog/di/el/compiler.rb +88 -12
  143. data/lib/datadog/di/el/evaluator.rb +82 -2
  144. data/lib/datadog/di/el/expression.rb +13 -2
  145. data/lib/datadog/di/evaluation_failure.rb +28 -0
  146. data/lib/datadog/di/guardrails_telemetry/reason.rb +87 -0
  147. data/lib/datadog/di/guardrails_telemetry.rb +203 -0
  148. data/lib/datadog/di/instrumenter.rb +106 -15
  149. data/lib/datadog/di/logger.rb +32 -10
  150. data/lib/datadog/di/probe.rb +9 -1
  151. data/lib/datadog/di/probe_builder.rb +7 -6
  152. data/lib/datadog/di/probe_manager.rb +56 -8
  153. data/lib/datadog/di/probe_notification_builder.rb +31 -28
  154. data/lib/datadog/di/probe_notifier_worker.rb +56 -6
  155. data/lib/datadog/di/proc_responder.rb +1 -1
  156. data/lib/datadog/di/remote.rb +49 -5
  157. data/lib/datadog/di/serializer.rb +172 -55
  158. data/lib/datadog/di/snapshot_event.rb +38 -0
  159. data/lib/datadog/di/transport/http.rb +13 -3
  160. data/lib/datadog/di/transport/input.rb +32 -7
  161. data/lib/datadog/error_tracking/component.rb +1 -1
  162. data/lib/datadog/kit/appsec/events/v2.rb +2 -2
  163. data/lib/datadog/open_feature/activation.rb +268 -0
  164. data/lib/datadog/open_feature/agentless/configuration_source.rb +246 -0
  165. data/lib/datadog/open_feature/agentless/parser.rb +43 -0
  166. data/lib/datadog/open_feature/agentless/response.rb +19 -0
  167. data/lib/datadog/open_feature/agentless/transport.rb +103 -0
  168. data/lib/datadog/open_feature/component.rb +85 -13
  169. data/lib/datadog/open_feature/configuration/agentless_endpoint.rb +90 -0
  170. data/lib/datadog/open_feature/configuration/source/resolution.rb +22 -0
  171. data/lib/datadog/open_feature/configuration/source.rb +43 -0
  172. data/lib/datadog/open_feature/configuration.rb +124 -0
  173. data/lib/datadog/open_feature/evaluation_engine.rb +29 -3
  174. data/lib/datadog/open_feature/exposures/batch_builder.rb +1 -1
  175. data/lib/datadog/open_feature/exposures/event.rb +15 -8
  176. data/lib/datadog/open_feature/ext.rb +19 -0
  177. data/lib/datadog/open_feature/flag_evaluation/aggregator.rb +236 -80
  178. data/lib/datadog/open_feature/flag_evaluation/writer.rb +179 -68
  179. data/lib/datadog/open_feature/hooks/evaluation_telemetry_opt_out_hook.rb +25 -0
  180. data/lib/datadog/open_feature/hooks/flag_eval_evp_hook.rb +24 -21
  181. data/lib/datadog/open_feature/native_evaluator.rb +20 -6
  182. data/lib/datadog/open_feature/noop_evaluator.rb +5 -0
  183. data/lib/datadog/open_feature/provider.rb +315 -10
  184. data/lib/datadog/open_feature/remote.rb +5 -5
  185. data/lib/datadog/open_feature/transport.rb +5 -0
  186. data/lib/datadog/open_feature.rb +31 -1
  187. data/lib/datadog/opentelemetry/sdk/propagator.rb +1 -1
  188. data/lib/datadog/opentelemetry/signal_configuration.rb +13 -9
  189. data/lib/datadog/opentelemetry/trace.rb +3 -0
  190. data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +10 -2
  191. data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +5 -7
  192. data/lib/datadog/profiling/collectors/info.rb +40 -13
  193. data/lib/datadog/profiling/collectors/thread_context.rb +6 -17
  194. data/lib/datadog/profiling/component.rb +33 -39
  195. data/lib/datadog/profiling/exporter.rb +10 -10
  196. data/lib/datadog/profiling/tasks/exec.rb +1 -1
  197. data/lib/datadog/profiling.rb +4 -0
  198. data/lib/datadog/symbol_database/extractor.rb +89 -107
  199. data/lib/datadog/tracing/component.rb +44 -2
  200. data/lib/datadog/tracing/configuration/dynamic/option.rb +4 -0
  201. data/lib/datadog/tracing/configuration/dynamic.rb +5 -3
  202. data/lib/datadog/tracing/configuration/ext.rb +4 -0
  203. data/lib/datadog/tracing/configuration/settings.rb +36 -0
  204. data/lib/datadog/tracing/context.rb +24 -2
  205. data/lib/datadog/tracing/context_provider.rb +17 -5
  206. data/lib/datadog/tracing/contrib/action_cable/events.rb +1 -1
  207. data/lib/datadog/tracing/contrib/action_mailer/events.rb +1 -1
  208. data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +2 -2
  209. data/lib/datadog/tracing/contrib/action_view/events.rb +1 -1
  210. data/lib/datadog/tracing/contrib/active_model_serializers/events.rb +1 -1
  211. data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +1 -1
  212. data/lib/datadog/tracing/contrib/active_record/events/sql.rb +1 -0
  213. data/lib/datadog/tracing/contrib/active_record/events.rb +1 -1
  214. data/lib/datadog/tracing/contrib/active_support/cache/events/cache.rb +2 -2
  215. data/lib/datadog/tracing/contrib/aws/ext.rb +1 -1
  216. data/lib/datadog/tracing/contrib/aws/services.rb +1 -1
  217. data/lib/datadog/tracing/contrib/elasticsearch/quantize.rb +1 -1
  218. data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +10 -5
  219. data/lib/datadog/tracing/contrib/excon/middleware.rb +10 -3
  220. data/lib/datadog/tracing/contrib/ext.rb +3 -3
  221. data/lib/datadog/tracing/contrib/faraday/middleware.rb +10 -4
  222. data/lib/datadog/tracing/contrib/grape/endpoint.rb +32 -5
  223. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +1 -1
  224. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +1 -1
  225. data/lib/datadog/tracing/contrib/grpc/distributed/propagation.rb +1 -1
  226. data/lib/datadog/tracing/contrib/hanami/router_tracing.rb +2 -1
  227. data/lib/datadog/tracing/contrib/http/instrumentation.rb +16 -1
  228. data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +8 -2
  229. data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +10 -4
  230. data/lib/datadog/tracing/contrib/kafka/events/connection/request.rb +4 -0
  231. data/lib/datadog/tracing/contrib/kafka/events/produce_operation/send_messages.rb +7 -2
  232. data/lib/datadog/tracing/contrib/kafka/events/producer/deliver_messages.rb +7 -2
  233. data/lib/datadog/tracing/contrib/kafka/events.rb +1 -1
  234. data/lib/datadog/tracing/contrib/karafka/distributed/propagation.rb +1 -1
  235. data/lib/datadog/tracing/contrib/mongodb/parsers.rb +1 -1
  236. data/lib/datadog/tracing/contrib/opensearch/ext.rb +1 -1
  237. data/lib/datadog/tracing/contrib/opensearch/quantize.rb +1 -1
  238. data/lib/datadog/tracing/contrib/patchable.rb +1 -1
  239. data/lib/datadog/tracing/contrib/patcher.rb +1 -1
  240. data/lib/datadog/tracing/contrib/que/tracer.rb +1 -1
  241. data/lib/datadog/tracing/contrib/racecar/events.rb +1 -1
  242. data/lib/datadog/tracing/contrib/rack/configuration/settings.rb +1 -1
  243. data/lib/datadog/tracing/contrib/rack/header_tagging.rb +1 -1
  244. data/lib/datadog/tracing/contrib/rack/patcher.rb +1 -1
  245. data/lib/datadog/tracing/contrib/rack/trace_proxy_middleware.rb +1 -1
  246. data/lib/datadog/tracing/contrib/redis/configuration/resolver.rb +1 -1
  247. data/lib/datadog/tracing/contrib/redis/quantize.rb +36 -2
  248. data/lib/datadog/tracing/contrib/redis/trace_middleware.rb +9 -3
  249. data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +10 -3
  250. data/lib/datadog/tracing/contrib/sequel/database.rb +1 -5
  251. data/lib/datadog/tracing/contrib/sequel/jdbc_connection_string.rb +140 -0
  252. data/lib/datadog/tracing/contrib/sequel/utils.rb +50 -63
  253. data/lib/datadog/tracing/contrib/sidekiq/distributed/propagation.rb +1 -1
  254. data/lib/datadog/tracing/contrib/sinatra/configuration/settings.rb +1 -1
  255. data/lib/datadog/tracing/contrib/sneakers/tracer.rb +1 -1
  256. data/lib/datadog/tracing/contrib/utils/quantization/hash_formatter.rb +1 -1
  257. data/lib/datadog/tracing/contrib/utils/quantization/http.rb +108 -3
  258. data/lib/datadog/tracing/contrib/waterdrop/distributed/propagation.rb +1 -1
  259. data/lib/datadog/tracing/correlation.rb +2 -2
  260. data/lib/datadog/tracing/diagnostics/environment_logger.rb +3 -2
  261. data/lib/datadog/tracing/distributed/baggage.rb +1 -3
  262. data/lib/datadog/tracing/distributed/datadog.rb +3 -3
  263. data/lib/datadog/tracing/distributed/propagation.rb +3 -0
  264. data/lib/datadog/tracing/distributed/propagation_policy.rb +5 -0
  265. data/lib/datadog/tracing/distributed/trace_context.rb +14 -271
  266. data/lib/datadog/tracing/distributed/trace_state/datadog.rb +233 -0
  267. data/lib/datadog/tracing/distributed/trace_state/ext.rb +44 -0
  268. data/lib/datadog/tracing/distributed/trace_state/open_telemetry.rb +156 -0
  269. data/lib/datadog/tracing/distributed/trace_state.rb +121 -0
  270. data/lib/datadog/tracing/metadata/ext.rb +3 -0
  271. data/lib/datadog/tracing/metadata/tagging.rb +1 -1
  272. data/lib/datadog/tracing/otel_thread_context.rb +97 -0
  273. data/lib/datadog/tracing/remote.rb +236 -37
  274. data/lib/datadog/tracing/sampling/rule_sampler.rb +2 -0
  275. data/lib/datadog/tracing/span.rb +1 -1
  276. data/lib/datadog/tracing/span_operation.rb +1 -1
  277. data/lib/datadog/tracing/sync_writer.rb +8 -3
  278. data/lib/datadog/tracing/trace_digest.rb +22 -4
  279. data/lib/datadog/tracing/trace_operation.rb +22 -10
  280. data/lib/datadog/tracing/tracer.rb +28 -7
  281. data/lib/datadog/tracing/transport/http/telemetry.rb +94 -0
  282. data/lib/datadog/tracing/transport/http/traces.rb +2 -0
  283. data/lib/datadog/tracing/transport/io/traces.rb +1 -1
  284. data/lib/datadog/tracing/transport/native/response.rb +71 -0
  285. data/lib/datadog/tracing/transport/native/telemetry.rb +17 -0
  286. data/lib/datadog/tracing/transport/native.rb +395 -0
  287. data/lib/datadog/tracing/transport/span_events_negotiation.rb +41 -0
  288. data/lib/datadog/tracing/transport/telemetry.rb +62 -0
  289. data/lib/datadog/tracing/transport/trace_formatter.rb +14 -4
  290. data/lib/datadog/tracing/transport/traces.rb +85 -38
  291. data/lib/datadog/tracing/writer.rb +17 -4
  292. data/lib/datadog/version.rb +1 -1
  293. metadata +51 -13
  294. data/lib/datadog/ai_guard/evaluation/content_builder.rb +0 -31
  295. data/lib/datadog/appsec/utils/hash_coercion.rb +0 -23
  296. data/lib/datadog/tracing/distributed/datadog_tags_codec.rb +0 -69
@@ -0,0 +1,62 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Datadog
4
+ module Tracing
5
+ module Transport
6
+ class Telemetry
7
+ # Observation schema: Symbol keys with non-negative Integer values.
8
+ # COUNTS maps per-send count deltas to [metric name, additional tags].
9
+ # :bytes_sent is one successful payload's byte-size distribution sample;
10
+ # record each payload separately rather than summing its samples.
11
+ # :responses_count requires :status_code; omit both when the code is unknown.
12
+ # Missing and zero measurements emit nothing. All metrics use namespace
13
+ # "tracers" and common: true; trace_* metrics gain src_library:<source>, while
14
+ # span metrics keep their source-free tags.
15
+ COUNTS = {
16
+ requests_count: ["trace_api.requests", []],
17
+ errors_network: ["trace_api.errors", ["type:network"]],
18
+ errors_timeout: ["trace_api.errors", ["type:timeout"]],
19
+ errors_status_code: ["trace_api.errors", ["type:status_code"]],
20
+ chunks_sent: ["trace_chunks_sent", []],
21
+ chunks_dropped_serialization_error: ["trace_chunks_dropped", ["reason:serialization_error"]],
22
+ chunks_dropped_send_failure: ["trace_chunks_dropped", ["reason:send_failure"]],
23
+ chunks_dropped_payload_too_large: ["trace_chunks_dropped", ["reason:payload_too_large"]],
24
+ spans_enqueued_for_serialization: ["spans_enqueued_for_serialization", []],
25
+ spans_dropped_serialization_error: ["spans_dropped", ["reason:serialization_error"]],
26
+ spans_dropped_api_error: ["spans_dropped", ["reason:api_error"]],
27
+ spans_dropped_payload_too_large: ["spans_dropped", ["reason:payload_too_large"]],
28
+ }.freeze #: Hash[Symbol, [String, Array[String]]]
29
+
30
+ attr_writer :client
31
+
32
+ def initialize(client, source:)
33
+ @client = client
34
+ @source_tags = ["src_library:#{source}"]
35
+ @counts = COUNTS.map do |key, (name, tags)|
36
+ [key, name, name.start_with?("trace_") ? @source_tags + tags : tags]
37
+ end
38
+ end
39
+
40
+ def record(observations)
41
+ client = @client
42
+ return unless client.enabled?
43
+
44
+ @counts.each do |key, name, tags|
45
+ value = observations.fetch(key, 0)
46
+ client.inc("tracers", name, value, tags: tags) if value > 0
47
+ end
48
+ bytes = observations.fetch(:bytes_sent, 0)
49
+ client.distribution("tracers", "trace_api.bytes", bytes, tags: @source_tags) if bytes > 0
50
+ responses = observations.fetch(:responses_count, 0)
51
+ if responses > 0
52
+ client.inc("tracers", "trace_api.responses", responses,
53
+ tags: @source_tags + ["status_code:#{observations.fetch(:status_code)}"],)
54
+ end
55
+ nil
56
+ rescue
57
+ nil
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
@@ -19,8 +19,8 @@ module Datadog
19
19
  :first_span,
20
20
  :trace
21
21
 
22
- def self.format!(trace)
23
- new(trace).format!
22
+ def self.format!(trace, transport: nil)
23
+ new(trace).format!(transport: transport)
24
24
  end
25
25
 
26
26
  def initialize(trace)
@@ -32,7 +32,7 @@ module Datadog
32
32
  end
33
33
 
34
34
  # Modifies a trace so suitable for transport
35
- def format!
35
+ def format!(transport: nil)
36
36
  return unless trace
37
37
  return trace unless root_span
38
38
 
@@ -65,10 +65,13 @@ module Datadog
65
65
 
66
66
  if first_span
67
67
  tag_process_tags!
68
+ tag_sdk_otlp_export!
68
69
  tag_git_repository_url!
69
70
  tag_git_commit_sha!
70
71
  end
71
72
 
73
+ root_span.set_tag("_dd.tracing.transport", transport) if transport && !partial?
74
+
72
75
  trace
73
76
  end
74
77
 
@@ -213,7 +216,7 @@ module Datadog
213
216
  def tag_apm_tracing_disabled!
214
217
  return if trace.apm_tracing_enabled
215
218
 
216
- root_span.set_tag(Tracing::Metadata::Ext::TAG_APM_ENABLED, 0)
219
+ trace.spans.each { |span| span.set_metric(Tracing::Metadata::Ext::TAG_APM_ENABLED, 0) }
217
220
  end
218
221
 
219
222
  def tag_git_repository_url!
@@ -237,6 +240,13 @@ module Datadog
237
240
  )
238
241
  end
239
242
 
243
+ # TODO: Revisit when OTLP trace export support lands. The OTLP path sets
244
+ # `_dd.sdk.otlp_export: "true"` on the OTLP resource, so this tag must not
245
+ # also be set to "false" on the first span of a chunk exported over OTLP.
246
+ def tag_sdk_otlp_export!
247
+ first_span.set_tag(Tracing::Metadata::Ext::TAG_SDK_OTLP_EXPORT, "false")
248
+ end
249
+
240
250
  private
241
251
 
242
252
  def partial?
@@ -6,7 +6,9 @@ require_relative "../../core/transport/request"
6
6
  require_relative "../../core/transport/transport"
7
7
  require_relative "../../core/utils/enumerable_compat"
8
8
  require_relative "http/client"
9
+ require_relative "http/telemetry"
9
10
  require_relative "serializable_trace"
11
+ require_relative "span_events_negotiation"
10
12
  require_relative "trace_formatter"
11
13
 
12
14
  module Datadog
@@ -25,6 +27,30 @@ module Datadog
25
27
 
26
28
  # Traces request
27
29
  class Request < Datadog::Core::Transport::Request
30
+ attr_reader :http_status, :http_success
31
+ attr_writer :capture_telemetry
32
+
33
+ def initialize(parcel = nil)
34
+ super
35
+ @http_status = nil
36
+ @http_success = nil
37
+ @capture_telemetry = false
38
+ end
39
+
40
+ # Built-in adapters return integer codes. Custom status inspection is
41
+ # best-effort: telemetry must not change trace delivery.
42
+ def capture_status(response)
43
+ return unless @capture_telemetry
44
+
45
+ if response.respond_to?(:code)
46
+ code = response.code
47
+ @http_status = code if code.is_a?(Integer) && code.between?(100, 999)
48
+ end
49
+ @http_success = response.ok? if @http_status.nil? && response.respond_to?(:ok?)
50
+ nil
51
+ rescue
52
+ nil
53
+ end
28
54
  end
29
55
 
30
56
  # Traces response
@@ -47,44 +73,65 @@ module Datadog
47
73
  #
48
74
  # @param encoder [Datadog::Core::Encoding::Encoder]
49
75
  # @param logger [Datadog::Core::Logger]
50
- # @param max_size [String] maximum acceptable payload size
51
- def initialize(encoder, logger:, native_events_supported:, max_size: DEFAULT_MAX_PAYLOAD_SIZE)
76
+ # @param native_events_supported [Boolean] whether to encode native span events
77
+ # @param max_size [Integer] maximum acceptable payload size in bytes
78
+ # @param telemetry [HTTP::Telemetry::Batch, nil] optional per-send accounting batch
79
+ def initialize(encoder, logger:, native_events_supported:, max_size: DEFAULT_MAX_PAYLOAD_SIZE, telemetry: nil)
52
80
  @encoder = encoder
53
81
  @logger = logger
54
82
  @native_events_supported = native_events_supported
55
83
  @max_size = max_size
84
+ @batch = telemetry
56
85
  end
57
86
 
58
87
  # Encodes a list of traces in chunks.
59
88
  # Before serializing, all traces are normalized. Trace nesting is not changed.
60
89
  #
61
90
  # @param traces [Enumerable<Trace>] list of traces
62
- # @return [Enumerable[Array[Bytes,Integer]]] list of encoded chunks: each containing a byte array and
63
- # number of traces
91
+ # @return [Enumerable<Array>] tuples of encoded bytes and trace count,
92
+ # plus span count when telemetry accounting is enabled
64
93
  def encode_in_chunks(traces)
94
+ span_counts = [] if @batch
65
95
  encoded_traces = Core::Utils::EnumerableCompat.filter_map(traces) do |trace|
66
- encode_one(trace)
96
+ encoded = encode_one(trace)
97
+ span_counts << trace.length if encoded && span_counts
98
+ encoded
67
99
  end
68
100
 
69
101
  Datadog::Core::Chunker.chunk_by_size(encoded_traces, max_size).map do |chunk|
70
- [encoder.join(chunk), chunk.size]
102
+ payload = [join(chunk), chunk.size]
103
+ payload << span_counts.shift(chunk.size).sum if span_counts
104
+ payload
71
105
  end
72
106
  end
73
107
 
74
108
  private
75
109
 
110
+ def join(chunk)
111
+ encoder.join(chunk)
112
+ rescue
113
+ @batch&.serialization_failed
114
+ raise
115
+ end
116
+
76
117
  def encode_one(trace)
77
- encoded = Encoder.encode_trace(
78
- encoder,
79
- trace,
80
- logger: logger,
81
- native_events_supported: @native_events_supported
82
- )
118
+ encoded = begin
119
+ Encoder.encode_trace(
120
+ encoder,
121
+ trace,
122
+ logger: logger,
123
+ native_events_supported: @native_events_supported
124
+ )
125
+ rescue
126
+ @batch&.serialization_failed
127
+ raise
128
+ end
83
129
 
84
130
  if encoded.size > max_size
85
131
  # This single trace is too large, we can't flush it
86
132
  logger.debug { "Dropping trace. Payload too large: '#{trace.inspect}'" }
87
133
  Datadog.health_metrics.transport_trace_too_large(1)
134
+ @batch&.record_oversized_drop(trace.length)
88
135
 
89
136
  return nil
90
137
  end
@@ -99,7 +146,7 @@ module Datadog
99
146
 
100
147
  def encode_trace(encoder, trace, logger:, native_events_supported:)
101
148
  # Format the trace for transport
102
- TraceFormatter.format!(trace)
149
+ TraceFormatter.format!(trace, transport: "ruby")
103
150
 
104
151
  # Make the trace serializable
105
152
  serializable_trace = SerializableTrace.new(trace, native_events_supported: native_events_supported)
@@ -118,21 +165,43 @@ module Datadog
118
165
  # batches of traces into smaller chunks and handles
119
166
  # API version downgrade handshake.
120
167
  class Transport < Core::Transport::Transport
168
+ include SpanEventsNegotiation
121
169
  self.http_client_class = Tracing::Transport::HTTP::Client
122
170
 
171
+ def initialize(apis, default_api, logger:)
172
+ super
173
+ @reporter = nil
174
+ end
175
+
176
+ # Reconfiguration can retain this transport, so rebind its reporter to
177
+ # the new telemetry client. Each later send creates its own accounting batch.
178
+ def telemetry=(telemetry_client)
179
+ if (reporter = @reporter)
180
+ reporter.client = telemetry_client
181
+ else
182
+ @reporter = HTTP::Telemetry.new(telemetry_client)
183
+ end
184
+ end
185
+
123
186
  def send_traces(traces)
124
187
  encoder = current_api.encoder
188
+ native_events_supported = native_events_supported?
189
+ batch = @reporter&.batch(traces)
125
190
  chunker = Datadog::Tracing::Transport::Traces::Chunker.new(
126
191
  encoder,
127
192
  logger: logger,
128
- native_events_supported: native_events_supported?
193
+ native_events_supported: native_events_supported,
194
+ telemetry: batch,
129
195
  )
130
196
 
131
- responses = chunker.encode_in_chunks(traces.lazy).map do |encoded_traces, trace_count|
197
+ responses = chunker.encode_in_chunks(traces.lazy).map do |encoded_traces, trace_count, span_count|
132
198
  request = Request.new(Parcel.new(encoded_traces, trace_count: trace_count))
199
+ request.capture_telemetry = true if batch
133
200
 
134
201
  client.send_request(:traces, request).tap do |response|
135
- if downgrade?(response)
202
+ fallback = downgrade?(response)
203
+ batch&.sent(request, response, trace_count, span_count, encoded_traces.bytesize, fallback: fallback)
204
+ if fallback
136
205
  downgrade!
137
206
  return send_traces(traces)
138
207
  end
@@ -161,28 +230,6 @@ module Datadog
161
230
  def stats
162
231
  client.stats
163
232
  end
164
-
165
- private
166
-
167
- # Queries the agent for native span events serialization support.
168
- # This changes how the serialization of span events performed.
169
- def native_events_supported?
170
- return @native_events_supported if defined?(@native_events_supported)
171
-
172
- # Check for an explicit override
173
- option = Datadog.configuration.tracing.native_span_events
174
- unless option.nil?
175
- @native_events_supported = option
176
- return option
177
- end
178
-
179
- # Otherwise, check for agent support, to ensure a configuration-less setup.
180
- if (res = Datadog.send(:components).agent_info.fetch)
181
- @native_events_supported = res.span_events == true
182
- else
183
- false
184
- end
185
- end
186
233
  end
187
234
  end
188
235
  end
@@ -130,7 +130,7 @@ module Datadog
130
130
  def stats
131
131
  {
132
132
  traces_flushed: @traces_flushed,
133
- transport: @transport.stats
133
+ transport: @transport.stats,
134
134
  }
135
135
  end
136
136
 
@@ -173,10 +173,23 @@ module Datadog
173
173
  def stop_worker
174
174
  @stopped = true
175
175
 
176
- return if @worker.nil?
176
+ if @worker
177
+ @worker.stop
178
+ @worker = nil
179
+ end
177
180
 
178
- @worker.stop
179
- @worker = nil
181
+ # Stopping a writer is permanent: once `@stopped` is set, `#start`
182
+ # refuses to spin up a new worker, so this writer (and the transport it
183
+ # owns) is being discarded for good. Forks do not stop the writer
184
+ # (`#start` re-creates the worker for the new pid while reusing the same
185
+ # transport), so this only runs on real teardown/reconfiguration.
186
+ #
187
+ # Deterministically release transports that hold native resources
188
+ # (e.g. the native trace exporter's Rust runtime and process-global
189
+ # fork hooks) instead of waiting on the GC finalizer. The default HTTP
190
+ # transport has no `#close` and is left untouched. `#close` is
191
+ # idempotent, so repeated `#stop` calls are safe.
192
+ @transport.close if @transport.respond_to?(:close)
180
193
 
181
194
  true
182
195
  end
@@ -3,7 +3,7 @@
3
3
  module Datadog
4
4
  module VERSION
5
5
  MAJOR = 2
6
- MINOR = 39
6
+ MINOR = 47
7
7
  PATCH = 0
8
8
  PRE = nil
9
9
  BUILD = nil
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: datadog
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.39.0
4
+ version: 2.47.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Datadog, Inc.
@@ -32,7 +32,7 @@ dependencies:
32
32
  version: '3.5'
33
33
  - - ">="
34
34
  - !ruby/object:Gem::Version
35
- version: 3.5.3
35
+ version: 3.5.6
36
36
  type: :runtime
37
37
  prerelease: false
38
38
  version_requirements: !ruby/object:Gem::Requirement
@@ -42,35 +42,35 @@ dependencies:
42
42
  version: '3.5'
43
43
  - - ">="
44
44
  - !ruby/object:Gem::Version
45
- version: 3.5.3
45
+ version: 3.5.6
46
46
  - !ruby/object:Gem::Dependency
47
47
  name: libddwaf
48
48
  requirement: !ruby/object:Gem::Requirement
49
49
  requirements:
50
50
  - - "~>"
51
51
  - !ruby/object:Gem::Version
52
- version: 1.30.0.0.0
52
+ version: 1.30.0.1.0
53
53
  type: :runtime
54
54
  prerelease: false
55
55
  version_requirements: !ruby/object:Gem::Requirement
56
56
  requirements:
57
57
  - - "~>"
58
58
  - !ruby/object:Gem::Version
59
- version: 1.30.0.0.0
59
+ version: 1.30.0.1.0
60
60
  - !ruby/object:Gem::Dependency
61
61
  name: libdatadog
62
62
  requirement: !ruby/object:Gem::Requirement
63
63
  requirements:
64
64
  - - "~>"
65
65
  - !ruby/object:Gem::Version
66
- version: 36.0.0.1.0
66
+ version: 46.1.0.1.1
67
67
  type: :runtime
68
68
  prerelease: false
69
69
  version_requirements: !ruby/object:Gem::Requirement
70
70
  requirements:
71
71
  - - "~>"
72
72
  - !ruby/object:Gem::Version
73
- version: 36.0.0.1.0
73
+ version: 46.1.0.1.1
74
74
  - !ruby/object:Gem::Dependency
75
75
  name: logger
76
76
  requirement: !ruby/object:Gem::Requirement
@@ -181,12 +181,15 @@ files:
181
181
  - ext/libdatadog_api/init.c
182
182
  - ext/libdatadog_api/library_config.c
183
183
  - ext/libdatadog_api/library_config.h
184
+ - ext/libdatadog_api/otel_thread_context.c
185
+ - ext/libdatadog_api/otel_thread_context.h
184
186
  - ext/libdatadog_api/process_discovery.c
185
187
  - ext/libdatadog_api/process_discovery.h
188
+ - ext/libdatadog_api/trace_exporter.c
189
+ - ext/libdatadog_api/trace_exporter.h
186
190
  - ext/libdatadog_extconf_helpers.rb
187
191
  - lib/datadog.rb
188
192
  - lib/datadog/ai_guard.rb
189
- - lib/datadog/ai_guard/api_client.rb
190
193
  - lib/datadog/ai_guard/autoload.rb
191
194
  - lib/datadog/ai_guard/component.rb
192
195
  - lib/datadog/ai_guard/configuration.rb
@@ -200,16 +203,26 @@ files:
200
203
  - lib/datadog/ai_guard/contrib/rails/patcher.rb
201
204
  - lib/datadog/ai_guard/contrib/ruby_llm/chat_instrumentation.rb
202
205
  - lib/datadog/ai_guard/contrib/ruby_llm/integration.rb
206
+ - lib/datadog/ai_guard/contrib/ruby_llm/message_adapter.rb
203
207
  - lib/datadog/ai_guard/contrib/ruby_llm/patcher.rb
208
+ - lib/datadog/ai_guard/contrib/ruby_llm/redaction_change_set.rb
204
209
  - lib/datadog/ai_guard/evaluation.rb
205
- - lib/datadog/ai_guard/evaluation/content_builder.rb
210
+ - lib/datadog/ai_guard/evaluation/client.rb
206
211
  - lib/datadog/ai_guard/evaluation/content_part.rb
207
212
  - lib/datadog/ai_guard/evaluation/message.rb
213
+ - lib/datadog/ai_guard/evaluation/message_builder.rb
208
214
  - lib/datadog/ai_guard/evaluation/no_op_result.rb
215
+ - lib/datadog/ai_guard/evaluation/outcome.rb
209
216
  - lib/datadog/ai_guard/evaluation/request.rb
217
+ - lib/datadog/ai_guard/evaluation/response.rb
210
218
  - lib/datadog/ai_guard/evaluation/result.rb
211
219
  - lib/datadog/ai_guard/evaluation/tool_call.rb
212
220
  - lib/datadog/ai_guard/ext.rb
221
+ - lib/datadog/ai_guard/http_client.rb
222
+ - lib/datadog/ai_guard/metrics/telemetry.rb
223
+ - lib/datadog/ai_guard/redaction.rb
224
+ - lib/datadog/ai_guard/redaction/replacements.rb
225
+ - lib/datadog/ai_guard/redaction/result.rb
213
226
  - lib/datadog/appsec.rb
214
227
  - lib/datadog/appsec/actions_handler.rb
215
228
  - lib/datadog/appsec/actions_handler/serializable_backtrace.rb
@@ -329,7 +342,6 @@ files:
329
342
  - lib/datadog/appsec/thread_safe_ref.rb
330
343
  - lib/datadog/appsec/trace_keeper.rb
331
344
  - lib/datadog/appsec/utils.rb
332
- - lib/datadog/appsec/utils/hash_coercion.rb
333
345
  - lib/datadog/appsec/utils/http.rb
334
346
  - lib/datadog/appsec/utils/http/body.rb
335
347
  - lib/datadog/appsec/utils/http/body_reader.rb
@@ -430,6 +442,7 @@ files:
430
442
  - lib/datadog/core/tag_builder.rb
431
443
  - lib/datadog/core/tag_normalizer.rb
432
444
  - lib/datadog/core/telemetry/component.rb
445
+ - lib/datadog/core/telemetry/configuration_value.rb
433
446
  - lib/datadog/core/telemetry/emitter.rb
434
447
  - lib/datadog/core/telemetry/event.rb
435
448
  - lib/datadog/core/telemetry/event/app_client_configuration_change.rb
@@ -522,6 +535,7 @@ files:
522
535
  - lib/datadog/di/boot.rb
523
536
  - lib/datadog/di/capture_expression.rb
524
537
  - lib/datadog/di/capture_expression_evaluator.rb
538
+ - lib/datadog/di/capture_expression_evaluator/result.rb
525
539
  - lib/datadog/di/capture_limits.rb
526
540
  - lib/datadog/di/code_tracker.rb
527
541
  - lib/datadog/di/component.rb
@@ -535,8 +549,11 @@ files:
535
549
  - lib/datadog/di/el/evaluator.rb
536
550
  - lib/datadog/di/el/expression.rb
537
551
  - lib/datadog/di/error.rb
552
+ - lib/datadog/di/evaluation_failure.rb
538
553
  - lib/datadog/di/extensions.rb
539
554
  - lib/datadog/di/fatal_exceptions.rb
555
+ - lib/datadog/di/guardrails_telemetry.rb
556
+ - lib/datadog/di/guardrails_telemetry/reason.rb
540
557
  - lib/datadog/di/instrumenter.rb
541
558
  - lib/datadog/di/logger.rb
542
559
  - lib/datadog/di/preload.rb
@@ -552,6 +569,7 @@ files:
552
569
  - lib/datadog/di/redactor.rb
553
570
  - lib/datadog/di/remote.rb
554
571
  - lib/datadog/di/serializer.rb
572
+ - lib/datadog/di/snapshot_event.rb
555
573
  - lib/datadog/di/transport/diagnostics.rb
556
574
  - lib/datadog/di/transport/http.rb
557
575
  - lib/datadog/di/transport/http/diagnostics.rb
@@ -572,8 +590,16 @@ files:
572
590
  - lib/datadog/kit/identity.rb
573
591
  - lib/datadog/kit/tracing/method_tracer.rb
574
592
  - lib/datadog/open_feature.rb
593
+ - lib/datadog/open_feature/activation.rb
594
+ - lib/datadog/open_feature/agentless/configuration_source.rb
595
+ - lib/datadog/open_feature/agentless/parser.rb
596
+ - lib/datadog/open_feature/agentless/response.rb
597
+ - lib/datadog/open_feature/agentless/transport.rb
575
598
  - lib/datadog/open_feature/component.rb
576
599
  - lib/datadog/open_feature/configuration.rb
600
+ - lib/datadog/open_feature/configuration/agentless_endpoint.rb
601
+ - lib/datadog/open_feature/configuration/source.rb
602
+ - lib/datadog/open_feature/configuration/source/resolution.rb
577
603
  - lib/datadog/open_feature/evaluation_engine.rb
578
604
  - lib/datadog/open_feature/exposures/batch_builder.rb
579
605
  - lib/datadog/open_feature/exposures/buffer.rb
@@ -584,6 +610,7 @@ files:
584
610
  - lib/datadog/open_feature/ext.rb
585
611
  - lib/datadog/open_feature/flag_evaluation/aggregator.rb
586
612
  - lib/datadog/open_feature/flag_evaluation/writer.rb
613
+ - lib/datadog/open_feature/hooks/evaluation_telemetry_opt_out_hook.rb
587
614
  - lib/datadog/open_feature/hooks/flag_eval_evp_hook.rb
588
615
  - lib/datadog/open_feature/hooks/flag_eval_metrics_hook.rb
589
616
  - lib/datadog/open_feature/hooks/span_enrichment_hook.rb
@@ -1020,6 +1047,7 @@ files:
1020
1047
  - lib/datadog/tracing/contrib/sequel/dataset.rb
1021
1048
  - lib/datadog/tracing/contrib/sequel/ext.rb
1022
1049
  - lib/datadog/tracing/contrib/sequel/integration.rb
1050
+ - lib/datadog/tracing/contrib/sequel/jdbc_connection_string.rb
1023
1051
  - lib/datadog/tracing/contrib/sequel/patcher.rb
1024
1052
  - lib/datadog/tracing/contrib/sequel/utils.rb
1025
1053
  - lib/datadog/tracing/contrib/shoryuken/configuration/settings.rb
@@ -1093,13 +1121,16 @@ files:
1093
1121
  - lib/datadog/tracing/distributed/b3_single.rb
1094
1122
  - lib/datadog/tracing/distributed/baggage.rb
1095
1123
  - lib/datadog/tracing/distributed/datadog.rb
1096
- - lib/datadog/tracing/distributed/datadog_tags_codec.rb
1097
1124
  - lib/datadog/tracing/distributed/fetcher.rb
1098
1125
  - lib/datadog/tracing/distributed/helpers.rb
1099
1126
  - lib/datadog/tracing/distributed/none.rb
1100
1127
  - lib/datadog/tracing/distributed/propagation.rb
1101
1128
  - lib/datadog/tracing/distributed/propagation_policy.rb
1102
1129
  - lib/datadog/tracing/distributed/trace_context.rb
1130
+ - lib/datadog/tracing/distributed/trace_state.rb
1131
+ - lib/datadog/tracing/distributed/trace_state/datadog.rb
1132
+ - lib/datadog/tracing/distributed/trace_state/ext.rb
1133
+ - lib/datadog/tracing/distributed/trace_state/open_telemetry.rb
1103
1134
  - lib/datadog/tracing/event.rb
1104
1135
  - lib/datadog/tracing/ext.rb
1105
1136
  - lib/datadog/tracing/flush.rb
@@ -1110,6 +1141,7 @@ files:
1110
1141
  - lib/datadog/tracing/metadata/metastruct.rb
1111
1142
  - lib/datadog/tracing/metadata/metastruct_tagging.rb
1112
1143
  - lib/datadog/tracing/metadata/tagging.rb
1144
+ - lib/datadog/tracing/otel_thread_context.rb
1113
1145
  - lib/datadog/tracing/pipeline.rb
1114
1146
  - lib/datadog/tracing/pipeline/span_filter.rb
1115
1147
  - lib/datadog/tracing/pipeline/span_processor.rb
@@ -1142,13 +1174,19 @@ files:
1142
1174
  - lib/datadog/tracing/transport/http.rb
1143
1175
  - lib/datadog/tracing/transport/http/client.rb
1144
1176
  - lib/datadog/tracing/transport/http/statistics.rb
1177
+ - lib/datadog/tracing/transport/http/telemetry.rb
1145
1178
  - lib/datadog/tracing/transport/http/traces.rb
1146
1179
  - lib/datadog/tracing/transport/io.rb
1147
1180
  - lib/datadog/tracing/transport/io/client.rb
1148
1181
  - lib/datadog/tracing/transport/io/response.rb
1149
1182
  - lib/datadog/tracing/transport/io/traces.rb
1183
+ - lib/datadog/tracing/transport/native.rb
1184
+ - lib/datadog/tracing/transport/native/response.rb
1185
+ - lib/datadog/tracing/transport/native/telemetry.rb
1150
1186
  - lib/datadog/tracing/transport/serializable_trace.rb
1187
+ - lib/datadog/tracing/transport/span_events_negotiation.rb
1151
1188
  - lib/datadog/tracing/transport/statistics.rb
1189
+ - lib/datadog/tracing/transport/telemetry.rb
1152
1190
  - lib/datadog/tracing/transport/trace_formatter.rb
1153
1191
  - lib/datadog/tracing/transport/traces.rb
1154
1192
  - lib/datadog/tracing/utils.rb
@@ -1161,8 +1199,8 @@ licenses:
1161
1199
  - Apache-2.0
1162
1200
  metadata:
1163
1201
  allowed_push_host: https://rubygems.org
1164
- changelog_uri: https://github.com/DataDog/dd-trace-rb/blob/v2.39.0/CHANGELOG.md
1165
- source_code_uri: https://github.com/DataDog/dd-trace-rb/tree/v2.39.0
1202
+ changelog_uri: https://github.com/DataDog/dd-trace-rb/blob/v2.47.0/CHANGELOG.md
1203
+ source_code_uri: https://github.com/DataDog/dd-trace-rb/tree/v2.47.0
1166
1204
  post_install_message: 'JRuby support in the datadog gem is deprecated. Details: https://dtdg.co/jruby-deprecation'
1167
1205
  rdoc_options: []
1168
1206
  require_paths:
@@ -1,31 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Datadog
4
- module AIGuard
5
- module Evaluation
6
- # Builder for collecting content parts inside a message block.
7
- #
8
- # Used via the block form of {Datadog::AIGuard.message}:
9
- #
10
- # Datadog::AIGuard.message(role: :user) do |m|
11
- # m.text("What's in this image?")
12
- # m.image_url("https://example.com/img.png")
13
- # end
14
- class ContentBuilder
15
- attr_reader :parts
16
-
17
- def initialize
18
- @parts = []
19
- end
20
-
21
- def text(text)
22
- @parts << ContentPart::Text.new(text)
23
- end
24
-
25
- def image_url(url)
26
- @parts << ContentPart::ImageURL.new(url)
27
- end
28
- end
29
- end
30
- end
31
- end
@@ -1,23 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Datadog
4
- module AppSec
5
- module Utils
6
- # A module for coercing arbitrary objects into hashes.
7
- module HashCoercion
8
- # A best effort to coerce an object to a hash with methods known to various
9
- # frameworks with a fallback to standard library.
10
- #
11
- # @param object [Object] The object to coerce.
12
- # @return [Hash, nil] The coerced `Hash` or `nil` if the object is not coercible.
13
- def self.coerce(object)
14
- return object.as_json if object.respond_to?(:as_json)
15
- return object.to_hash if object.respond_to?(:to_hash)
16
- return object.to_h if object.respond_to?(:to_h)
17
-
18
- nil
19
- end
20
- end
21
- end
22
- end
23
- end