class AccessWatch::Logger
Constants
- MEMORY_CONVERSIONS
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) end
Public Instance Methods
extract_http_headers(headers)
click to toggle source
# File lib/access_watch/logger.rb, line 27 def extract_http_headers(headers) headers.reduce({}) do |hash, (name, value)| if name.index("HTTP_") == 0 && name != "HTTP_COOKIE" hash[format_header_name(name)] = value end hash end end
format_header_name(name)
click to toggle source
# File lib/access_watch/logger.rb, line 36 def format_header_name(name) name.sub(/^HTTP_/, '').sub("_", " ").titleize.sub(" ", "-") end
record(request, response)
click to toggle source
# File lib/access_watch/logger.rb, line 9 def record(request, response) post_request( time: Time.now.utc, address: request.remote_ip, request: { protocol: request.headers["Version"], method: request.method, scheme: URI(request.original_url).scheme, host: request.host, port: request.port, url: request.original_fullpath, headers: extract_http_headers(request.headers) }, response: {status: response.status}, context: {memory_usage: memory_usage_in_bytes}, ) end
Private Instance Methods
linux_process_memory_usage_in_bytes(pid)
click to toggle source
# File lib/access_watch/logger.rb, line 70 def linux_process_memory_usage_in_bytes(pid) return unless status = linux_process_status(pid) value, unit = status["VmRSS"].split value.to_i * MEMORY_CONVERSIONS[unit.downcase] end
linux_process_status(pid)
click to toggle source
# File lib/access_watch/logger.rb, line 58 def linux_process_status(pid) path = "/proc/#{pid}/status" return unless File.readable?(path) File.read(path).split("\n").reduce({}) do |hash, line| name, value = line.split(":") hash[name] = value.strip hash end end
memory_usage_in_bytes()
click to toggle source
# File lib/access_watch/logger.rb, line 54 def memory_usage_in_bytes linux_process_memory_usage_in_bytes(Process.pid) end
post_async(path, data)
click to toggle source
# File lib/access_watch/logger.rb, line 50 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 46 def post_request(data) post_async("log".freeze, data) end