class Datadog::Event

A simple pub-sub event model for components to exchange messages through.

Attributes

name[R]
subscriptions[R]

Public Class Methods

new(name) click to toggle source
# File lib/ddtrace/event.rb, line 11
def initialize(name)
  @name = name
  @subscriptions = {}
  @mutex = Mutex.new
end

Public Instance Methods

publish(*args) click to toggle source
# File lib/ddtrace/event.rb, line 39
def publish(*args)
  @mutex.synchronize do
    subscriptions.each do |key, block|
      begin
        block.call(*args)
      rescue StandardError => e
        Datadog.logger.debug("Error while handling '#{key}' for '#{name}' event: #{e.message}")
      end
    end

    true
  end
end
subscribe(key, &block) click to toggle source
# File lib/ddtrace/event.rb, line 17
def subscribe(key, &block)
  raise ArgumentError, 'Must give a block to subscribe!' unless block

  @mutex.synchronize do
    subscriptions[key] = block
  end
end
unsubscribe(key) click to toggle source
# File lib/ddtrace/event.rb, line 25
def unsubscribe(key)
  @mutex.synchronize do
    subscriptions.delete(key)
  end
end
unsubscribe_all!() click to toggle source
# File lib/ddtrace/event.rb, line 31
def unsubscribe_all!
  @mutex.synchronize do
    subscriptions.clear
  end

  true
end