lib/deputy.rb in deputy-0.1.3 vs lib/deputy.rb in deputy-0.1.4

- old
+ new

@@ -17,20 +17,38 @@ end end end def self.plugins(code) - constants = eval_and_fetch_constants(code) - constants.select{|constant| constant.instance_methods.map{|m| m.to_sym }.include?(:build_report) } + eval_and_fetch_constants(code).map do |container| + interval = container.interval + next unless plugin = plugin_in_container(container) + [interval, plugin] + end.compact end + + def self.plugin_in_container(container) + constants = container.constants.map{|constant_name| container.const_get(constant_name)} + constants.detect do |constant| + constant.instance_methods.map{|m| m.to_sym }.include?(:build_report) + end + end end module Deputy + START_MINUTE = (Time.now.to_i + 30) / 60 # we could start at 58..02 seconds -> always in middle of minute VERSION = File.read( File.join(File.dirname(__FILE__),'..','VERSION') ).strip + def self.install_cron + `crontab -l | { cat; echo "* * * * * deputy --run-plugins 2>&1 >> /tmp/deputy.log"; } | crontab -` + end + def self.run_plugins content = get("/plugins.rb") - Scout.plugins(content).each{|p| p.new.build_report } + Scout.plugins(content).each do |interval, plugin| + run_every_n_minutes = interval/60 + plugin.new.build_report if START_MINUTE % run_every_n_minutes == 0 + end end def self.send_report(metric, value) get "/report/#{CGI.escape metric}/#{CGI.escape value}" end \ No newline at end of file