class ActiveRecord::Tracer::Processor

Constants

COMPONENT_NAME
DB_TYPE
DEFAULT_OPERATION_NAME
SPAN_KIND

Public Class Methods

new(tracer) click to toggle source
# File lib/active_record/tracer/processor.rb, line 11
def initialize(tracer)
  @tracer = tracer
end

Public Instance Methods

call(_event_name, start, finish, _id, payload) click to toggle source
# File lib/active_record/tracer/processor.rb, line 15
def call(_event_name, start, finish, _id, payload)
  span = @tracer.start_span(
    payload[:name] || DEFAULT_OPERATION_NAME,
    start_time: start,
    tags: {
      component: COMPONENT_NAME,
      :'span.kind' => SPAN_KIND,
      :'db.instance' => db_instance,
      :'db.cached' => payload.fetch(:cached, false),
      :'db.statement' => payload.fetch(:sql).squish,
      :'db.type' => DB_TYPE,
      :'peer.address' => db_address
    }
  )

  if (exception = payload[:exception_object])
    span.set_tag(:error, true)
    span.log_kv(
      event: 'error',
      :'error.kind' => exception.class.to_s,
      :'error.object' => exception,
      message: exception.message,
      stack: exception.backtrace.join("\n")
    )
  end

  span.finish(end_time: finish)
end

Private Instance Methods

db_address() click to toggle source
# File lib/active_record/tracer/processor.rb, line 50
def db_address
  @db_address ||= begin
    connection_config = ActiveRecord::Base.connection_config
    username = connection_config[:username]
    host = connection_config[:host]
    database = connection_config.fetch(:database)
    vendor = connection_config.fetch(:adapter)

    str = String.new('')
    str << "#{vendor}://"
    str << username if username
    str << "@#{host}" if host
    str << "/#{database}"
    str
  end
end
db_config() click to toggle source
# File lib/active_record/tracer/processor.rb, line 67
def db_config
  @db_config ||= ActiveRecord::Base.connection_config
end
db_instance() click to toggle source
# File lib/active_record/tracer/processor.rb, line 46
def db_instance
  @db_instance ||= db_config.fetch(:database)
end