class Binnacle::Logging::RequestLogSubscriber

Public Instance Methods

process_action(event) click to toggle source
# File lib/binnacle/logging/request_log_subscriber.rb, line 9
def process_action(event)
  return if Binnacle.configuration.ignore?(event)
  payload = event.payload
  data = extract_request(event, payload)
  Binnacle.client.log_rails_event(data)
end
redirect_to(event) click to toggle source
# File lib/binnacle/logging/request_log_subscriber.rb, line 16
def redirect_to(event)
  Thread.current[:binnacle_location] = event.payload[:location]
end
unpermitted_parameters(event) click to toggle source

TODO: Implement send_file and send_data def send_file(event)

info { "Sent data #{event.payload[:filename]} (#{event.duration.round(1)}ms)" }

end

def send_data(event)

info { "Sent data #{event.payload[:filename]} (#{event.duration.round(1)}ms)" }

end

# File lib/binnacle/logging/request_log_subscriber.rb, line 29
def unpermitted_parameters(event)
  Thread.current[:binnacle_unpermitted_params] ||= []
  Thread.current[:binnacle_unpermitted_params].concat(event.payload[:keys])
end

Private Instance Methods

extract_event_details(event) click to toggle source
# File lib/binnacle/logging/request_log_subscriber.rb, line 68
def extract_event_details(event)
  {
    time: event.time,
    transaction_id: event.transaction_id
  }
end
extract_format(payload) click to toggle source
# File lib/binnacle/logging/request_log_subscriber.rb, line 75
def extract_format(payload)
  (::ActionPack::VERSION::MAJOR == 3 && ::ActionPack::VERSION::MINOR == 0) ? payload[:formats].first : payload[:format]
end
extract_location() click to toggle source
# File lib/binnacle/logging/request_log_subscriber.rb, line 102
def extract_location
  location = Thread.current[:binnacle_location]
  return {} unless location

  Thread.current[:binnacle_location] = nil
  { location: location }
end
extract_path(payload) click to toggle source
# File lib/binnacle/logging/request_log_subscriber.rb, line 62
def extract_path(payload)
  path = payload[:path]
  index = path.index('?')
  index ? path[0, index] : path
end
extract_request(event, payload) click to toggle source
# File lib/binnacle/logging/request_log_subscriber.rb, line 36
def extract_request(event, payload)
  payload = event.payload
  data = initial_data(payload)
  data.merge!(extract_status(payload))
  data.merge!(extract_runtimes(event, payload))
  data.merge!(extract_location)
  data.merge!(extract_unpermitted_params)
  data.merge!(extract_event_details(event))
  data.merge!({message: "#{data[:method]} #{data[:path]} AS #{data[:format]} (view: #{data[:view]}ms, db: #{data[:db]}ms)"})
end
extract_runtimes(event, payload) click to toggle source
# File lib/binnacle/logging/request_log_subscriber.rb, line 95
def extract_runtimes(event, payload)
  data = { duration: event.duration.to_f.round(2) }
  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)
  data
end
extract_status(payload) click to toggle source
# File lib/binnacle/logging/request_log_subscriber.rb, line 79
def extract_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
extract_unpermitted_params() click to toggle source
# File lib/binnacle/logging/request_log_subscriber.rb, line 110
def extract_unpermitted_params
  unpermitted_params = Thread.current[:binnacle_unpermitted_params]
  return {} unless unpermitted_params

  Thread.current[:binnacle_unpermitted_params] = nil
  { unpermitted_params: unpermitted_params }
end
get_error_status_code(exception) click to toggle source
# File lib/binnacle/logging/request_log_subscriber.rb, line 90
def get_error_status_code(exception)
  status = ActionDispatch::ExceptionWrapper.rescue_responses[exception]
  Rack::Utils.status_code(status)
end
initial_data(payload) click to toggle source
# File lib/binnacle/logging/request_log_subscriber.rb, line 47
def initial_data(payload)
  path = extract_path(payload)
  method = payload[:method]
  format = extract_format(payload)
  {
    direction: :in,
    method: method,
    path: path,
    format: format,
    controller: payload[:params]['controller'],
    action: payload[:params]['action'],
    params: payload[:params],
  }
end