datadog 2.19.0 → 2.20.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 (271) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +27 -1
  3. data/ext/libdatadog_api/extconf.rb +3 -1
  4. data/ext/libdatadog_extconf_helpers.rb +13 -3
  5. data/lib/datadog/appsec/component.rb +3 -13
  6. data/lib/datadog/appsec/context.rb +23 -0
  7. data/lib/datadog/appsec/contrib/devise/patches/signin_tracking_patch.rb +2 -1
  8. data/lib/datadog/appsec/contrib/devise/patches/signup_tracking_patch.rb +2 -1
  9. data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +0 -1
  10. data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +0 -1
  11. data/lib/datadog/appsec/contrib/rack/request_middleware.rb +14 -22
  12. data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +23 -2
  13. data/lib/datadog/appsec/contrib/rails/patcher.rb +14 -26
  14. data/lib/datadog/appsec/contrib/rails/patches/process_action_patch.rb +27 -0
  15. data/lib/datadog/appsec/contrib/rails/patches/render_to_body_patch.rb +33 -0
  16. data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +0 -1
  17. data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +23 -0
  18. data/lib/datadog/appsec/contrib/sinatra/patcher.rb +8 -18
  19. data/lib/datadog/appsec/contrib/sinatra/patches/json_patch.rb +31 -0
  20. data/lib/datadog/appsec/event.rb +3 -18
  21. data/lib/datadog/appsec/instrumentation/gateway/argument.rb +16 -0
  22. data/lib/datadog/appsec/metrics/collector.rb +7 -3
  23. data/lib/datadog/appsec/metrics/telemetry.rb +1 -1
  24. data/lib/datadog/appsec/metrics/telemetry_exporter.rb +28 -0
  25. data/lib/datadog/appsec/metrics.rb +1 -0
  26. data/lib/datadog/appsec/security_engine/engine.rb +14 -32
  27. data/lib/datadog/appsec/security_engine/result.rb +16 -0
  28. data/lib/datadog/appsec/security_engine/runner.rb +18 -4
  29. data/lib/datadog/appsec/thread_safe_ref.rb +61 -0
  30. data/lib/datadog/appsec/trace_keeper.rb +24 -0
  31. data/lib/datadog/appsec/utils/hash_coercion.rb +23 -0
  32. data/lib/datadog/appsec.rb +0 -7
  33. data/lib/datadog/auto_instrument_base.rb +2 -1
  34. data/lib/datadog/core/configuration/option.rb +29 -20
  35. data/lib/datadog/core/configuration/option_definition.rb +2 -2
  36. data/lib/datadog/core/configuration/options.rb +13 -7
  37. data/lib/datadog/di/boot.rb +7 -0
  38. data/lib/datadog/di/component.rb +7 -0
  39. data/lib/datadog/di/probe_file_loader/railtie.rb +15 -0
  40. data/lib/datadog/di/probe_file_loader.rb +82 -0
  41. data/lib/datadog/di/remote.rb +3 -5
  42. data/lib/datadog/di.rb +0 -1
  43. data/lib/datadog/kit/appsec/events/v2.rb +5 -4
  44. data/lib/datadog/kit/appsec/events.rb +11 -10
  45. data/lib/datadog/kit/identity.rb +17 -11
  46. data/lib/datadog/opentelemetry/api/baggage.rb +2 -2
  47. data/lib/datadog/opentelemetry/api/context.rb +10 -9
  48. data/lib/datadog/opentelemetry/sdk/propagator.rb +4 -4
  49. data/lib/datadog/opentelemetry/sdk/span_processor.rb +8 -8
  50. data/lib/datadog/opentelemetry/sdk/trace/span.rb +14 -10
  51. data/lib/datadog/opentelemetry/trace.rb +4 -4
  52. data/lib/datadog/profiling.rb +6 -8
  53. data/lib/datadog/tracing/analytics.rb +1 -1
  54. data/lib/datadog/tracing/buffer.rb +7 -7
  55. data/lib/datadog/tracing/configuration/dynamic.rb +4 -6
  56. data/lib/datadog/tracing/configuration/ext.rb +3 -2
  57. data/lib/datadog/tracing/configuration/settings.rb +17 -0
  58. data/lib/datadog/tracing/context.rb +2 -2
  59. data/lib/datadog/tracing/contrib/action_cable/event.rb +1 -1
  60. data/lib/datadog/tracing/contrib/action_cable/integration.rb +1 -1
  61. data/lib/datadog/tracing/contrib/action_mailer/integration.rb +1 -1
  62. data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +4 -4
  63. data/lib/datadog/tracing/contrib/action_pack/integration.rb +1 -1
  64. data/lib/datadog/tracing/contrib/action_view/events/render_template.rb +1 -1
  65. data/lib/datadog/tracing/contrib/active_job/event.rb +8 -8
  66. data/lib/datadog/tracing/contrib/active_job/events/discard.rb +1 -1
  67. data/lib/datadog/tracing/contrib/active_job/events/enqueue.rb +1 -1
  68. data/lib/datadog/tracing/contrib/active_job/events/enqueue_at.rb +1 -1
  69. data/lib/datadog/tracing/contrib/active_job/events/enqueue_retry.rb +1 -1
  70. data/lib/datadog/tracing/contrib/active_job/events/perform.rb +1 -1
  71. data/lib/datadog/tracing/contrib/active_job/events/retry_stopped.rb +1 -1
  72. data/lib/datadog/tracing/contrib/active_job/integration.rb +1 -1
  73. data/lib/datadog/tracing/contrib/active_model_serializers/events/render.rb +1 -1
  74. data/lib/datadog/tracing/contrib/active_model_serializers/events/serialize.rb +3 -3
  75. data/lib/datadog/tracing/contrib/active_model_serializers/integration.rb +1 -2
  76. data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +1 -1
  77. data/lib/datadog/tracing/contrib/active_record/events/instantiation.rb +1 -1
  78. data/lib/datadog/tracing/contrib/active_record/events/sql.rb +5 -5
  79. data/lib/datadog/tracing/contrib/active_record/integration.rb +1 -1
  80. data/lib/datadog/tracing/contrib/active_record/utils.rb +15 -15
  81. data/lib/datadog/tracing/contrib/active_support/cache/events/cache.rb +6 -6
  82. data/lib/datadog/tracing/contrib/active_support/integration.rb +1 -1
  83. data/lib/datadog/tracing/contrib/active_support/notifications/event.rb +2 -1
  84. data/lib/datadog/tracing/contrib/active_support/notifications/subscription.rb +7 -9
  85. data/lib/datadog/tracing/contrib/aws/ext.rb +1 -1
  86. data/lib/datadog/tracing/contrib/aws/instrumentation.rb +2 -2
  87. data/lib/datadog/tracing/contrib/aws/parsed_context.rb +3 -1
  88. data/lib/datadog/tracing/contrib/aws/patcher.rb +5 -1
  89. data/lib/datadog/tracing/contrib/aws/service/base.rb +2 -1
  90. data/lib/datadog/tracing/contrib/aws/service/dynamodb.rb +1 -1
  91. data/lib/datadog/tracing/contrib/aws/service/eventbridge.rb +1 -1
  92. data/lib/datadog/tracing/contrib/aws/service/kinesis.rb +1 -1
  93. data/lib/datadog/tracing/contrib/aws/service/s3.rb +1 -1
  94. data/lib/datadog/tracing/contrib/aws/service/sns.rb +1 -1
  95. data/lib/datadog/tracing/contrib/aws/service/sqs.rb +1 -1
  96. data/lib/datadog/tracing/contrib/aws/service/states.rb +1 -1
  97. data/lib/datadog/tracing/contrib/aws/services.rb +7 -7
  98. data/lib/datadog/tracing/contrib/concurrent_ruby/async_patch.rb +1 -1
  99. data/lib/datadog/tracing/contrib/concurrent_ruby/context_composite_executor_service.rb +1 -1
  100. data/lib/datadog/tracing/contrib/concurrent_ruby/future_patch.rb +1 -1
  101. data/lib/datadog/tracing/contrib/concurrent_ruby/integration.rb +1 -1
  102. data/lib/datadog/tracing/contrib/concurrent_ruby/promises_future_patch.rb +1 -1
  103. data/lib/datadog/tracing/contrib/configurable.rb +6 -6
  104. data/lib/datadog/tracing/contrib/configuration/resolvers/pattern_resolver.rb +4 -4
  105. data/lib/datadog/tracing/contrib/dalli/ext.rb +3 -2
  106. data/lib/datadog/tracing/contrib/dalli/integration.rb +1 -1
  107. data/lib/datadog/tracing/contrib/delayed_job/integration.rb +1 -1
  108. data/lib/datadog/tracing/contrib/elasticsearch/ext.rb +3 -2
  109. data/lib/datadog/tracing/contrib/elasticsearch/integration.rb +4 -4
  110. data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +51 -53
  111. data/lib/datadog/tracing/contrib/elasticsearch/quantize.rb +5 -5
  112. data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +2 -2
  113. data/lib/datadog/tracing/contrib/ethon/ext.rb +3 -2
  114. data/lib/datadog/tracing/contrib/ethon/integration.rb +1 -1
  115. data/lib/datadog/tracing/contrib/excon/ext.rb +3 -2
  116. data/lib/datadog/tracing/contrib/excon/integration.rb +1 -1
  117. data/lib/datadog/tracing/contrib/excon/middleware.rb +2 -2
  118. data/lib/datadog/tracing/contrib/ext.rb +3 -3
  119. data/lib/datadog/tracing/contrib/extensions.rb +9 -9
  120. data/lib/datadog/tracing/contrib/faraday/ext.rb +3 -2
  121. data/lib/datadog/tracing/contrib/faraday/integration.rb +1 -1
  122. data/lib/datadog/tracing/contrib/faraday/middleware.rb +4 -2
  123. data/lib/datadog/tracing/contrib/grape/endpoint.rb +8 -8
  124. data/lib/datadog/tracing/contrib/grape/integration.rb +1 -1
  125. data/lib/datadog/tracing/contrib/graphql/integration.rb +1 -1
  126. data/lib/datadog/tracing/contrib/graphql/patcher.rb +2 -2
  127. data/lib/datadog/tracing/contrib/graphql/unified_trace.rb +24 -24
  128. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +8 -8
  129. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +3 -3
  130. data/lib/datadog/tracing/contrib/grpc/distributed/fetcher.rb +1 -1
  131. data/lib/datadog/tracing/contrib/grpc/integration.rb +1 -1
  132. data/lib/datadog/tracing/contrib/hanami/ext.rb +2 -2
  133. data/lib/datadog/tracing/contrib/hanami/integration.rb +1 -1
  134. data/lib/datadog/tracing/contrib/hanami/renderer_policy_tracing.rb +1 -1
  135. data/lib/datadog/tracing/contrib/hanami/router_tracing.rb +9 -11
  136. data/lib/datadog/tracing/contrib/http/distributed/fetcher.rb +4 -4
  137. data/lib/datadog/tracing/contrib/http/ext.rb +3 -2
  138. data/lib/datadog/tracing/contrib/http/instrumentation.rb +5 -5
  139. data/lib/datadog/tracing/contrib/httpclient/ext.rb +3 -2
  140. data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +3 -3
  141. data/lib/datadog/tracing/contrib/httpclient/integration.rb +1 -1
  142. data/lib/datadog/tracing/contrib/httprb/ext.rb +3 -2
  143. data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +4 -4
  144. data/lib/datadog/tracing/contrib/httprb/integration.rb +1 -1
  145. data/lib/datadog/tracing/contrib/kafka/event.rb +1 -1
  146. data/lib/datadog/tracing/contrib/kafka/events/connection/request.rb +1 -1
  147. data/lib/datadog/tracing/contrib/kafka/events/consumer/process_batch.rb +1 -1
  148. data/lib/datadog/tracing/contrib/kafka/events/consumer/process_message.rb +1 -1
  149. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/heartbeat.rb +1 -1
  150. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/join_group.rb +1 -1
  151. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/leave_group.rb +1 -1
  152. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/sync_group.rb +1 -1
  153. data/lib/datadog/tracing/contrib/kafka/events/produce_operation/send_messages.rb +1 -1
  154. data/lib/datadog/tracing/contrib/kafka/events/producer/deliver_messages.rb +1 -1
  155. data/lib/datadog/tracing/contrib/kafka/integration.rb +1 -1
  156. data/lib/datadog/tracing/contrib/karafka/monitor.rb +13 -13
  157. data/lib/datadog/tracing/contrib/karafka/patcher.rb +4 -4
  158. data/lib/datadog/tracing/contrib/lograge/instrumentation.rb +1 -1
  159. data/lib/datadog/tracing/contrib/lograge/integration.rb +1 -1
  160. data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +1 -1
  161. data/lib/datadog/tracing/contrib/mongodb/ext.rb +1 -1
  162. data/lib/datadog/tracing/contrib/mongodb/integration.rb +1 -1
  163. data/lib/datadog/tracing/contrib/mongodb/parsers.rb +1 -1
  164. data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +6 -6
  165. data/lib/datadog/tracing/contrib/mysql2/ext.rb +1 -1
  166. data/lib/datadog/tracing/contrib/mysql2/integration.rb +1 -1
  167. data/lib/datadog/tracing/contrib/opensearch/configuration/settings.rb +1 -1
  168. data/lib/datadog/tracing/contrib/opensearch/ext.rb +3 -2
  169. data/lib/datadog/tracing/contrib/opensearch/integration.rb +1 -2
  170. data/lib/datadog/tracing/contrib/opensearch/patcher.rb +68 -70
  171. data/lib/datadog/tracing/contrib/opensearch/quantize.rb +5 -5
  172. data/lib/datadog/tracing/contrib/patcher.rb +7 -9
  173. data/lib/datadog/tracing/contrib/pg/integration.rb +1 -1
  174. data/lib/datadog/tracing/contrib/presto/ext.rb +1 -1
  175. data/lib/datadog/tracing/contrib/presto/instrumentation.rb +3 -3
  176. data/lib/datadog/tracing/contrib/presto/integration.rb +1 -1
  177. data/lib/datadog/tracing/contrib/propagation/sql_comment/comment.rb +1 -1
  178. data/lib/datadog/tracing/contrib/propagation/sql_comment.rb +1 -1
  179. data/lib/datadog/tracing/contrib/que/integration.rb +1 -1
  180. data/lib/datadog/tracing/contrib/racecar/event.rb +1 -1
  181. data/lib/datadog/tracing/contrib/racecar/events/batch.rb +2 -2
  182. data/lib/datadog/tracing/contrib/racecar/events/consume.rb +1 -1
  183. data/lib/datadog/tracing/contrib/racecar/events/message.rb +2 -2
  184. data/lib/datadog/tracing/contrib/racecar/integration.rb +1 -1
  185. data/lib/datadog/tracing/contrib/rack/header_collection.rb +1 -1
  186. data/lib/datadog/tracing/contrib/rack/header_tagging.rb +32 -32
  187. data/lib/datadog/tracing/contrib/rack/integration.rb +1 -1
  188. data/lib/datadog/tracing/contrib/rack/middlewares.rb +21 -17
  189. data/lib/datadog/tracing/contrib/rack/patcher.rb +1 -1
  190. data/lib/datadog/tracing/contrib/rack/request_queue.rb +2 -2
  191. data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +1 -1
  192. data/lib/datadog/tracing/contrib/rails/integration.rb +1 -1
  193. data/lib/datadog/tracing/contrib/rails/log_injection.rb +1 -1
  194. data/lib/datadog/tracing/contrib/rails/middlewares.rb +1 -1
  195. data/lib/datadog/tracing/contrib/rails/runner.rb +5 -4
  196. data/lib/datadog/tracing/contrib/rake/instrumentation.rb +4 -4
  197. data/lib/datadog/tracing/contrib/rake/integration.rb +1 -1
  198. data/lib/datadog/tracing/contrib/redis/configuration/resolver.rb +2 -2
  199. data/lib/datadog/tracing/contrib/redis/ext.rb +3 -2
  200. data/lib/datadog/tracing/contrib/redis/integration.rb +2 -2
  201. data/lib/datadog/tracing/contrib/redis/patcher.rb +4 -4
  202. data/lib/datadog/tracing/contrib/redis/quantize.rb +1 -1
  203. data/lib/datadog/tracing/contrib/redis/tags.rb +1 -1
  204. data/lib/datadog/tracing/contrib/redis/trace_middleware.rb +4 -4
  205. data/lib/datadog/tracing/contrib/registry.rb +1 -1
  206. data/lib/datadog/tracing/contrib/resque/integration.rb +1 -1
  207. data/lib/datadog/tracing/contrib/resque/resque_job.rb +1 -1
  208. data/lib/datadog/tracing/contrib/rest_client/ext.rb +3 -2
  209. data/lib/datadog/tracing/contrib/rest_client/integration.rb +1 -1
  210. data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +3 -3
  211. data/lib/datadog/tracing/contrib/roda/instrumentation.rb +1 -1
  212. data/lib/datadog/tracing/contrib/roda/integration.rb +1 -1
  213. data/lib/datadog/tracing/contrib/semantic_logger/instrumentation.rb +1 -1
  214. data/lib/datadog/tracing/contrib/semantic_logger/integration.rb +1 -1
  215. data/lib/datadog/tracing/contrib/sequel/database.rb +5 -5
  216. data/lib/datadog/tracing/contrib/sequel/dataset.rb +1 -1
  217. data/lib/datadog/tracing/contrib/sequel/integration.rb +1 -1
  218. data/lib/datadog/tracing/contrib/sequel/utils.rb +1 -1
  219. data/lib/datadog/tracing/contrib/shoryuken/integration.rb +1 -1
  220. data/lib/datadog/tracing/contrib/sidekiq/integration.rb +1 -1
  221. data/lib/datadog/tracing/contrib/sidekiq/utils.rb +1 -1
  222. data/lib/datadog/tracing/contrib/sinatra/integration.rb +1 -1
  223. data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +38 -40
  224. data/lib/datadog/tracing/contrib/sneakers/integration.rb +1 -1
  225. data/lib/datadog/tracing/contrib/stripe/integration.rb +1 -1
  226. data/lib/datadog/tracing/contrib/stripe/request.rb +1 -1
  227. data/lib/datadog/tracing/contrib/sucker_punch/integration.rb +1 -1
  228. data/lib/datadog/tracing/contrib/trilogy/ext.rb +1 -1
  229. data/lib/datadog/tracing/contrib/trilogy/integration.rb +1 -1
  230. data/lib/datadog/tracing/contrib/utils/quantization/hash.rb +11 -11
  231. data/lib/datadog/tracing/contrib/utils/quantization/http.rb +6 -6
  232. data/lib/datadog/tracing/diagnostics/environment_logger.rb +5 -1
  233. data/lib/datadog/tracing/distributed/b3_single.rb +1 -1
  234. data/lib/datadog/tracing/distributed/baggage.rb +73 -8
  235. data/lib/datadog/tracing/distributed/datadog.rb +4 -5
  236. data/lib/datadog/tracing/distributed/datadog_tags_codec.rb +11 -13
  237. data/lib/datadog/tracing/distributed/helpers.rb +1 -1
  238. data/lib/datadog/tracing/distributed/none.rb +4 -2
  239. data/lib/datadog/tracing/distributed/propagation.rb +4 -1
  240. data/lib/datadog/tracing/distributed/propagation_policy.rb +1 -1
  241. data/lib/datadog/tracing/distributed/trace_context.rb +22 -16
  242. data/lib/datadog/tracing/event.rb +5 -7
  243. data/lib/datadog/tracing/flush.rb +1 -1
  244. data/lib/datadog/tracing/metadata/analytics.rb +1 -1
  245. data/lib/datadog/tracing/metadata/tagging.rb +4 -4
  246. data/lib/datadog/tracing/pipeline/span_filter.rb +3 -1
  247. data/lib/datadog/tracing/pipeline/span_processor.rb +3 -1
  248. data/lib/datadog/tracing/pipeline.rb +1 -1
  249. data/lib/datadog/tracing/sampling/ext.rb +0 -2
  250. data/lib/datadog/tracing/sampling/rule_sampler.rb +30 -30
  251. data/lib/datadog/tracing/sampling/span/rule_parser.rb +1 -1
  252. data/lib/datadog/tracing/sampling/span/sampler.rb +0 -7
  253. data/lib/datadog/tracing/span.rb +1 -1
  254. data/lib/datadog/tracing/span_event.rb +10 -10
  255. data/lib/datadog/tracing/span_link.rb +12 -12
  256. data/lib/datadog/tracing/span_operation.rb +9 -11
  257. data/lib/datadog/tracing/trace_digest.rb +21 -23
  258. data/lib/datadog/tracing/trace_operation.rb +84 -88
  259. data/lib/datadog/tracing/trace_segment.rb +2 -2
  260. data/lib/datadog/tracing/tracer.rb +36 -38
  261. data/lib/datadog/tracing/transport/http/client.rb +1 -1
  262. data/lib/datadog/tracing/transport/http/traces.rb +2 -2
  263. data/lib/datadog/tracing/transport/io/client.rb +5 -5
  264. data/lib/datadog/tracing/transport/io/traces.rb +4 -4
  265. data/lib/datadog/tracing/transport/statistics.rb +1 -1
  266. data/lib/datadog/tracing/transport/traces.rb +5 -5
  267. data/lib/datadog/tracing/workers/trace_writer.rb +12 -12
  268. data/lib/datadog/tracing/workers.rb +2 -2
  269. data/lib/datadog/tracing.rb +2 -2
  270. data/lib/datadog/version.rb +1 -1
  271. metadata +15 -6
@@ -149,11 +149,11 @@ module Datadog
149
149
  context = call_context
150
150
  active_trace = context.active_trace
151
151
  trace = if continue_from || active_trace.nil?
152
- start_trace(continue_from: continue_from)
153
- else
154
- active_trace
155
- end
156
- rescue StandardError => e
152
+ start_trace(continue_from: continue_from)
153
+ else
154
+ active_trace
155
+ end
156
+ rescue => e
157
157
  logger.debug { "Failed to trace: #{e}" }
158
158
 
159
159
  # Tracing failed: fallback and run code without tracing.
@@ -194,7 +194,6 @@ module Datadog
194
194
  )
195
195
  end
196
196
  end
197
- # rubocop:enable Metrics/MethodLength
198
197
 
199
198
  # Set the given key / value tag pair at the tracer level. These tags will be
200
199
  # appended to each span created by the tracer. Keys and values must be strings.
@@ -225,7 +224,7 @@ module Datadog
225
224
  # @return [nil] if no trace is active, and thus no span is active
226
225
  def active_span(key = nil)
227
226
  trace = active_trace(key)
228
- trace.active_span if trace
227
+ trace&.active_span
229
228
  end
230
229
 
231
230
  # Information about the currently active trace.
@@ -272,12 +271,10 @@ module Datadog
272
271
 
273
272
  # Sample a span, tagging the trace as appropriate.
274
273
  def sample_trace(trace_op)
275
- begin
276
- @sampler.sample!(trace_op) if trace_op.sampling_priority.nil?
277
- rescue StandardError => e
278
- SAMPLE_TRACE_LOG_ONLY_ONCE.run do
279
- logger.warn { "Failed to sample trace: #{e.class.name} #{e} at #{Array(e.backtrace).first}" }
280
- end
274
+ @sampler.sample!(trace_op) if trace_op.sampling_priority.nil?
275
+ rescue => e
276
+ SAMPLE_TRACE_LOG_ONLY_ONCE.run do
277
+ logger.warn { "Failed to sample trace: #{e.class.name} #{e} at #{Array(e.backtrace).first}" }
281
278
  end
282
279
  end
283
280
 
@@ -297,7 +294,7 @@ module Datadog
297
294
  # description of and constraints on arguments.
298
295
  # rubocop:disable Lint/UselessMethodDefinition
299
296
  def publish(trace)
300
- super(trace)
297
+ super
301
298
  end
302
299
  # rubocop:enable Lint/UselessMethodDefinition
303
300
  end
@@ -315,7 +312,7 @@ module Datadog
315
312
  def shutdown!
316
313
  return unless @enabled
317
314
 
318
- @writer.stop if @writer
315
+ @writer&.stop
319
316
  end
320
317
 
321
318
  private
@@ -335,12 +332,12 @@ module Datadog
335
332
  def build_trace(digest = nil)
336
333
  # Resolve hostname if configured
337
334
  hostname = Core::Environment::Socket.hostname if Datadog.configuration.tracing.report_hostname
338
- hostname = hostname && !hostname.empty? ? hostname : nil
335
+ hostname = (hostname && !hostname.empty?) ? hostname : nil
339
336
 
340
337
  if digest
341
338
  sampling_priority = if propagate_sampling_priority?(upstream_tags: digest.trace_distributed_tags)
342
- digest.trace_sampling_priority
343
- end
339
+ digest.trace_sampling_priority
340
+ end
344
341
  TraceOperation.new(
345
342
  logger: logger,
346
343
  hostname: hostname,
@@ -369,7 +366,9 @@ module Datadog
369
366
  )
370
367
  end
371
368
  end
369
+ # rubocop:enable Metrics/MethodLength
372
370
 
371
+ # rubocop:disable Metrics/MethodLength
373
372
  def bind_trace_events!(trace_op)
374
373
  events = trace_op.send(:events)
375
374
 
@@ -388,6 +387,7 @@ module Datadog
388
387
  flush_trace(event_trace_op)
389
388
  end
390
389
  end
390
+ # rubocop:enable Metrics/MethodLength
391
391
 
392
392
  # Creates a new TraceOperation, with events bounds to this Tracer instance.
393
393
  # @return [TraceOperation]
@@ -402,6 +402,7 @@ module Datadog
402
402
  end
403
403
 
404
404
  # rubocop:disable Lint/UnderscorePrefixedVariableName
405
+ # rubocop:disable Metrics/MethodLength
405
406
  def start_span(
406
407
  name,
407
408
  continue_from: nil,
@@ -454,16 +455,17 @@ module Datadog
454
455
  end
455
456
  end
456
457
  # rubocop:enable Lint/UnderscorePrefixedVariableName
458
+ # rubocop:enable Metrics/MethodLength
457
459
 
458
460
  def resolve_tags(tags, service)
459
461
  merged_tags = if @tags.any? && tags
460
- # Combine default tags with provided tags,
461
- # preferring provided tags.
462
- @tags.merge(tags)
463
- else
464
- # Use provided tags or default tags if none.
465
- tags || @tags.dup
466
- end
462
+ # Combine default tags with provided tags,
463
+ # preferring provided tags.
464
+ @tags.merge(tags)
465
+ else
466
+ # Use provided tags or default tags if none.
467
+ tags || @tags.dup
468
+ end
467
469
  # Remove version tag if service is not the default service
468
470
  if merged_tags.key?(Core::Environment::Ext::TAG_VERSION) && service && service != @default_service
469
471
  merged_tags.delete(Core::Environment::Ext::TAG_VERSION)
@@ -507,12 +509,10 @@ module Datadog
507
509
  private_constant :SAMPLE_TRACE_LOG_ONLY_ONCE
508
510
 
509
511
  def sample_span(trace_op, span)
510
- begin
511
- @span_sampler.sample!(trace_op, span)
512
- rescue StandardError => e
513
- SAMPLE_SPAN_LOG_ONLY_ONCE.run do
514
- logger.warn { "Failed to sample span: #{e.class.name} #{e} at #{Array(e.backtrace).first}" }
515
- end
512
+ @span_sampler.sample!(trace_op, span)
513
+ rescue => e
514
+ SAMPLE_SPAN_LOG_ONLY_ONCE.run do
515
+ logger.warn { "Failed to sample span: #{e.class.name} #{e} at #{Array(e.backtrace).first}" }
516
516
  end
517
517
  end
518
518
 
@@ -521,13 +521,11 @@ module Datadog
521
521
 
522
522
  # Flush finished spans from the trace buffer, send them to writer.
523
523
  def flush_trace(trace_op)
524
- begin
525
- trace = @trace_flush.consume!(trace_op)
526
- write(trace) if trace && !trace.empty?
527
- rescue StandardError => e
528
- FLUSH_TRACE_LOG_ONLY_ONCE.run do
529
- logger.warn { "Failed to flush trace: #{e.class.name} #{e} at #{Array(e.backtrace).first}" }
530
- end
524
+ trace = @trace_flush.consume!(trace_op)
525
+ write(trace) if trace && !trace.empty?
526
+ rescue => e
527
+ FLUSH_TRACE_LOG_ONLY_ONCE.run do
528
+ logger.warn { "Failed to flush trace: #{e.class.name} #{e} at #{Array(e.backtrace).first}" }
531
529
  end
532
530
  end
533
531
 
@@ -30,7 +30,7 @@ module Datadog
30
30
  update_stats_from_response!(response)
31
31
 
32
32
  response
33
- rescue StandardError => e
33
+ rescue => e
34
34
  message =
35
35
  "Internal error during #{self.class.name} request. Cause: #{e.class.name} #{e.message} " \
36
36
  "Location: #{Array(e.backtrace).first}"
@@ -95,10 +95,10 @@ module Datadog
95
95
  env.body = env.request.parcel.data
96
96
 
97
97
  # Query for response
98
- http_response = super(env, &block)
98
+ http_response = super
99
99
 
100
100
  # Process the response
101
- response_options = { trace_count: env.request.parcel.trace_count }.tap do |options|
101
+ response_options = {trace_count: env.request.parcel.trace_count}.tap do |options|
102
102
  # Parse service rates, if configured to do so.
103
103
  if service_rates? && !http_response.payload.to_s.empty?
104
104
  body = JSON.parse(http_response.payload)
@@ -30,17 +30,17 @@ module Datadog
30
30
  # If block is given, allow it to handle writing
31
31
  # Otherwise do a standard encode/write/response.
32
32
  response = if block_given?
33
- yield(out, request)
34
- else
35
- @request_block.call(out, request)
36
- end
33
+ yield(out, request)
34
+ else
35
+ @request_block.call(out, request)
36
+ end
37
37
 
38
38
  # Update statistics
39
39
  update_stats_from_response!(response)
40
40
 
41
41
  # Return response
42
42
  response
43
- rescue StandardError => e
43
+ rescue => e
44
44
  message =
45
45
  "Internal error during IO transport request. Cause: #{e.class.name} #{e.message} " \
46
46
  "Location: #{Array(e.backtrace).first}"
@@ -33,10 +33,10 @@ module Datadog
33
33
 
34
34
  # Write to IO
35
35
  result = if block_given?
36
- yield(out, data)
37
- else
38
- write_data(out, data)
39
- end
36
+ yield(out, data)
37
+ else
38
+ write_data(out, data)
39
+ end
40
40
 
41
41
  # Generate response
42
42
  Traces::Response.new(result)
@@ -47,7 +47,7 @@ module Datadog
47
47
  end
48
48
 
49
49
  def metrics_for_exception(_exception)
50
- { api_errors: Core::Metrics::Metric.new(:api_errors, nil, 1) }
50
+ {api_errors: Core::Metrics::Metric.new(:api_errors, nil, 1)}
51
51
  end
52
52
 
53
53
  # Stat counts
@@ -66,11 +66,11 @@ module Datadog
66
66
  # number of traces
67
67
  def encode_in_chunks(traces)
68
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?)
73
- end
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?)
73
+ end
74
74
 
75
75
  Datadog::Core::Chunker.chunk_by_size(encoded_traces, max_size).map do |chunk|
76
76
  [encoder.join(chunk), chunk.size]
@@ -45,7 +45,7 @@ module Datadog
45
45
  def write_traces(traces)
46
46
  traces = process_traces(traces)
47
47
  flush_traces(traces)
48
- rescue StandardError => e
48
+ rescue => e
49
49
  logger.warn(
50
50
  "Error while writing traces: dropped #{traces.length} items. Cause: #{e} Location: #{Array(e.backtrace).first}"
51
51
  )
@@ -119,7 +119,7 @@ module Datadog
119
119
  # WARNING: This method breaks the Liskov Substitution Principle -- TraceWriter#perform is spec'd to return the
120
120
  # result from the writer, whereas this method always returns nil.
121
121
  def perform(traces)
122
- super(traces).tap do |responses|
122
+ super.tap do |responses|
123
123
  loop_back_off! if responses.find(&:server_error?)
124
124
  end
125
125
 
@@ -152,16 +152,16 @@ module Datadog
152
152
 
153
153
  def fork_policy=(policy)
154
154
  # Translate to Workers::Async::Thread policy
155
- thread_fork_policy = case policy
156
- when Core::Workers::Async::Thread::FORK_POLICY_STOP
157
- policy
158
- when FORK_POLICY_SYNC
159
- # Stop the async thread because the writer
160
- # will bypass and run synchronously.
161
- Core::Workers::Async::Thread::FORK_POLICY_STOP
162
- else
163
- Core::Workers::Async::Thread::FORK_POLICY_RESTART
164
- end
155
+ thread_fork_policy = case policy
156
+ when Core::Workers::Async::Thread::FORK_POLICY_STOP
157
+ policy
158
+ when FORK_POLICY_SYNC
159
+ # Stop the async thread because the writer
160
+ # will bypass and run synchronously.
161
+ Core::Workers::Async::Thread::FORK_POLICY_STOP
162
+ else
163
+ Core::Workers::Async::Thread::FORK_POLICY_RESTART
164
+ end
165
165
 
166
166
  # Update thread fork policy
167
167
  super(thread_fork_policy)
@@ -53,7 +53,7 @@ module Datadog
53
53
  traces = @trace_buffer.pop
54
54
  traces = Pipeline.process!(traces)
55
55
  @trace_task.call(traces, @transport) unless @trace_task.nil? || traces.empty?
56
- rescue StandardError => e
56
+ rescue => e
57
57
  # ensures that the thread will not die because of an exception.
58
58
  # TODO[manu]: findout the reason and reschedule the send if it's not
59
59
  # a fatal exception
@@ -107,7 +107,7 @@ module Datadog
107
107
 
108
108
  private
109
109
 
110
- alias flush_data callback_traces
110
+ alias_method :flush_data, :callback_traces
111
111
 
112
112
  def perform
113
113
  loop do
@@ -81,7 +81,7 @@ module Datadog
81
81
  # @public_api
82
82
  def keep!
83
83
  trace = active_trace
84
- trace.keep! if trace
84
+ trace&.keep!
85
85
  end
86
86
 
87
87
  # (see Datadog::Tracing::TraceSegment#reject!)
@@ -89,7 +89,7 @@ module Datadog
89
89
  # @public_api
90
90
  def reject!
91
91
  trace = active_trace
92
- trace.reject! if trace
92
+ trace&.reject!
93
93
  end
94
94
 
95
95
  # (see Datadog::Tracing::Tracer#active_correlation)
@@ -3,7 +3,7 @@
3
3
  module Datadog
4
4
  module VERSION
5
5
  MAJOR = 2
6
- MINOR = 19
6
+ MINOR = 20
7
7
  PATCH = 0
8
8
  PRE = nil
9
9
  BUILD = nil
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.19.0
4
+ version: 2.20.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-07-24 00:00:00.000000000 Z
11
+ date: 2025-09-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: msgpack
@@ -50,14 +50,14 @@ dependencies:
50
50
  requirements:
51
51
  - - "~>"
52
52
  - !ruby/object:Gem::Version
53
- version: 1.24.1.0.3
53
+ version: 1.24.1.1.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.24.1.0.3
60
+ version: 1.24.1.1.0
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: libdatadog
63
63
  requirement: !ruby/object:Gem::Requirement
@@ -226,6 +226,8 @@ files:
226
226
  - lib/datadog/appsec/contrib/rails/gateway/watcher.rb
227
227
  - lib/datadog/appsec/contrib/rails/integration.rb
228
228
  - lib/datadog/appsec/contrib/rails/patcher.rb
229
+ - lib/datadog/appsec/contrib/rails/patches/process_action_patch.rb
230
+ - lib/datadog/appsec/contrib/rails/patches/render_to_body_patch.rb
229
231
  - lib/datadog/appsec/contrib/rails/request.rb
230
232
  - lib/datadog/appsec/contrib/rails/request_middleware.rb
231
233
  - lib/datadog/appsec/contrib/rest_client/integration.rb
@@ -237,6 +239,7 @@ files:
237
239
  - lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb
238
240
  - lib/datadog/appsec/contrib/sinatra/integration.rb
239
241
  - lib/datadog/appsec/contrib/sinatra/patcher.rb
242
+ - lib/datadog/appsec/contrib/sinatra/patches/json_patch.rb
240
243
  - lib/datadog/appsec/contrib/sinatra/request_middleware.rb
241
244
  - lib/datadog/appsec/event.rb
242
245
  - lib/datadog/appsec/ext.rb
@@ -249,6 +252,7 @@ files:
249
252
  - lib/datadog/appsec/metrics/collector.rb
250
253
  - lib/datadog/appsec/metrics/exporter.rb
251
254
  - lib/datadog/appsec/metrics/telemetry.rb
255
+ - lib/datadog/appsec/metrics/telemetry_exporter.rb
252
256
  - lib/datadog/appsec/monitor.rb
253
257
  - lib/datadog/appsec/monitor/gateway/watcher.rb
254
258
  - lib/datadog/appsec/processor/rule_loader.rb
@@ -261,7 +265,10 @@ files:
261
265
  - lib/datadog/appsec/security_engine/result.rb
262
266
  - lib/datadog/appsec/security_engine/runner.rb
263
267
  - lib/datadog/appsec/security_event.rb
268
+ - lib/datadog/appsec/thread_safe_ref.rb
269
+ - lib/datadog/appsec/trace_keeper.rb
264
270
  - lib/datadog/appsec/utils.rb
271
+ - lib/datadog/appsec/utils/hash_coercion.rb
265
272
  - lib/datadog/appsec/utils/http.rb
266
273
  - lib/datadog/appsec/utils/http/media_range.rb
267
274
  - lib/datadog/appsec/utils/http/media_type.rb
@@ -441,6 +448,8 @@ files:
441
448
  - lib/datadog/di/preload.rb
442
449
  - lib/datadog/di/probe.rb
443
450
  - lib/datadog/di/probe_builder.rb
451
+ - lib/datadog/di/probe_file_loader.rb
452
+ - lib/datadog/di/probe_file_loader/railtie.rb
444
453
  - lib/datadog/di/probe_manager.rb
445
454
  - lib/datadog/di/probe_notification_builder.rb
446
455
  - lib/datadog/di/probe_notifier_worker.rb
@@ -995,8 +1004,8 @@ licenses:
995
1004
  - Apache-2.0
996
1005
  metadata:
997
1006
  allowed_push_host: https://rubygems.org
998
- changelog_uri: https://github.com/DataDog/dd-trace-rb/blob/v2.19.0/CHANGELOG.md
999
- source_code_uri: https://github.com/DataDog/dd-trace-rb/tree/v2.19.0
1007
+ changelog_uri: https://github.com/DataDog/dd-trace-rb/blob/v2.20.0/CHANGELOG.md
1008
+ source_code_uri: https://github.com/DataDog/dd-trace-rb/tree/v2.20.0
1000
1009
  post_install_message:
1001
1010
  rdoc_options: []
1002
1011
  require_paths: