sensu-dashboard 0.9.7 → 0.9.8.beta

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.
@@ -1,4 +1,4 @@
1
- require 'sensu/config'
1
+ require 'sensu/base'
2
2
  require 'em-http-request'
3
3
  require 'em-websocket'
4
4
  require 'sinatra/async'
@@ -11,7 +11,7 @@ class Dashboard < Sinatra::Base
11
11
  EM::run do
12
12
  self.setup(options)
13
13
  self.websocket_server
14
- self.run!(:port => $settings.dashboard.port)
14
+ self.run!(:port => $settings[:dashboard][:port])
15
15
 
16
16
  %w[INT TERM].each do |signal|
17
17
  Signal.trap(signal) do
@@ -22,28 +22,22 @@ class Dashboard < Sinatra::Base
22
22
  end
23
23
 
24
24
  def self.setup(options={})
25
- config = Sensu::Config.new(options)
26
- $settings = config.settings
27
- $logger = config.logger || config.open_log
28
- unless $settings.key?('dashboard')
29
- raise config.invalid_config('missing the following key: dashboard')
25
+ base = Sensu::Base.new(options)
26
+ $settings = base.settings
27
+ $logger = base.logger
28
+ unless $settings[:dashboard].is_a?(Hash)
29
+ raise('missing dashboard configuration')
30
30
  end
31
- unless $settings.dashboard.port.is_a?(Integer)
32
- raise config.invalid_config('dashboard must have a port')
31
+ unless $settings[:dashboard][:port].is_a?(Integer)
32
+ raise('dashboard must have a port')
33
33
  end
34
- unless $settings.dashboard.user.is_a?(String) && $settings.dashboard.password.is_a?(String)
35
- raise config.invalid_config('dashboard must have a user and password')
34
+ unless $settings[:dashboard][:user].is_a?(String) && $settings[:dashboard][:password].is_a?(String)
35
+ raise('dashboard must have a user and password')
36
36
  end
37
- if options[:daemonize]
38
- Process.daemonize
39
- end
40
- if options[:pid_file]
41
- Process.write_pid(options[:pid_file])
42
- end
43
- $api_server = 'http://' + $settings.api.host + ':' + $settings.api.port.to_s
37
+ $api_url = 'http://' + $settings[:api][:host] + ':' + $settings[:api][:port].to_s
44
38
  $api_options = {}
45
- if $settings.api.user && $settings.api.password
46
- $api_options.merge!(:head => {'authorization' => [$settings.api.user, $settings.api.password]})
39
+ if $settings[:api][:user] && $settings[:api][:password]
40
+ $api_options.merge!(:head => {:authorization => [$settings[:api][:user], $settings[:api][:password]]})
47
41
  end
48
42
  end
49
43
 
@@ -51,26 +45,38 @@ class Dashboard < Sinatra::Base
51
45
  $websocket_connections = []
52
46
  EM::WebSocket.start(:host => '0.0.0.0', :port => 9000) do |websocket|
53
47
  websocket.onopen do
54
- $logger.info('[websocket] -- client connected to websocket')
48
+ $logger.debug('client connected to websocket')
55
49
  $websocket_connections.push(websocket)
56
50
  end
57
51
  websocket.onclose do
58
- $logger.info('[websocket] -- client disconnected from websocket')
52
+ $logger.debug('client disconnected from websocket')
59
53
  $websocket_connections.delete(websocket)
60
54
  end
61
55
  end
62
56
  end
63
57
 
58
+ def request_log(env)
59
+ $logger.info([env['REQUEST_METHOD'], env['REQUEST_PATH']].join(' '), {
60
+ :remote_address => env['REMOTE_ADDR'],
61
+ :user_agent => env['HTTP_USER_AGENT'],
62
+ :request_method => env['REQUEST_METHOD'],
63
+ :request_uri => env['REQUEST_URI'],
64
+ :request_body => env['rack.input'].read
65
+ })
66
+ env['rack.input'].rewind
67
+ end
68
+
64
69
  set :root, File.dirname(__FILE__)
65
70
  set :static, true
66
71
  set :public_folder, Proc.new { File.join(root, 'public') }
67
72
 
68
73
  use Rack::Auth::Basic do |user, password|
69
- user == $settings.dashboard.user && password == $settings.dashboard.password
74
+ user == $settings[:dashboard][:user] && password == $settings[:dashboard][:password]
70
75
  end
71
76
 
72
77
  before do
73
78
  content_type 'application/json'
79
+ request_log(env)
74
80
  end
75
81
 
76
82
  aget '/' do
@@ -97,7 +103,6 @@ class Dashboard < Sinatra::Base
97
103
  end
98
104
 
99
105
  apost '/events.json' do
100
- $logger.debug('[events] -- ' + request.ip + ' -- POST -- triggering dashboard refresh')
101
106
  unless $websocket_connections.empty?
102
107
  $websocket_connections.each do |websocket|
103
108
  websocket.send '{"update":"true"}'
@@ -108,8 +113,8 @@ class Dashboard < Sinatra::Base
108
113
 
109
114
  aget '/autocomplete.json' do
110
115
  multi = EM::MultiRequest.new
111
- multi.add :events, EM::HttpRequest.new($api_server + '/events').get($api_options)
112
- multi.add :clients, EM::HttpRequest.new($api_server + '/clients').get($api_options)
116
+ multi.add :events, EM::HttpRequest.new($api_url + '/events').get($api_options)
117
+ multi.add :clients, EM::HttpRequest.new($api_url + '/clients').get($api_options)
113
118
 
114
119
  multi.callback do
115
120
  unless multi.responses[:errback].size > 0
@@ -167,9 +172,9 @@ class Dashboard < Sinatra::Base
167
172
 
168
173
  aget '/clients/autocomplete.json' do
169
174
  begin
170
- http = EM::HttpRequest.new($api_server + '/clients').get($api_options)
175
+ http = EM::HttpRequest.new($api_url + '/clients').get($api_options)
171
176
  rescue => e
172
- $logger.warn(e)
177
+ $logger.warn(e.to_s)
173
178
  status 404
174
179
  body '{"error":"could not retrieve clients from the sensu api"}'
175
180
  end
@@ -214,9 +219,9 @@ class Dashboard < Sinatra::Base
214
219
 
215
220
  aget '/events.json' do
216
221
  begin
217
- http = EM::HttpRequest.new($api_server + '/events').get($api_options)
222
+ http = EM::HttpRequest.new($api_url + '/events').get($api_options)
218
223
  rescue => e
219
- $logger.warn(e)
224
+ $logger.warn(e.to_s)
220
225
  status 404
221
226
  body '{"error":"could not retrieve events from the sensu api"}'
222
227
  end
@@ -244,9 +249,9 @@ class Dashboard < Sinatra::Base
244
249
 
245
250
  aget '/clients.json' do
246
251
  begin
247
- http = EM::HttpRequest.new($api_server + '/clients').get($api_options)
252
+ http = EM::HttpRequest.new($api_url + '/clients').get($api_options)
248
253
  rescue => e
249
- $logger.warn(e)
254
+ $logger.warn(e.to_s)
250
255
  status 404
251
256
  body '{"error":"could not retrieve clients from the sensu api"}'
252
257
  end
@@ -264,9 +269,9 @@ class Dashboard < Sinatra::Base
264
269
 
265
270
  aget '/client/:id.json' do |id|
266
271
  begin
267
- http = EM::HttpRequest.new($api_server + '/client/' + id).get($api_options)
272
+ http = EM::HttpRequest.new($api_url + '/client/' + id).get($api_options)
268
273
  rescue => e
269
- $logger.warn(e)
274
+ $logger.warn(e.to_s)
270
275
  status 404
271
276
  body '{"error":"could not retrieve client from the sensu api"}'
272
277
  end
@@ -284,9 +289,9 @@ class Dashboard < Sinatra::Base
284
289
 
285
290
  adelete '/client/:id.json' do |id|
286
291
  begin
287
- http = EventMachine::HttpRequest.new($api_server + '/client/' + id).delete($api_options)
292
+ http = EventMachine::HttpRequest.new($api_url + '/client/' + id).delete($api_options)
288
293
  rescue => e
289
- $logger.warn(e)
294
+ $logger.warn(e.to_s)
290
295
  status 404
291
296
  body '{"error":"could not delete client from the sensu api"}'
292
297
  end
@@ -304,9 +309,9 @@ class Dashboard < Sinatra::Base
304
309
 
305
310
  aget '/stash/*.json' do |path|
306
311
  begin
307
- http = EM::HttpRequest.new($api_server + '/stash/' + path).get($api_options)
312
+ http = EM::HttpRequest.new($api_url + '/stash/' + path).get($api_options)
308
313
  rescue => e
309
- $logger.warn(e)
314
+ $logger.warn(e.to_s)
310
315
  status 404
311
316
  body '{"error":"could not retrieve a stash from the sensu api"}'
312
317
  end
@@ -330,9 +335,9 @@ class Dashboard < Sinatra::Base
330
335
  'content-type' => 'application/json'
331
336
  }
332
337
  }
333
- http = EM::HttpRequest.new($api_server + '/stash/' + path).post(request_options.merge($api_options))
338
+ http = EM::HttpRequest.new($api_url + '/stash/' + path).post(request_options.merge($api_options))
334
339
  rescue => e
335
- $logger.warn(e)
340
+ $logger.warn(e.to_s)
336
341
  status 404
337
342
  body '{"error":"could not create a stash with the sensu api"}'
338
343
  end
@@ -350,9 +355,9 @@ class Dashboard < Sinatra::Base
350
355
 
351
356
  adelete '/stash/*.json' do |path|
352
357
  begin
353
- http = EM::HttpRequest.new($api_server + '/stash/' + path).delete($api_options)
358
+ http = EM::HttpRequest.new($api_url + '/stash/' + path).delete($api_options)
354
359
  rescue => e
355
- $logger.warn(e)
360
+ $logger.warn(e.to_s)
356
361
  status 404
357
362
  body '{"error":"could not delete a stash with the sensu api"}'
358
363
  end
@@ -376,9 +381,9 @@ class Dashboard < Sinatra::Base
376
381
  'content-type' => 'application/json'
377
382
  }
378
383
  }
379
- http = EM::HttpRequest.new($api_server + '/event/resolve').post(request_options.merge($api_options))
384
+ http = EM::HttpRequest.new($api_url + '/event/resolve').post(request_options.merge($api_options))
380
385
  rescue => e
381
- $logger.warn(e)
386
+ $logger.warn(e.to_s)
382
387
  status 404
383
388
  body '{"error":"could not resolve an event with the sensu api"}'
384
389
  end
@@ -396,9 +401,9 @@ class Dashboard < Sinatra::Base
396
401
 
397
402
  aget '/stashes.json' do
398
403
  begin
399
- http = EM::HttpRequest.new($api_server + '/stashes').get($api_options)
404
+ http = EM::HttpRequest.new($api_url + '/stashes').get($api_options)
400
405
  rescue => e
401
- $logger.warn(e)
406
+ $logger.warn(e.to_s)
402
407
  status 404
403
408
  body '{"error":"could not retrieve a list of stashes from the sensu api"}'
404
409
  end
@@ -422,9 +427,9 @@ class Dashboard < Sinatra::Base
422
427
  'content-type' => 'application/json'
423
428
  }
424
429
  }
425
- http = EM::HttpRequest.new($api_server + '/stashes').post(request_options.merge($api_options))
430
+ http = EM::HttpRequest.new($api_url + '/stashes').post(request_options.merge($api_options))
426
431
  rescue => e
427
- $logger.warn(e)
432
+ $logger.warn(e.to_s)
428
433
  status 404
429
434
  body '{"error":"could not retrieve a list of stashes from the sensu api"}'
430
435
  end
@@ -448,5 +453,5 @@ class Dashboard < Sinatra::Base
448
453
  end
449
454
  end
450
455
 
451
- options = Sensu::Config.read_arguments(ARGV)
456
+ options = Sensu::CLI.read
452
457
  Dashboard.run(options)
@@ -1,5 +1,5 @@
1
1
  module Sensu
2
2
  module Dashboard
3
- VERSION = "0.9.7"
3
+ VERSION = "0.9.8.beta"
4
4
  end
5
5
  end
@@ -11,7 +11,7 @@ Gem::Specification.new do |s|
11
11
  s.summary = %q{A web interface for sensu, a publish/subscribe server monitoring framework}
12
12
  s.description = %q{Display current events and clients in sensu via a simple web interface}
13
13
 
14
- s.add_dependency("sensu", "~> 0.9.5")
14
+ s.add_dependency("sensu", "~> 0.9.6.beta.3")
15
15
  s.add_dependency("em-http-request", "1.0.1")
16
16
  s.add_dependency("em-websocket")
17
17
  s.add_dependency("sass")
metadata CHANGED
@@ -1,13 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sensu-dashboard
3
3
  version: !ruby/object:Gem::Version
4
- hash: 53
5
- prerelease: false
4
+ hash: 31098153
5
+ prerelease: true
6
6
  segments:
7
7
  - 0
8
8
  - 9
9
- - 7
10
- version: 0.9.7
9
+ - 8
10
+ - beta
11
+ version: 0.9.8.beta
11
12
  platform: ruby
12
13
  authors:
13
14
  - Justin Kolberg
@@ -16,7 +17,7 @@ autorequire:
16
17
  bindir: bin
17
18
  cert_chain: []
18
19
 
19
- date: 2012-03-28 00:00:00 -07:00
20
+ date: 2012-05-04 00:00:00 -07:00
20
21
  default_executable:
21
22
  dependencies:
22
23
  - !ruby/object:Gem::Dependency
@@ -27,12 +28,14 @@ dependencies:
27
28
  requirements:
28
29
  - - ~>
29
30
  - !ruby/object:Gem::Version
30
- hash: 49
31
+ hash: 62196229
31
32
  segments:
32
33
  - 0
33
34
  - 9
34
- - 5
35
- version: 0.9.5
35
+ - 6
36
+ - beta
37
+ - 3
38
+ version: 0.9.6.beta.3
36
39
  type: :runtime
37
40
  version_requirements: *id001
38
41
  - !ruby/object:Gem::Dependency
@@ -152,12 +155,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
152
155
  required_rubygems_version: !ruby/object:Gem::Requirement
153
156
  none: false
154
157
  requirements:
155
- - - ">="
158
+ - - ">"
156
159
  - !ruby/object:Gem::Version
157
- hash: 3
160
+ hash: 25
158
161
  segments:
159
- - 0
160
- version: "0"
162
+ - 1
163
+ - 3
164
+ - 1
165
+ version: 1.3.1
161
166
  requirements: []
162
167
 
163
168
  rubyforge_project: