module OneApm::Agent::Instrumentation::ActiveRecord

Constants

OA_EXPLAINER

Public Class Methods

included(instrumented_class) click to toggle source
# File lib/one_apm/inst/orm/active_record.rb, line 25
def self.included(instrumented_class)
  instrumented_class.class_eval do
    unless instrumented_class.method_defined?(:log_without_oneapm_instrumentation)
      alias_method :log_without_oneapm_instrumentation, :log
      alias_method :log, :log_with_oneapm_instrumentation
      protected :log
    end
  end
end
insert_instrumentation() click to toggle source
# File lib/one_apm/inst/orm/active_record.rb, line 19
def self.insert_instrumentation
  ::ActiveRecord::ConnectionAdapters::AbstractAdapter.module_eval do
    include ::OneApm::Agent::Instrumentation::ActiveRecord
  end
end

Public Instance Methods

generate_metrics(operation, name) click to toggle source
# File lib/one_apm/inst/orm/active_record.rb, line 35
def generate_metrics(operation, name)
  @product ||= ActiveRecordHelper.database_info(@config)
  model_name = ActiveRecordHelper.model_for_name(name)
  ActiveRecordHelper.metric_for(@product, operation, model_name).compact
end
log_with_oneapm_instrumentation(*args, &block) click to toggle source
# File lib/one_apm/inst/orm/active_record.rb, line 41
def log_with_oneapm_instrumentation(*args, &block)
  state = OneApm::TransactionState.tl_get

  if !state.is_execution_traced?
    return log_without_oneapm_instrumentation(*args, &block)
  end

  sql, name, _ = args
  operation = ActiveRecordHelper.operator_for_name(OneApm::Helper.correctly_encoded(name)) ||
           ActiveRecordHelper.operator_for_sql(OneApm::Helper.correctly_encoded(sql))
           
  if !operation
    log_without_oneapm_instrumentation(*args, &block)
  else
   
    metrics = generate_metrics(operation, name)
    self.class.trace_execution_scoped(metrics) do
      t0 = Time.now
      begin
        log_without_oneapm_instrumentation(*args, &block)
      ensure
        elapsed_time = (Time.now - t0).to_f
        OneApm::Manager.notice_sql(sql, metrics.first, @config, elapsed_time, state, &OA_EXPLAINER)
      end
    end
  end
end
remote_service_metric() click to toggle source
# File lib/one_apm/inst/orm/active_record.rb, line 69
def remote_service_metric
  if @config && @config[:adapter]
    ActiveRecordHelper.remote_service_metric(@config[:adapter], @config[:host])
  end
end