class Datadog::Contrib::ActiveSupport::Notifications::Subscription
An ActiveSupport::Notification subscription that wraps events with tracing.
Attributes
callbacks[R]
handler[R]
options[RW]
span_name[RW]
Public Class Methods
new(tracer, span_name, options, &block)
click to toggle source
# File lib/ddtrace/contrib/active_support/notifications/subscription.rb, line 11 def initialize(tracer, span_name, options, &block) raise ArgumentError, 'Must be given a block!' unless block_given? @tracer = tracer @span_name = span_name @options = options @handler = Handler.new(&block) @callbacks = Callbacks.new end
Public Instance Methods
after_trace(&block)
click to toggle source
# File lib/ddtrace/contrib/active_support/notifications/subscription.rb, line 44 def after_trace(&block) callbacks.add(:after_trace, &block) if block_given? end
before_trace(&block)
click to toggle source
# File lib/ddtrace/contrib/active_support/notifications/subscription.rb, line 40 def before_trace(&block) callbacks.add(:before_trace, &block) if block_given? end
call(name, start, finish, id, payload)
click to toggle source
ActiveSupport
3.x calls this
# File lib/ddtrace/contrib/active_support/notifications/subscription.rb, line 25 def call(name, start, finish, id, payload) start_span(name, id, payload, start) finish_span(name, id, payload, finish) end
finish(name, id, payload)
click to toggle source
ActiveSupport
4+ calls this on finish
# File lib/ddtrace/contrib/active_support/notifications/subscription.rb, line 36 def finish(name, id, payload) finish_span(name, id, payload) end
start(name, id, payload)
click to toggle source
ActiveSupport
4+ calls this on start
# File lib/ddtrace/contrib/active_support/notifications/subscription.rb, line 31 def start(name, id, payload) start_span(name, id, payload) end
subscribe(pattern)
click to toggle source
# File lib/ddtrace/contrib/active_support/notifications/subscription.rb, line 48 def subscribe(pattern) return false if subscribers.key?(pattern) subscribers[pattern] = ::ActiveSupport::Notifications.subscribe(pattern, self) true end
tracer()
click to toggle source
# File lib/ddtrace/contrib/active_support/notifications/subscription.rb, line 20 def tracer @tracer.is_a?(Proc) ? @tracer.call : @tracer end
unsubscribe(pattern)
click to toggle source
# File lib/ddtrace/contrib/active_support/notifications/subscription.rb, line 54 def unsubscribe(pattern) return false unless subscribers.key?(pattern) ::ActiveSupport::Notifications.unsubscribe(subscribers[pattern]) subscribers.delete(pattern) true end
unsubscribe_all()
click to toggle source
# File lib/ddtrace/contrib/active_support/notifications/subscription.rb, line 61 def unsubscribe_all return false if subscribers.empty? subscribers.keys.each { |pattern| unsubscribe(pattern) } true end
Protected Instance Methods
finish_span(name, id, payload, finish = nil)
click to toggle source
# File lib/ddtrace/contrib/active_support/notifications/subscription.rb, line 85 def finish_span(name, id, payload, finish = nil) payload[:datadog_span].tap do |span| # If no active span, return. return nil if span.nil? # Run handler for event handler.run(span, name, id, payload) # Finish the span span.finish(finish) # Run callbacks callbacks.run(name, :after_trace, span, id, payload, finish) end end
start_span(name, id, payload, start = nil)
click to toggle source
# File lib/ddtrace/contrib/active_support/notifications/subscription.rb, line 73 def start_span(name, id, payload, start = nil) # Run callbacks callbacks.run(name, :before_trace, id, payload, start) # Start a trace tracer.trace(@span_name, @options.dup).tap do |span| # Assign start time if provided span.start_time = start unless start.nil? payload[:datadog_span] = span end end
subscribers()
click to toggle source
Pattern => ActiveSupport:Notifications::Subscribers
# File lib/ddtrace/contrib/active_support/notifications/subscription.rb, line 102 def subscribers @subscribers ||= {} end