class AccessWatch::Logger
Attributes
client[R]
Public Class Methods
new(config)
click to toggle source
# File lib/access_watch/logger.rb, line 5 def initialize(config) @client = AccessWatch::Client.new(config) @parameter_filter = ActionDispatch::Http::ParameterFilter.new(Rails.application.config.filter_parameters) ActiveSupport::Notifications.subscribe("process_action.action_controller", &method(:after_http_request)) end
Public Instance Methods
after_http_request(name, start, finish, id, payload)
click to toggle source
# File lib/access_watch/logger.rb, line 11 def after_http_request(name, start, finish, id, payload) request = payload[:headers].instance_variable_get(:@req) post_request( time: start, address: request.remote_ip, host: request.host, request: { # TODO: Check if is SERVER_PROTOCOL comes from client browser # "protocol": "HTTP/1.1", method: payload[:method], scheme: URI(request.original_url).scheme, host: request.host, port: request.port, url: payload[:path], headers: extract_headers(payload) }, response: {status: payload[:status]}, ) end
Private Instance Methods
extract_headers(payload)
click to toggle source
# File lib/access_watch/logger.rb, line 53 def extract_headers(payload) filter_sensitive_data(filter_environment_variables(payload[:headers].env)) end
filter_environment_variables(hash)
click to toggle source
# File lib/access_watch/logger.rb, line 49 def filter_environment_variables(hash) hash.clone.keep_if { |key,value| key == key.upcase } end
filter_sensitive_data(hash)
click to toggle source
# File lib/access_watch/logger.rb, line 45 def filter_sensitive_data(hash) @parameter_filter ? @parameter_filter.filter(hash) : hash end
post_async(path, data)
click to toggle source
# File lib/access_watch/logger.rb, line 41 def post_async(path, data) Thread.new { client.post(path, data) } end
post_request(data)
click to toggle source
Private methods ###
# File lib/access_watch/logger.rb, line 37 def post_request(data) post_async("log".freeze, data) end