sensu 0.9.10 → 0.9.11

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/CHANGELOG.md CHANGED
@@ -1,3 +1,23 @@
1
+ ## 0.9.11 - 2013-02-22
2
+
3
+ ### Features
4
+
5
+ API aggregate age filter parameter.
6
+
7
+ ### Non-backwards compatible changes
8
+
9
+ Removed /info "health" in favour of RabbitMQ & Redis "connected".
10
+
11
+ ### Other
12
+
13
+ No longer using the default AMQP exchange or publishing directly to queues.
14
+
15
+ Removed API health filter, as the Redis connection now recovers.
16
+
17
+ Fixed config & extension directory loading on Windows.
18
+
19
+ Client socket handles non-ascii input.
20
+
1
21
  ## 0.9.10 - 2013-01-30
2
22
 
3
23
  ### Features
data/README.md CHANGED
@@ -1,9 +1,8 @@
1
- # Sensu
2
- A monitoring framework that aims to be simple, malleable, and scalable.
1
+ ![sensu](https://raw.github.com/sensu/sensu/master/sensu-logo.png)
3
2
 
4
- ![sensu](https://raw.github.com/sensu/sensu/master/sensu-logo.png)
3
+ A monitoring framework that aims to be simple, malleable, and scalable.
5
4
 
6
- ![travis](https://secure.travis-ci.org/sensu/sensu.png)
5
+ ![travis](https://secure.travis-ci.org/sensu/sensu.png)
7
6
 
8
7
  ## Documentation
9
8
  Please refer to the [Sensu Wiki](https://github.com/sensu/sensu/wiki).
data/lib/sensu/api.rb CHANGED
@@ -128,22 +128,12 @@ module Sensu
128
128
  env['rack.input'].rewind
129
129
  end
130
130
 
131
- def health_filter
132
- unless $redis.connected?
133
- unless env['REQUEST_PATH'] == '/info'
134
- halt 500
135
- end
136
- end
137
- end
138
-
139
131
  def bad_request!
140
- status 400
141
- body ''
132
+ ahalt 400
142
133
  end
143
134
 
144
135
  def not_found!
145
- status 404
146
- body ''
136
+ ahalt 404
147
137
  end
148
138
 
149
139
  def created!
@@ -183,14 +173,13 @@ module Sensu
183
173
  $logger.info('publishing check result', {
184
174
  :payload => payload
185
175
  })
186
- $amq.queue('results').publish(payload.to_json)
176
+ $amq.direct('results').publish(payload.to_json)
187
177
  end
188
178
  end
189
179
 
190
180
  before do
191
- content_type 'application/json'
192
181
  request_log_line
193
- health_filter
182
+ content_type 'application/json'
194
183
  end
195
184
 
196
185
  aget '/info' do
@@ -206,11 +195,11 @@ module Sensu
206
195
  :results => {
207
196
  :messages => nil,
208
197
  :consumers => nil
209
- }
198
+ },
199
+ :connected => $rabbitmq.connected?
210
200
  },
211
- :health => {
212
- :redis => $redis.connected? ? 'ok' : 'down',
213
- :rabbitmq => $rabbitmq.connected? ? 'ok' : 'down'
201
+ :redis => {
202
+ :connected => $redis.connected?
214
203
  }
215
204
  }
216
205
  if $rabbitmq.connected?
@@ -412,25 +401,17 @@ module Sensu
412
401
  response = Array.new
413
402
  $redis.smembers('aggregates') do |checks|
414
403
  unless checks.empty?
415
- limit = 10
416
- if params[:limit]
417
- limit = params[:limit] =~ /^[0-9]+$/ ? params[:limit].to_i : nil
418
- end
419
- unless limit.nil?
420
- checks.each_with_index do |check_name, index|
421
- $redis.smembers('aggregates:' + check_name) do |aggregates|
422
- collection = {
423
- :check => check_name,
424
- :issued => aggregates.sort.reverse.take(limit)
425
- }
426
- response.push(collection)
427
- if index == checks.size - 1
428
- body response.to_json
429
- end
404
+ checks.each_with_index do |check_name, index|
405
+ $redis.smembers('aggregates:' + check_name) do |aggregates|
406
+ collection = {
407
+ :check => check_name,
408
+ :issued => aggregates.sort.reverse
409
+ }
410
+ response.push(collection)
411
+ if index == checks.size - 1
412
+ body response.to_json
430
413
  end
431
414
  end
432
- else
433
- bad_request!
434
415
  end
435
416
  else
436
417
  body response.to_json
@@ -441,11 +422,26 @@ module Sensu
441
422
  aget %r{/aggregates/([\w\.-]+)$} do |check_name|
442
423
  $redis.smembers('aggregates:' + check_name) do |aggregates|
443
424
  unless aggregates.empty?
425
+ valid_request = true
426
+ if params[:age]
427
+ if params[:age] =~ /^[0-9]+$/
428
+ timestamp = Time.now.to_i - params[:age].to_i
429
+ aggregates.reject! do |issued|
430
+ issued.to_i > timestamp
431
+ end
432
+ else
433
+ valid_request = false
434
+ end
435
+ end
444
436
  limit = 10
445
437
  if params[:limit]
446
- limit = params[:limit] =~ /^[0-9]+$/ ? params[:limit].to_i : nil
438
+ if params[:limit] =~ /^[0-9]+$/
439
+ limit = params[:limit].to_i
440
+ else
441
+ valid_request = false
442
+ end
447
443
  end
448
- unless limit.nil?
444
+ if valid_request
449
445
  body aggregates.sort.reverse.take(limit).to_json
450
446
  else
451
447
  bad_request!
data/lib/sensu/client.rb CHANGED
@@ -50,7 +50,7 @@ module Sensu
50
50
  @logger.debug('publishing keepalive', {
51
51
  :payload => payload
52
52
  })
53
- @amq.queue('keepalives').publish(payload.to_json)
53
+ @amq.direct('keepalives').publish(payload.to_json)
54
54
  end
55
55
 
56
56
  def setup_keepalives
@@ -71,7 +71,7 @@ module Sensu
71
71
  @logger.info('publishing check result', {
72
72
  :payload => payload
73
73
  })
74
- @amq.queue('results').publish(payload.to_json)
74
+ @amq.direct('results').publish(payload.to_json)
75
75
  end
76
76
 
77
77
  def execute_check(check)
@@ -1,6 +1,6 @@
1
1
  module Sensu
2
2
  unless defined?(Sensu::VERSION)
3
- VERSION = '0.9.10'
3
+ VERSION = '0.9.11'
4
4
 
5
5
  DEFAULT_OPTIONS = {
6
6
  :config_file => '/etc/sensu/config.json',
@@ -19,7 +19,8 @@ module Sensu
19
19
  end
20
20
 
21
21
  def require_directory(directory)
22
- Dir.glob(File.join(directory, '**/*.rb')).each do |file|
22
+ path = directory.gsub(/\\(?=\S)/, '/')
23
+ Dir.glob(File.join(path, '**/*.rb')).each do |file|
23
24
  begin
24
25
  require file
25
26
  rescue ScriptError => error
data/lib/sensu/server.rb CHANGED
@@ -81,6 +81,7 @@ module Sensu
81
81
  consumer.cancel
82
82
  end
83
83
  @keepalive_queue = @amq.queue!('keepalives')
84
+ @keepalive_queue.bind(@amq.direct('keepalives'))
84
85
  @keepalive_queue.subscribe(:ack => true) do |header, payload|
85
86
  client = JSON.parse(payload, :symbolize_names => true)
86
87
  @logger.debug('received keepalive', {
@@ -518,6 +519,7 @@ module Sensu
518
519
  consumer.cancel
519
520
  end
520
521
  @result_queue = @amq.queue!('results')
522
+ @result_queue.bind(@amq.direct('results'))
521
523
  @result_queue.subscribe(:ack => true) do |header, payload|
522
524
  result = JSON.parse(payload, :symbolize_names => true)
523
525
  @logger.debug('received result', {
@@ -577,7 +579,7 @@ module Sensu
577
579
  @logger.info('publishing check result', {
578
580
  :payload => payload
579
581
  })
580
- @amq.queue('results').publish(payload.to_json)
582
+ @amq.direct('results').publish(payload.to_json)
581
583
  end
582
584
 
583
585
  def determine_stale_clients
@@ -104,7 +104,8 @@ module Sensu
104
104
  end
105
105
 
106
106
  def load_directory(directory)
107
- Dir.glob(File.join(directory, '**/*.json')).each do |file|
107
+ path = directory.gsub(/\\(?=\S)/, '/')
108
+ Dir.glob(File.join(path, '**/*.json')).each do |file|
108
109
  load_file(file)
109
110
  end
110
111
  end
data/lib/sensu/socket.rb CHANGED
@@ -9,7 +9,10 @@ module Sensu
9
9
  end
10
10
 
11
11
  def receive_data(data)
12
- if data.strip == 'ping'
12
+ if data =~ /[\x80-\xff]/
13
+ @logger.warn('socket received non-ascii characters')
14
+ reply('invalid')
15
+ elsif data.strip == 'ping'
13
16
  @logger.debug('socket received ping')
14
17
  reply('pong')
15
18
  else
@@ -31,7 +34,7 @@ module Sensu
31
34
  @logger.info('publishing check result', {
32
35
  :payload => payload
33
36
  })
34
- @amq.queue('results').publish(payload.to_json)
37
+ @amq.direct('results').publish(payload.to_json)
35
38
  reply('ok')
36
39
  else
37
40
  @logger.warn('invalid check result', {
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sensu
3
3
  version: !ruby/object:Gem::Version
4
- hash: 47
4
+ hash: 45
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 9
9
- - 10
10
- version: 0.9.10
9
+ - 11
10
+ version: 0.9.11
11
11
  platform: ruby
12
12
  authors:
13
13
  - Sean Porter
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2013-01-30 00:00:00 -08:00
19
+ date: 2013-02-22 00:00:00 -08:00
20
20
  default_executable:
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency