class Logged::LogSubscriber::ActionController

Log subscriber for ActionController events

Public Instance Methods

halted_callback(event) click to toggle source
# File lib/logged/log_subscriber/action_controller.rb, line 26
def halted_callback(event)
  Thread.current[:logged_action_controller_filter] = event.payload[:filter]
end
process_action(event) click to toggle source
# File lib/logged/log_subscriber/action_controller.rb, line 12
def process_action(event)
  return if ignore?(event, :info)

  data = process_action_data(event)

  data[:duration] = event.duration.to_f.round(2)

  info(event, data)
end
redirect_to(event) click to toggle source
# File lib/logged/log_subscriber/action_controller.rb, line 22
def redirect_to(event)
  Thread.current[:logged_action_controller_location] = event.payload[:location]
end

Private Instance Methods

cached_event_data() click to toggle source
# File lib/logged/log_subscriber/action_controller.rb, line 74
def cached_event_data
  location = Thread.current[:logged_action_controller_location]
  Thread.current[:logged_action_controller_location] = nil

  filter = Thread.current[:logged_action_controller_filter]
  Thread.current[:logged_action_controller_filter] = nil

  {
    location: location,
    filter:   filter
  }.reject { |_k, v| v.blank? }
end
extract_path(payload) click to toggle source
# File lib/logged/log_subscriber/action_controller.rb, line 41
def extract_path(payload)
  uri = URI.parse(payload[:path])

  { path: uri.path }
end
extract_request(payload) click to toggle source
# File lib/logged/log_subscriber/action_controller.rb, line 32
def extract_request(payload)
  {
    method:     payload[:method].to_sym,
    format:     payload[:format],
    controller: payload[:params]['controller'],
    action:     payload[:params]['action']
  }.reject { |_k, v| v.blank? }
end
extract_runtimes(payload) click to toggle source
# File lib/logged/log_subscriber/action_controller.rb, line 62
def extract_runtimes(payload)
  view_runtime, db_runtime = nil

  view_runtime = payload[:view_runtime].to_f.round(2) if payload.key?(:view_runtime)
  db_runtime   = payload[:db_runtime].to_f.round(2)   if payload.key?(:db_runtime)

  {
    view_runtime: view_runtime,
    db_runtime:   db_runtime
  }.reject { |_k, v| v.blank? }
end
extract_status(payload) click to toggle source
# File lib/logged/log_subscriber/action_controller.rb, line 47
def extract_status(payload)
  status = payload[:status]
  error  = payload[:exception]

  if status
    { status: status.to_i }
  elsif error
    exception, message = error

    { status: 500, error: "#{exception}:#{message}" }
  else
    { status: 0 }
  end
end
process_action_data(event) click to toggle source
# File lib/logged/log_subscriber/action_controller.rb, line 87
def process_action_data(event)
  data = {
    event: event.name
  }

  payload = event.payload

  data.merge!(extract_request(payload))
  data.merge!(cached_event_data)
  data.merge!(extract_path(payload))
  data.merge!(extract_status(payload))
  data.merge!(extract_runtimes(payload))

  data
end