Class: RailsApiProfiler::Subscribers::ActiveRecord

Inherits:
Object
  • Object
show all
Defined in:
lib/rails_api_profiler/subscribers/active_record.rb

Class Method Summary collapse

Class Method Details

.reset! ⇒ Object



21
22
23
24
# File 'lib/rails_api_profiler/subscribers/active_record.rb', line 21

def self.reset!
  Thread.current[:rails_api_profiler_db_queries] = 0
  Thread.current[:rails_api_profiler_db_time] = 0.0
end

.stats ⇒ Object



26
27
28
29
30
31
# File 'lib/rails_api_profiler/subscribers/active_record.rb', line 26

def self.stats
  {
    queries: Thread.current[:rails_api_profiler_db_queries] || 0,
    time_ms: (Thread.current[:rails_api_profiler_db_time] || 0.0).round(2)
  }
end

.subscribe! ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/rails_api_profiler/subscribers/active_record.rb', line 4

def self.subscribe!
  return unless defined?(::ActiveRecord)

  ::ActiveSupport::Notifications.subscribe("sql.active_record") do |*args|
    event = ::ActiveSupport::Notifications::Event.new(*args)

    Thread.current[:rails_api_profiler_db_queries] ||= 0
    Thread.current[:rails_api_profiler_db_time] ||= 0.0

    # Skip schema & cached queries
    next if event.payload[:name] == "SCHEMA"

    Thread.current[:rails_api_profiler_db_queries] += 1
    Thread.current[:rails_api_profiler_db_time] += event.duration
  end
end