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