class Stasher::LogSubscriber
Public Instance Methods
process_action(ev)
click to toggle source
# File lib/stasher/log_subscriber.rb, line 16 def process_action(ev) payload = ev.payload data = extract_request(payload) data.merge! extract_status(payload) data.merge! runtimes(ev) data.merge! extract_exception(payload) data.merge! extract_current_scope log_event 'response', data do |event| event.tags << 'exception' if payload[:exception] end # Clear the scope at the end of the request Stasher::CurrentScope.clear! end
redirect_to(ev)
click to toggle source
# File lib/stasher/log_subscriber.rb, line 47 def redirect_to(ev) Stasher::CurrentScope.fields[:location] = ev.payload[:location] end
sql(ev)
click to toggle source
# File lib/stasher/log_subscriber.rb, line 33 def sql(ev) payload = ev.payload return if 'SCHEMA' == payload[:name] return if payload[:name].blank? return if payload[:name] =~ /ActiveRecord::SessionStore/ data = extract_sql(payload) data.merge! runtimes(ev) data.merge! extract_current_scope log_event 'sql', data end
start_processing(ev)
click to toggle source
# File lib/stasher/log_subscriber.rb, line 6 def start_processing(ev) # Initialize the scope at the start of the request payload = ev.payload data = extract_request(payload) data.merge! extract_current_scope log_event 'request', data end
Private Instance Methods
extract_current_scope()
click to toggle source
# File lib/stasher/log_subscriber.rb, line 113 def extract_current_scope CurrentScope.fields end
extract_exception(payload)
click to toggle source
Monkey patching to enable exception logging
# File lib/stasher/log_subscriber.rb, line 118 def extract_exception(payload) if payload[:exception] exception, message = payload[:exception] Stasher.format_exception(exception, message, $!.backtrace.join("\n")) else {} end end
extract_format(payload)
click to toggle source
# File lib/stasher/log_subscriber.rb, line 86 def extract_format(payload) if ::ActionPack::VERSION::MAJOR == 3 && ::ActionPack::VERSION::MINOR == 0 payload[:formats].first else payload[:format] end end
extract_parms(payload)
click to toggle source
# File lib/stasher/log_subscriber.rb, line 78 def extract_parms(payload) payload[:params].except(*ActionController::LogSubscriber::INTERNAL_PARAMS) if payload.include?(:params) end
extract_path(payload)
click to toggle source
# File lib/stasher/log_subscriber.rb, line 82 def extract_path(payload) payload[:path].split("?").first end
extract_request(payload)
click to toggle source
# File lib/stasher/log_subscriber.rb, line 66 def extract_request(payload) { :method => payload[:method], :ip => payload[:ip], :params => extract_parms(payload), :path => extract_path(payload), :format => extract_format(payload), :controller => payload[:params]['controller'], :action => payload[:params]['action'] } end
extract_sql(payload)
click to toggle source
# File lib/stasher/log_subscriber.rb, line 59 def extract_sql(payload) { :name => payload[:name], :sql => payload[:sql].squeeze(' '), } end
extract_status(payload)
click to toggle source
# File lib/stasher/log_subscriber.rb, line 94 def extract_status(payload) if payload[:status] { :status => payload[:status].to_i } else { :status => 0 } end end
log_event(type, data) { |event| ... }
click to toggle source
# File lib/stasher/log_subscriber.rb, line 53 def log_event(type, data) event = LogStash::Event.new('@fields' => data, '@tags' => [type], '@source' => Stasher.source) yield(event) if block_given? Stasher.logger << event.to_json + "\n" end
runtimes(event)
click to toggle source
# File lib/stasher/log_subscriber.rb, line 102 def runtimes(event) { :duration => event.duration, :view => event.payload[:view_runtime], :db => event.payload[:db_runtime] }.inject({}) do |runtimes, (name, runtime)| runtimes[name] = runtime.to_f.round(2) if runtime runtimes end end