deputy 0.1.48 → 0.1.49

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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.48
1
+ 0.1.49
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.48"
8
+ s.version = "0.1.49"
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
@@ -16,7 +16,8 @@ class Scout
16
16
  OPTIONS = {}.to_yaml
17
17
 
18
18
  def self.clean_class_name
19
- to_s.split('::')[1..-1].join('::')
19
+ parts = to_s.split('::')
20
+ parts.size == 1 ? parts.first : parts[1..-1].join('::')
20
21
  end
21
22
 
22
23
  protected
@@ -84,13 +85,12 @@ class Scout
84
85
  end
85
86
 
86
87
  module Deputy
87
- START_MINUTE = (Time.now.to_i + 30) / 60 # we could start at 58..02 seconds -> always in middle of minute
88
88
  VERSION = File.read( File.join(File.dirname(__FILE__),'..','VERSION') ).strip
89
89
  DEFAULT_VALUE = 'OK'
90
90
 
91
91
  def self.install_cron
92
92
  executable = `which deputy`.strip
93
- unless (`crontab -l`).include?(executable)
93
+ unless (`crontab -l`).include?(executable)
94
94
  `crontab -l | { cat; echo "* * * * * #{executable} --run-plugins >> /tmp/deputy.log 2>&1"; } | crontab -`
95
95
  if executable !~ %r{^/usr/}
96
96
  puts "make deputy globally available! or e.g. calls from inside cronjobs do not know deputy"
@@ -100,20 +100,20 @@ module Deputy
100
100
  end
101
101
 
102
102
  def self.run_plugins(options={})
103
+ start_time = Time.now.to_i
103
104
  sleep_random_interval unless options[:no_wait]
104
105
 
105
106
  content = get("/plugins.rb")
106
107
 
107
108
  exceptions = []
108
109
  Scout.plugins(content).each do |interval, plugin|
109
- run_every_n_minutes = interval/60
110
- minutes_to_wait = run_every_n_minutes - (START_MINUTE % run_every_n_minutes)
111
- if minutes_to_wait == run_every_n_minutes
110
+ wait = minutes_to_wait(start_time, interval)
111
+ if wait == 0
112
112
  puts "#{plugin.clean_class_name}: running"
113
113
  begin
114
114
  plugin.new.build_report
115
115
  rescue Object => e # catch and report plugin-specific errors
116
- e.message[0..0] = plugin.to_s.split('::')[1..-1].join
116
+ e.message[0..0] = plugin.clean_class_name
117
117
  puts e
118
118
  exceptions << e
119
119
  end
@@ -131,15 +131,14 @@ module Deputy
131
131
 
132
132
  def self.send_report(group, value, options = {})
133
133
  raise "separate #{group} with a ." unless group.split('.',2).size == 2
134
- host = options[:host] || Socket.gethostname
135
-
136
- get "/notify?group=#{CGI.escape group}&value=#{CGI.escape value.to_s}&hostname=#{host}#{'&forced_host=true' if options[:host]}"
134
+ get "/notify?group=#{CGI.escape group}&value=#{CGI.escape value.to_s}", options
137
135
  end
138
136
 
139
137
  def self.get(path, options = {})
140
138
  url = "#{sheriff_url}#{path}"
141
139
  url = "http://#{url}" unless url =~ %r{://}
142
140
  options[:http_basic_authentication] = extract_auth_from_url!(url)
141
+ url = add_host_to_url(url, options.delete(:host))
143
142
 
144
143
  Timeout.timeout(config['timeout']||10) do
145
144
  open(url, options).read
@@ -161,6 +160,12 @@ module Deputy
161
160
  raise "No deputy.yml found in /etc or #{home}"
162
161
  end
163
162
 
163
+ def self.minutes_to_wait(start_time, interval)
164
+ start_minute = start_time / 60
165
+ run_every_n_minutes = interval / 60
166
+ start_minute % run_every_n_minutes
167
+ end
168
+
164
169
  def self.sleep_random_interval
165
170
  if max = config['max_random_start_delay']
166
171
  constant_number = Socket.gethostname.sum{|x| x[0]}
@@ -202,4 +207,10 @@ module Deputy
202
207
  auth = [$1, $2].compact
203
208
  auth.empty? ? nil : auth
204
209
  end
210
+
211
+ def self.add_host_to_url(url, host=nil)
212
+ query = "hostname=#{host || Socket.gethostname}#{'&forced_host=true' if host}"
213
+ separator = (url.include?('?') ? "&" : "?")
214
+ url + separator + query
215
+ end
205
216
  end
data/spec/deputy_spec.rb CHANGED
@@ -146,6 +146,16 @@ describe Deputy do
146
146
  defined?(FasterCSV).should == "constant"
147
147
  end
148
148
  end
149
+
150
+ describe :clean_class_name do
151
+ it "is simple name for simple e.g. from irb" do
152
+ FooPlugin.clean_class_name.should == 'FooPlugin'
153
+ end
154
+
155
+ it "is last parts for namespaced" do
156
+ FooPlugin::NestedPlugin.clean_class_name.should == 'NestedPlugin'
157
+ end
158
+ end
149
159
  end
150
160
 
151
161
  describe :run_plugins do
@@ -155,7 +165,7 @@ describe Deputy do
155
165
 
156
166
  it "executes all plugins" do
157
167
  $notify = 0
158
- FakeWeb.register_uri(:get, "http://sheri.ff/plugins.rb", :body => klass('C', :code => '$notify=1'))
168
+ FakeWeb.register_uri(:get, "http://sheri.ff/plugins.rb?hostname=my_host", :body => klass('C', :code => '$notify=1'))
159
169
  FakeWeb.register_uri(:get, "http://sheri.ff/notify?group=Deputies.finished&value=OK&hostname=my_host", :body => 'OK')
160
170
  Deputy.run_plugins
161
171
  $notify.should == 1
@@ -172,16 +182,15 @@ describe Deputy do
172
182
  end
173
183
 
174
184
  it "does not sleeps no_wait given" do
175
- FakeWeb.register_uri(:get, "http://sheri.ff/plugins.rb", :body => '')
185
+ FakeWeb.register_uri(:get, "http://sheri.ff/plugins.rb?hostname=my_host", :body => '')
176
186
  FakeWeb.register_uri(:get, "http://sheri.ff/notify?group=Deputies.finished&value=OK&hostname=my_host", :body => 'OK')
177
- Socket.stub!(:gethostname).and_return 'foo'
178
187
  Deputy.stub!(:send_report)
179
188
  Deputy.should_not_receive(:sleep)
180
189
  Deputy.run_plugins
181
190
  end
182
191
 
183
192
  it "fails with nice backtrace" do
184
- FakeWeb.register_uri(:get, "http://sheri.ff/plugins.rb", :body => klass('FooBar', :code => 'raise'))
193
+ FakeWeb.register_uri(:get, "http://sheri.ff/plugins.rb?hostname=my_host", :body => klass('FooBar', :code => 'raise'))
185
194
  FakeWeb.register_uri(:get, "http://sheri.ff/notify?group=Deputies.finished&value=Error&hostname=my_host", :body => 'OK')
186
195
  FakeWeb.register_uri(:get, "http://sheri.ff/notify?group=Deputies.Error&value=FooBar&hostname=my_host", :body => 'OK')
187
196
  lambda{
@@ -191,7 +200,7 @@ describe Deputy do
191
200
 
192
201
  it "continues to run plugins when one fails" do
193
202
  $notify = 0
194
- FakeWeb.register_uri(:get, "http://sheri.ff/plugins.rb", :body => klass('FooBar', :code => 'raise') + klass('C', :code => '$notify = 1'))
203
+ FakeWeb.register_uri(:get, "http://sheri.ff/plugins.rb?hostname=my_host", :body => klass('FooBar', :code => 'raise') + klass('C', :code => '$notify = 1'))
195
204
  FakeWeb.register_uri(:get, "http://sheri.ff/notify?group=Deputies.finished&value=Error&hostname=my_host", :body => 'OK')
196
205
  FakeWeb.register_uri(:get, "http://sheri.ff/notify?group=Deputies.Error&value=&hostname=my_host", :body => 'OK')
197
206
  lambda{
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: deputy
3
3
  version: !ruby/object:Gem::Version
4
- hash: 123
4
+ hash: 121
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 48
10
- version: 0.1.48
9
+ - 49
10
+ version: 0.1.49
11
11
  platform: ruby
12
12
  authors:
13
13
  - Michael Grosser