class RorRegiment::RailsMiddleware

Public Class Methods

new(app, bulletlog) click to toggle source
# File lib/ror_regiment/rails_middleware.rb, line 3
def initialize(app, bulletlog)
  @app = app
  @logger = bulletlog
end

Public Instance Methods

_call(env) click to toggle source
# File lib/ror_regiment/rails_middleware.rb, line 12
def _call(env)
  start_time = Time.now
  request = Rack::Request.new(env)
  details = {
    "remote_ip": request.ip,
    "protocol": env['SERVER_PROTOCOL'],
    "method": env['REQUEST_METHOD'],
    "path": "#{request.base_url}/#{request.path}",
    "query_params": request.params
  }

  begin
    @status, @headers, @response = @app.call(env)
    details[:status_code] = @status
    response_time = (Time.now - start_time).round(6)
    message = get_log_message request, details, @status
    attrs = {
      'response_time': response_time
    }
    @logger.log_info(message, details, attrs)
    [@status, @headers, @response]
  rescue StandardError => e
    response_time = (Time.now - start_time).round(6)
    message = get_log_message request, details, 500
    attrs = {
      'response_time': response_time
    }
    trace = Thread.current.backtrace.join('\n')
    message = "#{message} #{e.message} - #{trace}"
    @logger.log_error(message, details, attrs)
    raise e
  end
end
call(env) click to toggle source
# File lib/ror_regiment/rails_middleware.rb, line 8
def call(env)
  dup._call env
end
get_log_message(request, details = {}, status = 200) click to toggle source
# File lib/ror_regiment/rails_middleware.rb, line 46
def get_log_message(request, details = {}, status = 200)
  current_date_time = Time.now.to_s('MM/DD/YYYY HH:mm:ss')
  "#{details[:remote_ip]} - - [#{current_date_time}] #{details[:method]} #{request.path} #{details[:protocol]} #{status} -"
end