sensu 0.9.0.beta.4 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/sensu.rb +1 -1
- data/lib/sensu/api.rb +3 -1
- data/lib/sensu/client.rb +7 -5
- data/lib/sensu/config.rb +4 -2
- data/lib/sensu/server.rb +80 -47
- metadata +7 -11
data/lib/sensu.rb
CHANGED
data/lib/sensu/api.rb
CHANGED
@@ -29,7 +29,9 @@ module Sensu
|
|
29
29
|
if options[:daemonize]
|
30
30
|
Process.daemonize
|
31
31
|
end
|
32
|
-
|
32
|
+
if options[:pid_file]
|
33
|
+
Process.write_pid(options[:pid_file])
|
34
|
+
end
|
33
35
|
$logger.debug('[setup] -- connecting to redis')
|
34
36
|
$redis = Redis.connect($settings.redis.to_hash.symbolize_keys)
|
35
37
|
$logger.debug('[setup] -- connecting to rabbitmq')
|
data/lib/sensu/client.rb
CHANGED
@@ -7,7 +7,9 @@ module Sensu
|
|
7
7
|
if options[:daemonize]
|
8
8
|
Process.daemonize
|
9
9
|
end
|
10
|
-
|
10
|
+
if options[:pid_file]
|
11
|
+
Process.write_pid(options[:pid_file])
|
12
|
+
end
|
11
13
|
EM.run do
|
12
14
|
client.setup_amqp
|
13
15
|
client.setup_keepalives
|
@@ -30,7 +32,7 @@ module Sensu
|
|
30
32
|
end
|
31
33
|
|
32
34
|
def stop(signal)
|
33
|
-
@logger.warn('[
|
35
|
+
@logger.warn('[stop] -- stopping sensu client -- ' + signal)
|
34
36
|
EM.add_timer(1) do
|
35
37
|
EM.stop
|
36
38
|
end
|
@@ -160,7 +162,7 @@ module Sensu
|
|
160
162
|
@logger.debug('[monitor] -- setup queue monitor')
|
161
163
|
EM.add_periodic_timer(5) do
|
162
164
|
unless @check_queue.subscribed?
|
163
|
-
@logger.warn('[monitor] --
|
165
|
+
@logger.warn('[monitor] -- re-subscribing to subscriptions')
|
164
166
|
@check_queue.delete
|
165
167
|
EM.add_timer(1) do
|
166
168
|
setup_subscriptions
|
@@ -170,7 +172,7 @@ module Sensu
|
|
170
172
|
end
|
171
173
|
|
172
174
|
def setup_socket
|
173
|
-
@logger.debug('[socket] -- starting up socket
|
175
|
+
@logger.debug('[socket] -- starting up socket')
|
174
176
|
EM.start_server('127.0.0.1', 3030, ClientSocket) do |socket|
|
175
177
|
socket.settings = @settings
|
176
178
|
socket.logger = @logger
|
@@ -196,7 +198,7 @@ module Sensu
|
|
196
198
|
:check => check.to_hash
|
197
199
|
}.to_json)
|
198
200
|
else
|
199
|
-
@logger.warn('[socket] -- a check name, exit status, and output are required -- e.g. {name: x, status: 0, output: "y"}')
|
201
|
+
@logger.warn('[socket] -- a check name, exit status, and output are required -- e.g. {"name": "x", "status": 0, output: "y"}')
|
200
202
|
end
|
201
203
|
rescue JSON::ParserError => error
|
202
204
|
@logger.warn('[socket] -- check result must be valid JSON: ' + error.to_s)
|
data/lib/sensu/config.rb
CHANGED
@@ -55,8 +55,10 @@ module Sensu
|
|
55
55
|
end
|
56
56
|
@logger.subscribe(Cabin::Outputs::EmStdlibLogger.new(ruby_logger))
|
57
57
|
@logger.level = @options[:verbose] ? :debug : :info
|
58
|
-
Signal.
|
59
|
-
|
58
|
+
if Signal.list.include?('USR1')
|
59
|
+
Signal.trap('USR1') do
|
60
|
+
@logger.level = @logger.level == :info ? :debug : :info
|
61
|
+
end
|
60
62
|
end
|
61
63
|
@logger
|
62
64
|
end
|
data/lib/sensu/server.rb
CHANGED
@@ -13,7 +13,9 @@ module Sensu
|
|
13
13
|
if options[:daemonize]
|
14
14
|
Process.daemonize
|
15
15
|
end
|
16
|
-
|
16
|
+
if options[:pid_file]
|
17
|
+
Process.write_pid(options[:pid_file])
|
18
|
+
end
|
17
19
|
EM.threadpool_size = 16
|
18
20
|
EM.run do
|
19
21
|
server.setup_redis
|
@@ -35,15 +37,19 @@ module Sensu
|
|
35
37
|
config = Sensu::Config.new(options)
|
36
38
|
@settings = config.settings
|
37
39
|
@logger = config.logger || config.open_log
|
40
|
+
@status = nil
|
38
41
|
end
|
39
42
|
|
40
|
-
def
|
41
|
-
|
42
|
-
EM.add_timer(1) do
|
43
|
+
def stop_reactor
|
44
|
+
EM.add_timer(3) do
|
43
45
|
EM.stop
|
44
46
|
end
|
45
47
|
end
|
46
48
|
|
49
|
+
def stopping?
|
50
|
+
@status == :stopping
|
51
|
+
end
|
52
|
+
|
47
53
|
def setup_redis
|
48
54
|
@logger.debug('[redis] -- connecting to redis')
|
49
55
|
@redis = Redis.connect(@settings.redis.to_hash.symbolize_keys)
|
@@ -230,9 +236,11 @@ module Sensu
|
|
230
236
|
end
|
231
237
|
interval = options[:test] ? 0.5 : details.interval
|
232
238
|
EM.add_periodic_timer(interval) do
|
233
|
-
|
234
|
-
|
235
|
-
|
239
|
+
unless stopping?
|
240
|
+
check_request.issued = Time.now.to_i
|
241
|
+
@logger.info('[publisher] -- publishing check -- ' + name + ' -- ' + exchange)
|
242
|
+
@amq.fanout(exchange).publish(check_request.to_json)
|
243
|
+
end
|
236
244
|
end
|
237
245
|
end
|
238
246
|
end
|
@@ -243,34 +251,36 @@ module Sensu
|
|
243
251
|
def setup_keepalive_monitor
|
244
252
|
@logger.debug('[keepalive] -- setup keepalive monitor')
|
245
253
|
EM.add_periodic_timer(30) do
|
246
|
-
|
247
|
-
|
248
|
-
clients.
|
249
|
-
|
250
|
-
client
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
:
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
254
|
+
unless stopping?
|
255
|
+
@logger.debug('[keepalive] -- checking for stale clients')
|
256
|
+
@redis.smembers('clients').callback do |clients|
|
257
|
+
clients.each do |client_id|
|
258
|
+
@redis.get('client:' + client_id).callback do |client_json|
|
259
|
+
client = Hashie::Mash.new(JSON.parse(client_json))
|
260
|
+
time_since_last_keepalive = Time.now.to_i - client.timestamp
|
261
|
+
result = Hashie::Mash.new({
|
262
|
+
:client => client.name,
|
263
|
+
:check => {
|
264
|
+
:name => 'keepalive',
|
265
|
+
:issued => Time.now.to_i
|
266
|
+
}
|
267
|
+
})
|
268
|
+
case
|
269
|
+
when time_since_last_keepalive >= 180
|
270
|
+
result.check.status = 2
|
271
|
+
result.check.output = 'No keep-alive sent from host in over 180 seconds'
|
272
|
+
@amq.queue('results').publish(result.to_json)
|
273
|
+
when time_since_last_keepalive >= 120
|
274
|
+
result.check.status = 1
|
275
|
+
result.check.output = 'No keep-alive sent from host in over 120 seconds'
|
276
|
+
@amq.queue('results').publish(result.to_json)
|
277
|
+
else
|
278
|
+
@redis.hexists('events:' + client_id, 'keepalive').callback do |exists|
|
279
|
+
if exists
|
280
|
+
result.check.status = 0
|
281
|
+
result.check.output = 'Keep-alive sent from host'
|
282
|
+
@amq.queue('results').publish(result.to_json)
|
283
|
+
end
|
274
284
|
end
|
275
285
|
end
|
276
286
|
end
|
@@ -311,13 +321,15 @@ module Sensu
|
|
311
321
|
def setup_master_monitor
|
312
322
|
request_master_election
|
313
323
|
EM.add_periodic_timer(20) do
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
@
|
324
|
+
unless stopping?
|
325
|
+
if @is_master
|
326
|
+
timestamp = Time.now.to_i
|
327
|
+
@redis.set('lock:master', timestamp).callback do
|
328
|
+
@logger.debug('[master] -- updated master lock timestamp -- ' + timestamp.to_s)
|
329
|
+
end
|
330
|
+
else
|
331
|
+
request_master_election
|
318
332
|
end
|
319
|
-
else
|
320
|
-
request_master_election
|
321
333
|
end
|
322
334
|
end
|
323
335
|
end
|
@@ -325,13 +337,34 @@ module Sensu
|
|
325
337
|
def setup_queue_monitor
|
326
338
|
@logger.debug('[monitor] -- setup queue monitor')
|
327
339
|
EM.add_periodic_timer(5) do
|
328
|
-
unless
|
329
|
-
@
|
330
|
-
|
340
|
+
unless stopping?
|
341
|
+
unless @keepalive_queue.subscribed?
|
342
|
+
@logger.warn('[monitor] -- re-subscribing to rabbitmq queue -- keepalives')
|
343
|
+
setup_keepalives
|
344
|
+
end
|
345
|
+
unless @result_queue.subscribed?
|
346
|
+
@logger.warn('[monitor] -- re-subscribing to rabbitmq queue -- results')
|
347
|
+
setup_results
|
348
|
+
end
|
331
349
|
end
|
332
|
-
|
333
|
-
|
334
|
-
|
350
|
+
end
|
351
|
+
end
|
352
|
+
|
353
|
+
def stop(signal)
|
354
|
+
@logger.warn('[stop] -- stopping sensu server -- ' + signal)
|
355
|
+
@status = :stopping
|
356
|
+
@keepalive_queue.unsubscribe do
|
357
|
+
@logger.warn('[stop] -- unsubscribed from rabbitmq queue -- keepalives')
|
358
|
+
@result_queue.unsubscribe do
|
359
|
+
@logger.warn('[stop] -- unsubscribed from rabbitmq queue -- results')
|
360
|
+
if @is_master
|
361
|
+
@redis.del('lock:master').callback do
|
362
|
+
@logger.warn('[stop] -- resigned as master')
|
363
|
+
stop_reactor
|
364
|
+
end
|
365
|
+
else
|
366
|
+
stop_reactor
|
367
|
+
end
|
335
368
|
end
|
336
369
|
end
|
337
370
|
end
|
metadata
CHANGED
@@ -1,15 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sensu
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
5
|
-
prerelease:
|
4
|
+
hash: 59
|
5
|
+
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 9
|
9
9
|
- 0
|
10
|
-
|
11
|
-
- 4
|
12
|
-
version: 0.9.0.beta.4
|
10
|
+
version: 0.9.0
|
13
11
|
platform: ruby
|
14
12
|
authors:
|
15
13
|
- Sean Porter
|
@@ -260,14 +258,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
260
258
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
261
259
|
none: false
|
262
260
|
requirements:
|
263
|
-
- - "
|
261
|
+
- - ">="
|
264
262
|
- !ruby/object:Gem::Version
|
265
|
-
hash:
|
263
|
+
hash: 3
|
266
264
|
segments:
|
267
|
-
-
|
268
|
-
|
269
|
-
- 1
|
270
|
-
version: 1.3.1
|
265
|
+
- 0
|
266
|
+
version: "0"
|
271
267
|
requirements: []
|
272
268
|
|
273
269
|
rubyforge_project:
|