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
@@ -9,7 +9,7 @@ module Datadog
9
9
  module MongoDB
10
10
  EXCLUDE_KEYS = [:_id].freeze
11
11
  SHOW_KEYS = [].freeze
12
- DEFAULT_OPTIONS = { exclude: EXCLUDE_KEYS, show: SHOW_KEYS }.freeze
12
+ DEFAULT_OPTIONS = {exclude: EXCLUDE_KEYS, show: SHOW_KEYS}.freeze
13
13
 
14
14
  module_function
15
15
 
@@ -72,7 +72,7 @@ module Datadog
72
72
 
73
73
  # set the resource with the quantized query
74
74
  span.resource = serialized_query
75
- rescue StandardError => e
75
+ rescue => e
76
76
  Datadog.logger.debug("error when handling MongoDB 'started' event: #{e}")
77
77
  end
78
78
  # rubocop:enable Metrics/AbcSize
@@ -84,12 +84,12 @@ module Datadog
84
84
  # the failure is not a real exception because it's handled by
85
85
  # the framework itself, so we set only the error and the message
86
86
  span.set_error(event)
87
- rescue StandardError => e
87
+ rescue => e
88
88
  Datadog.logger.debug("error when handling MongoDB 'failed' event: #{e}")
89
89
  ensure
90
90
  # whatever happens, the Span must be removed from the local storage and
91
91
  # it must be finished to prevent any leak
92
- span.finish unless span.nil?
92
+ span&.finish
93
93
  clear_span(event)
94
94
  end
95
95
 
@@ -100,12 +100,12 @@ module Datadog
100
100
  # add fields that are available only after executing the query
101
101
  rows = event.reply.fetch('n', nil)
102
102
  span.set_tag(Ext::TAG_ROWS, rows) unless rows.nil?
103
- rescue StandardError => e
103
+ rescue => e
104
104
  Datadog.logger.debug("error when handling MongoDB 'succeeded' event: #{e}")
105
105
  ensure
106
106
  # whatever happens, the Span must be removed from the local storage and
107
107
  # it must be finished to prevent any leak
108
- span.finish unless span.nil?
108
+ span&.finish
109
109
  clear_span(event)
110
110
  end
111
111
 
@@ -118,7 +118,7 @@ module Datadog
118
118
  # Incorrect Hash#to_s serialization. The Mongo command should only be encoded as JSON.
119
119
  # This code path should be removed, and is only kept to avoid a breaking change.
120
120
  Datadog::Core.log_deprecation(key: :mongo_json_command) do
121
- 'MongoDB integration: `json_command: false` causes invalid command serialization. '\
121
+ 'MongoDB integration: `json_command: false` causes invalid command serialization. ' \
122
122
  'Use `json_command: true` or `DD_TRACE_MONGO_JSON_COMMAND=1` instead.'
123
123
  end
124
124
 
@@ -20,7 +20,7 @@ module Datadog
20
20
  TAG_COMPONENT = 'mysql2'
21
21
  TAG_OPERATION_QUERY = 'query'
22
22
  TAG_SYSTEM = 'mysql'
23
- PEER_SERVICE_SOURCES = (Array[Ext::TAG_DB_NAME] + Contrib::Ext::DB::PEER_SERVICE_SOURCES).freeze
23
+ PEER_SERVICE_SOURCES = ([Ext::TAG_DB_NAME] + Contrib::Ext::DB::PEER_SERVICE_SOURCES).freeze
24
24
  end
25
25
  end
26
26
  end
@@ -18,7 +18,7 @@ module Datadog
18
18
  register_as :mysql2
19
19
 
20
20
  def self.version
21
- Gem.loaded_specs['mysql2'] && Gem.loaded_specs['mysql2'].version
21
+ Gem.loaded_specs['mysql2']&.version
22
22
  end
23
23
 
24
24
  def self.loaded?
@@ -56,7 +56,7 @@ module Datadog
56
56
 
57
57
  Datadog.logger.warn(
58
58
  "Invalid resource pattern: #{value}. " \
59
- "Supported values are: #{Ext::VALID_RESOURCE_PATTERNS.join(' | ')}. " \
59
+ "Supported values are: #{Ext::VALID_RESOURCE_PATTERNS.join(" | ")}. " \
60
60
  "Using default value: #{Ext::DEFAULT_RESOURCE_PATTERN}."
61
61
  )
62
62
 
@@ -36,10 +36,11 @@ module Datadog
36
36
  TAG_PORT = 'http.url_details.port'
37
37
  TAG_SCHEME = 'http.url_details.scheme'
38
38
  TAG_RESPONSE_CONTENT_LENGTH = 'http.response.content_length'
39
- PEER_SERVICE_SOURCES = Array[
39
+ PEER_SERVICE_SOURCES = [
40
40
  Tracing::Metadata::Ext::TAG_PEER_HOSTNAME,
41
41
  Tracing::Metadata::Ext::NET::TAG_DESTINATION_NAME,
42
- Tracing::Metadata::Ext::NET::TAG_TARGET_HOST,].freeze
42
+ Tracing::Metadata::Ext::NET::TAG_TARGET_HOST,
43
+ ].freeze
43
44
  end
44
45
  end
45
46
  end
@@ -21,8 +21,7 @@ module Datadog
21
21
  end
22
22
 
23
23
  def self.version
24
- Gem.loaded_specs['opensearch-ruby'] \
25
- && Gem.loaded_specs['opensearch-ruby'].version
24
+ Gem.loaded_specs['opensearch-ruby']&.version
26
25
  end
27
26
 
28
27
  def self.loaded?
@@ -34,79 +34,77 @@ module Datadog
34
34
  response = nil
35
35
  # rubocop:disable Metrics/BlockLength
36
36
  Tracing.trace('opensearch.query', service: datadog_configuration[:service_name]) do |span|
37
- begin
38
- # Set generic tags
39
- span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
40
- span.set_tag(Tracing::Metadata::Ext::TAG_KIND, Tracing::Metadata::Ext::SpanKind::TAG_CLIENT)
41
- span.set_tag(Contrib::Ext::DB::TAG_SYSTEM, Ext::TAG_SYSTEM)
42
-
43
- # Set argument tags
44
- span.set_tag(OpenSearch::Ext::TAG_METHOD, method)
45
- span.set_tag(OpenSearch::Ext::TAG_PATH, path)
46
-
47
- tag_params(params, span)
48
- tag_body(body, span)
49
-
50
- # Parse url
51
- original_url = transport.get_connection.full_url(path, {})
52
- url = URI.parse(original_url)
53
- host = url.host
54
- port = url.port
55
- scheme = url.scheme
56
- # Set url.user to nil to remove sensitive information (i.e. user's username and password)
57
- url.user = nil
58
-
59
- if datadog_configuration[:peer_service]
60
- span.set_tag(
61
- Tracing::Metadata::Ext::TAG_PEER_SERVICE,
62
- datadog_configuration[:peer_service]
63
- )
64
- end
37
+ # Set generic tags
38
+ span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
39
+ span.set_tag(Tracing::Metadata::Ext::TAG_KIND, Tracing::Metadata::Ext::SpanKind::TAG_CLIENT)
40
+ span.set_tag(Contrib::Ext::DB::TAG_SYSTEM, Ext::TAG_SYSTEM)
41
+
42
+ # Set argument tags
43
+ span.set_tag(OpenSearch::Ext::TAG_METHOD, method)
44
+ span.set_tag(OpenSearch::Ext::TAG_PATH, path)
45
+
46
+ tag_params(params, span)
47
+ tag_body(body, span)
48
+
49
+ # Parse url
50
+ original_url = transport.get_connection.full_url(path, {})
51
+ url = URI.parse(original_url)
52
+ host = url.host
53
+ port = url.port
54
+ scheme = url.scheme
55
+ # Set url.user to nil to remove sensitive information (i.e. user's username and password)
56
+ url.user = nil
57
+
58
+ if datadog_configuration[:peer_service]
59
+ span.set_tag(
60
+ Tracing::Metadata::Ext::TAG_PEER_SERVICE,
61
+ datadog_configuration[:peer_service]
62
+ )
63
+ end
65
64
 
66
- # Tag original global service name if not used
67
- if span.service != Datadog.configuration.service
68
- span.set_tag(Tracing::Contrib::Ext::Metadata::TAG_BASE_SERVICE, Datadog.configuration.service)
69
- end
65
+ # Tag original global service name if not used
66
+ if span.service != Datadog.configuration.service
67
+ span.set_tag(Tracing::Contrib::Ext::Metadata::TAG_BASE_SERVICE, Datadog.configuration.service)
68
+ end
70
69
 
71
- # Set url tags
72
- span.set_tag(OpenSearch::Ext::TAG_URL, url)
73
- span.set_tag(OpenSearch::Ext::TAG_HOST, host)
74
- span.set_tag(OpenSearch::Ext::TAG_PORT, port)
75
- span.set_tag(OpenSearch::Ext::TAG_SCHEME, scheme)
76
-
77
- span.set_tag(Tracing::Metadata::Ext::TAG_PEER_HOSTNAME, host) if host
78
-
79
- # Define span resource
80
- quantized_url = if datadog_configuration[:resource_pattern] == Ext::RELATIVE_RESOURCE_PATTERN
81
- OpenSearch::Quantize.format_url(url.path)
82
- else # Default to Ext::ABSOLUTE_RESOURCE_PATTERN
83
- OpenSearch::Quantize.format_url(url)
84
- end
85
- span.resource = "#{method} #{quantized_url}"
86
- Contrib::SpanAttributeSchema.set_peer_service!(span, Ext::PEER_SERVICE_SOURCES)
87
- rescue StandardError => e
88
- Datadog.logger.error(e.message)
89
- Datadog::Core::Telemetry::Logger.report(e)
90
- # TODO: Refactor the code to streamline the execution without ensure
91
- ensure
92
- begin
93
- response = super
94
- rescue => e
95
- status_code = ::OpenSearch::Transport::Transport::ERRORS.key(e.class)
96
- span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_STATUS_CODE, status_code) if status_code
97
- raise
70
+ # Set url tags
71
+ span.set_tag(OpenSearch::Ext::TAG_URL, url)
72
+ span.set_tag(OpenSearch::Ext::TAG_HOST, host)
73
+ span.set_tag(OpenSearch::Ext::TAG_PORT, port)
74
+ span.set_tag(OpenSearch::Ext::TAG_SCHEME, scheme)
75
+
76
+ span.set_tag(Tracing::Metadata::Ext::TAG_PEER_HOSTNAME, host) if host
77
+
78
+ # Define span resource
79
+ quantized_url = if datadog_configuration[:resource_pattern] == Ext::RELATIVE_RESOURCE_PATTERN
80
+ OpenSearch::Quantize.format_url(url.path)
81
+ else # Default to Ext::ABSOLUTE_RESOURCE_PATTERN
82
+ OpenSearch::Quantize.format_url(url)
83
+ end
84
+ span.resource = "#{method} #{quantized_url}"
85
+ Contrib::SpanAttributeSchema.set_peer_service!(span, Ext::PEER_SERVICE_SOURCES)
86
+ rescue => e
87
+ Datadog.logger.error(e.message)
88
+ Datadog::Core::Telemetry::Logger.report(e)
89
+ # TODO: Refactor the code to streamline the execution without ensure
90
+ ensure
91
+ begin
92
+ response = super
93
+ rescue => e
94
+ status_code = ::OpenSearch::Transport::Transport::ERRORS.key(e.class)
95
+ span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_STATUS_CODE, status_code) if status_code
96
+ raise
97
+ end
98
+ # Set post-response tags
99
+ if response
100
+ if response.respond_to?(:status)
101
+ span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_STATUS_CODE, response.status)
98
102
  end
99
- # Set post-response tags
100
- if response
101
- if response.respond_to?(:status)
102
- span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_STATUS_CODE, response.status)
103
- end
104
- if response.respond_to?(:headers) && (response.headers || {})['content-length']
105
- span.set_tag(
106
- OpenSearch::Ext::TAG_RESPONSE_CONTENT_LENGTH,
107
- response.headers['content-length'].to_i
108
- )
109
- end
103
+ if response.respond_to?(:headers) && (response.headers || {})['content-length']
104
+ span.set_tag(
105
+ OpenSearch::Ext::TAG_RESPONSE_CONTENT_LENGTH,
106
+ response.headers['content-length'].to_i
107
+ )
110
108
  end
111
109
  end
112
110
  end
@@ -28,7 +28,7 @@ module Datadog
28
28
  # Use Elasticsearch implementation
29
29
  def format_body(body, options = {})
30
30
  format_body!(body, options)
31
- rescue StandardError
31
+ rescue
32
32
  options[:placeholder] || DEFAULT_PLACEHOLDER
33
33
  end
34
34
 
@@ -51,10 +51,10 @@ module Datadog
51
51
  # Show
52
52
  # If either is :all, value becomes :all
53
53
  options[:show] = if original[:show] == :all || additional[:show] == :all
54
- :all
55
- else
56
- (original[:show] || []).dup.concat(additional[:show] || []).uniq
57
- end
54
+ :all
55
+ else
56
+ (original[:show] || []).dup.concat(additional[:show] || []).uniq
57
+ end
58
58
 
59
59
  # Exclude
60
60
  options[:exclude] = (original[:exclude] || []).dup.concat(additional[:exclude] || []).uniq
@@ -27,7 +27,7 @@ module Datadog
27
27
  end
28
28
 
29
29
  def patch_name
30
- self.class != Class && self.class != Module ? self.class.name : name
30
+ (self.class != Class && self.class != Module) ? self.class.name : name
31
31
  end
32
32
 
33
33
  def patched?
@@ -38,15 +38,13 @@ module Datadog
38
38
  return unless defined?(super)
39
39
 
40
40
  patch_only_once.run do
41
- begin
42
- super.tap do
43
- # Emit a metric
44
- Datadog.health_metrics.instrumentation_patched(1, tags: default_tags)
45
- @patch_successful = true
46
- end
47
- rescue StandardError => e
48
- on_patch_error(e)
41
+ super.tap do
42
+ # Emit a metric
43
+ Datadog.health_metrics.instrumentation_patched(1, tags: default_tags)
44
+ @patch_successful = true
49
45
  end
46
+ rescue => e
47
+ on_patch_error(e)
50
48
  end
51
49
  end
52
50
 
@@ -18,7 +18,7 @@ module Datadog
18
18
  register_as :pg
19
19
 
20
20
  def self.version
21
- Gem.loaded_specs['pg'] && Gem.loaded_specs['pg'].version
21
+ Gem.loaded_specs['pg']&.version
22
22
  end
23
23
 
24
24
  def self.loaded?
@@ -29,7 +29,7 @@ module Datadog
29
29
  TAG_OPERATION_QUERY = 'query'
30
30
  TAG_OPERATION_KILL = 'kill'
31
31
  TAG_SYSTEM = 'presto'
32
- PEER_SERVICE_SOURCES = (Array[Ext::TAG_SCHEMA_NAME] +
32
+ PEER_SERVICE_SOURCES = ([Ext::TAG_SCHEMA_NAME] +
33
33
  Contrib::Ext::DB::PEER_SERVICE_SOURCES).freeze
34
34
  end
35
35
  end
@@ -27,7 +27,7 @@ module Datadog
27
27
  span.resource = query
28
28
  span.type = Tracing::Metadata::Ext::SQL::TYPE
29
29
  span.set_tag(Ext::TAG_QUERY_ASYNC, false)
30
- rescue StandardError => e
30
+ rescue => e
31
31
  Datadog.logger.debug("error preparing span for presto: #{e}")
32
32
  end
33
33
 
@@ -45,7 +45,7 @@ module Datadog
45
45
  span.resource = query
46
46
  span.type = Tracing::Metadata::Ext::SQL::TYPE
47
47
  span.set_tag(Ext::TAG_QUERY_ASYNC, !blk.nil?)
48
- rescue StandardError => e
48
+ rescue => e
49
49
  Datadog.logger.debug("error preparing span for presto: #{e}")
50
50
  end
51
51
 
@@ -64,7 +64,7 @@ module Datadog
64
64
  span.type = Tracing::Metadata::Ext::AppTypes::TYPE_DB
65
65
  # ^ not an SQL type span, since there's no SQL query
66
66
  span.set_tag(Ext::TAG_QUERY_ID, query_id)
67
- rescue StandardError => e
67
+ rescue => e
68
68
  Datadog.logger.debug("error preparing span for presto: #{e}")
69
69
  end
70
70
 
@@ -21,7 +21,7 @@ module Datadog
21
21
  end
22
22
 
23
23
  def self.version
24
- Gem.loaded_specs['presto-client'] && Gem.loaded_specs['presto-client'].version
24
+ Gem.loaded_specs['presto-client']&.version
25
25
  end
26
26
 
27
27
  def self.loaded?
@@ -15,7 +15,7 @@ module Datadog
15
15
 
16
16
  def to_s
17
17
  @string ||= begin
18
- ret = String.new
18
+ ret = +''
19
19
 
20
20
  @hash.each do |key, value|
21
21
  next if value.nil?
@@ -48,7 +48,7 @@ module Datadog
48
48
  Tracing::Distributed::TraceContext.new(fetcher: nil).send(:build_traceparent, trace_op.to_digest)
49
49
  else
50
50
  Datadog.logger.warn(
51
- 'Sql comment propagation with `full` mode is aborted, because tracing is disabled. '\
51
+ 'Sql comment propagation with `full` mode is aborted, because tracing is disabled. ' \
52
52
  'Please set `Datadog.configuration.tracing.enabled = true` to continue.'
53
53
  )
54
54
  end
@@ -19,7 +19,7 @@ module Datadog
19
19
  register_as :que, auto_patch: true
20
20
 
21
21
  def self.version
22
- Gem.loaded_specs['que'] && Gem.loaded_specs['que'].version
22
+ Gem.loaded_specs['que']&.version
23
23
  end
24
24
 
25
25
  def self.loaded?
@@ -26,7 +26,7 @@ module Datadog
26
26
  end
27
27
 
28
28
  def span_options
29
- { service: configuration[:service_name] }
29
+ {service: configuration[:service_name]}
30
30
  end
31
31
 
32
32
  def configuration
@@ -26,8 +26,8 @@ module Datadog
26
26
 
27
27
  def span_options
28
28
  super.merge(
29
- tags: { Tracing::Metadata::Ext::TAG_OPERATION => Ext::TAG_OPERATION_BATCH,
30
- Tracing::Metadata::Ext::TAG_KIND => Tracing::Metadata::Ext::SpanKind::TAG_CONSUMER }
29
+ tags: {Tracing::Metadata::Ext::TAG_OPERATION => Ext::TAG_OPERATION_BATCH,
30
+ Tracing::Metadata::Ext::TAG_KIND => Tracing::Metadata::Ext::SpanKind::TAG_CONSUMER}
31
31
  )
32
32
  end
33
33
  end
@@ -25,7 +25,7 @@ module Datadog
25
25
  end
26
26
 
27
27
  def span_options
28
- super.merge(tags: { Tracing::Metadata::Ext::TAG_OPERATION => Ext::TAG_OPERATION_CONSUME })
28
+ super.merge(tags: {Tracing::Metadata::Ext::TAG_OPERATION => Ext::TAG_OPERATION_CONSUME})
29
29
  end
30
30
  end
31
31
  end
@@ -26,8 +26,8 @@ module Datadog
26
26
 
27
27
  def span_options
28
28
  super.merge(
29
- tags: { Tracing::Metadata::Ext::TAG_OPERATION => Ext::TAG_OPERATION_MESSAGE,
30
- Tracing::Metadata::Ext::TAG_KIND => Tracing::Metadata::Ext::SpanKind::TAG_CONSUMER }
29
+ tags: {Tracing::Metadata::Ext::TAG_OPERATION => Ext::TAG_OPERATION_MESSAGE,
30
+ Tracing::Metadata::Ext::TAG_KIND => Tracing::Metadata::Ext::SpanKind::TAG_CONSUMER}
31
31
  )
32
32
  end
33
33
  end
@@ -18,7 +18,7 @@ module Datadog
18
18
  register_as :racecar, auto_patch: false
19
19
 
20
20
  def self.version
21
- Gem.loaded_specs['racecar'] && Gem.loaded_specs['racecar'].version
21
+ Gem.loaded_specs['racecar']&.version
22
22
  end
23
23
 
24
24
  def self.loaded?
@@ -22,7 +22,7 @@ module Datadog
22
22
  end
23
23
 
24
24
  # Allows this class to have a similar API to a {Hash}.
25
- alias [] get
25
+ alias_method :[], :get
26
26
 
27
27
  # Tests whether a header with the given name exists in the environment.
28
28
  def key?(header_name)
@@ -12,17 +12,17 @@ module Datadog
12
12
 
13
13
  # Use global DD_TRACE_HEADER_TAGS if integration-level configuration is not provided
14
14
  tags = if configuration.using_default?(:headers) && !Datadog.configuration.tracing.using_default?(:header_tags)
15
- Datadog.configuration.tracing.header_tags.request_tags(headers)
16
- else
17
- whitelist = configuration[:headers][:request] || []
18
- whitelist.each_with_object({}) do |header, result|
19
- header_value = headers.get(header)
20
- unless header_value.nil?
21
- header_tag = Tracing::Metadata::Ext::HTTP::RequestHeaders.to_tag(header)
22
- result[header_tag] = header_value
23
- end
24
- end
25
- end
15
+ Datadog.configuration.tracing.header_tags.request_tags(headers)
16
+ else
17
+ whitelist = configuration[:headers][:request] || []
18
+ whitelist.each_with_object({}) do |header, result|
19
+ header_value = headers.get(header)
20
+ unless header_value.nil?
21
+ header_tag = Tracing::Metadata::Ext::HTTP::RequestHeaders.to_tag(header)
22
+ result[header_tag] = header_value
23
+ end
24
+ end
25
+ end
26
26
 
27
27
  span.set_tags(tags)
28
28
  end
@@ -32,27 +32,27 @@ module Datadog
32
32
 
33
33
  # Use global DD_TRACE_HEADER_TAGS if integration-level configuration is not provided
34
34
  tags = if configuration.using_default?(:headers) && !Datadog.configuration.tracing.using_default?(:header_tags)
35
- Datadog.configuration.tracing.header_tags.response_tags(headers)
36
- else
37
- whitelist = configuration[:headers][:response] || []
38
- whitelist.each_with_object({}) do |header, result|
39
- header_value = headers[header]
40
-
41
- next if header_value.nil?
42
-
43
- header_tag = Tracing::Metadata::Ext::HTTP::ResponseHeaders.to_tag(header)
44
-
45
- # Maintain the value format between Rack 2 and 3
46
- #
47
- # Rack 2.x => { 'foo' => 'bar,baz' }
48
- # Rack 3.x => { 'foo' => ['bar', 'baz'] }
49
- result[header_tag] = if header_value.is_a? Array
50
- header_value.join(',')
51
- else
52
- header_value
53
- end
54
- end
55
- end
35
+ Datadog.configuration.tracing.header_tags.response_tags(headers)
36
+ else
37
+ whitelist = configuration[:headers][:response] || []
38
+ whitelist.each_with_object({}) do |header, result|
39
+ header_value = headers[header]
40
+
41
+ next if header_value.nil?
42
+
43
+ header_tag = Tracing::Metadata::Ext::HTTP::ResponseHeaders.to_tag(header)
44
+
45
+ # Maintain the value format between Rack 2 and 3
46
+ #
47
+ # Rack 2.x => { 'foo' => 'bar,baz' }
48
+ # Rack 3.x => { 'foo' => ['bar', 'baz'] }
49
+ result[header_tag] = if header_value.is_a? Array
50
+ header_value.join(',')
51
+ else
52
+ header_value
53
+ end
54
+ end
55
+ end
56
56
 
57
57
  span.set_tags(tags)
58
58
  end
@@ -19,7 +19,7 @@ module Datadog
19
19
  register_as :rack, auto_patch: false
20
20
 
21
21
  def self.version
22
- Gem.loaded_specs['rack'] && Gem.loaded_specs['rack'].version
22
+ Gem.loaded_specs['rack']&.version
23
23
  end
24
24
 
25
25
  def self.loaded?
@@ -47,7 +47,7 @@ module Datadog
47
47
  end
48
48
 
49
49
  TraceProxyMiddleware.call(env, configuration) do
50
- trace_options = { type: Tracing::Metadata::Ext::HTTP::TYPE_INBOUND }
50
+ trace_options = {type: Tracing::Metadata::Ext::HTTP::TYPE_INBOUND}
51
51
  trace_options[:service] = configuration[:service_name] if configuration[:service_name]
52
52
 
53
53
  # start a new request span and attach it to the current Rack environment;
@@ -80,7 +80,7 @@ module Datadog
80
80
  # catch exceptions that may be raised in the middleware chain
81
81
  # Note: if a middleware catches an Exception without re raising,
82
82
  # the Exception cannot be recorded here.
83
- request_span.set_error(e) unless request_span.nil?
83
+ request_span&.set_error(e)
84
84
  raise e
85
85
  ensure
86
86
  env[Ext::RACK_ENV_REQUEST_SPAN] = previous_request_span if previous_request_span
@@ -123,7 +123,7 @@ module Datadog
123
123
  # 4. Fallback with verb + status, eq `GET 200`
124
124
  request_span.resource ||=
125
125
  if configuration[:middleware_names] && env['RESPONSE_MIDDLEWARE']
126
- "#{env['RESPONSE_MIDDLEWARE']}##{original_request_method}"
126
+ "#{env["RESPONSE_MIDDLEWARE"]}##{original_request_method}"
127
127
  elsif trace.resource_override?
128
128
  trace.resource
129
129
  else
@@ -240,16 +240,18 @@ module Datadog
240
240
  Datadog.configuration.tracing[:rack]
241
241
  end
242
242
 
243
+ # rubocop:disable Metrics/AbcSize
244
+ # rubocop:disable Metrics/MethodLength
243
245
  def parse_url(env, original_env)
244
246
  request_obj = ::Rack::Request.new(env)
245
247
 
246
248
  # scheme, host, and port
247
249
  base_url = if request_obj.respond_to?(:base_url)
248
- request_obj.base_url
249
- else
250
- # Compatibility for older Rack versions
251
- request_obj.url.chomp(request_obj.fullpath)
252
- end
250
+ request_obj.base_url
251
+ else
252
+ # Compatibility for older Rack versions
253
+ request_obj.url.chomp(request_obj.fullpath)
254
+ end
253
255
 
254
256
  # https://github.com/rack/rack/blob/main/SPEC.rdoc
255
257
  #
@@ -269,18 +271,20 @@ module Datadog
269
271
  # prepended to PATH_INFO to reflect the correct user visible path.
270
272
  request_uri = env['REQUEST_URI'].to_s
271
273
  fullpath = if request_uri.empty?
272
- query_string = original_env['QUERY_STRING'].to_s
273
- path = original_env['SCRIPT_NAME'].to_s + original_env['PATH_INFO'].to_s
274
-
275
- query_string.empty? ? path : "#{path}?#{query_string}"
276
- else
277
- # normally REQUEST_URI starts at the path, but it
278
- # might contain the full URL in some cases (e.g WEBrick)
279
- request_uri.delete_prefix(base_url)
280
- end
274
+ query_string = original_env['QUERY_STRING'].to_s
275
+ path = original_env['SCRIPT_NAME'].to_s + original_env['PATH_INFO'].to_s
276
+
277
+ query_string.empty? ? path : "#{path}?#{query_string}"
278
+ else
279
+ # normally REQUEST_URI starts at the path, but it
280
+ # might contain the full URL in some cases (e.g WEBrick)
281
+ request_uri.delete_prefix(base_url)
282
+ end
281
283
 
282
284
  base_url + fullpath
283
285
  end
286
+ # rubocop:enable Metrics/AbcSize
287
+ # rubocop:enable Metrics/MethodLength
284
288
 
285
289
  def parse_user_agent_header(headers)
286
290
  headers.get(Tracing::Metadata::Ext::HTTP::HEADER_USER_AGENT)