introducing reporters, refactoring

This commit is contained in:
aserafin 2016-03-05 10:37:33 +01:00
parent bce166747f
commit 4541d5a6c7
8 changed files with 68 additions and 41 deletions

View file

@ -5,5 +5,7 @@ require 'grape_logging/formatters/json'
require 'grape_logging/loggers/base'
require 'grape_logging/loggers/response'
require 'grape_logging/loggers/filter_parameters'
require 'grape_logging/reporters/active_support_reporter'
require 'grape_logging/reporters/logger_reporter'
require 'grape_logging/timings'
require 'grape_logging/middleware/request_logger'

View file

@ -1,9 +1,6 @@
module GrapeLogging
module Loggers
class Base
def before
end
def parameters(request, response)
{}
end

View file

@ -6,17 +6,19 @@ module GrapeLogging
@replacement = replacement
end
def parameters(request, response)
filtered_parameters = request.params.clone
@filter_parameters.each do |param|
if filtered_parameters[param.to_s]
filtered_parameters[param.to_s] = @replacement
def parameters(request, _)
{ params: replace_parameters(request.params.clone) }
end
private
def replace_parameters(parameters)
parameters.tap do |parameters|
@filter_parameters.each do |parameter_name|
if parameters.key?(parameter_name.to_s)
parameters[parameter_name.to_s] = @replacement
end
end
end
{
params: filtered_parameters
}
end
end
end

View file

@ -1,14 +1,8 @@
module GrapeLogging
module Loggers
class Response < GrapeLogging::Loggers::Base
def parameters(request, response)
if response
{
response: serialized_response_body(response)
}
else
{}
end
def parameters(_, response)
response ? { response: serialized_response_body(response) } : {}
end
private
@ -17,7 +11,7 @@ module GrapeLogging
# It's strange but it's the Grape behavior...
def serialized_response_body(response)
begin
response.body.map{ |body| JSON.parse(body) }
response.body.map{ |body| JSON.parse(body.to_s) }
rescue => e
response.body
end

View file

@ -11,36 +11,30 @@ module GrapeLogging
def initialize(app, options = {})
super
if options[:instrumentation_key]
@instrumentation_key = options[:instrumentation_key]
else
@logger = @options[:logger] || Logger.new(STDOUT)
@logger.formatter = @options[:formatter] || GrapeLogging::Formatters::Default.new
end
@included_loggers = @options[:include] || []
@reporter = if options[:instrumentation_key]
Reporters::ActiveSupportReporter.new(@options[:instrumentation_key])
else
Reporters::LoggerReporter.new(@options[:logger], @options[:formatter])
end
end
def before
reset_db_runtime
start_time
@included_loggers.each(&:before)
invoke_included_loggers(:before)
end
def after
stop_time
params = parameters
@included_loggers.each do |included_logger|
params.merge! included_logger.parameters(request, response) do |key, oldval, newval|
oldval.respond_to?(:merge) ? oldval.merge(newval) : newval
end
end
if @instrumentation_key
ActiveSupport::Notifications.instrument @instrumentation_key, params
else
@logger.info params
end
@included_loggers.each { |included_logger| included_logger.after if included_logger.respond_to?(:after) }
params = collect_parameters
@reporter.perform(params)
invoke_included_loggers(:after)
nil
end
@ -101,6 +95,21 @@ module GrapeLogging
@stop_time ||= Time.now
end
def collect_parameters
parameters.tap do |params|
@included_loggers.each do |logger|
params.merge! logger.parameters(request, response) do |_, oldval, newval|
oldval.respond_to?(:merge) ? oldval.merge(newval) : newval
end
end
end
end
def invoke_included_loggers(method_name)
@included_loggers.each do |logger|
logger.send(method_name) if logger.respond_to?(method_name)
end
end
end
end
end

View file

@ -0,0 +1,11 @@
module Reporters
class ActiveSupportReporter
def initialize(instrumentation_key)
@instrumentation_key = instrumentation_key
end
def perform(params)
ActiveSupport::Notifications.instrument @instrumentation_key, params
end
end
end

View file

@ -0,0 +1,12 @@
module Reporters
class LoggerReporter
def initialize(logger, formatter)
@logger = logger || Logger.new(STDOUT)
@logger.formatter = formatter || GrapeLogging::Formatters::Default.new
end
def perform(params)
@logger.info params
end
end
end

View file

@ -1,3 +1,3 @@
module GrapeLogging
VERSION = '1.1.3'
VERSION = '1.2.0'
end