diff --git a/lib/grape_logging/middleware/request_logger.rb b/lib/grape_logging/middleware/request_logger.rb index c2736ec..121fe9c 100644 --- a/lib/grape_logging/middleware/request_logger.rb +++ b/lib/grape_logging/middleware/request_logger.rb @@ -1,38 +1,35 @@ -require 'benchmark' require 'grape/middleware/base' module GrapeLogging module Middleware class RequestLogger < Grape::Middleware::Base def before - env[:db_duration] = 0 + start_time + @db_duration = 0 ActiveSupport::Notifications.subscribe('sql.active_record') do |*args| event = ActiveSupport::Notifications::Event.new(*args) - env[:db_duration] += event.duration + @db_duration += event.duration end if defined?(ActiveRecord) end - def call!(env) - original_response = nil - - duration = Benchmark.realtime { original_response = super(env) } - logger.info parameters(original_response, duration) - - original_response + def after + stop_time + logger.info parameters(request, response) + nil end protected - def parameters(response, duration) - { - path: request.path, - params: request.params, - method: request.request_method, - total: (duration * 1000).round(2), - db: request.env[:db_duration].round(2), - status: response.first - } - end + def parameters(request, response) + { + path: request.path, + params: request.params.to_hash, + method: request.request_method, + total: total_runtime, + db: @db_duration.round(2), + status: response.status + } + end private def logger @@ -42,6 +39,18 @@ module GrapeLogging def request @request ||= ::Rack::Request.new(env) end + + def total_runtime + ((stop_time - start_time) * 1000).round(2) + end + + def start_time + @start_time ||= Time.now + end + + def stop_time + @stop_time ||= Time.now + end end end end \ No newline at end of file