mirror of
https://github.com/samsonjs/grape_logging.git
synced 2026-04-27 14:57:40 +00:00
introducing reporters, refactoring
This commit is contained in:
parent
bce166747f
commit
4541d5a6c7
8 changed files with 68 additions and 41 deletions
|
|
@ -5,5 +5,7 @@ require 'grape_logging/formatters/json'
|
||||||
require 'grape_logging/loggers/base'
|
require 'grape_logging/loggers/base'
|
||||||
require 'grape_logging/loggers/response'
|
require 'grape_logging/loggers/response'
|
||||||
require 'grape_logging/loggers/filter_parameters'
|
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/timings'
|
||||||
require 'grape_logging/middleware/request_logger'
|
require 'grape_logging/middleware/request_logger'
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,6 @@
|
||||||
module GrapeLogging
|
module GrapeLogging
|
||||||
module Loggers
|
module Loggers
|
||||||
class Base
|
class Base
|
||||||
def before
|
|
||||||
end
|
|
||||||
|
|
||||||
def parameters(request, response)
|
def parameters(request, response)
|
||||||
{}
|
{}
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -6,17 +6,19 @@ module GrapeLogging
|
||||||
@replacement = replacement
|
@replacement = replacement
|
||||||
end
|
end
|
||||||
|
|
||||||
def parameters(request, response)
|
def parameters(request, _)
|
||||||
filtered_parameters = request.params.clone
|
{ params: replace_parameters(request.params.clone) }
|
||||||
@filter_parameters.each do |param|
|
end
|
||||||
if filtered_parameters[param.to_s]
|
|
||||||
filtered_parameters[param.to_s] = @replacement
|
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
|
||||||
end
|
end
|
||||||
|
|
||||||
{
|
|
||||||
params: filtered_parameters
|
|
||||||
}
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,8 @@
|
||||||
module GrapeLogging
|
module GrapeLogging
|
||||||
module Loggers
|
module Loggers
|
||||||
class Response < GrapeLogging::Loggers::Base
|
class Response < GrapeLogging::Loggers::Base
|
||||||
def parameters(request, response)
|
def parameters(_, response)
|
||||||
if response
|
response ? { response: serialized_response_body(response) } : {}
|
||||||
{
|
|
||||||
response: serialized_response_body(response)
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{}
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
@ -17,7 +11,7 @@ module GrapeLogging
|
||||||
# It's strange but it's the Grape behavior...
|
# It's strange but it's the Grape behavior...
|
||||||
def serialized_response_body(response)
|
def serialized_response_body(response)
|
||||||
begin
|
begin
|
||||||
response.body.map{ |body| JSON.parse(body) }
|
response.body.map{ |body| JSON.parse(body.to_s) }
|
||||||
rescue => e
|
rescue => e
|
||||||
response.body
|
response.body
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -11,36 +11,30 @@ module GrapeLogging
|
||||||
|
|
||||||
def initialize(app, options = {})
|
def initialize(app, options = {})
|
||||||
super
|
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] || []
|
@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
|
end
|
||||||
|
|
||||||
def before
|
def before
|
||||||
reset_db_runtime
|
reset_db_runtime
|
||||||
start_time
|
start_time
|
||||||
@included_loggers.each(&:before)
|
|
||||||
|
invoke_included_loggers(:before)
|
||||||
end
|
end
|
||||||
|
|
||||||
def after
|
def after
|
||||||
stop_time
|
stop_time
|
||||||
|
|
||||||
params = parameters
|
params = collect_parameters
|
||||||
@included_loggers.each do |included_logger|
|
@reporter.perform(params)
|
||||||
params.merge! included_logger.parameters(request, response) do |key, oldval, newval|
|
|
||||||
oldval.respond_to?(:merge) ? oldval.merge(newval) : newval
|
invoke_included_loggers(:after)
|
||||||
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) }
|
|
||||||
nil
|
nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -101,6 +95,21 @@ module GrapeLogging
|
||||||
@stop_time ||= Time.now
|
@stop_time ||= Time.now
|
||||||
end
|
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
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
11
lib/grape_logging/reporters/active_support_reporter.rb
Normal file
11
lib/grape_logging/reporters/active_support_reporter.rb
Normal 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
|
||||||
12
lib/grape_logging/reporters/logger_reporter.rb
Normal file
12
lib/grape_logging/reporters/logger_reporter.rb
Normal 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
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
module GrapeLogging
|
module GrapeLogging
|
||||||
VERSION = '1.1.3'
|
VERSION = '1.2.0'
|
||||||
end
|
end
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue