datadog 2.18.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 (297) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +73 -1
  3. data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +51 -10
  4. data/ext/datadog_profiling_native_extension/collectors_stack.c +58 -49
  5. data/ext/datadog_profiling_native_extension/collectors_stack.h +2 -1
  6. data/ext/datadog_profiling_native_extension/collectors_thread_context.c +5 -6
  7. data/ext/datadog_profiling_native_extension/collectors_thread_context.h +1 -1
  8. data/ext/datadog_profiling_native_extension/private_vm_api_access.c +37 -26
  9. data/ext/datadog_profiling_native_extension/private_vm_api_access.h +0 -1
  10. data/ext/datadog_profiling_native_extension/ruby_helpers.h +1 -1
  11. data/ext/libdatadog_api/extconf.rb +3 -1
  12. data/ext/libdatadog_extconf_helpers.rb +13 -3
  13. data/lib/datadog/appsec/api_security/route_extractor.rb +7 -1
  14. data/lib/datadog/appsec/component.rb +3 -13
  15. data/lib/datadog/appsec/context.rb +23 -0
  16. data/lib/datadog/appsec/contrib/devise/patches/signin_tracking_patch.rb +2 -1
  17. data/lib/datadog/appsec/contrib/devise/patches/signup_tracking_patch.rb +2 -1
  18. data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +0 -1
  19. data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +0 -1
  20. data/lib/datadog/appsec/contrib/rack/request_middleware.rb +14 -22
  21. data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +23 -2
  22. data/lib/datadog/appsec/contrib/rails/patcher.rb +14 -26
  23. data/lib/datadog/appsec/contrib/rails/patches/process_action_patch.rb +27 -0
  24. data/lib/datadog/appsec/contrib/rails/patches/render_to_body_patch.rb +33 -0
  25. data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +0 -1
  26. data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +23 -0
  27. data/lib/datadog/appsec/contrib/sinatra/patcher.rb +8 -18
  28. data/lib/datadog/appsec/contrib/sinatra/patches/json_patch.rb +31 -0
  29. data/lib/datadog/appsec/event.rb +3 -18
  30. data/lib/datadog/appsec/instrumentation/gateway/argument.rb +17 -1
  31. data/lib/datadog/appsec/metrics/collector.rb +7 -3
  32. data/lib/datadog/appsec/metrics/telemetry.rb +1 -1
  33. data/lib/datadog/appsec/metrics/telemetry_exporter.rb +28 -0
  34. data/lib/datadog/appsec/metrics.rb +1 -0
  35. data/lib/datadog/appsec/security_engine/engine.rb +14 -32
  36. data/lib/datadog/appsec/security_engine/result.rb +16 -0
  37. data/lib/datadog/appsec/security_engine/runner.rb +18 -4
  38. data/lib/datadog/appsec/thread_safe_ref.rb +61 -0
  39. data/lib/datadog/appsec/trace_keeper.rb +24 -0
  40. data/lib/datadog/appsec/utils/hash_coercion.rb +23 -0
  41. data/lib/datadog/appsec.rb +0 -7
  42. data/lib/datadog/auto_instrument_base.rb +2 -1
  43. data/lib/datadog/core/configuration/option.rb +29 -20
  44. data/lib/datadog/core/configuration/option_definition.rb +2 -2
  45. data/lib/datadog/core/configuration/options.rb +13 -7
  46. data/lib/datadog/core/configuration/settings.rb +20 -0
  47. data/lib/datadog/core/telemetry/component.rb +8 -4
  48. data/lib/datadog/core/telemetry/event/app_started.rb +21 -3
  49. data/lib/datadog/di/boot.rb +7 -0
  50. data/lib/datadog/di/component.rb +7 -0
  51. data/lib/datadog/di/instrumenter.rb +11 -18
  52. data/lib/datadog/di/probe_file_loader/railtie.rb +15 -0
  53. data/lib/datadog/di/probe_file_loader.rb +82 -0
  54. data/lib/datadog/di/probe_notification_builder.rb +21 -16
  55. data/lib/datadog/di/remote.rb +3 -5
  56. data/lib/datadog/di/serializer.rb +6 -2
  57. data/lib/datadog/di.rb +0 -7
  58. data/lib/datadog/kit/appsec/events/v2.rb +196 -0
  59. data/lib/datadog/kit/appsec/events.rb +11 -10
  60. data/lib/datadog/kit/identity.rb +17 -11
  61. data/lib/datadog/opentelemetry/api/baggage.rb +2 -2
  62. data/lib/datadog/opentelemetry/api/context.rb +10 -9
  63. data/lib/datadog/opentelemetry/sdk/propagator.rb +4 -4
  64. data/lib/datadog/opentelemetry/sdk/span_processor.rb +8 -8
  65. data/lib/datadog/opentelemetry/sdk/trace/span.rb +14 -10
  66. data/lib/datadog/opentelemetry/trace.rb +4 -4
  67. data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +2 -0
  68. data/lib/datadog/profiling/collectors/info.rb +41 -0
  69. data/lib/datadog/profiling/component.rb +1 -0
  70. data/lib/datadog/profiling/exporter.rb +9 -3
  71. data/lib/datadog/profiling/sequence_tracker.rb +44 -0
  72. data/lib/datadog/profiling/tag_builder.rb +2 -0
  73. data/lib/datadog/profiling.rb +7 -8
  74. data/lib/datadog/single_step_instrument.rb +9 -0
  75. data/lib/datadog/tracing/analytics.rb +1 -1
  76. data/lib/datadog/tracing/buffer.rb +7 -7
  77. data/lib/datadog/tracing/configuration/dynamic.rb +4 -6
  78. data/lib/datadog/tracing/configuration/ext.rb +3 -2
  79. data/lib/datadog/tracing/configuration/settings.rb +17 -0
  80. data/lib/datadog/tracing/context.rb +2 -2
  81. data/lib/datadog/tracing/contrib/action_cable/event.rb +1 -1
  82. data/lib/datadog/tracing/contrib/action_cable/integration.rb +1 -1
  83. data/lib/datadog/tracing/contrib/action_mailer/integration.rb +1 -1
  84. data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +4 -4
  85. data/lib/datadog/tracing/contrib/action_pack/integration.rb +1 -1
  86. data/lib/datadog/tracing/contrib/action_view/events/render_template.rb +1 -1
  87. data/lib/datadog/tracing/contrib/active_job/event.rb +8 -8
  88. data/lib/datadog/tracing/contrib/active_job/events/discard.rb +1 -1
  89. data/lib/datadog/tracing/contrib/active_job/events/enqueue.rb +1 -1
  90. data/lib/datadog/tracing/contrib/active_job/events/enqueue_at.rb +1 -1
  91. data/lib/datadog/tracing/contrib/active_job/events/enqueue_retry.rb +1 -1
  92. data/lib/datadog/tracing/contrib/active_job/events/perform.rb +1 -1
  93. data/lib/datadog/tracing/contrib/active_job/events/retry_stopped.rb +1 -1
  94. data/lib/datadog/tracing/contrib/active_job/integration.rb +1 -1
  95. data/lib/datadog/tracing/contrib/active_model_serializers/events/render.rb +1 -1
  96. data/lib/datadog/tracing/contrib/active_model_serializers/events/serialize.rb +3 -3
  97. data/lib/datadog/tracing/contrib/active_model_serializers/integration.rb +1 -2
  98. data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +1 -1
  99. data/lib/datadog/tracing/contrib/active_record/events/instantiation.rb +1 -1
  100. data/lib/datadog/tracing/contrib/active_record/events/sql.rb +5 -5
  101. data/lib/datadog/tracing/contrib/active_record/integration.rb +1 -1
  102. data/lib/datadog/tracing/contrib/active_record/utils.rb +15 -15
  103. data/lib/datadog/tracing/contrib/active_support/cache/events/cache.rb +13 -7
  104. data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +13 -0
  105. data/lib/datadog/tracing/contrib/active_support/integration.rb +1 -1
  106. data/lib/datadog/tracing/contrib/active_support/notifications/event.rb +2 -1
  107. data/lib/datadog/tracing/contrib/active_support/notifications/subscription.rb +7 -9
  108. data/lib/datadog/tracing/contrib/aws/ext.rb +1 -1
  109. data/lib/datadog/tracing/contrib/aws/instrumentation.rb +2 -2
  110. data/lib/datadog/tracing/contrib/aws/parsed_context.rb +3 -1
  111. data/lib/datadog/tracing/contrib/aws/patcher.rb +5 -1
  112. data/lib/datadog/tracing/contrib/aws/service/base.rb +2 -1
  113. data/lib/datadog/tracing/contrib/aws/service/dynamodb.rb +1 -1
  114. data/lib/datadog/tracing/contrib/aws/service/eventbridge.rb +1 -1
  115. data/lib/datadog/tracing/contrib/aws/service/kinesis.rb +1 -1
  116. data/lib/datadog/tracing/contrib/aws/service/s3.rb +1 -1
  117. data/lib/datadog/tracing/contrib/aws/service/sns.rb +1 -1
  118. data/lib/datadog/tracing/contrib/aws/service/sqs.rb +1 -1
  119. data/lib/datadog/tracing/contrib/aws/service/states.rb +1 -1
  120. data/lib/datadog/tracing/contrib/aws/services.rb +7 -7
  121. data/lib/datadog/tracing/contrib/concurrent_ruby/async_patch.rb +1 -1
  122. data/lib/datadog/tracing/contrib/concurrent_ruby/context_composite_executor_service.rb +1 -1
  123. data/lib/datadog/tracing/contrib/concurrent_ruby/future_patch.rb +1 -1
  124. data/lib/datadog/tracing/contrib/concurrent_ruby/integration.rb +1 -1
  125. data/lib/datadog/tracing/contrib/concurrent_ruby/promises_future_patch.rb +1 -1
  126. data/lib/datadog/tracing/contrib/configurable.rb +6 -6
  127. data/lib/datadog/tracing/contrib/configuration/resolvers/pattern_resolver.rb +4 -4
  128. data/lib/datadog/tracing/contrib/dalli/ext.rb +3 -2
  129. data/lib/datadog/tracing/contrib/dalli/integration.rb +1 -1
  130. data/lib/datadog/tracing/contrib/delayed_job/integration.rb +1 -1
  131. data/lib/datadog/tracing/contrib/elasticsearch/ext.rb +3 -2
  132. data/lib/datadog/tracing/contrib/elasticsearch/integration.rb +4 -4
  133. data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +51 -53
  134. data/lib/datadog/tracing/contrib/elasticsearch/quantize.rb +5 -5
  135. data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +2 -2
  136. data/lib/datadog/tracing/contrib/ethon/ext.rb +3 -2
  137. data/lib/datadog/tracing/contrib/ethon/integration.rb +1 -1
  138. data/lib/datadog/tracing/contrib/excon/ext.rb +3 -2
  139. data/lib/datadog/tracing/contrib/excon/integration.rb +1 -1
  140. data/lib/datadog/tracing/contrib/excon/middleware.rb +2 -2
  141. data/lib/datadog/tracing/contrib/ext.rb +3 -3
  142. data/lib/datadog/tracing/contrib/extensions.rb +9 -9
  143. data/lib/datadog/tracing/contrib/faraday/ext.rb +3 -2
  144. data/lib/datadog/tracing/contrib/faraday/integration.rb +1 -1
  145. data/lib/datadog/tracing/contrib/faraday/middleware.rb +4 -2
  146. data/lib/datadog/tracing/contrib/grape/endpoint.rb +8 -8
  147. data/lib/datadog/tracing/contrib/grape/integration.rb +1 -1
  148. data/lib/datadog/tracing/contrib/graphql/integration.rb +1 -1
  149. data/lib/datadog/tracing/contrib/graphql/patcher.rb +2 -2
  150. data/lib/datadog/tracing/contrib/graphql/unified_trace.rb +24 -24
  151. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +8 -8
  152. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +3 -3
  153. data/lib/datadog/tracing/contrib/grpc/distributed/fetcher.rb +1 -1
  154. data/lib/datadog/tracing/contrib/grpc/integration.rb +1 -1
  155. data/lib/datadog/tracing/contrib/hanami/ext.rb +2 -2
  156. data/lib/datadog/tracing/contrib/hanami/integration.rb +1 -1
  157. data/lib/datadog/tracing/contrib/hanami/renderer_policy_tracing.rb +1 -1
  158. data/lib/datadog/tracing/contrib/hanami/router_tracing.rb +9 -11
  159. data/lib/datadog/tracing/contrib/http/distributed/fetcher.rb +4 -4
  160. data/lib/datadog/tracing/contrib/http/ext.rb +3 -2
  161. data/lib/datadog/tracing/contrib/http/instrumentation.rb +5 -5
  162. data/lib/datadog/tracing/contrib/httpclient/ext.rb +3 -2
  163. data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +3 -3
  164. data/lib/datadog/tracing/contrib/httpclient/integration.rb +1 -1
  165. data/lib/datadog/tracing/contrib/httprb/ext.rb +3 -2
  166. data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +4 -4
  167. data/lib/datadog/tracing/contrib/httprb/integration.rb +1 -1
  168. data/lib/datadog/tracing/contrib/kafka/event.rb +1 -1
  169. data/lib/datadog/tracing/contrib/kafka/events/connection/request.rb +1 -1
  170. data/lib/datadog/tracing/contrib/kafka/events/consumer/process_batch.rb +1 -1
  171. data/lib/datadog/tracing/contrib/kafka/events/consumer/process_message.rb +1 -1
  172. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/heartbeat.rb +1 -1
  173. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/join_group.rb +1 -1
  174. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/leave_group.rb +1 -1
  175. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/sync_group.rb +1 -1
  176. data/lib/datadog/tracing/contrib/kafka/events/produce_operation/send_messages.rb +1 -1
  177. data/lib/datadog/tracing/contrib/kafka/events/producer/deliver_messages.rb +1 -1
  178. data/lib/datadog/tracing/contrib/kafka/integration.rb +1 -1
  179. data/lib/datadog/tracing/contrib/karafka/monitor.rb +13 -13
  180. data/lib/datadog/tracing/contrib/karafka/patcher.rb +4 -4
  181. data/lib/datadog/tracing/contrib/lograge/instrumentation.rb +1 -1
  182. data/lib/datadog/tracing/contrib/lograge/integration.rb +1 -1
  183. data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +1 -1
  184. data/lib/datadog/tracing/contrib/mongodb/ext.rb +1 -1
  185. data/lib/datadog/tracing/contrib/mongodb/integration.rb +1 -1
  186. data/lib/datadog/tracing/contrib/mongodb/parsers.rb +1 -1
  187. data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +6 -6
  188. data/lib/datadog/tracing/contrib/mysql2/ext.rb +1 -1
  189. data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +16 -6
  190. data/lib/datadog/tracing/contrib/mysql2/integration.rb +1 -1
  191. data/lib/datadog/tracing/contrib/opensearch/configuration/settings.rb +1 -1
  192. data/lib/datadog/tracing/contrib/opensearch/ext.rb +3 -2
  193. data/lib/datadog/tracing/contrib/opensearch/integration.rb +1 -2
  194. data/lib/datadog/tracing/contrib/opensearch/patcher.rb +68 -70
  195. data/lib/datadog/tracing/contrib/opensearch/quantize.rb +5 -5
  196. data/lib/datadog/tracing/contrib/patcher.rb +7 -9
  197. data/lib/datadog/tracing/contrib/pg/integration.rb +1 -1
  198. data/lib/datadog/tracing/contrib/presto/ext.rb +1 -1
  199. data/lib/datadog/tracing/contrib/presto/instrumentation.rb +3 -3
  200. data/lib/datadog/tracing/contrib/presto/integration.rb +1 -1
  201. data/lib/datadog/tracing/contrib/propagation/sql_comment/comment.rb +1 -1
  202. data/lib/datadog/tracing/contrib/propagation/sql_comment.rb +1 -1
  203. data/lib/datadog/tracing/contrib/que/integration.rb +1 -1
  204. data/lib/datadog/tracing/contrib/racecar/event.rb +1 -1
  205. data/lib/datadog/tracing/contrib/racecar/events/batch.rb +2 -2
  206. data/lib/datadog/tracing/contrib/racecar/events/consume.rb +1 -1
  207. data/lib/datadog/tracing/contrib/racecar/events/message.rb +2 -2
  208. data/lib/datadog/tracing/contrib/racecar/integration.rb +1 -1
  209. data/lib/datadog/tracing/contrib/rack/header_collection.rb +1 -1
  210. data/lib/datadog/tracing/contrib/rack/header_tagging.rb +32 -32
  211. data/lib/datadog/tracing/contrib/rack/integration.rb +1 -1
  212. data/lib/datadog/tracing/contrib/rack/middlewares.rb +21 -17
  213. data/lib/datadog/tracing/contrib/rack/patcher.rb +1 -1
  214. data/lib/datadog/tracing/contrib/rack/request_queue.rb +2 -2
  215. data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +1 -1
  216. data/lib/datadog/tracing/contrib/rails/integration.rb +1 -1
  217. data/lib/datadog/tracing/contrib/rails/log_injection.rb +1 -1
  218. data/lib/datadog/tracing/contrib/rails/middlewares.rb +1 -1
  219. data/lib/datadog/tracing/contrib/rails/patcher.rb +4 -1
  220. data/lib/datadog/tracing/contrib/rails/runner.rb +62 -40
  221. data/lib/datadog/tracing/contrib/rake/instrumentation.rb +4 -4
  222. data/lib/datadog/tracing/contrib/rake/integration.rb +1 -1
  223. data/lib/datadog/tracing/contrib/redis/configuration/resolver.rb +2 -2
  224. data/lib/datadog/tracing/contrib/redis/ext.rb +3 -2
  225. data/lib/datadog/tracing/contrib/redis/integration.rb +2 -2
  226. data/lib/datadog/tracing/contrib/redis/patcher.rb +4 -4
  227. data/lib/datadog/tracing/contrib/redis/quantize.rb +1 -1
  228. data/lib/datadog/tracing/contrib/redis/tags.rb +1 -1
  229. data/lib/datadog/tracing/contrib/redis/trace_middleware.rb +4 -4
  230. data/lib/datadog/tracing/contrib/registry.rb +1 -1
  231. data/lib/datadog/tracing/contrib/resque/integration.rb +1 -1
  232. data/lib/datadog/tracing/contrib/resque/resque_job.rb +1 -1
  233. data/lib/datadog/tracing/contrib/rest_client/ext.rb +3 -2
  234. data/lib/datadog/tracing/contrib/rest_client/integration.rb +1 -1
  235. data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +3 -3
  236. data/lib/datadog/tracing/contrib/roda/instrumentation.rb +1 -1
  237. data/lib/datadog/tracing/contrib/roda/integration.rb +1 -1
  238. data/lib/datadog/tracing/contrib/semantic_logger/instrumentation.rb +1 -1
  239. data/lib/datadog/tracing/contrib/semantic_logger/integration.rb +1 -1
  240. data/lib/datadog/tracing/contrib/sequel/database.rb +5 -5
  241. data/lib/datadog/tracing/contrib/sequel/dataset.rb +1 -1
  242. data/lib/datadog/tracing/contrib/sequel/integration.rb +1 -1
  243. data/lib/datadog/tracing/contrib/sequel/utils.rb +1 -1
  244. data/lib/datadog/tracing/contrib/shoryuken/integration.rb +1 -1
  245. data/lib/datadog/tracing/contrib/sidekiq/integration.rb +1 -1
  246. data/lib/datadog/tracing/contrib/sidekiq/utils.rb +1 -1
  247. data/lib/datadog/tracing/contrib/sinatra/integration.rb +1 -1
  248. data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +38 -40
  249. data/lib/datadog/tracing/contrib/sneakers/integration.rb +1 -1
  250. data/lib/datadog/tracing/contrib/stripe/integration.rb +1 -1
  251. data/lib/datadog/tracing/contrib/stripe/request.rb +1 -1
  252. data/lib/datadog/tracing/contrib/sucker_punch/integration.rb +1 -1
  253. data/lib/datadog/tracing/contrib/trilogy/ext.rb +1 -1
  254. data/lib/datadog/tracing/contrib/trilogy/integration.rb +1 -1
  255. data/lib/datadog/tracing/contrib/utils/quantization/hash.rb +11 -11
  256. data/lib/datadog/tracing/contrib/utils/quantization/http.rb +6 -6
  257. data/lib/datadog/tracing/diagnostics/environment_logger.rb +8 -2
  258. data/lib/datadog/tracing/distributed/b3_single.rb +1 -1
  259. data/lib/datadog/tracing/distributed/baggage.rb +73 -8
  260. data/lib/datadog/tracing/distributed/datadog.rb +4 -5
  261. data/lib/datadog/tracing/distributed/datadog_tags_codec.rb +11 -13
  262. data/lib/datadog/tracing/distributed/helpers.rb +1 -1
  263. data/lib/datadog/tracing/distributed/none.rb +4 -2
  264. data/lib/datadog/tracing/distributed/propagation.rb +4 -1
  265. data/lib/datadog/tracing/distributed/propagation_policy.rb +1 -1
  266. data/lib/datadog/tracing/distributed/trace_context.rb +22 -16
  267. data/lib/datadog/tracing/event.rb +5 -7
  268. data/lib/datadog/tracing/flush.rb +1 -1
  269. data/lib/datadog/tracing/metadata/analytics.rb +1 -1
  270. data/lib/datadog/tracing/metadata/tagging.rb +4 -4
  271. data/lib/datadog/tracing/pipeline/span_filter.rb +3 -1
  272. data/lib/datadog/tracing/pipeline/span_processor.rb +3 -1
  273. data/lib/datadog/tracing/pipeline.rb +1 -1
  274. data/lib/datadog/tracing/sampling/ext.rb +0 -2
  275. data/lib/datadog/tracing/sampling/rule_sampler.rb +30 -30
  276. data/lib/datadog/tracing/sampling/span/rule_parser.rb +1 -1
  277. data/lib/datadog/tracing/sampling/span/sampler.rb +0 -7
  278. data/lib/datadog/tracing/span.rb +1 -1
  279. data/lib/datadog/tracing/span_event.rb +10 -10
  280. data/lib/datadog/tracing/span_link.rb +12 -12
  281. data/lib/datadog/tracing/span_operation.rb +31 -11
  282. data/lib/datadog/tracing/trace_digest.rb +21 -23
  283. data/lib/datadog/tracing/trace_operation.rb +84 -88
  284. data/lib/datadog/tracing/trace_segment.rb +2 -2
  285. data/lib/datadog/tracing/tracer.rb +36 -38
  286. data/lib/datadog/tracing/transport/http/client.rb +1 -1
  287. data/lib/datadog/tracing/transport/http/traces.rb +2 -2
  288. data/lib/datadog/tracing/transport/io/client.rb +5 -5
  289. data/lib/datadog/tracing/transport/io/traces.rb +4 -4
  290. data/lib/datadog/tracing/transport/statistics.rb +1 -1
  291. data/lib/datadog/tracing/transport/traces.rb +5 -5
  292. data/lib/datadog/tracing/workers/trace_writer.rb +12 -12
  293. data/lib/datadog/tracing/workers.rb +2 -2
  294. data/lib/datadog/tracing.rb +2 -2
  295. data/lib/datadog/version.rb +1 -1
  296. data/lib/datadog.rb +7 -0
  297. metadata +17 -6
@@ -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)
@@ -45,7 +45,7 @@ module Datadog
45
45
  end
46
46
 
47
47
  def retain_middleware_name(middleware)
48
- return unless middleware && middleware.respond_to?(:call)
48
+ return unless middleware&.respond_to?(:call)
49
49
 
50
50
  middleware.singleton_class.class_eval do
51
51
  alias_method :__call, :call
@@ -34,8 +34,8 @@ module Datadog
34
34
  # return the request_start only if it's lesser than
35
35
  # current time, to avoid significant clock skew
36
36
  request_start = Time.at(time_value)
37
- request_start.utc > now ? nil : request_start
38
- rescue StandardError => e
37
+ (request_start.utc > now) ? nil : request_start
38
+ rescue => e
39
39
  # in case of an Exception we don't create a
40
40
  # `request.queuing` span
41
41
  Datadog.logger.debug("[rack] unable to parse request queue headers: #{e}")
@@ -13,7 +13,7 @@ module Datadog
13
13
  # @public_api
14
14
  class Settings < Contrib::Configuration::Settings
15
15
  def initialize(options = {})
16
- super(options)
16
+ super
17
17
 
18
18
  # NOTE: Eager load these
19
19
  # Rails integration is responsible for orchestrating other integrations.
@@ -23,7 +23,7 @@ module Datadog
23
23
  register_as :rails, auto_patch: false
24
24
 
25
25
  def self.version
26
- Gem.loaded_specs['railties'] && Gem.loaded_specs['railties'].version
26
+ Gem.loaded_specs['railties']&.version
27
27
  end
28
28
 
29
29
  def self.loaded?
@@ -16,7 +16,7 @@ module Datadog
16
16
 
17
17
  app_config.log_tags ||= [] # Can be nil, we initialized it if so
18
18
  app_config.log_tags << proc { Tracing.log_correlation if Datadog.configuration.tracing.log_injection }
19
- rescue StandardError => e
19
+ rescue => e
20
20
  Datadog.logger.warn(
21
21
  "Unable to add Datadog Trace context to ActiveSupport::TaggedLogging: #{e.class.name} #{e.message}"
22
22
  )
@@ -34,7 +34,7 @@ module Datadog
34
34
  # Some exception gets handled by Rails middleware before it can be set on Rack middleware
35
35
  # The rack span is the root span of the request and should make sure it has the full exception
36
36
  # set on it.
37
- env[Contrib::Rack::Ext::RACK_ENV_REQUEST_SPAN].set_error(e) if env[Contrib::Rack::Ext::RACK_ENV_REQUEST_SPAN]
37
+ env[Contrib::Rack::Ext::RACK_ENV_REQUEST_SPAN]&.set_error(e)
38
38
  end
39
39
  raise e
40
40
  end
@@ -86,7 +86,10 @@ module Datadog
86
86
 
87
87
  # Instruments the `bin/rails runner` command.
88
88
  def patch_rails_runner
89
- ::Rails::Command.singleton_class.prepend(Command) if defined?(::Rails::Command)
89
+ # The `RunnerCommand` class is only available in Rails 5.1 and later.
90
+ if defined?(::Rails::Command::RunnerCommand) && Integration.version >= Gem::Version.new('5.1')
91
+ ::Rails::Command::RunnerCommand.prepend(Runner)
92
+ end
90
93
  end
91
94
  end
92
95
  end
@@ -10,34 +10,48 @@ module Datadog
10
10
  # * `-`: for code provided through the STDIN.
11
11
  # * File path: for code provided through a local file.
12
12
  # * `inline code`: for code provided directly as a command line argument.
13
+ #
14
+ # The difficulty in instrumenting the Rails Runner is that
15
+ # the Rails application (and as a consequence the Datadog tracing library)
16
+ # is loaded very late in the runner execution.
17
+ # The Rails application is loaded inside the same method the method
18
+ # that directly executes the code the user wants the runner to execute:
19
+ #
20
+ # ```ruby
21
+ # def perform(code_or_file = nil, *command_argv)
22
+ # boot_application! # Loads the Rails and Datadog
23
+ #
24
+ # if code_or_file == "-"
25
+ # eval($stdin.read, TOPLEVEL_BINDING, "stdin") # Calls the user code for this Runner
26
+ # # ...
27
+ # ```
28
+ #
29
+ # This means that there's no time to instrument the calling method, `perform`, which
30
+ # would be ideal. Instead, we resort to instrumenting `eval` and `load`, but
31
+ # only for calls from the `Rails::Command::RunnerCommand` class.
32
+ #
13
33
  # @see https://guides.rubyonrails.org/v6.1/command_line.html#bin-rails-runner
14
34
  module Runner
15
35
  # Limit the maximum size of the source code captured in the source tag.
16
36
  MAX_TAG_VALUE_SIZE = 4096
17
37
  private_constant :MAX_TAG_VALUE_SIZE
18
38
 
19
- def runner(code_or_file = nil, *_command_argv)
20
- if code_or_file == '-'
39
+ # Instruments the `Kernel.eval` method, but only for the
40
+ # `Rails::Command::RunnerCommand` class.
41
+ def eval(*args)
42
+ source = args[0]
43
+
44
+ if args[2] == 'stdin'
21
45
  name = Ext::SPAN_RUNNER_STDIN
22
- resource = nil
23
46
  operation = Ext::TAG_OPERATION_STDIN
24
- # The source is not yet available for STDIN, but it will be captured in `eval`.
25
- elsif File.exist?(code_or_file)
26
- name = Ext::SPAN_RUNNER_FILE
27
- resource = code_or_file
28
- operation = Ext::TAG_OPERATION_FILE
29
- source = File.read(code_or_file)
30
47
  else
31
48
  name = Ext::SPAN_RUNNER_INLINE
32
- resource = nil
33
49
  operation = Ext::TAG_OPERATION_INLINE
34
- source = code_or_file
35
50
  end
36
51
 
37
52
  Tracing.trace(
38
53
  name,
39
54
  service: Datadog.configuration.tracing[:rails][:service_name],
40
- resource: resource,
41
55
  tags: {
42
56
  Tracing::Metadata::Ext::TAG_COMPONENT => Ext::TAG_COMPONENT,
43
57
  Tracing::Metadata::Ext::TAG_OPERATION => operation,
@@ -55,39 +69,47 @@ module Datadog
55
69
  end
56
70
  end
57
71
 
58
- # Capture the executed source code when provided from STDIN.
59
- def eval(*args)
60
- span = Datadog::Tracing.active_span
61
- if span&.name == Ext::SPAN_RUNNER_STDIN
62
- source = args[0]
63
- span.set_tag(
64
- Ext::TAG_RUNNER_SOURCE,
65
- Core::Utils.truncate(source, MAX_TAG_VALUE_SIZE)
66
- )
67
- end
68
-
69
- super
72
+ def self.prepended(base)
73
+ base.const_set(:Kernel, InstrumentedKernel)
70
74
  end
71
75
 
72
- ruby2_keywords :eval if respond_to?(:ruby2_keywords, true)
73
- end
76
+ # Instruments the `Kernel.load` method, but only for the
77
+ # `Rails::Command::RunnerCommand` class.
78
+ module InstrumentedKernel
79
+ def self.load(*args)
80
+ file = args[0]
81
+ name = Ext::SPAN_RUNNER_FILE
82
+ resource = file
83
+ operation = Ext::TAG_OPERATION_FILE
84
+
85
+ begin
86
+ # Reads one more byte than the limit to allow us to check if the source exceeds the limit.
87
+ source = File.read(file, MAX_TAG_VALUE_SIZE + 1)
88
+ rescue => e
89
+ Datadog.logger.debug("Failed to read file '#{file}' for Rails runner: #{e.message}")
90
+ end
74
91
 
75
- # The instrumentation target, {Rails::Command::RunnerCommand} is only loaded
76
- # right before `bin/rails runner` is executed. This means there's not much
77
- # opportunity to patch it ahead of time.
78
- # To ensure we can patch it successfully, we patch it's caller, {Rails::Command}
79
- # and promptly patch {Rails::Command::RunnerCommand} when it is loaded.
80
- module Command
81
- def find_by_namespace(*args)
82
- ret = super
83
- # Patch RunnerCommand if it is loaded and not already patched.
84
- if defined?(::Rails::Command::RunnerCommand) && !(::Rails::Command::RunnerCommand < Runner)
85
- ::Rails::Command::RunnerCommand.prepend(Runner)
92
+ Tracing.trace(
93
+ name,
94
+ service: Datadog.configuration.tracing[:rails][:service_name],
95
+ resource: resource,
96
+ tags: {
97
+ Tracing::Metadata::Ext::TAG_COMPONENT => Ext::TAG_COMPONENT,
98
+ Tracing::Metadata::Ext::TAG_OPERATION => operation,
99
+ }
100
+ ) do |span|
101
+ if source
102
+ span.set_tag(
103
+ Ext::TAG_RUNNER_SOURCE,
104
+ Core::Utils.truncate(source, MAX_TAG_VALUE_SIZE)
105
+ )
106
+ end
107
+ Contrib::Analytics.set_rate!(span, Datadog.configuration.tracing[:rails])
108
+
109
+ super
110
+ end
86
111
  end
87
- ret
88
112
  end
89
-
90
- ruby2_keywords :find_by_namespace if respond_to?(:ruby2_keywords, true)
91
113
  end
92
114
  end
93
115
  end
@@ -65,7 +65,7 @@ module Datadog
65
65
  span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_INVOKE)
66
66
  span.set_tag(Ext::TAG_TASK_ARG_NAMES, arg_names)
67
67
  span.set_tag(Ext::TAG_INVOKE_ARGS, quantize_args(args)) unless args.nil?
68
- rescue StandardError => e
68
+ rescue => e
69
69
  Datadog.logger.debug("Error while tracing Rake invoke: #{e.class.name} #{e.message}")
70
70
  end
71
71
 
@@ -74,7 +74,7 @@ module Datadog
74
74
  span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
75
75
  span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_EXECUTE)
76
76
  span.set_tag(Ext::TAG_EXECUTE_ARGS, quantize_args(args.to_hash)) unless args.nil?
77
- rescue StandardError => e
77
+ rescue => e
78
78
  Datadog.logger.debug("Error while tracing Rake execute: #{e.class.name} #{e.message}")
79
79
  end
80
80
 
@@ -84,12 +84,12 @@ module Datadog
84
84
  end
85
85
 
86
86
  def enabled?
87
- Datadog.configuration.tracing.enabled && \
87
+ Datadog.configuration.tracing.enabled &&
88
88
  configuration[:enabled] == true
89
89
  end
90
90
 
91
91
  def span_options
92
- { service: configuration[:service_name] }
92
+ {service: configuration[:service_name]}
93
93
  end
94
94
 
95
95
  def configuration
@@ -18,7 +18,7 @@ module Datadog
18
18
  register_as :rake
19
19
 
20
20
  def self.version
21
- Gem.loaded_specs['rake'] && Gem.loaded_specs['rake'].version
21
+ Gem.loaded_specs['rake']&.version
22
22
  end
23
23
 
24
24
  def self.loaded?
@@ -19,13 +19,13 @@ module Datadog
19
19
  protected
20
20
 
21
21
  def parse_matcher(matcher)
22
- matcher = { url: matcher } if matcher.is_a?(String)
22
+ matcher = {url: matcher} if matcher.is_a?(String)
23
23
 
24
24
  normalize(connection_resolver.resolve(matcher))
25
25
  end
26
26
 
27
27
  def normalize(hash)
28
- return { url: hash[:url] } if hash[:scheme] == UNIX_SCHEME
28
+ return {url: hash[:url]} if hash[:scheme] == UNIX_SCHEME
29
29
 
30
30
  # Connexion strings are always converted to host, port, db and scheme
31
31
  # but the host, port, db and scheme will generate the :url only after
@@ -24,10 +24,11 @@ module Datadog
24
24
  TAG_OPERATION_COMMAND = 'command'
25
25
  TAG_SYSTEM = 'redis'
26
26
  TAG_DATABASE_INDEX = 'db.redis.database_index'
27
- PEER_SERVICE_SOURCES = Array[
27
+ PEER_SERVICE_SOURCES = [
28
28
  Tracing::Metadata::Ext::TAG_PEER_HOSTNAME,
29
29
  Tracing::Metadata::Ext::NET::TAG_DESTINATION_NAME,
30
- Tracing::Metadata::Ext::NET::TAG_TARGET_HOST,].freeze
30
+ Tracing::Metadata::Ext::NET::TAG_TARGET_HOST,
31
+ ].freeze
31
32
  end
32
33
  end
33
34
  end
@@ -31,11 +31,11 @@ module Datadog
31
31
  end
32
32
 
33
33
  def self.redis_version
34
- Gem.loaded_specs['redis'] && Gem.loaded_specs['redis'].version
34
+ Gem.loaded_specs['redis']&.version
35
35
  end
36
36
 
37
37
  def self.redis_client_version
38
- Gem.loaded_specs['redis-client'] && Gem.loaded_specs['redis-client'].version
38
+ Gem.loaded_specs['redis-client']&.version
39
39
  end
40
40
 
41
41
  def self.loaded?
@@ -30,7 +30,7 @@ module Datadog
30
30
  # For `redis-rb` 3.x
31
31
  return client if respond_to?(:client)
32
32
 
33
- Datadog.logger.warn 'Fail to apply configuration on redis client instance with ' \
33
+ Datadog.logger.warn 'Fail to apply configuration on redis client instance with ' \
34
34
  '`Datadog.configure_onto(redis)`.'
35
35
 
36
36
  # Null object instead of raising error
@@ -49,8 +49,8 @@ module Datadog
49
49
  module InstanceMethods
50
50
  def datadog_pin=(_pin)
51
51
  Datadog.logger.warn \
52
- '`Datadog.configure_onto(redis)` is not supported on Redis 5+. To instrument '\
53
- "a redis instance with custom configuration, please initialize it with:\n"\
52
+ '`Datadog.configure_onto(redis)` is not supported on Redis 5+. To instrument ' \
53
+ "a redis instance with custom configuration, please initialize it with:\n" \
54
54
  " `Redis.new(..., custom: { datadog: { service_name: 'my-service' } })`.\n\n" \
55
55
  'See: https://github.com/DataDog/dd-trace-rb/blob/master/docs/GettingStarted.md#redis'
56
56
  end
@@ -61,7 +61,7 @@ module Datadog
61
61
 
62
62
  def default_tags
63
63
  [].tap do |tags|
64
- tags << "target_redis_version:#{Integration.redis_version}" if Integration.redis_version
64
+ tags << "target_redis_version:#{Integration.redis_version}" if Integration.redis_version
65
65
  tags << "target_redis_client_version:#{Integration.redis_client_version}" if Integration.redis_client_version
66
66
  end
67
67
  end
@@ -43,7 +43,7 @@ module Datadog
43
43
  return 'AUTH ?' if auth_command?(command_args)
44
44
 
45
45
  verb, *args = command_args.map { |x| format_arg(x) }
46
- Core::Utils.truncate("#{verb.upcase} #{args.join(' ')}", CMD_MAX_LEN, TOO_LONG_MARK)
46
+ Core::Utils.truncate("#{verb.upcase} #{args.join(" ")}", CMD_MAX_LEN, TOO_LONG_MARK)
47
47
  end
48
48
 
49
49
  def get_verb(command_args)