class Hickory::LogSubscribers::ActionController

Public Instance Methods

process_action(event) click to toggle source
# File lib/hickory/log_subscribers/action_controller.rb, line 4
def process_action(event)
  return if Hickory::Rails.ignore_if.present? && Hickory::Rails.ignore_if.call(event)

  payload = event.payload
  except_keys = %i[headers params path status view_runtime db_runtime]

  metadata = payload.except(*except_keys).tap { |data|
    data.merge!(uri(payload))
    data.merge!(runtimes(event, payload))
    data.merge!(status(payload))
    data.merge!(params(payload))
  }

  logger.info("canonical-request #{payload[:method]} #{payload[:path]}", metadata)
end

Private Instance Methods

get_error_status_code(exception) click to toggle source
# File lib/hickory/log_subscribers/action_controller.rb, line 56
def get_error_status_code(exception)
  status = ActionDispatch::ExceptionWrapper.rescue_responses[exception]
  Rack::Utils.status_code(status)
end
params(payload) click to toggle source
# File lib/hickory/log_subscribers/action_controller.rb, line 50
def params(payload)
  {
    params: payload[:params].except(:controller, :action, :format)
  }
end
runtimes(event, payload) click to toggle source
# File lib/hickory/log_subscribers/action_controller.rb, line 32
def runtimes(event, payload)
  { duration: event.duration.to_f.round(2) }.tap { |data|
    data[:view] = payload[:view_runtime].to_f.round(2) if payload.key?(:view_runtime)
    data[:db]  = payload[:db_runtime].to_f.round(2) if payload.key?(:db_runtime)
  }
end
status(payload) click to toggle source
# File lib/hickory/log_subscribers/action_controller.rb, line 39
def status(payload)
  if status = payload[:status]
    { status: status.to_i }
  elsif error = payload[:exception]
    exception, message = error
    { status: get_error_status_code(exception), error: "#{exception}: #{message}" }
  else
    { status: 0 }
  end
end
uri(payload) click to toggle source
# File lib/hickory/log_subscribers/action_controller.rb, line 22
def uri(payload)
  return {} unless payload.key?(:path)

  _uri = URI.parse(payload[:path])

  { path: _uri.path }.tap { |data|
    data[:query] = _uri.query unless _uri.query.nil?
  }
end