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
@@ -26,7 +26,8 @@ module Datadog
26
26
  :last_flush_finish_at,
27
27
  :created_at,
28
28
  :internal_metadata,
29
- :info_json
29
+ :info_json,
30
+ :sequence_tracker
30
31
 
31
32
  public
32
33
 
@@ -37,7 +38,8 @@ module Datadog
37
38
  code_provenance_collector:,
38
39
  internal_metadata:,
39
40
  minimum_duration_seconds: PROFILE_DURATION_THRESHOLD_SECONDS,
40
- time_provider: Time
41
+ time_provider: Time,
42
+ sequence_tracker: Datadog::Profiling::SequenceTracker
41
43
  )
42
44
  @pprof_recorder = pprof_recorder
43
45
  @worker = worker
@@ -50,6 +52,7 @@ module Datadog
50
52
  # NOTE: At the time of this comment collected info does not change over time so we'll hardcode
51
53
  # it on startup to prevent serializing the same info on every flush.
52
54
  @info_json = JSON.generate(info_collector.info).freeze
55
+ @sequence_tracker = sequence_tracker
53
56
  end
54
57
 
55
58
  def flush
@@ -73,7 +76,10 @@ module Datadog
73
76
  encoded_profile: encoded_profile,
74
77
  code_provenance_file_name: Datadog::Profiling::Ext::Transport::HTTP::CODE_PROVENANCE_FILENAME,
75
78
  code_provenance_data: uncompressed_code_provenance,
76
- tags_as_array: Datadog::Profiling::TagBuilder.call(settings: Datadog.configuration).to_a,
79
+ tags_as_array: Datadog::Profiling::TagBuilder.call(
80
+ settings: Datadog.configuration,
81
+ profile_seq: sequence_tracker.get_next,
82
+ ).to_a,
77
83
  internal_metadata: internal_metadata.merge(
78
84
  {
79
85
  worker_stats: worker_stats,
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../core/utils/forking'
4
+
5
+ module Datadog
6
+ module Profiling
7
+ # Used to generate the `profile_seq` tag, which effectively counts how many profiles we've attempted to report
8
+ # from a given runtime-id.
9
+ #
10
+ # Note that the above implies a few things:
11
+ # 1. The sequence number only gets incremented when we decide to report a profile and create a `Flush` for it
12
+ # 2. The `SequenceTracker` must live across profiler reconfigurations and resets, since no matter how many
13
+ # profiler instances get created due to reconfiguration, the runtime-id is still the same, so the sequence number
14
+ # should be kept and not restarted from 0
15
+ # 3. The `SequenceTracker` must be reset after a fork, since the runtime-id will change, and we want to start
16
+ # counting from 0 again
17
+ #
18
+ # This is why this module is implemented as a singleton that we reuse, not as an instance that we recreate.
19
+ #
20
+ # Note that this module is not thread-safe, so it's up to the callers to make sure
21
+ # it's only used by a single thread at a time (which is what the `Profiling::Exporter`)
22
+ # is doing.
23
+ module SequenceTracker
24
+ class << self
25
+ include Core::Utils::Forking
26
+
27
+ def get_next
28
+ reset! unless defined?(@sequence_number)
29
+ after_fork! { reset! }
30
+
31
+ next_seq = @sequence_number
32
+ @sequence_number += 1
33
+ next_seq
34
+ end
35
+
36
+ private
37
+
38
+ def reset!
39
+ @sequence_number = 0
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -12,10 +12,12 @@ module Datadog
12
12
  def self.call(
13
13
  settings:,
14
14
  # Other metadata
15
+ profile_seq:,
15
16
  profiler_version: Core::Environment::Identity.gem_datadog_version
16
17
  )
17
18
  hash = Core::TagBuilder.tags(settings).merge(
18
19
  FORM_FIELD_TAG_PROFILER_VERSION => profiler_version,
20
+ 'profile_seq' => profile_seq.to_s,
19
21
  )
20
22
  Core::Utils.encode_tags(hash)
21
23
  end
@@ -121,15 +121,13 @@ module Datadog
121
121
  end
122
122
 
123
123
  private_class_method def self.try_loading_native_library
124
- begin
125
- require_relative 'profiling/load_native_extension'
124
+ require_relative 'profiling/load_native_extension'
126
125
 
127
- success =
128
- defined?(Profiling::NativeExtension) && Profiling::NativeExtension.send(:native_working?)
129
- [success, nil]
130
- rescue StandardError, LoadError => e
131
- [false, e]
132
- end
126
+ success =
127
+ defined?(Profiling::NativeExtension) && Profiling::NativeExtension.send(:native_working?)
128
+ [success, nil]
129
+ rescue StandardError, LoadError => e
130
+ [false, e]
133
131
  end
134
132
 
135
133
  # All requires for the profiler should be directly added here; and everything should be loaded eagerly.
@@ -157,6 +155,7 @@ module Datadog
157
155
  require_relative 'profiling/native_extension'
158
156
  require_relative 'profiling/tag_builder'
159
157
  require_relative 'profiling/http_transport'
158
+ require_relative 'profiling/sequence_tracker'
160
159
 
161
160
  replace_noop_allocation_count
162
161
 
@@ -5,8 +5,17 @@
5
5
  #
6
6
  # This file's path is private. Do not reference this file.
7
7
  #
8
+
9
+ module Datadog
10
+ # This module handles conditional loading of single step auto-instrumentation,
11
+ # which enables Datadog tracing and profiling features when available.
12
+ module SingleStepInstrument
13
+ end
14
+ end
15
+
8
16
  begin
9
17
  require_relative 'auto_instrument'
18
+ Datadog::SingleStepInstrument::LOADED = true
10
19
  rescue StandardError, LoadError => e
11
20
  warn "Single step instrumentation failed: #{e.class}:#{e.message}\n\tSource:\n\t#{Array(e.backtrace).join("\n\t")}"
12
21
  end
@@ -16,7 +16,7 @@ module Datadog
16
16
  def set_measured(span_op, value = true)
17
17
  return if span_op.nil?
18
18
 
19
- value = value == true || value == 1 ? 1 : 0
19
+ value = (value == true || value == 1) ? 1 : 0
20
20
  span_op.set_metric(Metadata::Ext::Analytics::TAG_MEASURED, value)
21
21
  end
22
22
  end
@@ -54,7 +54,7 @@ module Datadog
54
54
  @buffer_accepted_lengths += trace.length
55
55
 
56
56
  @buffer_spans += trace.length
57
- rescue StandardError => e
57
+ rescue => e
58
58
  Datadog.logger.debug(
59
59
  "Failed to measure queue accept. Cause: #{e.class.name} #{e.message} Source: #{Array(e.backtrace).first}"
60
60
  )
@@ -64,7 +64,7 @@ module Datadog
64
64
  @buffer_dropped += 1
65
65
 
66
66
  @buffer_spans -= trace.length
67
- rescue StandardError => e
67
+ rescue => e
68
68
  Datadog.logger.debug(
69
69
  "Failed to measure queue drop. Cause: #{e.class.name} #{e.message} Source: #{Array(e.backtrace).first}"
70
70
  )
@@ -89,7 +89,7 @@ module Datadog
89
89
  @buffer_accepted_lengths = 0
90
90
  @buffer_dropped = 0
91
91
  @buffer_spans = 0
92
- rescue StandardError => e
92
+ rescue => e
93
93
  Datadog.logger.debug(
94
94
  "Failed to measure queue. Cause: #{e.class.name} #{e.message} Source: #{Array(e.backtrace).first}"
95
95
  )
@@ -121,9 +121,9 @@ module Datadog
121
121
  # TODO We should restructure this module, so that classes are not declared at top-level ::Datadog.
122
122
  # TODO Making such a change is potentially breaking for users manually configuring the tracer.
123
123
  TraceBuffer = if Core::Environment::Ext::RUBY_ENGINE == 'ruby'
124
- CRubyTraceBuffer
125
- else
126
- ThreadSafeTraceBuffer
127
- end
124
+ CRubyTraceBuffer
125
+ else
126
+ ThreadSafeTraceBuffer
127
+ end
128
128
  end
129
129
  end
@@ -24,13 +24,11 @@ module Datadog
24
24
  def call(tracing_header_tags)
25
25
  # Modify the remote configuration value that it matches the
26
26
  # environment variable it configures.
27
- if tracing_header_tags
28
- tracing_header_tags.map! do |hash|
29
- "#{hash['header']}:#{hash['tag_name']}"
30
- end
27
+ tracing_header_tags&.map! do |hash|
28
+ "#{hash["header"]}:#{hash["tag_name"]}"
31
29
  end
32
30
 
33
- super(tracing_header_tags)
31
+ super
34
32
  end
35
33
  end
36
34
 
@@ -80,7 +78,7 @@ module Datadog
80
78
  tracing_sampling_rules = tracing_sampling_rules.to_json
81
79
  end
82
80
 
83
- super(tracing_sampling_rules)
81
+ super
84
82
  Datadog.send(:components).reconfigure_live_sampler
85
83
  end
86
84
 
@@ -11,6 +11,7 @@ module Datadog
11
11
  ENV_ENABLED = 'DD_TRACE_ENABLED'
12
12
  ENV_OTEL_TRACES_EXPORTER = 'OTEL_TRACES_EXPORTER'
13
13
  ENV_HEADER_TAGS = 'DD_TRACE_HEADER_TAGS'
14
+ ENV_BAGGAGE_TAG_KEYS = 'DD_TRACE_BAGGAGE_TAG_KEYS'
14
15
  ENV_TRACE_ID_128_BIT_GENERATION_ENABLED = 'DD_TRACE_128_BIT_TRACEID_GENERATION_ENABLED'
15
16
  ENV_NATIVE_SPAN_EVENTS = 'DD_TRACE_NATIVE_SPAN_EVENTS'
16
17
 
@@ -47,8 +48,8 @@ module Datadog
47
48
  PROPAGATION_STYLE_BAGGAGE = 'baggage'
48
49
 
49
50
  PROPAGATION_STYLE_SUPPORTED = [PROPAGATION_STYLE_DATADOG, PROPAGATION_STYLE_B3_MULTI_HEADER,
50
- PROPAGATION_STYLE_B3_SINGLE_HEADER, PROPAGATION_STYLE_TRACE_CONTEXT,
51
- PROPAGATION_STYLE_BAGGAGE].freeze
51
+ PROPAGATION_STYLE_B3_SINGLE_HEADER, PROPAGATION_STYLE_TRACE_CONTEXT,
52
+ PROPAGATION_STYLE_BAGGAGE].freeze
52
53
 
53
54
  # Sets both extract and inject propagation style tho the provided value.
54
55
  # Has lower precedence than `DD_TRACE_PROPAGATION_STYLE_INJECT` or
@@ -170,6 +170,23 @@ module Datadog
170
170
  o.setter { |header_tags, _| Configuration::HTTP::HeaderTags.new(header_tags) }
171
171
  end
172
172
 
173
+ # Comma-separated list of baggage keys that should be converted to span tags.
174
+ #
175
+ # Baggage keys matching the exact, case-sensitive names in this list will be converted
176
+ # to span tags with the prefix "baggage.".
177
+ #
178
+ # Special values:
179
+ # * Empty string ("") disables baggage tag conversion
180
+ # * Wildcard ("*") converts all baggage keys to span tags
181
+ #
182
+ # @default `DD_TRACE_BAGGAGE_TAG_KEYS` environment variable, otherwise `"user.id,session.id,account.id"`
183
+ # @return [Array<String>, Symbol, nil] processed baggage tag keys configuration
184
+ option :baggage_tag_keys do |o|
185
+ o.env Configuration::Ext::ENV_BAGGAGE_TAG_KEYS
186
+ o.type :array
187
+ o.default ['user.id', 'session.id', 'account.id']
188
+ end
189
+
173
190
  # Enable 128 bit trace id generation.
174
191
  #
175
192
  # @default `DD_TRACE_128_BIT_TRACEID_GENERATION_ENABLED` environment variable, otherwise `true`
@@ -53,7 +53,7 @@ module Datadog
53
53
 
54
54
  # Creates a copy of the context, when forked.
55
55
  def fork_clone
56
- forked_trace = @active_trace && @active_trace.fork_clone
56
+ forked_trace = @active_trace&.fork_clone
57
57
  self.class.new(trace: forked_trace)
58
58
  end
59
59
 
@@ -61,7 +61,7 @@ module Datadog
61
61
 
62
62
  def set_active_trace!(trace)
63
63
  # Don't retain finished traces
64
- @active_trace = trace && !trace.finished? ? trace : nil
64
+ @active_trace = (trace && !trace.finished?) ? trace : nil
65
65
  end
66
66
  end
67
67
  end
@@ -20,7 +20,7 @@ module Datadog
20
20
  module ClassMethods
21
21
  def span_options
22
22
  if configuration[:service_name]
23
- { service: configuration[:service_name] }
23
+ {service: configuration[:service_name]}
24
24
  else
25
25
  {}
26
26
  end
@@ -22,7 +22,7 @@ module Datadog
22
22
  end
23
23
 
24
24
  def self.version
25
- Gem.loaded_specs['actioncable'] && Gem.loaded_specs['actioncable'].version
25
+ Gem.loaded_specs['actioncable']&.version
26
26
  end
27
27
 
28
28
  def self.loaded?
@@ -23,7 +23,7 @@ module Datadog
23
23
  end
24
24
 
25
25
  def self.version
26
- Gem.loaded_specs['actionmailer'] && Gem.loaded_specs['actionmailer'].version
26
+ Gem.loaded_specs['actionmailer']&.version
27
27
  end
28
28
 
29
29
  def self.loaded?
@@ -42,7 +42,7 @@ module Datadog
42
42
 
43
43
  span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
44
44
  span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_CONTROLLER)
45
- rescue StandardError => e
45
+ rescue => e
46
46
  Datadog.logger.error(e.message)
47
47
  Datadog::Core::Telemetry::Logger.report(e)
48
48
  end
@@ -87,7 +87,7 @@ module Datadog
87
87
  ensure
88
88
  span.finish
89
89
  end
90
- rescue StandardError => e
90
+ rescue => e
91
91
  Datadog.logger.error(e.message)
92
92
  Datadog::Core::Telemetry::Logger.report(e)
93
93
  end
@@ -115,7 +115,7 @@ module Datadog
115
115
  begin
116
116
  # process and catch request exceptions
117
117
  Instrumentation.start_processing(payload)
118
- result = super(*args)
118
+ result = super
119
119
  status = datadog_response_status
120
120
  payload[:status] = status unless status.nil?
121
121
  result
@@ -146,7 +146,7 @@ module Datadog
146
146
  when Array
147
147
  # Likely a Rack response array: first element is the status.
148
148
  status = response.first
149
- status.class <= Integer ? status : nil
149
+ (status.class <= Integer) ? status : nil
150
150
  end
151
151
  end
152
152
  end
@@ -23,7 +23,7 @@ module Datadog
23
23
  end
24
24
 
25
25
  def self.version
26
- Gem.loaded_specs['actionpack'] && Gem.loaded_specs['actionpack'].version
26
+ Gem.loaded_specs['actionpack']&.version
27
27
  end
28
28
 
29
29
  def self.loaded?
@@ -46,7 +46,7 @@ module Datadog
46
46
  Contrib::Analytics.set_measured(span)
47
47
 
48
48
  record_exception(span, payload)
49
- rescue StandardError => e
49
+ rescue => e
50
50
  Datadog.logger.debug(e.message)
51
51
  end
52
52
  end
@@ -29,10 +29,10 @@ module Datadog
29
29
 
30
30
  def set_common_tags(span, payload)
31
31
  adapter_name = if payload[:adapter].is_a?(Class)
32
- payload[:adapter].name
33
- else
34
- payload[:adapter].class.name
35
- end
32
+ payload[:adapter].name
33
+ else
34
+ payload[:adapter].class.name
35
+ end
36
36
  span.set_tag(Ext::TAG_ADAPTER, adapter_name)
37
37
 
38
38
  span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
@@ -44,10 +44,10 @@ module Datadog
44
44
  span.set_tag(Ext::TAG_JOB_EXECUTIONS, job.executions) if job.respond_to?(:executions)
45
45
 
46
46
  job_scheduled_at = if job.respond_to?(:scheduled_at)
47
- job.scheduled_at
48
- elsif job.respond_to?(:enqueued_at)
49
- job.enqueued_at
50
- end
47
+ job.scheduled_at
48
+ elsif job.respond_to?(:enqueued_at)
49
+ job.enqueued_at
50
+ end
51
51
  span.set_tag(Ext::TAG_JOB_SCHEDULED_AT, Time.at(job_scheduled_at)) if job_scheduled_at
52
52
  end
53
53
  end
@@ -39,7 +39,7 @@ module Datadog
39
39
 
40
40
  set_common_tags(span, payload)
41
41
  span.set_tag(Ext::TAG_JOB_ERROR, payload[:error])
42
- rescue StandardError => e
42
+ rescue => e
43
43
  Datadog.logger.debug(e.message)
44
44
  end
45
45
  end
@@ -38,7 +38,7 @@ module Datadog
38
38
  end
39
39
 
40
40
  set_common_tags(span, payload)
41
- rescue StandardError => e
41
+ rescue => e
42
42
  Datadog.logger.debug(e.message)
43
43
  end
44
44
  end
@@ -38,7 +38,7 @@ module Datadog
38
38
  end
39
39
 
40
40
  set_common_tags(span, payload)
41
- rescue StandardError => e
41
+ rescue => e
42
42
  Datadog.logger.debug(e.message)
43
43
  end
44
44
  end
@@ -40,7 +40,7 @@ module Datadog
40
40
  set_common_tags(span, payload)
41
41
  span.set_tag(Ext::TAG_JOB_ERROR, payload[:error])
42
42
  span.set_tag(Ext::TAG_JOB_RETRY_WAIT, payload[:wait])
43
- rescue StandardError => e
43
+ rescue => e
44
44
  Datadog.logger.debug(e.message)
45
45
  end
46
46
  end
@@ -38,7 +38,7 @@ module Datadog
38
38
  end
39
39
 
40
40
  set_common_tags(span, payload)
41
- rescue StandardError => e
41
+ rescue => e
42
42
  Datadog.logger.debug(e.message)
43
43
  end
44
44
  end
@@ -39,7 +39,7 @@ module Datadog
39
39
 
40
40
  set_common_tags(span, payload)
41
41
  span.set_tag(Ext::TAG_JOB_ERROR, payload[:error])
42
- rescue StandardError => e
42
+ rescue => e
43
43
  Datadog.logger.debug(e.message)
44
44
  end
45
45
  end
@@ -22,7 +22,7 @@ module Datadog
22
22
  end
23
23
 
24
24
  def self.version
25
- Gem.loaded_specs['activejob'] && Gem.loaded_specs['activejob'].version
25
+ Gem.loaded_specs['activejob']&.version
26
26
  end
27
27
 
28
28
  def self.loaded?
@@ -34,7 +34,7 @@ module Datadog
34
34
  span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_RENDER)
35
35
 
36
36
  set_common_tags(span, payload)
37
- rescue StandardError => e
37
+ rescue => e
38
38
  Datadog.logger.debug(e.message)
39
39
  end
40
40
  end
@@ -18,9 +18,9 @@ module Datadog
18
18
 
19
19
  def supported?
20
20
  Gem.loaded_specs['active_model_serializers'] \
21
- && ( \
21
+ && (
22
22
  Gem.loaded_specs['active_model_serializers'].version >= Gem::Version.new('0.9') \
23
- && Gem.loaded_specs['active_model_serializers'].version < Gem::Version.new('0.10') \
23
+ && Gem.loaded_specs['active_model_serializers'].version < Gem::Version.new('0.10')
24
24
  )
25
25
  end
26
26
 
@@ -36,7 +36,7 @@ module Datadog
36
36
  span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_SERIALIZE)
37
37
 
38
38
  set_common_tags(span, payload)
39
- rescue StandardError => e
39
+ rescue => e
40
40
  Datadog.logger.debug(e.message)
41
41
  end
42
42
  end
@@ -18,8 +18,7 @@ module Datadog
18
18
  register_as :active_model_serializers
19
19
 
20
20
  def self.version
21
- Gem.loaded_specs['active_model_serializers'] \
22
- && Gem.loaded_specs['active_model_serializers'].version
21
+ Gem.loaded_specs['active_model_serializers']&.version
23
22
  end
24
23
 
25
24
  def self.loaded?
@@ -75,7 +75,7 @@ module Datadog
75
75
  # hence provide a succinct summary for the error logging.
76
76
  #
77
77
  Datadog.logger.error(
78
- 'Failed to resolve ActiveRecord database configuration. '\
78
+ 'Failed to resolve ActiveRecord database configuration. ' \
79
79
  "Cause: #{e.class.name} Source: #{Array(e.backtrace).first}"
80
80
  )
81
81
  Core::Telemetry::Logger.report(e, description: 'Failed to resolve ActiveRecord database configuration')
@@ -48,7 +48,7 @@ module Datadog
48
48
 
49
49
  span.set_tag(Ext::TAG_INSTANTIATION_CLASS_NAME, payload.fetch(:class_name))
50
50
  span.set_tag(Ext::TAG_INSTANTIATION_RECORD_COUNT, payload.fetch(:record_count))
51
- rescue StandardError => e
51
+ rescue => e
52
52
  Datadog.logger.error(e.message)
53
53
  Datadog::Core::Telemetry::Logger.report(e)
54
54
  end
@@ -35,10 +35,10 @@ module Datadog
35
35
  settings = Datadog.configuration.tracing[:active_record, config]
36
36
  adapter_name = Contrib::Utils::Database.normalize_vendor(config[:adapter])
37
37
  service_name = if settings.service_name != Contrib::Utils::Database::VENDOR_DEFAULT
38
- settings.service_name
39
- else
40
- adapter_name
41
- end
38
+ settings.service_name
39
+ else
40
+ adapter_name
41
+ end
42
42
 
43
43
  span.name = "#{adapter_name}.query"
44
44
  span.service = service_name
@@ -68,7 +68,7 @@ module Datadog
68
68
  span.set_tag(Ext::TAG_DB_CACHED, cached) if cached
69
69
  span.set_tag(Tracing::Metadata::Ext::NET::TAG_TARGET_HOST, config[:host]) if config[:host]
70
70
  span.set_tag(Tracing::Metadata::Ext::NET::TAG_TARGET_PORT, config[:port]) if config[:port]
71
- rescue StandardError => e
71
+ rescue => e
72
72
  Datadog.logger.error(e.message)
73
73
  Datadog::Core::Telemetry::Logger.report(e)
74
74
  end
@@ -27,7 +27,7 @@ module Datadog
27
27
  end
28
28
 
29
29
  def self.version
30
- Gem.loaded_specs['activerecord'] && Gem.loaded_specs['activerecord'].version
30
+ Gem.loaded_specs['activerecord']&.version
31
31
  end
32
32
 
33
33
  def self.loaded?
@@ -39,17 +39,17 @@ module Datadog
39
39
  return default_connection_config if connection.nil? && connection_id.nil?
40
40
 
41
41
  conn = if !connection.nil?
42
- # Since Rails 6.0, the connection object
43
- # is directly available.
44
- connection
45
- else
46
- # For Rails < 6.0, only the `connection_id`
47
- # is available. We have to find the connection
48
- # object from it.
49
- connection_from_id(connection_id)
50
- end
42
+ # Since Rails 6.0, the connection object
43
+ # is directly available.
44
+ connection
45
+ else
46
+ # For Rails < 6.0, only the `connection_id`
47
+ # is available. We have to find the connection
48
+ # object from it.
49
+ connection_from_id(connection_id)
50
+ end
51
51
 
52
- if conn && conn.instance_variable_defined?(:@config)
52
+ if conn&.instance_variable_defined?(:@config)
53
53
  conn.instance_variable_get(:@config)
54
54
  else
55
55
  EMPTY_CONFIG
@@ -102,14 +102,14 @@ module Datadog
102
102
  return @default_connection_config if instance_variable_defined?(:@default_connection_config)
103
103
 
104
104
  current_connection_name = if ::ActiveRecord::Base.respond_to?(:connection_specification_name)
105
- ::ActiveRecord::Base.connection_specification_name
106
- else
107
- ::ActiveRecord::Base
108
- end
105
+ ::ActiveRecord::Base.connection_specification_name
106
+ else
107
+ ::ActiveRecord::Base
108
+ end
109
109
 
110
110
  connection_pool = ::ActiveRecord::Base.connection_handler.retrieve_connection_pool(current_connection_name)
111
111
  connection_pool.nil? ? EMPTY_CONFIG : (@default_connection_config = db_config(connection_pool))
112
- rescue StandardError
112
+ rescue
113
113
  EMPTY_CONFIG
114
114
  end
115
115