class TingYun::Instrumentation::Support::EventedSubscriber
Public Class Methods
new()
click to toggle source
# File lib/ting_yun/instrumentation/support/evented_subscriber.rb, line 6 def initialize @queue_key = ['TingYun', self.class.name, object_id].join('-') end
subscribe(pattern)
click to toggle source
# File lib/ting_yun/instrumentation/support/evented_subscriber.rb, line 16 def self.subscribe(pattern) unless subscribed? ActiveSupport::Notifications.subscribe(pattern, new) end end
subscribed?()
click to toggle source
# File lib/ting_yun/instrumentation/support/evented_subscriber.rb, line 10 def self.subscribed? # rather than digging through Listener ivars ActiveSupport::Notifications.notifier.instance_variable_get(:@subscribers) \ .find{|s| s.instance_variable_get(:@delegate).class == self } end
Public Instance Methods
event_stack()
click to toggle source
# File lib/ting_yun/instrumentation/support/evented_subscriber.rb, line 54 def event_stack Thread.current[@queue_key] ||= Hash.new {|h,id| h[id] = [] } end
finish(name, id, payload)
click to toggle source
# File lib/ting_yun/instrumentation/support/evented_subscriber.rb, line 28 def finish(name, id, payload) pop_event(id) end
log_notification_error(error, name, event_type)
click to toggle source
# File lib/ting_yun/instrumentation/support/evented_subscriber.rb, line 32 def log_notification_error(error, name, event_type) # These are important enough failures that we want the backtraces # logged at error level, hence the explicit log_exception call. TingYun::Agent.logger.error("Error during #{event_type} callback for event '#{name}':") TingYun::Agent.logger.log_exception(:error, error) end
pop_event(transaction_id)
click to toggle source
# File lib/ting_yun/instrumentation/support/evented_subscriber.rb, line 48 def pop_event(transaction_id) event = event_stack[transaction_id].pop event.end = Time.now event end
push_event(event)
click to toggle source
# File lib/ting_yun/instrumentation/support/evented_subscriber.rb, line 39 def push_event(event) parent = event_stack[event.transaction_id].last if parent && event.respond_to?(:parent=) event.parent = parent parent << event end event_stack[event.transaction_id].push event end
start(name, id, payload)
click to toggle source
# File lib/ting_yun/instrumentation/support/evented_subscriber.rb, line 22 def start(name, id, payload) event = ActiveSupport::Notifications::Event.new(name, Time.now, nil, id, payload) push_event(event) event end