module ScoutApm::Instruments::ActiveRecordRelationQueryInstruments

Public Class Methods

included(instrumented_class) click to toggle source
# File lib/scout_apm/instruments/active_record.rb, line 364
def self.included(instrumented_class)
  ScoutApm::Agent.instance.context.logger.info "Instrumenting ActiveRecord::Relation#exec_queries - #{instrumented_class.inspect}"
  instrumented_class.class_eval do
    unless instrumented_class.method_defined?(:exec_queries_without_scout_instruments)
      alias_method :exec_queries_without_scout_instruments, :exec_queries
      alias_method :exec_queries, :exec_queries_with_scout_instruments
    end
  end
end
prepended(instrumented_class) click to toggle source
# File lib/scout_apm/instruments/active_record.rb, line 360
def self.prepended(instrumented_class)
  ScoutApm::Agent.instance.context.logger.info "Instrumenting ActiveRecord::Relation#exec_queries - #{instrumented_class.inspect} (prepending)"
end

Public Instance Methods

exec_queries(*args, &block) click to toggle source
Calls superclass method
# File lib/scout_apm/instruments/active_record.rb, line 374
def exec_queries(*args, &block)
  req = ScoutApm::RequestManager.lookup
  layer = ScoutApm::Layer.new("ActiveRecord", Utils::ActiveRecordMetricName::DEFAULT_METRIC)
  layer.annotate_layer(:ignorable => true)
  layer.desc = SqlList.new
  req.start_layer(layer)
  req.ignore_children!
  begin
    if ScoutApm::Environment.instance.supports_module_prepend?
      super(*args, &block)
    else
      exec_queries_without_scout_instruments(*args, &block)
    end
  ensure
    req.acknowledge_children!
    req.stop_layer
  end
end