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