Class: TingYun::Agent::Collector::MiddleWareCollector

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/ting_yun/agent/collector/middle_ware_collector.rb

Instance Method Summary collapse

Constructor Details

#initialize(event_listener) ⇒ MiddleWareCollector

Returns a new instance of MiddleWareCollector.



15
16
17
18
19
# File 'lib/ting_yun/agent/collector/middle_ware_collector.rb', line 15

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

Instance Method Details

#clearObject



37
38
39
# File 'lib/ting_yun/agent/collector/middle_ware_collector.rb', line 37

def clear()
  @samplers.clear
end

#each(&blk) ⇒ Object



33
34
35
# File 'lib/ting_yun/agent/collector/middle_ware_collector.rb', line 33

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

#load_samplersObject

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



69
70
71
72
73
# File 'lib/ting_yun/agent/collector/middle_ware_collector.rb', line 69

def load_samplers
  TingYun::Agent::Collector::Sampler.sampler_classes.each do |subclass|
    register_sampler(subclass)
  end
end

#register_sampler(sampler_class) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/ting_yun/agent/collector/middle_ware_collector.rb', line 45

def register_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

      @samplers << sampler
      ::TingYun::Agent.logger.debug("Registered #{sampler_class.name} for harvest time sampling.")
    else
      ::TingYun::Agent.logger.warn("Ignoring addition of #{sampler_class.name} because it is already registered.")
    end
  else
    ::TingYun::Agent.logger.debug("#{sampler_class.name} not supported on this platform.")
  end
rescue TingYun::Agent::Collector::Sampler::Unsupported => e
  ::TingYun::Agent.logger.info("#{sampler_class.name} not available: #{e}")
rescue => e
  ::TingYun::Agent.logger.error("Error registering sampler:", e)
end

#sampler_class_registered?(sampler_class) ⇒ Boolean

Returns:

  • (Boolean)


41
42
43
# File 'lib/ting_yun/agent/collector/middle_ware_collector.rb', line 41

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

#samplers_pollObject



21
22
23
24
25
26
27
28
29
30
31
# File 'lib/ting_yun/agent/collector/middle_ware_collector.rb', line 21

def samplers_poll
  @samplers.delete_if do |sampler|
    begin
      sampler.poll
      false # it's okay.  don't delete it.
    rescue => e
      ::TingYun::Agent.logger.warn("Removing #{sampler} from list", e)
      true # remove the sampler
    end
  end
end