Sha256: 66e5d2925cf315e8893e34b93f8fbdd831e37638a9cfc855e25b5d0cd27b0207

Contents?: true

Size: 1.92 KB

Versions: 3

Compression:

Stored size: 1.92 KB

Contents

# encoding: utf-8

module OneApm
  module Agent
    class SamplerCollection
      include Enumerable

      def initialize(event_listener)
        @samplers = []
        @event_listener = event_listener
        @event_listener.subscribe(:before_harvest) { poll_samplers }
      end

      def each(&blk)
        @samplers.each(&blk)
      end

      def clear()
        @samplers.clear
      end

      def sampler_class_registered?(sampler_class)
        self.any? { |s| s.class == sampler_class }
      end

      # adds samplers to the sampler collection so that they run every
      # minute. This is dynamically recognized by any class that
      # subclasses OneApm::Agent::Sampler
      def load_samplers
        Sampler.sampler_classes.each do |subclass|
          add_sampler(subclass)
        end
      end

      def poll_samplers
        @samplers.delete_if do |sampler|
          begin
            sampler.poll
            false
          rescue => e
            ::OneApm::Agent.logger.warn("Removing #{sampler} from list", e)
            true # remove the bad sampler
          end
        end
      end

      def add_sampler(sampler_class)
        supported = sampler_class.supported_on_this_platform?
        enabled   = sampler_class.enabled?
        if supported && enabled && !sampler_class_registered?(sampler_class)
          sampler = sampler_class.new
          sampler.setup_events(@event_listener) if sampler.respond_to?(:setup_events)
          @samplers << sampler
          ::OneApm::Agent.logger.debug("Registered #{sampler_class.name} for harvest time sampling.")
        else
          ::OneApm::Agent.logger.debug("#{sampler_class.name} not supported on this platform.")
        end
      rescue OneApm::Agent::Sampler::Unsupported => e
        ::OneApm::Agent.logger.info("#{sampler_class.name} not available: #{e}")
      rescue => e
        ::OneApm::Agent.logger.error("Error registering sampler:", e)
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
oneapm_rpm-1.1.2 lib/one_apm/agent/sampler_collection.rb
oneapm_rpm-1.1.1 lib/one_apm/agent/sampler_collection.rb
oneapm_rpm-1.1.0 lib/one_apm/agent/sampler_collection.rb