Class: OneApm::Collector::SamplerCollection

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/one_apm/collector/support/sampler_collection.rb

Instance Method Summary collapse

Constructor Details

#initialize(event_listener) ⇒ SamplerCollection

Returns a new instance of SamplerCollection.



11
12
13
14
15
# File 'lib/one_apm/collector/support/sampler_collection.rb', line 11

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

Instance Method Details

#add_sampler(sampler_class) ⇒ Object



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/one_apm/collector/support/sampler_collection.rb', line 47

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)
    sampler.set_poller(poller)            if sampler.respond_to?(:set_poller)
    @samplers << sampler
    OneApm::Manager.logger.debug("Registered #{sampler_class.name} for harvest time sampling.")
  else
    OneApm::Manager.logger.debug("#{sampler_class.name} not supported on this platform.")
  end
rescue OneApm::Collector::Sampler::Unsupported => e
  OneApm::Manager.logger.info("#{sampler_class.name} not available: #{e}")
rescue => e
  OneApm::Manager.logger.error("Error registering sampler:", e)
end

#clearObject



21
22
23
# File 'lib/one_apm/collector/support/sampler_collection.rb', line 21

def clear()
  @samplers.clear
end

#each(&blk) ⇒ Object



17
18
19
# File 'lib/one_apm/collector/support/sampler_collection.rb', line 17

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

#load_samplersObject



29
30
31
32
33
# File 'lib/one_apm/collector/support/sampler_collection.rb', line 29

def load_samplers
  Sampler.sampler_classes.each do |subclass|
    add_sampler(subclass)
  end
end

#poll_samplersObject



35
36
37
38
39
40
41
42
43
44
45
# File 'lib/one_apm/collector/support/sampler_collection.rb', line 35

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

#pollerObject



65
66
67
68
69
70
71
72
73
74
75
# File 'lib/one_apm/collector/support/sampler_collection.rb', line 65

def poller 
  @pller ||= begin
    if OneApm::Collector::JrubyPoller.enable?
      OneApm::Collector::JrubyPoller.new 
    elsif OneApm::Collector::ProcPoller.enable?
      OneApm::Collector::ProcPoller.new 
    else
      OneApm::Collector::ShellPoller.new  
    end 
  end
end

#sampler_class_registered?(sampler_class) ⇒ Boolean

Returns:

  • (Boolean)


25
26
27
# File 'lib/one_apm/collector/support/sampler_collection.rb', line 25

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