Class: Datadog::Contrib::ActiveSupport::Notifications::Subscription

Inherits:
Object
  • Object
show all
Defined in:
lib/ddtrace/contrib/active_support/notifications/subscription.rb

Overview

An ActiveSupport::Notification subscription that wraps events with tracing.

Defined Under Namespace

Classes: Callbacks, Handler

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(tracer, span_name, options, &block) ⇒ Subscription

Returns a new instance of Subscription.

Raises:

  • (ArgumentError)


12
13
14
15
16
17
18
19
20
# File 'lib/ddtrace/contrib/active_support/notifications/subscription.rb', line 12

def initialize(tracer, span_name, options, &block)
  raise ArgumentError, 'Must be given a block!' unless block

  @tracer = tracer
  @span_name = span_name
  @options = options
  @handler = Handler.new(&block)
  @callbacks = Callbacks.new
end

Instance Attribute Details

#optionsObject

Returns the value of attribute options.



8
9
10
# File 'lib/ddtrace/contrib/active_support/notifications/subscription.rb', line 8

def options
  @options
end

#span_nameObject

Returns the value of attribute span_name.



8
9
10
# File 'lib/ddtrace/contrib/active_support/notifications/subscription.rb', line 8

def span_name
  @span_name
end

Instance Method Details

#after_trace(&block) ⇒ Object



46
47
48
# File 'lib/ddtrace/contrib/active_support/notifications/subscription.rb', line 46

def after_trace(&block)
  callbacks.add(:after_trace, &block) if block
end

#before_trace(&block) ⇒ Object



42
43
44
# File 'lib/ddtrace/contrib/active_support/notifications/subscription.rb', line 42

def before_trace(&block)
  callbacks.add(:before_trace, &block) if block
end

#call(name, start, finish, id, payload) ⇒ Object

ActiveSupport 3.x calls this



27
28
29
30
# File 'lib/ddtrace/contrib/active_support/notifications/subscription.rb', line 27

def call(name, start, finish, id, payload)
  start_span(name, id, payload, start)
  finish_span(name, id, payload, finish)
end

#finish(name, id, payload) ⇒ Object

ActiveSupport 4+ calls this on finish



38
39
40
# File 'lib/ddtrace/contrib/active_support/notifications/subscription.rb', line 38

def finish(name, id, payload)
  finish_span(name, id, payload)
end

#start(name, id, payload) ⇒ Object

ActiveSupport 4+ calls this on start



33
34
35
# File 'lib/ddtrace/contrib/active_support/notifications/subscription.rb', line 33

def start(name, id, payload)
  start_span(name, id, payload)
end

#subscribe(pattern) ⇒ Object



50
51
52
53
54
55
# File 'lib/ddtrace/contrib/active_support/notifications/subscription.rb', line 50

def subscribe(pattern)
  return false if subscribers.key?(pattern)

  subscribers[pattern] = ::ActiveSupport::Notifications.subscribe(pattern, self)
  true
end

#tracerObject



22
23
24
# File 'lib/ddtrace/contrib/active_support/notifications/subscription.rb', line 22

def tracer
  @tracer.is_a?(Proc) ? @tracer.call : @tracer
end

#unsubscribe(pattern) ⇒ Object



57
58
59
60
61
62
63
# File 'lib/ddtrace/contrib/active_support/notifications/subscription.rb', line 57

def unsubscribe(pattern)
  return false unless subscribers.key?(pattern)

  ::ActiveSupport::Notifications.unsubscribe(subscribers[pattern])
  subscribers.delete(pattern)
  true
end

#unsubscribe_allObject



65
66
67
68
69
70
# File 'lib/ddtrace/contrib/active_support/notifications/subscription.rb', line 65

def unsubscribe_all
  return false if subscribers.empty?

  subscribers.each_key { |pattern| unsubscribe(pattern) }
  true
end