deputy 0.1.3 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/Readme.md CHANGED
@@ -1,5 +1,7 @@
1
1
  Work in progress do not use.
2
2
 
3
+ Install
4
+ #######
3
5
  Use with [sheriff](http://github.com/dawanda/sheriff).
4
6
 
5
7
  sudo gem install deputy
@@ -7,5 +9,10 @@ Use with [sheriff](http://github.com/dawanda/sheriff).
7
9
  Put sheriff url into `~/.deputy.yml`
8
10
  sheriff_url: http://sheriff.mydomain.com
9
11
 
10
- - report something: `deputy Cronjob.ran 1`
11
- - TODO add plugins via sheriff && install deputy cron with deputy --install-cron
12
+ Add deputy to cron with deputy --install-cron (logs to /tmp/deputy.log)
13
+
14
+ Usage
15
+ #####
16
+
17
+ ### Report something
18
+ deputy Cronjob.ran 1
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.3
1
+ 0.1.4
data/bin/deputy CHANGED
@@ -11,11 +11,14 @@ Report to the sheriff
11
11
 
12
12
  Usage:
13
13
  deputy System.metric value
14
+ deputy [OPTION]
14
15
 
15
16
  Options:
16
17
  BANNER
17
18
  opts.on("-h", "--help","Show this.") { puts opts; exit }
18
19
  opts.on('-v', '--version','Show Version'){ puts Deputy::VERSION; exit}
20
+ opts.on('--install-cron','Install crontask'){ Deputy.install_cron; exit}
21
+ opts.on('--run-plugins','Run all plugins for this minute (belongs into crontask)'){ Deputy.run_plugins; exit}
19
22
  end.parse!
20
23
 
21
24
  metric, value = ARGV[0..1]
data/deputy.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{deputy}
8
- s.version = "0.1.3"
8
+ s.version = "0.1.4"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Michael Grosser"]
data/lib/deputy.rb CHANGED
@@ -19,17 +19,35 @@ class Scout
19
19
  end
20
20
 
21
21
  def self.plugins(code)
22
- constants = eval_and_fetch_constants(code)
23
- constants.select{|constant| constant.instance_methods.map{|m| m.to_sym }.include?(:build_report) }
22
+ eval_and_fetch_constants(code).map do |container|
23
+ interval = container.interval
24
+ next unless plugin = plugin_in_container(container)
25
+ [interval, plugin]
26
+ end.compact
27
+ end
28
+
29
+ def self.plugin_in_container(container)
30
+ constants = container.constants.map{|constant_name| container.const_get(constant_name)}
31
+ constants.detect do |constant|
32
+ constant.instance_methods.map{|m| m.to_sym }.include?(:build_report)
33
+ end
24
34
  end
25
35
  end
26
36
 
27
37
  module Deputy
38
+ START_MINUTE = (Time.now.to_i + 30) / 60 # we could start at 58..02 seconds -> always in middle of minute
28
39
  VERSION = File.read( File.join(File.dirname(__FILE__),'..','VERSION') ).strip
29
40
 
41
+ def self.install_cron
42
+ `crontab -l | { cat; echo "* * * * * deputy --run-plugins 2>&1 >> /tmp/deputy.log"; } | crontab -`
43
+ end
44
+
30
45
  def self.run_plugins
31
46
  content = get("/plugins.rb")
32
- Scout.plugins(content).each{|p| p.new.build_report }
47
+ Scout.plugins(content).each do |interval, plugin|
48
+ run_every_n_minutes = interval/60
49
+ plugin.new.build_report if START_MINUTE % run_every_n_minutes == 0
50
+ end
33
51
  end
34
52
 
35
53
  def self.send_report(metric, value)
data/spec/deputy_spec.rb CHANGED
@@ -5,13 +5,13 @@ describe Deputy do
5
5
  Deputy::VERSION.should =~ /^\d+\.\d+\.\d+$/
6
6
  end
7
7
 
8
- def klass(name, code='')
9
- "class #{name} < Scout::Plugin; def build_report; #{code}; end; end"
8
+ def klass(name, options={})
9
+ "class TEMP_#{options[:rand]||rand(11111)};def self.interval;60;end;class #{name} < Scout::Plugin; def build_report; #{options[:code]}; end; end; end"
10
10
  end
11
11
 
12
12
  describe Scout do
13
13
  it "finds plugins" do
14
- Scout.plugins(klass('A')).inspect.should == '[A]'
14
+ Scout.plugins(klass('A', :rand => 1111)).inspect.should == '[[60, TEMP_1111::A]]'
15
15
  end
16
16
 
17
17
  it "does not show non-plugins" do
@@ -23,7 +23,7 @@ describe Deputy do
23
23
  it "executes all plugins" do
24
24
  $notify = 0
25
25
  Deputy.stub!(:sheriff_url).and_return 'http://sheri.ff'
26
- FakeWeb.register_uri(:get, "http://sheri.ff/plugins.rb", :body => klass('C', '$notify=1'))
26
+ FakeWeb.register_uri(:get, "http://sheri.ff/plugins.rb", :body => klass('C', :code => '$notify=1'))
27
27
  Deputy.run_plugins
28
28
  $notify.should == 1
29
29
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 1
8
- - 3
9
- version: 0.1.3
8
+ - 4
9
+ version: 0.1.4
10
10
  platform: ruby
11
11
  authors:
12
12
  - Michael Grosser