class Epilog::Rails::ActionControllerSubscriber
Constants
- RAILS_PARAMS
Public Instance Methods
halted_callback(event)
click to toggle source
# File lib/epilog/rails/action_controller_subscriber.rb, line 41 def halted_callback(event) info do basic_message(event, 'Filter chain halted as ' \ "#{event.payload[:filter].inspect} rendered or redirected") end end
process_action(*)
click to toggle source
# File lib/epilog/rails/action_controller_subscriber.rb, line 26 def process_action(*) end
process_request(event)
click to toggle source
# File lib/epilog/rails/action_controller_subscriber.rb, line 18 def process_request(event) log_end(event) pop_context end
redirect_to(event)
click to toggle source
# File lib/epilog/rails/action_controller_subscriber.rb, line 37 def redirect_to(event) info { basic_message(event, "Redirect > #{event.payload[:location]}") } end
request_received(event)
click to toggle source
# File lib/epilog/rails/action_controller_subscriber.rb, line 9 def request_received(event) push_context( { request: short_request_hash(event) } .merge(event.payload[:context]) ) log_start(event) if config.double_request_logs end
send_data(event)
click to toggle source
# File lib/epilog/rails/action_controller_subscriber.rb, line 29 def send_data(event) info { basic_message(event, "Sent data #{event.payload[:filename]}") } end
send_file(event)
click to toggle source
# File lib/epilog/rails/action_controller_subscriber.rb, line 33 def send_file(event) info { basic_message(event, "Sent file #{event.payload[:path]}") } end
start_processing(*)
click to toggle source
# File lib/epilog/rails/action_controller_subscriber.rb, line 23 def start_processing(*) end
unpermitted_parameters(event)
click to toggle source
# File lib/epilog/rails/action_controller_subscriber.rb, line 48 def unpermitted_parameters(event) debug do basic_message(event, 'Unpermitted parameters: ' \ "#{event.payload[:keys].join(', ')}") end end
Private Instance Methods
basic_message(event, message)
click to toggle source
# File lib/epilog/rails/action_controller_subscriber.rb, line 160 def basic_message(event, message) { message: message, metrics: process_metrics(duration: event.duration) } end
log_end(event)
click to toggle source
# File lib/epilog/rails/action_controller_subscriber.rb, line 82 def log_end(event) # rubocop:disable MethodLength request = if config.double_request_logs short_request_hash(event) else request_hash(event) end info do { message: response_string(event), request: request, response: response_hash(event), metrics: process_metrics(event.payload[:metrics] .merge(request_runtime: event.duration.round(2))) } end end
log_start(event)
click to toggle source
# File lib/epilog/rails/action_controller_subscriber.rb, line 73 def log_start(event) info do { message: "#{request_string(event)} started", request: request_hash(event) } end end
normalize_status(event)
click to toggle source
# File lib/epilog/rails/action_controller_subscriber.rb, line 150 def normalize_status(event) payload = event.payload status = payload[:response].status if status.nil? && payload[:exception].present? status = ActionDispatch::ExceptionWrapper .status_code_for_exception(payload[:exception].first) end status end
process_metrics(metrics)
click to toggle source
# File lib/epilog/rails/action_controller_subscriber.rb, line 167 def process_metrics(metrics) metrics.each_with_object({}) do |(key, value), obj| next if value.nil? obj[key] = value.round(2) if value.is_a?(Numeric) end end
rails_params()
click to toggle source
# File lib/epilog/rails/action_controller_subscriber.rb, line 175 def rails_params @rails_params ||= RAILS_PARAMS + RAILS_PARAMS.map(&:to_s) end
request_hash(event)
click to toggle source
# File lib/epilog/rails/action_controller_subscriber.rb, line 100 def request_hash(event) # rubocop:disable AbcSize, MethodLength request = event.payload[:request] param_filter = request.send(:parameter_filter) { id: request.uuid, ip: request.remote_ip, host: request.host, protocol: request.protocol.to_s.gsub('://', ''), method: request.request_method, port: request.port, path: request.path, query: param_filter.filter(request.query_parameters), cookies: param_filter.filter(request.cookies), headers: param_filter.filter( request.headers.to_h.keep_if do |key, _value| key =~ ActionDispatch::Http::Headers::HTTP_HEADER end ), params: request.filtered_parameters.except(*rails_params), format: request.format.try(:ref), controller: event.payload[:controller], action: event.payload[:action] } end
request_string(event)
click to toggle source
# File lib/epilog/rails/action_controller_subscriber.rb, line 135 def request_string(event) request = event.payload[:request] "#{request.request_method} #{request.path}" end
response_hash(event)
click to toggle source
# File lib/epilog/rails/action_controller_subscriber.rb, line 140 def response_hash(event) { status: normalize_status(event) } end
response_string(event)
click to toggle source
# File lib/epilog/rails/action_controller_subscriber.rb, line 144 def response_string(event) status = normalize_status(event) status_string = Rack::Utils::HTTP_STATUS_CODES[status] "#{request_string(event)} > #{status} #{status_string}" end
short_request_hash(event)
click to toggle source
# File lib/epilog/rails/action_controller_subscriber.rb, line 126 def short_request_hash(event) request = event.payload[:request] { id: request.uuid, method: request.method, path: request.path } end