sensu 0.9.12.beta.5 → 0.9.12.beta.6

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md CHANGED
@@ -12,6 +12,8 @@ Check extensions.
12
12
 
13
13
  ### Non-backwards compatible changes
14
14
 
15
+ Stashes API routes changed, no longer using POST multi-get.
16
+
15
17
  No longer defaults to or enforces a specific config file or directory.
16
18
 
17
19
  ### Other
data/lib/sensu/api.rb CHANGED
@@ -2,6 +2,7 @@ require File.join(File.dirname(__FILE__), 'base')
2
2
  require File.join(File.dirname(__FILE__), 'redis')
3
3
 
4
4
  gem 'thin', '1.5.0'
5
+ gem 'sinatra', '1.3.5'
5
6
  gem 'async_sinatra', '1.0.0'
6
7
 
7
8
  require 'thin'
@@ -136,6 +137,22 @@ module Sensu
136
137
  env['rack.input'].rewind
137
138
  end
138
139
 
140
+ def pagination(items)
141
+ limit = params[:limit] =~ /^[0-9]+$/ ? params[:limit].to_i : 0
142
+ offset = params[:offset] =~ /^[0-9]+$/ ? params[:offset].to_i : 0
143
+ unless limit == 0
144
+ headers['X-Pagination'] = Oj.dump(
145
+ :limit => limit,
146
+ :offset => offset,
147
+ :total => items.size
148
+ )
149
+ paginated = items.slice(offset, limit)
150
+ Array(paginated)
151
+ else
152
+ items
153
+ end
154
+ end
155
+
139
156
  def bad_request!
140
157
  ahalt 400
141
158
  end
@@ -154,6 +171,10 @@ module Sensu
154
171
  body response
155
172
  end
156
173
 
174
+ def issued!
175
+ accepted!(Oj.dump(:issued => Time.now.to_i))
176
+ end
177
+
157
178
  def no_content!
158
179
  status 204
159
180
  body ''
@@ -228,6 +249,7 @@ module Sensu
228
249
  aget '/clients' do
229
250
  response = Array.new
230
251
  $redis.smembers('clients') do |clients|
252
+ clients = pagination(clients)
231
253
  unless clients.empty?
232
254
  clients.each_with_index do |client_name, index|
233
255
  $redis.get('client:' + client_name) do |client_json|
@@ -309,7 +331,7 @@ module Sensu
309
331
  $redis.del('history:' + client_name)
310
332
  end
311
333
  end
312
- accepted!(Oj.dump({:issued => Time.now.to_i}))
334
+ issued!
313
335
  end
314
336
  else
315
337
  not_found!
@@ -334,7 +356,7 @@ module Sensu
334
356
  begin
335
357
  post_body = Oj.load(request.body.read)
336
358
  check_name = post_body[:check]
337
- subscribers = post_body[:subscribers] || Array.new
359
+ subscribers = post_body[:subscribers]
338
360
  if check_name.is_a?(String) && subscribers.is_a?(Array)
339
361
  if $settings.check_exists?(check_name)
340
362
  check = $settings[:checks][check_name]
@@ -353,7 +375,7 @@ module Sensu
353
375
  subscribers.uniq.each do |exchange_name|
354
376
  $amq.fanout(exchange_name).publish(Oj.dump(payload))
355
377
  end
356
- created!(Oj.dump(payload))
378
+ issued!
357
379
  else
358
380
  not_found!
359
381
  end
@@ -410,7 +432,7 @@ module Sensu
410
432
  $redis.hgetall('events:' + client_name) do |events|
411
433
  if events.include?(check_name)
412
434
  resolve_event(event_hash(events[check_name], client_name, check_name))
413
- accepted!(Oj.dump({:issued => Time.now.to_i}))
435
+ issued!
414
436
  else
415
437
  not_found!
416
438
  end
@@ -426,7 +448,7 @@ module Sensu
426
448
  $redis.hgetall('events:' + client_name) do |events|
427
449
  if events.include?(check_name)
428
450
  resolve_event(event_hash(events[check_name], client_name, check_name))
429
- accepted!(Oj.dump({:issued => Time.now.to_i}))
451
+ issued!
430
452
  else
431
453
  not_found!
432
454
  end
@@ -445,6 +467,9 @@ module Sensu
445
467
  unless checks.empty?
446
468
  checks.each_with_index do |check_name, index|
447
469
  $redis.smembers('aggregates:' + check_name) do |aggregates|
470
+ aggregates.map! do |issued|
471
+ issued.to_i
472
+ end
448
473
  item = {
449
474
  :check => check_name,
450
475
  :issued => aggregates.sort.reverse
@@ -464,27 +489,23 @@ module Sensu
464
489
  aget %r{/aggregates/([\w\.-]+)$} do |check_name|
465
490
  $redis.smembers('aggregates:' + check_name) do |aggregates|
466
491
  unless aggregates.empty?
492
+ aggregates.map! do |issued|
493
+ issued.to_i
494
+ end
467
495
  valid_request = true
468
496
  if params[:age]
469
497
  if params[:age] =~ /^[0-9]+$/
470
498
  timestamp = Time.now.to_i - params[:age].to_i
471
499
  aggregates.reject! do |issued|
472
- issued.to_i > timestamp
500
+ issued > timestamp
473
501
  end
474
502
  else
475
503
  valid_request = false
476
504
  end
477
505
  end
478
- limit = 10
479
- if params[:limit]
480
- if params[:limit] =~ /^[0-9]+$/
481
- limit = params[:limit].to_i
482
- else
483
- valid_request = false
484
- end
485
- end
486
506
  if valid_request
487
- body Oj.dump(aggregates.sort.reverse.take(limit))
507
+ aggregates = pagination(aggregates.sort.reverse)
508
+ body Oj.dump(aggregates)
488
509
  else
489
510
  bad_request!
490
511
  end
@@ -552,7 +573,7 @@ module Sensu
552
573
  post_body = Oj.load(request.body.read)
553
574
  $redis.set('stash:' + path, Oj.dump(post_body)) do
554
575
  $redis.sadd('stashes', path) do
555
- created!(Oj.dump({:issued => Time.now.to_i}))
576
+ created!(Oj.dump(:path => path))
556
577
  end
557
578
  end
558
579
  rescue Oj::ParseError
@@ -585,24 +606,39 @@ module Sensu
585
606
  end
586
607
 
587
608
  aget '/stashes' do
609
+ response = Array.new
588
610
  $redis.smembers('stashes') do |stashes|
589
- body Oj.dump(stashes)
611
+ stashes = pagination(stashes)
612
+ unless stashes.empty?
613
+ stashes.each_with_index do |path, index|
614
+ $redis.get('stash:' + path) do |stash_json|
615
+ unless stash_json.nil?
616
+ item = {
617
+ :path => path,
618
+ :content => Oj.load(stash_json)
619
+ }
620
+ response << item
621
+ end
622
+ if index == stashes.size - 1
623
+ body Oj.dump(response)
624
+ end
625
+ end
626
+ end
627
+ else
628
+ body Oj.dump(response)
629
+ end
590
630
  end
591
631
  end
592
632
 
593
633
  apost '/stashes' do
594
634
  begin
595
635
  post_body = Oj.load(request.body.read)
596
- if post_body.is_a?(Array) && post_body.size > 0
597
- response = Hash.new
598
- post_body.each_with_index do |path, index|
599
- $redis.get('stash:' + path) do |stash_json|
600
- unless stash_json.nil?
601
- response[path] = Oj.load(stash_json)
602
- end
603
- if index == post_body.size - 1
604
- body Oj.dump(response)
605
- end
636
+ path = post_body[:path]
637
+ content = post_body[:content]
638
+ if path.is_a?(String) && content.is_a?(Hash)
639
+ $redis.set('stash:' + path, Oj.dump(content)) do
640
+ $redis.sadd('stashes', path) do
641
+ created!(Oj.dump(:path => path))
606
642
  end
607
643
  end
608
644
  else
@@ -1,6 +1,6 @@
1
1
  module Sensu
2
2
  unless defined?(Sensu::VERSION)
3
- VERSION = '0.9.12.beta.5'
3
+ VERSION = '0.9.12.beta.6'
4
4
 
5
5
  LOG_LEVELS = [:debug, :info, :warn, :error, :fatal]
6
6
 
data/sensu.gemspec CHANGED
@@ -18,6 +18,7 @@ Gem::Specification.new do |s|
18
18
  s.add_dependency('amqp', '0.9.10')
19
19
  s.add_dependency('em-redis-unified', '0.4.1')
20
20
  s.add_dependency('thin', '1.5.0')
21
+ s.add_dependency('sinatra', '1.3.5')
21
22
  s.add_dependency('async_sinatra', '1.0.0')
22
23
 
23
24
  s.add_development_dependency('rake')
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sensu
3
3
  version: !ruby/object:Gem::Version
4
- hash: -1667026956
4
+ hash: -2966743116
5
5
  prerelease: true
6
6
  segments:
7
7
  - 0
8
8
  - 9
9
9
  - 12
10
10
  - beta
11
- - 5
12
- version: 0.9.12.beta.5
11
+ - 6
12
+ version: 0.9.12.beta.6
13
13
  platform: ruby
14
14
  authors:
15
15
  - Sean Porter
@@ -18,7 +18,7 @@ autorequire:
18
18
  bindir: bin
19
19
  cert_chain: []
20
20
 
21
- date: 2013-03-14 00:00:00 -07:00
21
+ date: 2013-03-24 00:00:00 -07:00
22
22
  default_executable:
23
23
  dependencies:
24
24
  - !ruby/object:Gem::Dependency
@@ -102,9 +102,25 @@ dependencies:
102
102
  type: :runtime
103
103
  version_requirements: *id005
104
104
  - !ruby/object:Gem::Dependency
105
- name: async_sinatra
105
+ name: sinatra
106
106
  prerelease: false
107
107
  requirement: &id006 !ruby/object:Gem::Requirement
108
+ none: false
109
+ requirements:
110
+ - - "="
111
+ - !ruby/object:Gem::Version
112
+ hash: 17
113
+ segments:
114
+ - 1
115
+ - 3
116
+ - 5
117
+ version: 1.3.5
118
+ type: :runtime
119
+ version_requirements: *id006
120
+ - !ruby/object:Gem::Dependency
121
+ name: async_sinatra
122
+ prerelease: false
123
+ requirement: &id007 !ruby/object:Gem::Requirement
108
124
  none: false
109
125
  requirements:
110
126
  - - "="
@@ -116,11 +132,11 @@ dependencies:
116
132
  - 0
117
133
  version: 1.0.0
118
134
  type: :runtime
119
- version_requirements: *id006
135
+ version_requirements: *id007
120
136
  - !ruby/object:Gem::Dependency
121
137
  name: rake
122
138
  prerelease: false
123
- requirement: &id007 !ruby/object:Gem::Requirement
139
+ requirement: &id008 !ruby/object:Gem::Requirement
124
140
  none: false
125
141
  requirements:
126
142
  - - ">="
@@ -130,11 +146,11 @@ dependencies:
130
146
  - 0
131
147
  version: "0"
132
148
  type: :development
133
- version_requirements: *id007
149
+ version_requirements: *id008
134
150
  - !ruby/object:Gem::Dependency
135
151
  name: rspec
136
152
  prerelease: false
137
- requirement: &id008 !ruby/object:Gem::Requirement
153
+ requirement: &id009 !ruby/object:Gem::Requirement
138
154
  none: false
139
155
  requirements:
140
156
  - - ">="
@@ -144,11 +160,11 @@ dependencies:
144
160
  - 0
145
161
  version: "0"
146
162
  type: :development
147
- version_requirements: *id008
163
+ version_requirements: *id009
148
164
  - !ruby/object:Gem::Dependency
149
165
  name: em-http-request
150
166
  prerelease: false
151
- requirement: &id009 !ruby/object:Gem::Requirement
167
+ requirement: &id010 !ruby/object:Gem::Requirement
152
168
  none: false
153
169
  requirements:
154
170
  - - ">="
@@ -158,7 +174,7 @@ dependencies:
158
174
  - 0
159
175
  version: "0"
160
176
  type: :development
161
- version_requirements: *id009
177
+ version_requirements: *id010
162
178
  description: A monitoring framework that aims to be simple, malleable, and scalable. Uses the publish/subscribe model.
163
179
  email:
164
180
  - portertech@gmail.com