class GrapeLogging::Middleware::RequestLogger

Attributes

response_body[RW]

Persist response status & response (body) to use int in parameters

response_status[RW]

Persist response status & response (body) to use int in parameters

Public Class Methods

new(app, options = {}) click to toggle source
Calls superclass method
# File lib/grape_logging/middleware/request_logger.rb, line 16
def initialize(app, options = {})
  super

  @included_loggers = @options[:include] || []
  @reporter = if options[:instrumentation_key]
    Reporters::ActiveSupportReporter.new(@options[:instrumentation_key])
  else
    Reporters::LoggerReporter.new(@options[:logger], @options[:formatter], @options[:log_level])
  end
end

Public Instance Methods

after(status, response) click to toggle source
# File lib/grape_logging/middleware/request_logger.rb, line 33
def after(status, response)
  stop_time

  # Response status
  @response_status = status
  @response_body   = response

  # Perform repotters
  @reporter.perform(collect_parameters)

  # Invoke loggers
  invoke_included_loggers(:after)
  nil
end
before() click to toggle source
# File lib/grape_logging/middleware/request_logger.rb, line 27
def before
  reset_db_runtime
  start_time
  invoke_included_loggers(:before)
end
call!(env) click to toggle source

Call stack and parse responses & status.

@note Exceptions are logged as 500 status & re-raised.

# File lib/grape_logging/middleware/request_logger.rb, line 51
def call!(env)
  @env = env

  # Before hook
  before

  # Catch error
  error = catch(:error) do
    begin
      @app_response = @app.call(@env)
    rescue => e
      # Log as 500 + message
      after(e.respond_to?(:status) ? e.status : 500, e.message)

      # Re-raise exception
      raise e
    end
    nil
  end

  # Get status & response from app_response
  # when no error occures.
  if error
    # Call with error & response
    after(error[:status], error[:message])

    # Throw again
    throw(:error, error)
  else
    status, _, resp = *@app_response

    # Call after hook properly
    after(status, resp)
  end

  # Otherwise return original response
  @app_response
end

Protected Instance Methods

parameters() click to toggle source
# File lib/grape_logging/middleware/request_logger.rb, line 92
def parameters
  {
    status: response_status,
    time: {
      total: total_runtime,
      db: db_runtime,
      view: view_runtime
    },
    method: request.request_method,
    path: request.path,
    params: request.params,
    host: request.host
  }
end

Private Instance Methods

collect_parameters() click to toggle source
# File lib/grape_logging/middleware/request_logger.rb, line 137
def collect_parameters
  parameters.tap do |params|
    @included_loggers.each do |logger|
      params.merge! logger.parameters(request, response_body) do |_, oldval, newval|
        oldval.respond_to?(:merge) ? oldval.merge(newval) : newval
      end
    end
  end
end
db_runtime() click to toggle source
# File lib/grape_logging/middleware/request_logger.rb, line 121
def db_runtime
  GrapeLogging::Timings.db_runtime.round(2)
end
invoke_included_loggers(method_name) click to toggle source
# File lib/grape_logging/middleware/request_logger.rb, line 147
def invoke_included_loggers(method_name)
  @included_loggers.each do |logger|
    logger.send(method_name) if logger.respond_to?(method_name)
  end
end
request() click to toggle source
# File lib/grape_logging/middleware/request_logger.rb, line 109
def request
  @request ||= ::Rack::Request.new(@env)
end
reset_db_runtime() click to toggle source
# File lib/grape_logging/middleware/request_logger.rb, line 125
def reset_db_runtime
  GrapeLogging::Timings.reset_db_runtime
end
start_time() click to toggle source
# File lib/grape_logging/middleware/request_logger.rb, line 129
def start_time
  @start_time ||= Time.now
end
stop_time() click to toggle source
# File lib/grape_logging/middleware/request_logger.rb, line 133
def stop_time
  @stop_time ||= Time.now
end
total_runtime() click to toggle source
# File lib/grape_logging/middleware/request_logger.rb, line 113
def total_runtime
  ((stop_time - start_time) * 1000).round(2)
end
view_runtime() click to toggle source
# File lib/grape_logging/middleware/request_logger.rb, line 117
def view_runtime
  total_runtime - db_runtime
end