class Sapience::Extensions::Sinatra::Middleware::Logging

Public Class Methods

new(app, options = {}) click to toggle source
# File lib/sapience/extensions/sinatra/middleware/logging.rb, line 16
def initialize(app, options = {})
  @app = app
  @logger = options[:logger]
end

Public Instance Methods

call(env) click to toggle source
# File lib/sapience/extensions/sinatra/middleware/logging.rb, line 21
def call(env)
  call!(env)
end

Protected Instance Methods

after() click to toggle source
# File lib/sapience/extensions/sinatra/middleware/logging.rb, line 54
def after
  stop_time
  @logger.info(parameters)
end
after_exception(exc) click to toggle source
# File lib/sapience/extensions/sinatra/middleware/logging.rb, line 59
def after_exception(exc) # rubocop:disable Lint/UnusedMethodArgument
  @status = 500
  after
end
after_failure(error) click to toggle source
# File lib/sapience/extensions/sinatra/middleware/logging.rb, line 64
def after_failure(error)
  @status = error[:status]
  after
end
before() click to toggle source
# File lib/sapience/extensions/sinatra/middleware/logging.rb, line 49
def before
  reset_db_runtime
  start_time
end
call!(env) click to toggle source
# File lib/sapience/extensions/sinatra/middleware/logging.rb, line 27
def call!(env)
  @env = env
  before
  error = catch(:error) do
    begin
      @app_response = @app.call(@env)
    rescue StandardError => e
      after_exception(e)
      raise e
    end
    nil
  end
  if error
    after_failure(error)
    throw(:error, error)
  else
    @status, = *@app_response
    after
  end
  @app_response
end
parameters() click to toggle source
# File lib/sapience/extensions/sinatra/middleware/logging.rb, line 69
def parameters # rubocop:disable AbcSize
  {
    method: request.request_method,
    request_path: @env["REQUEST_URI"] || @env["PATH_INFO"],
    status: @status,
    route: @env["sinatra.route"].to_s,
    host: request.host,
    ip: (request.env["HTTP_X_FORWARDED_FOR"] || request.env["REMOTE_ADDR"]),
    ua: request.env["HTTP_USER_AGENT"],
    tags: Sapience.tags,
    params: request.params,
    runtimes: {
      total: total_runtime,
      view: view_runtime,
      db: db_runtime,
    },
  }
end

Private Instance Methods

db_runtime() click to toggle source
# File lib/sapience/extensions/sinatra/middleware/logging.rb, line 102
def db_runtime
  Sinatra::Timings.db_runtime.round(3)
end
request() click to toggle source
# File lib/sapience/extensions/sinatra/middleware/logging.rb, line 90
def request
  @request ||= ::Rack::Request.new(@env)
end
reset_db_runtime() click to toggle source
# File lib/sapience/extensions/sinatra/middleware/logging.rb, line 106
def reset_db_runtime
  Sinatra::Timings.reset_db_runtime
end
start_time() click to toggle source
# File lib/sapience/extensions/sinatra/middleware/logging.rb, line 110
def start_time
  @start_time ||= Time.now
end
stop_time() click to toggle source
# File lib/sapience/extensions/sinatra/middleware/logging.rb, line 114
def stop_time
  @stop_time ||= Time.now
end
total_runtime() click to toggle source
# File lib/sapience/extensions/sinatra/middleware/logging.rb, line 94
def total_runtime
  ((stop_time - start_time) * 1000).round(3)
end
view_runtime() click to toggle source
# File lib/sapience/extensions/sinatra/middleware/logging.rb, line 98
def view_runtime
  total_runtime - db_runtime
end