remove benchmark dependency, for logging db_runtime use instance variable and not env, do not overwrite call! anymore

This commit is contained in:
aserafin 2015-05-18 22:38:43 +02:00
parent 1e194073f6
commit f465c1027c

View file

@ -1,38 +1,35 @@
require 'benchmark'
require 'grape/middleware/base' require 'grape/middleware/base'
module GrapeLogging module GrapeLogging
module Middleware module Middleware
class RequestLogger < Grape::Middleware::Base class RequestLogger < Grape::Middleware::Base
def before def before
env[:db_duration] = 0 start_time
@db_duration = 0
ActiveSupport::Notifications.subscribe('sql.active_record') do |*args| ActiveSupport::Notifications.subscribe('sql.active_record') do |*args|
event = ActiveSupport::Notifications::Event.new(*args) event = ActiveSupport::Notifications::Event.new(*args)
env[:db_duration] += event.duration @db_duration += event.duration
end if defined?(ActiveRecord) end if defined?(ActiveRecord)
end end
def call!(env) def after
original_response = nil stop_time
logger.info parameters(request, response)
duration = Benchmark.realtime { original_response = super(env) } nil
logger.info parameters(original_response, duration)
original_response
end end
protected protected
def parameters(response, duration) def parameters(request, response)
{ {
path: request.path, path: request.path,
params: request.params, params: request.params.to_hash,
method: request.request_method, method: request.request_method,
total: (duration * 1000).round(2), total: total_runtime,
db: request.env[:db_duration].round(2), db: @db_duration.round(2),
status: response.first status: response.status
} }
end end
private private
def logger def logger
@ -42,6 +39,18 @@ module GrapeLogging
def request def request
@request ||= ::Rack::Request.new(env) @request ||= ::Rack::Request.new(env)
end 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 end
end end