Sha256: 110d0e58fe09d0b91a347a09756bcc55db283e2231a24a6efa79b18d111b453c
Contents?: true
Size: 1.89 KB
Versions: 1
Compression:
Stored size: 1.89 KB
Contents
require File.expand_path(File.join(File.dirname(__FILE__), 'publisher')) require 'singleton' module Dboard class Collector include Singleton attr_reader :sources def self.register_source(key, instance) Collector.instance.register_source(key, instance) end def self.register_after_update_callback(callback) Collector.instance.register_after_update_callback(callback) end def self.start instance.start end def initialize @sources = {} @after_update_callback = lambda {} end def start @sources.each do |source, instance| Thread.new do loop do update_in_thread end end end loop { sleep 1 } end def update_in_thread time = Time.now puts "#{source} updating..." update_source(source, instance) elapsed_time = Time.now - time time_until_next_update = instance.update_interval - elapsed_time time_until_next_update = 0 if time_until_next_update < 0 puts "#{source} done in #{elapsed_time} seconds, will update again in #{time_until_next_update} seconds (interval: #{instance.update_interval})." sleep time_until_next_update rescue Exception => ex puts "Something failed outside the update_source method. #{ex.message}" puts ex.backtrace end def update_source(source, instance) begin data = instance.fetch publish_data(source, data) ensure @after_update_callback.call end rescue Exception => ex puts "Failed to update #{source}: #{ex.message}" puts ex.backtrace end def register_source(key, instance) @sources.merge!({ key => instance }) end def register_after_update_callback(callback) @after_update_callback = callback end def publish_data(source, data) Publisher.publish(source, data) end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
dboard-1.0.0 | lib/collector.rb |