class Skylight::Core::Subscriber
@api private
Attributes
config[R]
normalizers[R]
Public Class Methods
new(config, instrumenter)
click to toggle source
# File lib/skylight/core/subscriber.rb, line 8 def initialize(config, instrumenter) @config = config @normalizers = Normalizers.build(config) @instrumenter = instrumenter @subscribers = [] end
Public Instance Methods
finish(name, _id, payload)
click to toggle source
# File lib/skylight/core/subscriber.rb, line 47 def finish(name, _id, payload) return if @instrumenter.disabled? return unless (trace = @instrumenter.current_trace) while (curr = trace.notifications.pop) next unless curr.name == name meta = {} meta[:exception] = payload[:exception] if payload[:exception] meta[:exception_object] = payload[:exception_object] if payload[:exception_object] trace.done(curr.span, meta) if curr.span normalize_after(trace, curr.span, name, payload) return end rescue Exception => e error "Subscriber#finish error; msg=%s", e.message debug "trace=%s", trace.inspect debug "in: name=%s", name.inspect debug "in: payload=%s", payload.inspect t { e.backtrace.join("\n") } nil end
publish(name, *args)
click to toggle source
# File lib/skylight/core/subscriber.rb, line 70 def publish(name, *args) # Ignored for now because nothing in rails uses it end
register!()
click to toggle source
# File lib/skylight/core/subscriber.rb, line 15 def register! unregister! @normalizers.keys.each do |key| @subscribers << ActiveSupport::Notifications.subscribe(key, self) end end
start(name, _id, payload)
click to toggle source
# File lib/skylight/core/subscriber.rb, line 41 def start(name, _id, payload) return if @instrumenter.disabled? return unless (trace = @instrumenter.current_trace) _start(trace, name, payload) end
unregister!()
click to toggle source
# File lib/skylight/core/subscriber.rb, line 22 def unregister! ActiveSupport::Notifications.unsubscribe @subscribers.shift until @subscribers.empty? end
Private Instance Methods
_start(trace, name, payload)
click to toggle source
# File lib/skylight/core/subscriber.rb, line 84 def _start(trace, name, payload) result = normalize(trace, name, payload) unless result == :skip case result.size when 3, 4 cat, title, desc, meta = result else raise "Invalid normalizer result: #{result.inspect}" end span = trace.instrument(cat, title, desc, meta) end rescue Exception => e error "Subscriber#start error; msg=%s", e.message debug "trace=%s", trace.inspect debug "in: name=%s", name.inspect debug "in: payload=%s", payload.inspect debug "out: cat=%s, title=%s, desc=%s", cat.inspect, name.inspect, desc.inspect t { e.backtrace.join("\n") } nil ensure trace.notifications << Notification.new(name, span) end
normalize(*args)
click to toggle source
# File lib/skylight/core/subscriber.rb, line 76 def normalize(*args) @normalizers.normalize(*args) end
normalize_after(*args)
click to toggle source
# File lib/skylight/core/subscriber.rb, line 80 def normalize_after(*args) @normalizers.normalize_after(*args) end