datadog 2.22.0 → 2.26.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 (245) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +140 -1
  3. data/ext/LIBDATADOG_DEVELOPMENT.md +1 -58
  4. data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +93 -23
  5. data/ext/datadog_profiling_native_extension/collectors_stack.c +21 -5
  6. data/ext/datadog_profiling_native_extension/crashtracking_runtime_stacks.c +239 -0
  7. data/ext/datadog_profiling_native_extension/datadog_ruby_common.h +1 -1
  8. data/ext/datadog_profiling_native_extension/extconf.rb +9 -4
  9. data/ext/datadog_profiling_native_extension/heap_recorder.c +1 -1
  10. data/ext/datadog_profiling_native_extension/http_transport.c +1 -0
  11. data/ext/datadog_profiling_native_extension/private_vm_api_access.c +12 -0
  12. data/ext/datadog_profiling_native_extension/private_vm_api_access.h +4 -0
  13. data/ext/datadog_profiling_native_extension/profiling.c +2 -0
  14. data/ext/libdatadog_api/datadog_ruby_common.h +1 -1
  15. data/ext/libdatadog_api/feature_flags.c +554 -0
  16. data/ext/libdatadog_api/feature_flags.h +5 -0
  17. data/ext/libdatadog_api/init.c +2 -0
  18. data/ext/libdatadog_api/library_config.c +12 -11
  19. data/ext/libdatadog_extconf_helpers.rb +1 -1
  20. data/lib/datadog/ai_guard/api_client.rb +82 -0
  21. data/lib/datadog/ai_guard/component.rb +42 -0
  22. data/lib/datadog/ai_guard/configuration/ext.rb +17 -0
  23. data/lib/datadog/ai_guard/configuration/settings.rb +98 -0
  24. data/lib/datadog/ai_guard/configuration.rb +11 -0
  25. data/lib/datadog/ai_guard/evaluation/message.rb +25 -0
  26. data/lib/datadog/ai_guard/evaluation/no_op_result.rb +34 -0
  27. data/lib/datadog/ai_guard/evaluation/request.rb +81 -0
  28. data/lib/datadog/ai_guard/evaluation/result.rb +43 -0
  29. data/lib/datadog/ai_guard/evaluation/tool_call.rb +18 -0
  30. data/lib/datadog/ai_guard/evaluation.rb +72 -0
  31. data/lib/datadog/ai_guard/ext.rb +16 -0
  32. data/lib/datadog/ai_guard.rb +153 -0
  33. data/lib/datadog/appsec/api_security/route_extractor.rb +23 -6
  34. data/lib/datadog/appsec/api_security/sampler.rb +7 -4
  35. data/lib/datadog/appsec/assets/blocked.html +8 -0
  36. data/lib/datadog/appsec/assets/blocked.json +1 -1
  37. data/lib/datadog/appsec/assets/blocked.text +3 -1
  38. data/lib/datadog/appsec/assets.rb +1 -1
  39. data/lib/datadog/appsec/context.rb +2 -1
  40. data/lib/datadog/appsec/remote.rb +9 -12
  41. data/lib/datadog/appsec/response.rb +18 -4
  42. data/lib/datadog/appsec/security_engine/engine.rb +3 -3
  43. data/lib/datadog/appsec/security_engine/result.rb +2 -1
  44. data/lib/datadog/appsec/security_engine/runner.rb +2 -2
  45. data/lib/datadog/core/configuration/components.rb +37 -3
  46. data/lib/datadog/core/configuration/config_helper.rb +2 -2
  47. data/lib/datadog/core/configuration/deprecations.rb +2 -2
  48. data/lib/datadog/core/configuration/option_definition.rb +4 -2
  49. data/lib/datadog/core/configuration/options.rb +8 -5
  50. data/lib/datadog/core/configuration/settings.rb +28 -3
  51. data/lib/datadog/core/configuration/supported_configurations.rb +338 -302
  52. data/lib/datadog/core/ddsketch.rb +0 -2
  53. data/lib/datadog/core/environment/cgroup.rb +52 -25
  54. data/lib/datadog/core/environment/container.rb +140 -46
  55. data/lib/datadog/core/environment/ext.rb +7 -0
  56. data/lib/datadog/core/environment/process.rb +87 -0
  57. data/lib/datadog/core/error.rb +6 -6
  58. data/lib/datadog/core/feature_flags.rb +61 -0
  59. data/lib/datadog/core/pin.rb +4 -0
  60. data/lib/datadog/core/rate_limiter.rb +9 -1
  61. data/lib/datadog/core/remote/client/capabilities.rb +7 -0
  62. data/lib/datadog/core/remote/client.rb +14 -6
  63. data/lib/datadog/core/remote/component.rb +6 -4
  64. data/lib/datadog/core/remote/configuration/content.rb +15 -2
  65. data/lib/datadog/core/remote/configuration/digest.rb +14 -7
  66. data/lib/datadog/core/remote/configuration/repository.rb +1 -1
  67. data/lib/datadog/core/remote/configuration/target.rb +13 -6
  68. data/lib/datadog/core/remote/transport/config.rb +4 -25
  69. data/lib/datadog/core/remote/transport/http/config.rb +10 -50
  70. data/lib/datadog/core/remote/transport/http/negotiation.rb +14 -44
  71. data/lib/datadog/core/remote/transport/http.rb +15 -24
  72. data/lib/datadog/core/remote/transport/negotiation.rb +8 -33
  73. data/lib/datadog/core/remote/worker.rb +25 -37
  74. data/lib/datadog/core/runtime/metrics.rb +11 -1
  75. data/lib/datadog/core/semaphore.rb +1 -4
  76. data/lib/datadog/core/tag_builder.rb +0 -4
  77. data/lib/datadog/core/tag_normalizer.rb +84 -0
  78. data/lib/datadog/core/telemetry/component.rb +59 -16
  79. data/lib/datadog/core/telemetry/event/app_started.rb +88 -50
  80. data/lib/datadog/core/telemetry/event/synth_app_client_configuration_change.rb +27 -4
  81. data/lib/datadog/core/telemetry/logger.rb +2 -2
  82. data/lib/datadog/core/telemetry/logging.rb +2 -8
  83. data/lib/datadog/core/telemetry/metrics_manager.rb +9 -0
  84. data/lib/datadog/core/telemetry/request.rb +17 -3
  85. data/lib/datadog/core/telemetry/transport/http/telemetry.rb +3 -34
  86. data/lib/datadog/core/telemetry/transport/http.rb +21 -16
  87. data/lib/datadog/core/telemetry/transport/telemetry.rb +3 -11
  88. data/lib/datadog/core/telemetry/worker.rb +88 -32
  89. data/lib/datadog/core/transport/ext.rb +2 -0
  90. data/lib/datadog/core/transport/http/api/endpoint.rb +9 -4
  91. data/lib/datadog/core/transport/http/api/instance.rb +4 -21
  92. data/lib/datadog/core/transport/http/builder.rb +9 -5
  93. data/lib/datadog/core/transport/http/client.rb +80 -0
  94. data/lib/datadog/core/transport/http.rb +22 -19
  95. data/lib/datadog/core/transport/response.rb +12 -1
  96. data/lib/datadog/core/transport/transport.rb +90 -0
  97. data/lib/datadog/core/utils/array.rb +29 -0
  98. data/lib/datadog/{appsec/api_security → core/utils}/lru_cache.rb +10 -21
  99. data/lib/datadog/core/utils/network.rb +3 -1
  100. data/lib/datadog/core/utils/only_once_successful.rb +8 -2
  101. data/lib/datadog/core/utils/safe_dup.rb +2 -2
  102. data/lib/datadog/core/utils/sequence.rb +2 -0
  103. data/lib/datadog/core/utils/time.rb +1 -1
  104. data/lib/datadog/core/utils.rb +2 -0
  105. data/lib/datadog/core/workers/async.rb +10 -1
  106. data/lib/datadog/core/workers/interval_loop.rb +44 -3
  107. data/lib/datadog/core/workers/polling.rb +2 -0
  108. data/lib/datadog/core/workers/queue.rb +100 -1
  109. data/lib/datadog/data_streams/configuration/settings.rb +49 -0
  110. data/lib/datadog/data_streams/configuration.rb +11 -0
  111. data/lib/datadog/data_streams/ext.rb +11 -0
  112. data/lib/datadog/data_streams/extensions.rb +16 -0
  113. data/lib/datadog/data_streams/pathway_context.rb +169 -0
  114. data/lib/datadog/data_streams/processor.rb +509 -0
  115. data/lib/datadog/data_streams/transport/http/stats.rb +52 -0
  116. data/lib/datadog/data_streams/transport/http.rb +40 -0
  117. data/lib/datadog/data_streams/transport/stats.rb +46 -0
  118. data/lib/datadog/data_streams.rb +100 -0
  119. data/lib/datadog/di/boot.rb +4 -2
  120. data/lib/datadog/di/component.rb +0 -16
  121. data/lib/datadog/di/contrib/active_record.rb +30 -5
  122. data/lib/datadog/di/el/compiler.rb +8 -4
  123. data/lib/datadog/di/el/evaluator.rb +1 -1
  124. data/lib/datadog/di/error.rb +9 -0
  125. data/lib/datadog/di/instrumenter.rb +102 -37
  126. data/lib/datadog/di/logger.rb +2 -2
  127. data/lib/datadog/di/probe.rb +20 -0
  128. data/lib/datadog/di/probe_builder.rb +2 -1
  129. data/lib/datadog/di/probe_file_loader/railtie.rb +1 -1
  130. data/lib/datadog/di/probe_manager.rb +47 -33
  131. data/lib/datadog/di/probe_notification_builder.rb +77 -25
  132. data/lib/datadog/di/probe_notifier_worker.rb +5 -5
  133. data/lib/datadog/di/proc_responder.rb +32 -0
  134. data/lib/datadog/di/remote.rb +89 -84
  135. data/lib/datadog/di/transport/diagnostics.rb +8 -36
  136. data/lib/datadog/di/transport/http/diagnostics.rb +1 -33
  137. data/lib/datadog/di/transport/http/input.rb +1 -33
  138. data/lib/datadog/di/transport/http.rb +32 -17
  139. data/lib/datadog/di/transport/input.rb +67 -34
  140. data/lib/datadog/di.rb +61 -5
  141. data/lib/datadog/error_tracking/filters.rb +2 -2
  142. data/lib/datadog/kit/appsec/events/v2.rb +2 -3
  143. data/lib/datadog/open_feature/component.rb +60 -0
  144. data/lib/datadog/open_feature/configuration.rb +27 -0
  145. data/lib/datadog/open_feature/evaluation_engine.rb +70 -0
  146. data/lib/datadog/open_feature/exposures/batch_builder.rb +32 -0
  147. data/lib/datadog/open_feature/exposures/buffer.rb +43 -0
  148. data/lib/datadog/open_feature/exposures/deduplicator.rb +30 -0
  149. data/lib/datadog/open_feature/exposures/event.rb +60 -0
  150. data/lib/datadog/open_feature/exposures/reporter.rb +40 -0
  151. data/lib/datadog/open_feature/exposures/worker.rb +116 -0
  152. data/lib/datadog/open_feature/ext.rb +14 -0
  153. data/lib/datadog/open_feature/native_evaluator.rb +38 -0
  154. data/lib/datadog/open_feature/noop_evaluator.rb +26 -0
  155. data/lib/datadog/open_feature/provider.rb +141 -0
  156. data/lib/datadog/open_feature/remote.rb +67 -0
  157. data/lib/datadog/open_feature/resolution_details.rb +35 -0
  158. data/lib/datadog/open_feature/transport.rb +70 -0
  159. data/lib/datadog/open_feature.rb +19 -0
  160. data/lib/datadog/opentelemetry/api/baggage.rb +1 -1
  161. data/lib/datadog/opentelemetry/configuration/settings.rb +159 -0
  162. data/lib/datadog/opentelemetry/metrics.rb +117 -0
  163. data/lib/datadog/opentelemetry/sdk/configurator.rb +25 -1
  164. data/lib/datadog/opentelemetry/sdk/metrics_exporter.rb +35 -0
  165. data/lib/datadog/opentelemetry.rb +3 -0
  166. data/lib/datadog/profiling/collectors/code_provenance.rb +41 -7
  167. data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +3 -2
  168. data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +1 -1
  169. data/lib/datadog/profiling/collectors/info.rb +5 -4
  170. data/lib/datadog/profiling/component.rb +12 -11
  171. data/lib/datadog/profiling/ext/dir_monkey_patches.rb +18 -0
  172. data/lib/datadog/profiling/http_transport.rb +4 -1
  173. data/lib/datadog/profiling/profiler.rb +4 -0
  174. data/lib/datadog/profiling/tag_builder.rb +36 -3
  175. data/lib/datadog/profiling.rb +1 -2
  176. data/lib/datadog/single_step_instrument.rb +1 -1
  177. data/lib/datadog/tracing/configuration/ext.rb +9 -0
  178. data/lib/datadog/tracing/configuration/settings.rb +74 -0
  179. data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +4 -4
  180. data/lib/datadog/tracing/contrib/action_pack/utils.rb +1 -2
  181. data/lib/datadog/tracing/contrib/active_job/log_injection.rb +21 -7
  182. data/lib/datadog/tracing/contrib/active_job/patcher.rb +5 -1
  183. data/lib/datadog/tracing/contrib/aws/instrumentation.rb +4 -2
  184. data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +4 -1
  185. data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +11 -3
  186. data/lib/datadog/tracing/contrib/extensions.rb +10 -2
  187. data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +11 -7
  188. data/lib/datadog/tracing/contrib/grape/configuration/settings.rb +7 -3
  189. data/lib/datadog/tracing/contrib/graphql/unified_trace.rb +22 -17
  190. data/lib/datadog/tracing/contrib/http/configuration/settings.rb +11 -3
  191. data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +11 -3
  192. data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +11 -3
  193. data/lib/datadog/tracing/contrib/kafka/instrumentation/consumer.rb +66 -0
  194. data/lib/datadog/tracing/contrib/kafka/instrumentation/producer.rb +66 -0
  195. data/lib/datadog/tracing/contrib/kafka/patcher.rb +14 -0
  196. data/lib/datadog/tracing/contrib/karafka/framework.rb +30 -0
  197. data/lib/datadog/tracing/contrib/karafka/monitor.rb +11 -0
  198. data/lib/datadog/tracing/contrib/karafka/patcher.rb +35 -4
  199. data/lib/datadog/tracing/contrib/rack/middlewares.rb +59 -27
  200. data/lib/datadog/tracing/contrib/rack/route_inference.rb +53 -0
  201. data/lib/datadog/tracing/contrib/rails/middlewares.rb +2 -2
  202. data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +4 -1
  203. data/lib/datadog/tracing/contrib/roda/instrumentation.rb +3 -1
  204. data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +3 -1
  205. data/lib/datadog/tracing/contrib/status_range_matcher.rb +9 -1
  206. data/lib/datadog/tracing/contrib/utils/quantization/hash.rb +3 -1
  207. data/lib/datadog/tracing/contrib/waterdrop/configuration/settings.rb +27 -0
  208. data/lib/datadog/tracing/contrib/waterdrop/distributed/propagation.rb +48 -0
  209. data/lib/datadog/tracing/contrib/waterdrop/ext.rb +17 -0
  210. data/lib/datadog/tracing/contrib/waterdrop/integration.rb +43 -0
  211. data/lib/datadog/tracing/contrib/waterdrop/middleware.rb +46 -0
  212. data/lib/datadog/tracing/contrib/waterdrop/patcher.rb +49 -0
  213. data/lib/datadog/tracing/contrib/waterdrop/producer.rb +50 -0
  214. data/lib/datadog/tracing/contrib/waterdrop.rb +41 -0
  215. data/lib/datadog/tracing/contrib.rb +1 -0
  216. data/lib/datadog/tracing/diagnostics/environment_logger.rb +1 -1
  217. data/lib/datadog/tracing/distributed/baggage.rb +3 -2
  218. data/lib/datadog/tracing/metadata/ext.rb +1 -1
  219. data/lib/datadog/tracing/remote.rb +1 -9
  220. data/lib/datadog/tracing/sampling/priority_sampler.rb +3 -1
  221. data/lib/datadog/tracing/span.rb +1 -1
  222. data/lib/datadog/tracing/span_event.rb +2 -2
  223. data/lib/datadog/tracing/span_operation.rb +20 -9
  224. data/lib/datadog/tracing/trace_operation.rb +44 -6
  225. data/lib/datadog/tracing/tracer.rb +42 -16
  226. data/lib/datadog/tracing/transport/http/client.rb +12 -26
  227. data/lib/datadog/tracing/transport/http/traces.rb +2 -50
  228. data/lib/datadog/tracing/transport/http.rb +15 -9
  229. data/lib/datadog/tracing/transport/io/client.rb +1 -1
  230. data/lib/datadog/tracing/transport/trace_formatter.rb +11 -0
  231. data/lib/datadog/tracing/transport/traces.rb +9 -71
  232. data/lib/datadog/tracing/workers/trace_writer.rb +5 -0
  233. data/lib/datadog/tracing/writer.rb +1 -0
  234. data/lib/datadog/version.rb +2 -2
  235. data/lib/datadog.rb +3 -0
  236. metadata +93 -23
  237. data/lib/datadog/core/remote/transport/http/api.rb +0 -53
  238. data/lib/datadog/core/remote/transport/http/client.rb +0 -49
  239. data/lib/datadog/core/telemetry/transport/http/api.rb +0 -43
  240. data/lib/datadog/core/telemetry/transport/http/client.rb +0 -49
  241. data/lib/datadog/core/transport/http/api/spec.rb +0 -36
  242. data/lib/datadog/di/transport/http/api.rb +0 -42
  243. data/lib/datadog/di/transport/http/client.rb +0 -47
  244. data/lib/datadog/opentelemetry/api/baggage.rbs +0 -26
  245. data/lib/datadog/tracing/transport/http/api.rb +0 -44
@@ -1,17 +1,28 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative '../../core/encoding'
3
4
  require_relative '../../core/environment/container'
4
5
  require_relative '../../core/environment/ext'
5
6
  require_relative '../../core/transport/ext'
6
7
  require_relative '../../core/transport/http'
7
- require_relative 'http/api'
8
- require_relative '../../../datadog/version'
8
+ require_relative 'http/traces'
9
9
 
10
10
  module Datadog
11
11
  module Tracing
12
12
  module Transport
13
13
  # Namespace for HTTP transport components
14
14
  module HTTP
15
+ V4 = Traces::API::Endpoint.new(
16
+ '/v0.4/traces',
17
+ Core::Encoding::MsgpackEncoder,
18
+ service_rates: true
19
+ )
20
+
21
+ V3 = Traces::API::Endpoint.new(
22
+ '/v0.3/traces',
23
+ Core::Encoding::MsgpackEncoder,
24
+ )
25
+
15
26
  module_function
16
27
 
17
28
  # Builds a new Transport::HTTP::Client with default settings
@@ -19,20 +30,15 @@ module Datadog
19
30
  def default(
20
31
  agent_settings:,
21
32
  logger: Datadog.logger,
22
- api_version: nil,
23
33
  headers: nil
24
34
  )
25
35
  Core::Transport::HTTP.build(
26
- api_instance_class: Traces::API::Instance,
27
36
  agent_settings: agent_settings,
28
37
  logger: logger,
29
- api_version: api_version,
30
38
  headers: headers
31
39
  ) do |transport|
32
- apis = API.defaults
33
-
34
- transport.api API::V4, apis[API::V4], fallback: API::V3, default: true
35
- transport.api API::V3, apis[API::V3]
40
+ transport.api 'v0.4', V4, fallback: 'v0.3', default: true
41
+ transport.api 'v0.3', V3
36
42
 
37
43
  # Call block to apply any customization, if provided
38
44
  yield(transport) if block_given?
@@ -42,7 +42,7 @@ module Datadog
42
42
  response
43
43
  rescue => e
44
44
  message =
45
- "Internal error during IO transport request. Cause: #{e.class.name} #{e.message} " \
45
+ "Internal error during IO transport request. Cause: #{e.class.name}: #{e.message} " \
46
46
  "Location: #{Array(e.backtrace).first}"
47
47
 
48
48
  # Log error
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative '../../core/environment/identity'
4
+ require_relative '../../core/environment/process'
4
5
  require_relative '../../core/environment/socket'
5
6
  require_relative '../../core/environment/git'
6
7
  require_relative '../../core/git/ext'
@@ -62,6 +63,7 @@ module Datadog
62
63
  tag_apm_tracing_disabled!
63
64
 
64
65
  if first_span
66
+ tag_process_tags!
65
67
  tag_git_repository_url!
66
68
  tag_git_commit_sha!
67
69
  end
@@ -215,6 +217,15 @@ module Datadog
215
217
  first_span.set_tag(Core::Git::Ext::TAG_COMMIT_SHA, git_commit_sha)
216
218
  end
217
219
 
220
+ def tag_process_tags!
221
+ return unless Datadog.configuration.experimental_propagate_process_tags_enabled
222
+
223
+ first_span.set_tag(
224
+ Core::Environment::Ext::TAG_PROCESS_TAGS,
225
+ Core::Environment::Process.serialized
226
+ )
227
+ end
228
+
218
229
  private
219
230
 
220
231
  def partial?
@@ -3,6 +3,9 @@
3
3
  require_relative '../../core/chunker'
4
4
  require_relative '../../core/transport/parcel'
5
5
  require_relative '../../core/transport/request'
6
+ require_relative '../../core/transport/transport'
7
+ require_relative '../../core/utils/array'
8
+ require_relative 'http/client'
6
9
  require_relative 'serializable_trace'
7
10
  require_relative 'trace_formatter'
8
11
 
@@ -65,11 +68,8 @@ module Datadog
65
68
  # @return [Enumerable[Array[Bytes,Integer]]] list of encoded chunks: each containing a byte array and
66
69
  # number of traces
67
70
  def encode_in_chunks(traces)
68
- encoded_traces = if traces.respond_to?(:filter_map)
69
- # DEV Supported since Ruby 2.7, saves an intermediate object creation
70
- traces.filter_map { |t| encode_one(t) }
71
- else
72
- traces.map { |t| encode_one(t) }.reject(&:nil?)
71
+ encoded_traces = Core::Utils::Array.filter_map(traces) do |trace|
72
+ encode_one(trace)
73
73
  end
74
74
 
75
75
  Datadog::Core::Chunker.chunk_by_size(encoded_traces, max_size).map do |chunk|
@@ -123,16 +123,8 @@ module Datadog
123
123
  # This class initializes the HTTP client, breaks down large
124
124
  # batches of traces into smaller chunks and handles
125
125
  # API version downgrade handshake.
126
- class Transport
127
- attr_reader :client, :apis, :default_api, :current_api_id, :logger
128
-
129
- def initialize(apis, default_api, logger: Datadog.logger)
130
- @apis = apis
131
- @default_api = default_api
132
- @logger = logger
133
-
134
- change_api!(default_api)
135
- end
126
+ class Transport < Core::Transport::Transport
127
+ self.http_client_class = Tracing::Transport::HTTP::Client
136
128
 
137
129
  def send_traces(traces)
138
130
  encoder = current_api.encoder
@@ -145,7 +137,7 @@ module Datadog
145
137
  responses = chunker.encode_in_chunks(traces.lazy).map do |encoded_traces, trace_count|
146
138
  request = Request.new(EncodedParcel.new(encoded_traces, trace_count))
147
139
 
148
- client.send_traces_payload(request).tap do |response|
140
+ client.send_request(:traces, request).tap do |response|
149
141
  if downgrade?(response)
150
142
  downgrade!
151
143
  return send_traces(traces)
@@ -173,35 +165,11 @@ module Datadog
173
165
  end
174
166
 
175
167
  def stats
176
- @client.stats
177
- end
178
-
179
- def current_api
180
- apis[@current_api_id]
168
+ client.stats
181
169
  end
182
170
 
183
171
  private
184
172
 
185
- def downgrade?(response)
186
- return false unless apis.fallbacks.key?(@current_api_id)
187
-
188
- response.not_found? || response.unsupported?
189
- end
190
-
191
- def downgrade!
192
- downgrade_api_id = apis.fallbacks[@current_api_id]
193
- raise NoDowngradeAvailableError, @current_api_id if downgrade_api_id.nil?
194
-
195
- change_api!(downgrade_api_id)
196
- end
197
-
198
- def change_api!(api_id)
199
- raise UnknownApiVersionError, api_id unless apis.key?(api_id)
200
-
201
- @current_api_id = api_id
202
- @client = HTTP::Client.new(current_api, logger: logger)
203
- end
204
-
205
173
  # Queries the agent for native span events serialization support.
206
174
  # This changes how the serialization of span events performed.
207
175
  def native_events_supported?
@@ -221,36 +189,6 @@ module Datadog
221
189
  false
222
190
  end
223
191
  end
224
-
225
- # Raised when configured with an unknown API version
226
- class UnknownApiVersionError < StandardError
227
- attr_reader :version
228
-
229
- def initialize(version)
230
- super
231
-
232
- @version = version
233
- end
234
-
235
- def message
236
- "No matching transport API for version #{version}!"
237
- end
238
- end
239
-
240
- # Raised when configured with an unknown API version
241
- class NoDowngradeAvailableError < StandardError
242
- attr_reader :version
243
-
244
- def initialize(version)
245
- super
246
-
247
- @version = version
248
- end
249
-
250
- def message
251
- "No downgrade from transport API version #{version} is available!"
252
- end
253
- end
254
192
  end
255
193
  end
256
194
  end
@@ -21,6 +21,8 @@ module Datadog
21
21
  :transport,
22
22
  :agent_settings
23
23
 
24
+ # DEV-3.0: change to keyword arguments
25
+ #
24
26
  # rubocop:disable Lint/MissingSuper
25
27
  def initialize(options = {})
26
28
  @logger = options[:logger] || Datadog.logger
@@ -143,6 +145,9 @@ module Datadog
143
145
 
144
146
  # Are there more traces to be processed next?
145
147
  def work_pending?
148
+ # This is the same implementation as in Queue, but it was
149
+ # overwritten by IntervalLoop on its way to this worker class.
150
+ # See the comments in those two methods for more info.
146
151
  !buffer.empty?
147
152
  end
148
153
 
@@ -19,6 +19,7 @@ module Datadog
19
19
  :events,
20
20
  :agent_settings
21
21
 
22
+ # DEV-3.0: change to keyword arguments
22
23
  def initialize(options = {})
23
24
  @logger = options[:logger] || Datadog.logger
24
25
 
@@ -3,7 +3,7 @@
3
3
  module Datadog
4
4
  module VERSION
5
5
  MAJOR = 2
6
- MINOR = 22
6
+ MINOR = 26
7
7
  PATCH = 0
8
8
  PRE = nil
9
9
  BUILD = nil
@@ -21,6 +21,6 @@ module Datadog
21
21
  # To allow testing with the next unreleased version of Ruby, the version check is performed
22
22
  # as `< #{MAXIMUM_RUBY_VERSION}`, meaning prereleases of MAXIMUM_RUBY_VERSION are allowed
23
23
  # but not stable MAXIMUM_RUBY_VERSION releases.
24
- MAXIMUM_RUBY_VERSION = '3.5'
24
+ MAXIMUM_RUBY_VERSION = '4.1'
25
25
  end
26
26
  end
data/lib/datadog.rb CHANGED
@@ -6,8 +6,11 @@ require_relative 'datadog/tracing/contrib'
6
6
 
7
7
  # Load other products (must follow tracing)
8
8
  require_relative 'datadog/profiling'
9
+ require_relative 'datadog/ai_guard'
9
10
  require_relative 'datadog/appsec'
10
11
  require_relative 'datadog/di'
12
+ require_relative 'datadog/data_streams'
13
+ require_relative 'datadog/open_feature'
11
14
 
12
15
  # Line probes will not work on Ruby < 2.6 because of lack of :script_compiled
13
16
  # trace point. Activate DI automatically on supported Ruby versions but
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: datadog
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.22.0
4
+ version: 2.26.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Datadog, Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-10-15 00:00:00.000000000 Z
11
+ date: 2026-01-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: msgpack
@@ -30,48 +30,48 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '3.4'
33
+ version: '3.5'
34
34
  - - ">="
35
35
  - !ruby/object:Gem::Version
36
- version: 3.4.1
36
+ version: 3.5.1
37
37
  type: :runtime
38
38
  prerelease: false
39
39
  version_requirements: !ruby/object:Gem::Requirement
40
40
  requirements:
41
41
  - - "~>"
42
42
  - !ruby/object:Gem::Version
43
- version: '3.4'
43
+ version: '3.5'
44
44
  - - ">="
45
45
  - !ruby/object:Gem::Version
46
- version: 3.4.1
46
+ version: 3.5.1
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: libddwaf
49
49
  requirement: !ruby/object:Gem::Requirement
50
50
  requirements:
51
51
  - - "~>"
52
52
  - !ruby/object:Gem::Version
53
- version: 1.25.1.1.0
53
+ version: 1.30.0.0.0
54
54
  type: :runtime
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  requirements:
58
58
  - - "~>"
59
59
  - !ruby/object:Gem::Version
60
- version: 1.25.1.1.0
60
+ version: 1.30.0.0.0
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: libdatadog
63
63
  requirement: !ruby/object:Gem::Requirement
64
64
  requirements:
65
65
  - - "~>"
66
66
  - !ruby/object:Gem::Version
67
- version: 22.0.1.1.0
67
+ version: 25.0.0.1.0
68
68
  type: :runtime
69
69
  prerelease: false
70
70
  version_requirements: !ruby/object:Gem::Requirement
71
71
  requirements:
72
72
  - - "~>"
73
73
  - !ruby/object:Gem::Version
74
- version: 22.0.1.1.0
74
+ version: 25.0.0.1.0
75
75
  - !ruby/object:Gem::Dependency
76
76
  name: logger
77
77
  requirement: !ruby/object:Gem::Requirement
@@ -86,6 +86,20 @@ dependencies:
86
86
  - - ">="
87
87
  - !ruby/object:Gem::Version
88
88
  version: '0'
89
+ - !ruby/object:Gem::Dependency
90
+ name: cgi
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ type: :runtime
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
89
103
  description: |
90
104
  datadog is Datadog's client library for Ruby. It includes a suite of tools
91
105
  which provide visibility into the performance and security of Ruby applications,
@@ -125,6 +139,7 @@ files:
125
139
  - ext/datadog_profiling_native_extension/collectors_stack.h
126
140
  - ext/datadog_profiling_native_extension/collectors_thread_context.c
127
141
  - ext/datadog_profiling_native_extension/collectors_thread_context.h
142
+ - ext/datadog_profiling_native_extension/crashtracking_runtime_stacks.c
128
143
  - ext/datadog_profiling_native_extension/datadog_ruby_common.c
129
144
  - ext/datadog_profiling_native_extension/datadog_ruby_common.h
130
145
  - ext/datadog_profiling_native_extension/encoded_profile.c
@@ -158,6 +173,8 @@ files:
158
173
  - ext/libdatadog_api/datadog_ruby_common.h
159
174
  - ext/libdatadog_api/ddsketch.c
160
175
  - ext/libdatadog_api/extconf.rb
176
+ - ext/libdatadog_api/feature_flags.c
177
+ - ext/libdatadog_api/feature_flags.h
161
178
  - ext/libdatadog_api/init.c
162
179
  - ext/libdatadog_api/library_config.c
163
180
  - ext/libdatadog_api/library_config.h
@@ -165,6 +182,19 @@ files:
165
182
  - ext/libdatadog_api/process_discovery.h
166
183
  - ext/libdatadog_extconf_helpers.rb
167
184
  - lib/datadog.rb
185
+ - lib/datadog/ai_guard.rb
186
+ - lib/datadog/ai_guard/api_client.rb
187
+ - lib/datadog/ai_guard/component.rb
188
+ - lib/datadog/ai_guard/configuration.rb
189
+ - lib/datadog/ai_guard/configuration/ext.rb
190
+ - lib/datadog/ai_guard/configuration/settings.rb
191
+ - lib/datadog/ai_guard/evaluation.rb
192
+ - lib/datadog/ai_guard/evaluation/message.rb
193
+ - lib/datadog/ai_guard/evaluation/no_op_result.rb
194
+ - lib/datadog/ai_guard/evaluation/request.rb
195
+ - lib/datadog/ai_guard/evaluation/result.rb
196
+ - lib/datadog/ai_guard/evaluation/tool_call.rb
197
+ - lib/datadog/ai_guard/ext.rb
168
198
  - lib/datadog/appsec.rb
169
199
  - lib/datadog/appsec/actions_handler.rb
170
200
  - lib/datadog/appsec/actions_handler/serializable_backtrace.rb
@@ -175,7 +205,6 @@ files:
175
205
  - lib/datadog/appsec/api_security/endpoint_collection/rails_collector.rb
176
206
  - lib/datadog/appsec/api_security/endpoint_collection/rails_route_serializer.rb
177
207
  - lib/datadog/appsec/api_security/endpoint_collection/sinatra_route_serializer.rb
178
- - lib/datadog/appsec/api_security/lru_cache.rb
179
208
  - lib/datadog/appsec/api_security/route_extractor.rb
180
209
  - lib/datadog/appsec/api_security/sampler.rb
181
210
  - lib/datadog/appsec/assets.rb
@@ -319,6 +348,7 @@ files:
319
348
  - lib/datadog/core/environment/git.rb
320
349
  - lib/datadog/core/environment/identity.rb
321
350
  - lib/datadog/core/environment/platform.rb
351
+ - lib/datadog/core/environment/process.rb
322
352
  - lib/datadog/core/environment/socket.rb
323
353
  - lib/datadog/core/environment/thread_count.rb
324
354
  - lib/datadog/core/environment/variable_helpers.rb
@@ -326,6 +356,7 @@ files:
326
356
  - lib/datadog/core/environment/yjit.rb
327
357
  - lib/datadog/core/error.rb
328
358
  - lib/datadog/core/extensions.rb
359
+ - lib/datadog/core/feature_flags.rb
329
360
  - lib/datadog/core/git/ext.rb
330
361
  - lib/datadog/core/header_collection.rb
331
362
  - lib/datadog/core/logger.rb
@@ -357,8 +388,6 @@ files:
357
388
  - lib/datadog/core/remote/tie/tracing.rb
358
389
  - lib/datadog/core/remote/transport/config.rb
359
390
  - lib/datadog/core/remote/transport/http.rb
360
- - lib/datadog/core/remote/transport/http/api.rb
361
- - lib/datadog/core/remote/transport/http/client.rb
362
391
  - lib/datadog/core/remote/transport/http/config.rb
363
392
  - lib/datadog/core/remote/transport/http/negotiation.rb
364
393
  - lib/datadog/core/remote/transport/negotiation.rb
@@ -367,6 +396,7 @@ files:
367
396
  - lib/datadog/core/runtime/metrics.rb
368
397
  - lib/datadog/core/semaphore.rb
369
398
  - lib/datadog/core/tag_builder.rb
399
+ - lib/datadog/core/tag_normalizer.rb
370
400
  - lib/datadog/core/telemetry/component.rb
371
401
  - lib/datadog/core/telemetry/emitter.rb
372
402
  - lib/datadog/core/telemetry/event.rb
@@ -392,8 +422,6 @@ files:
392
422
  - lib/datadog/core/telemetry/metrics_manager.rb
393
423
  - lib/datadog/core/telemetry/request.rb
394
424
  - lib/datadog/core/telemetry/transport/http.rb
395
- - lib/datadog/core/telemetry/transport/http/api.rb
396
- - lib/datadog/core/telemetry/transport/http/client.rb
397
425
  - lib/datadog/core/telemetry/transport/http/telemetry.rb
398
426
  - lib/datadog/core/telemetry/transport/telemetry.rb
399
427
  - lib/datadog/core/telemetry/worker.rb
@@ -407,19 +435,22 @@ files:
407
435
  - lib/datadog/core/transport/http/api/fallbacks.rb
408
436
  - lib/datadog/core/transport/http/api/instance.rb
409
437
  - lib/datadog/core/transport/http/api/map.rb
410
- - lib/datadog/core/transport/http/api/spec.rb
411
438
  - lib/datadog/core/transport/http/builder.rb
439
+ - lib/datadog/core/transport/http/client.rb
412
440
  - lib/datadog/core/transport/http/env.rb
413
441
  - lib/datadog/core/transport/http/response.rb
414
442
  - lib/datadog/core/transport/parcel.rb
415
443
  - lib/datadog/core/transport/request.rb
416
444
  - lib/datadog/core/transport/response.rb
445
+ - lib/datadog/core/transport/transport.rb
417
446
  - lib/datadog/core/utils.rb
447
+ - lib/datadog/core/utils/array.rb
418
448
  - lib/datadog/core/utils/at_fork_monkey_patch.rb
419
449
  - lib/datadog/core/utils/base64.rb
420
450
  - lib/datadog/core/utils/duration.rb
421
451
  - lib/datadog/core/utils/forking.rb
422
452
  - lib/datadog/core/utils/hash.rb
453
+ - lib/datadog/core/utils/lru_cache.rb
423
454
  - lib/datadog/core/utils/network.rb
424
455
  - lib/datadog/core/utils/only_once.rb
425
456
  - lib/datadog/core/utils/only_once_successful.rb
@@ -442,6 +473,16 @@ files:
442
473
  - lib/datadog/core/workers/polling.rb
443
474
  - lib/datadog/core/workers/queue.rb
444
475
  - lib/datadog/core/workers/runtime_metrics.rb
476
+ - lib/datadog/data_streams.rb
477
+ - lib/datadog/data_streams/configuration.rb
478
+ - lib/datadog/data_streams/configuration/settings.rb
479
+ - lib/datadog/data_streams/ext.rb
480
+ - lib/datadog/data_streams/extensions.rb
481
+ - lib/datadog/data_streams/pathway_context.rb
482
+ - lib/datadog/data_streams/processor.rb
483
+ - lib/datadog/data_streams/transport/http.rb
484
+ - lib/datadog/data_streams/transport/http/stats.rb
485
+ - lib/datadog/data_streams/transport/stats.rb
445
486
  - lib/datadog/di.rb
446
487
  - lib/datadog/di/base.rb
447
488
  - lib/datadog/di/boot.rb
@@ -469,13 +510,12 @@ files:
469
510
  - lib/datadog/di/probe_manager.rb
470
511
  - lib/datadog/di/probe_notification_builder.rb
471
512
  - lib/datadog/di/probe_notifier_worker.rb
513
+ - lib/datadog/di/proc_responder.rb
472
514
  - lib/datadog/di/redactor.rb
473
515
  - lib/datadog/di/remote.rb
474
516
  - lib/datadog/di/serializer.rb
475
517
  - lib/datadog/di/transport/diagnostics.rb
476
518
  - lib/datadog/di/transport/http.rb
477
- - lib/datadog/di/transport/http/api.rb
478
- - lib/datadog/di/transport/http/client.rb
479
519
  - lib/datadog/di/transport/http/diagnostics.rb
480
520
  - lib/datadog/di/transport/http/input.rb
481
521
  - lib/datadog/di/transport/input.rb
@@ -493,13 +533,32 @@ files:
493
533
  - lib/datadog/kit/appsec/events/v2.rb
494
534
  - lib/datadog/kit/enable_core_dumps.rb
495
535
  - lib/datadog/kit/identity.rb
536
+ - lib/datadog/open_feature.rb
537
+ - lib/datadog/open_feature/component.rb
538
+ - lib/datadog/open_feature/configuration.rb
539
+ - lib/datadog/open_feature/evaluation_engine.rb
540
+ - lib/datadog/open_feature/exposures/batch_builder.rb
541
+ - lib/datadog/open_feature/exposures/buffer.rb
542
+ - lib/datadog/open_feature/exposures/deduplicator.rb
543
+ - lib/datadog/open_feature/exposures/event.rb
544
+ - lib/datadog/open_feature/exposures/reporter.rb
545
+ - lib/datadog/open_feature/exposures/worker.rb
546
+ - lib/datadog/open_feature/ext.rb
547
+ - lib/datadog/open_feature/native_evaluator.rb
548
+ - lib/datadog/open_feature/noop_evaluator.rb
549
+ - lib/datadog/open_feature/provider.rb
550
+ - lib/datadog/open_feature/remote.rb
551
+ - lib/datadog/open_feature/resolution_details.rb
552
+ - lib/datadog/open_feature/transport.rb
496
553
  - lib/datadog/opentelemetry.rb
497
554
  - lib/datadog/opentelemetry/api/baggage.rb
498
- - lib/datadog/opentelemetry/api/baggage.rbs
499
555
  - lib/datadog/opentelemetry/api/context.rb
500
556
  - lib/datadog/opentelemetry/api/trace/span.rb
557
+ - lib/datadog/opentelemetry/configuration/settings.rb
558
+ - lib/datadog/opentelemetry/metrics.rb
501
559
  - lib/datadog/opentelemetry/sdk/configurator.rb
502
560
  - lib/datadog/opentelemetry/sdk/id_generator.rb
561
+ - lib/datadog/opentelemetry/sdk/metrics_exporter.rb
503
562
  - lib/datadog/opentelemetry/sdk/propagator.rb
504
563
  - lib/datadog/opentelemetry/sdk/span_processor.rb
505
564
  - lib/datadog/opentelemetry/sdk/trace/span.rb
@@ -763,12 +822,15 @@ files:
763
822
  - lib/datadog/tracing/contrib/kafka/events/produce_operation/send_messages.rb
764
823
  - lib/datadog/tracing/contrib/kafka/events/producer/deliver_messages.rb
765
824
  - lib/datadog/tracing/contrib/kafka/ext.rb
825
+ - lib/datadog/tracing/contrib/kafka/instrumentation/consumer.rb
826
+ - lib/datadog/tracing/contrib/kafka/instrumentation/producer.rb
766
827
  - lib/datadog/tracing/contrib/kafka/integration.rb
767
828
  - lib/datadog/tracing/contrib/kafka/patcher.rb
768
829
  - lib/datadog/tracing/contrib/karafka.rb
769
830
  - lib/datadog/tracing/contrib/karafka/configuration/settings.rb
770
831
  - lib/datadog/tracing/contrib/karafka/distributed/propagation.rb
771
832
  - lib/datadog/tracing/contrib/karafka/ext.rb
833
+ - lib/datadog/tracing/contrib/karafka/framework.rb
772
834
  - lib/datadog/tracing/contrib/karafka/integration.rb
773
835
  - lib/datadog/tracing/contrib/karafka/monitor.rb
774
836
  - lib/datadog/tracing/contrib/karafka/patcher.rb
@@ -832,6 +894,7 @@ files:
832
894
  - lib/datadog/tracing/contrib/rack/middlewares.rb
833
895
  - lib/datadog/tracing/contrib/rack/patcher.rb
834
896
  - lib/datadog/tracing/contrib/rack/request_queue.rb
897
+ - lib/datadog/tracing/contrib/rack/route_inference.rb
835
898
  - lib/datadog/tracing/contrib/rack/trace_proxy_middleware.rb
836
899
  - lib/datadog/tracing/contrib/rails/auto_instrument_railtie.rb
837
900
  - lib/datadog/tracing/contrib/rails/configuration/settings.rb
@@ -943,6 +1006,14 @@ files:
943
1006
  - lib/datadog/tracing/contrib/utils/database.rb
944
1007
  - lib/datadog/tracing/contrib/utils/quantization/hash.rb
945
1008
  - lib/datadog/tracing/contrib/utils/quantization/http.rb
1009
+ - lib/datadog/tracing/contrib/waterdrop.rb
1010
+ - lib/datadog/tracing/contrib/waterdrop/configuration/settings.rb
1011
+ - lib/datadog/tracing/contrib/waterdrop/distributed/propagation.rb
1012
+ - lib/datadog/tracing/contrib/waterdrop/ext.rb
1013
+ - lib/datadog/tracing/contrib/waterdrop/integration.rb
1014
+ - lib/datadog/tracing/contrib/waterdrop/middleware.rb
1015
+ - lib/datadog/tracing/contrib/waterdrop/patcher.rb
1016
+ - lib/datadog/tracing/contrib/waterdrop/producer.rb
946
1017
  - lib/datadog/tracing/correlation.rb
947
1018
  - lib/datadog/tracing/diagnostics/environment_logger.rb
948
1019
  - lib/datadog/tracing/diagnostics/ext.rb
@@ -997,7 +1068,6 @@ files:
997
1068
  - lib/datadog/tracing/trace_segment.rb
998
1069
  - lib/datadog/tracing/tracer.rb
999
1070
  - lib/datadog/tracing/transport/http.rb
1000
- - lib/datadog/tracing/transport/http/api.rb
1001
1071
  - lib/datadog/tracing/transport/http/client.rb
1002
1072
  - lib/datadog/tracing/transport/http/statistics.rb
1003
1073
  - lib/datadog/tracing/transport/http/traces.rb
@@ -1020,8 +1090,8 @@ licenses:
1020
1090
  - Apache-2.0
1021
1091
  metadata:
1022
1092
  allowed_push_host: https://rubygems.org
1023
- changelog_uri: https://github.com/DataDog/dd-trace-rb/blob/v2.22.0/CHANGELOG.md
1024
- source_code_uri: https://github.com/DataDog/dd-trace-rb/tree/v2.22.0
1093
+ changelog_uri: https://github.com/DataDog/dd-trace-rb/blob/v2.26.0/CHANGELOG.md
1094
+ source_code_uri: https://github.com/DataDog/dd-trace-rb/tree/v2.26.0
1025
1095
  post_install_message:
1026
1096
  rdoc_options: []
1027
1097
  require_paths:
@@ -1033,7 +1103,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
1033
1103
  version: 2.5.0
1034
1104
  - - "<"
1035
1105
  - !ruby/object:Gem::Version
1036
- version: '3.5'
1106
+ version: '4.1'
1037
1107
  required_rubygems_version: !ruby/object:Gem::Requirement
1038
1108
  requirements:
1039
1109
  - - ">="
@@ -1,53 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative '../../../encoding'
4
- require_relative '../../../transport/http/api/map'
5
- require_relative '../../../transport/http/api/instance'
6
- require_relative '../../../transport/http/api/spec'
7
- require_relative 'negotiation'
8
- require_relative 'config'
9
-
10
- module Datadog
11
- module Core
12
- module Remote
13
- module Transport
14
- module HTTP
15
- # Namespace for API components
16
- module API
17
- # Default API versions
18
- ROOT = 'root'
19
- V7 = 'v0.7'
20
-
21
- module_function
22
-
23
- def defaults
24
- Core::Transport::HTTP::API::Map[
25
- ROOT => Spec.new do |s|
26
- s.info = Negotiation::API::Endpoint.new(
27
- '/info',
28
- )
29
- end,
30
- V7 => Spec.new do |s|
31
- s.config = Config::API::Endpoint.new(
32
- '/v0.7/config',
33
- Core::Encoding::JSONEncoder,
34
- )
35
- end,
36
- ]
37
- end
38
-
39
- class Instance < Core::Transport::HTTP::API::Instance
40
- include Config::API::Instance
41
- include Negotiation::API::Instance
42
- end
43
-
44
- class Spec < Core::Transport::HTTP::API::Spec
45
- include Config::API::Spec
46
- include Negotiation::API::Spec
47
- end
48
- end
49
- end
50
- end
51
- end
52
- end
53
- end