sensu 0.9.0.beta.4 → 0.9.0
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/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:
|