class NetAtlas::Poller
Attributes
queue[R]
Public Class Methods
new(*args)
click to toggle source
Calls superclass method
# File lib/netatlas/poller.rb, line 7 def initialize(*args) @data_sources = {} @queue = EventMachine::Queue.new @queued = {} super end
Public Instance Methods
collector_queue()
click to toggle source
# File lib/netatlas/poller.rb, line 14 def collector_queue @collector_queue ||= MQ.queue("collector") end
configure()
click to toggle source
# File lib/netatlas/poller.rb, line 19 def configure puts "getting data sources" data_sources puts "got data sources" end
do_scheduler()
click to toggle source
# File lib/netatlas/poller.rb, line 38 def do_scheduler data_sources.each do |ds| puts "scheduling #{ds}" last_polled = ds.last_result.timestamp rescue Time.at(0) interval = ds.step_interval || 60 if (last_polled + interval) < Time.now schedule(ds) end end end
next_poll()
click to toggle source
# File lib/netatlas/poller.rb, line 57 def next_poll @queue.pop do |ds| poll(ds) end end
poll(ds)
click to toggle source
# File lib/netatlas/poller.rb, line 63 def poll(ds) puts "in poll" plugin = ds.get_plugin plugin.poll(ds) do |status, value| result = NetAtlas::Result.new(:timestamp => Time.now, :data_source => ds, :status => status, :value => value) puts "got result #{result.inspect}" collector_queue.publish(result.to_json) puts "done poll" end end
run()
click to toggle source
# File lib/netatlas/poller.rb, line 26 def run EM.synchrony do EventMachine.add_periodic_timer(1) { do_scheduler } loop do next_poll end end end
schedule(ds)
click to toggle source
# File lib/netatlas/poller.rb, line 49 def schedule(ds) if !@queued[ds.id] @queue.push(ds) @queued[ds.id] = true end end
Private Instance Methods
data_sources()
click to toggle source
# File lib/netatlas/poller.rb, line 76 def data_sources return @data_sources if @data_sources puts "poller_id = #{id}" Resource::DataSource.find(:all, :params =>{:poller_id => id} ).each do |ds| @data_sources[ds.id] = ds end puts @data_sources.inspect @data_sources end