From 4541d5a6c77b5710fb3aecb179408e45a3b2d861 Mon Sep 17 00:00:00 2001 From: aserafin Date: Sat, 5 Mar 2016 10:37:33 +0100 Subject: [PATCH] introducing reporters, refactoring --- lib/grape_logging.rb | 2 + lib/grape_logging/loggers/base.rb | 3 -- .../loggers/filter_parameters.rb | 20 ++++---- lib/grape_logging/loggers/response.rb | 12 ++--- .../middleware/request_logger.rb | 47 +++++++++++-------- .../reporters/active_support_reporter.rb | 11 +++++ .../reporters/logger_reporter.rb | 12 +++++ lib/grape_logging/version.rb | 2 +- 8 files changed, 68 insertions(+), 41 deletions(-) create mode 100644 lib/grape_logging/reporters/active_support_reporter.rb create mode 100644 lib/grape_logging/reporters/logger_reporter.rb diff --git a/lib/grape_logging.rb b/lib/grape_logging.rb index d23956a..0fe9c3e 100644 --- a/lib/grape_logging.rb +++ b/lib/grape_logging.rb @@ -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' diff --git a/lib/grape_logging/loggers/base.rb b/lib/grape_logging/loggers/base.rb index c098eae..d2e9e11 100644 --- a/lib/grape_logging/loggers/base.rb +++ b/lib/grape_logging/loggers/base.rb @@ -1,9 +1,6 @@ module GrapeLogging module Loggers class Base - def before - end - def parameters(request, response) {} end diff --git a/lib/grape_logging/loggers/filter_parameters.rb b/lib/grape_logging/loggers/filter_parameters.rb index 2559310..c7942e1 100644 --- a/lib/grape_logging/loggers/filter_parameters.rb +++ b/lib/grape_logging/loggers/filter_parameters.rb @@ -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 diff --git a/lib/grape_logging/loggers/response.rb b/lib/grape_logging/loggers/response.rb index bc671c3..83a248a 100644 --- a/lib/grape_logging/loggers/response.rb +++ b/lib/grape_logging/loggers/response.rb @@ -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 diff --git a/lib/grape_logging/middleware/request_logger.rb b/lib/grape_logging/middleware/request_logger.rb index e1b4a06..41cecc9 100644 --- a/lib/grape_logging/middleware/request_logger.rb +++ b/lib/grape_logging/middleware/request_logger.rb @@ -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 diff --git a/lib/grape_logging/reporters/active_support_reporter.rb b/lib/grape_logging/reporters/active_support_reporter.rb new file mode 100644 index 0000000..392f9ae --- /dev/null +++ b/lib/grape_logging/reporters/active_support_reporter.rb @@ -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 \ No newline at end of file diff --git a/lib/grape_logging/reporters/logger_reporter.rb b/lib/grape_logging/reporters/logger_reporter.rb new file mode 100644 index 0000000..b0631a6 --- /dev/null +++ b/lib/grape_logging/reporters/logger_reporter.rb @@ -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 \ No newline at end of file diff --git a/lib/grape_logging/version.rb b/lib/grape_logging/version.rb index 7a37aea..94f33be 100644 --- a/lib/grape_logging/version.rb +++ b/lib/grape_logging/version.rb @@ -1,3 +1,3 @@ module GrapeLogging - VERSION = '1.1.3' + VERSION = '1.2.0' end