class Mmtrix::Agent::SamplerCollection

Public Class Methods

new(event_listener) click to toggle source
# File lib/mmtrix/agent/sampler_collection.rb, line 10
def initialize(event_listener)
  @samplers = []
  @event_listener = event_listener
  @event_listener.subscribe(:before_harvest) { poll_samplers }
end

Public Instance Methods

add_sampler(sampler_class) click to toggle source
# File lib/mmtrix/agent/sampler_collection.rb, line 50
def add_sampler(sampler_class)
  supported = sampler_class.supported_on_this_platform?
  enabled   = sampler_class.enabled?
  if supported && enabled
    if !sampler_class_registered?(sampler_class)
      sampler = sampler_class.new
      sampler.setup_events(@event_listener) if sampler.respond_to?(:setup_events)
      @samplers << sampler
      ::Mmtrix::Agent.logger.debug("Registered #{sampler_class.name} for harvest time sampling.")
    else
      ::Mmtrix::Agent.logger.warn("Ignoring addition of #{sampler_class.name} because it is already registered.")
    end
  else
    ::Mmtrix::Agent.logger.debug("#{sampler_class.name} not supported on this platform.")
  end
rescue Mmtrix::Agent::Sampler::Unsupported => e
  ::Mmtrix::Agent.logger.info("#{sampler_class.name} not available: #{e}")
rescue => e
  ::Mmtrix::Agent.logger.error("Error registering sampler:", e)
end
clear() click to toggle source
# File lib/mmtrix/agent/sampler_collection.rb, line 20
def clear()
  @samplers.clear
end
each(&blk) click to toggle source
# File lib/mmtrix/agent/sampler_collection.rb, line 16
def each(&blk)
  @samplers.each(&blk)
end
load_samplers() click to toggle source

adds samplers to the sampler collection so that they run every minute. This is dynamically recognized by any class that subclasses Mmtrix::Agent::Sampler

# File lib/mmtrix/agent/sampler_collection.rb, line 31
def load_samplers
  Sampler.sampler_classes.each do |subclass|
    add_sampler(subclass)
  end
end
poll_samplers() click to toggle source
# File lib/mmtrix/agent/sampler_collection.rb, line 38
def poll_samplers
  @samplers.delete_if do |sampler|
    begin
      sampler.poll
      false # it's okay.  don't delete it.
    rescue => e
      ::Mmtrix::Agent.logger.warn("Removing #{sampler} from list", e)
      true # remove the sampler
    end
  end
end
sampler_class_registered?(sampler_class) click to toggle source
# File lib/mmtrix/agent/sampler_collection.rb, line 24
def sampler_class_registered?(sampler_class)
  self.any? { |s| s.class == sampler_class }
end