Sha256: 11792efad10f3667aa2a1768a35959c77fb042211ac6a203abc58b840afe8a0b

Contents?: true

Size: 1.3 KB

Versions: 86

Compression:

Stored size: 1.3 KB

Contents

# encoding: utf-8
# This file is distributed under New Relic's license terms.
# See https://github.com/newrelic/rpm/blob/master/LICENSE for complete details.

module NewRelic::Agent
  # Basic mechanism for the agent instance to provide agent-wide eventing.
  # It is intended to keep different pieces of the app decoupled from each other.
  #
  # While an EventListener could be used elsewhere, it's strongly expected
  # your eventing needs should be met by the agent's instance.
  class EventListener

    attr_accessor :runaway_threshold

    def initialize
      @events = {}
      @runaway_threshold = 100
    end

    def subscribe(event, &handler)
      @events[event] ||= []
      @events[event] << handler
      check_for_runaway_subscriptions(event)
    end

    def check_for_runaway_subscriptions(event)
      count = @events[event].size
      NewRelic::Agent.logger.debug("Run-away event subscription on #{event}? Subscribed #{count}") if count > @runaway_threshold
    end

    def clear
      @events.clear
    end

    def notify(event, *args)
      return unless @events.has_key?(event)

      @events[event].each do |handler|
        begin
          handler.call(*args)
        rescue => err
          NewRelic::Agent.logger.debug("Failure during notify for #{event}", err)
        end
      end
    end
  end
end

Version data entries

86 entries across 86 versions & 2 rubygems

Version Path
newrelic_rpm-6.11.0.365 lib/new_relic/agent/event_listener.rb
newrelic_rpm-6.10.0.364 lib/new_relic/agent/event_listener.rb
newrelic_rpm-6.9.0.363 lib/new_relic/agent/event_listener.rb
newrelic_rpm-6.8.0.360 lib/new_relic/agent/event_listener.rb
newrelic_rpm-6.7.0.359 lib/new_relic/agent/event_listener.rb
newrelic_rpm-6.6.0.358 lib/new_relic/agent/event_listener.rb
newrelic_rpm-6.5.0.357 lib/new_relic/agent/event_listener.rb
newrelic_rpm-6.4.0.356 lib/new_relic/agent/event_listener.rb
newrelic_rpm-6.3.0.355 lib/new_relic/agent/event_listener.rb
newrelic_rpm-6.2.0.354 lib/new_relic/agent/event_listener.rb
newrelic_rpm-6.1.0.352 lib/new_relic/agent/event_listener.rb
newrelic_rpm-6.0.0.351 lib/new_relic/agent/event_listener.rb
newrelic_rpm-5.7.0.350 lib/new_relic/agent/event_listener.rb
newrelic_rpm-5.6.0.349 lib/new_relic/agent/event_listener.rb
newrelic_rpm-5.5.0.348 lib/new_relic/agent/event_listener.rb
newrelic_rpm-5.4.0.347 lib/new_relic/agent/event_listener.rb
newrelic_rpm-5.3.0.346 lib/new_relic/agent/event_listener.rb
newrelic_rpm-5.2.0.345 lib/new_relic/agent/event_listener.rb
newrelic_rpm-5.1.0.344 lib/new_relic/agent/event_listener.rb
newrelic_rpm-5.0.0.342 lib/new_relic/agent/event_listener.rb