sensu-dashboard 0.9.7.beta → 0.9.7
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-dashboard/app.rb
CHANGED
@@ -41,6 +41,10 @@ class Dashboard < Sinatra::Base
|
|
41
41
|
Process.write_pid(options[:pid_file])
|
42
42
|
end
|
43
43
|
$api_server = 'http://' + $settings.api.host + ':' + $settings.api.port.to_s
|
44
|
+
$api_options = {}
|
45
|
+
if $settings.api.user && $settings.api.password
|
46
|
+
$api_options.merge!(:head => {'authorization' => [$settings.api.user, $settings.api.password]})
|
47
|
+
end
|
44
48
|
end
|
45
49
|
|
46
50
|
def self.websocket_server
|
@@ -104,31 +108,14 @@ class Dashboard < Sinatra::Base
|
|
104
108
|
|
105
109
|
aget '/autocomplete.json' do
|
106
110
|
multi = EM::MultiRequest.new
|
107
|
-
|
108
|
-
|
109
|
-
$api_server + '/events',
|
110
|
-
$api_server + '/clients'
|
111
|
-
]
|
112
|
-
|
113
|
-
requests.each do |url|
|
114
|
-
multi.add EM::HttpRequest.new(url).get
|
115
|
-
end
|
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
113
|
|
117
114
|
multi.callback do
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
multi.responses[:succeeded].each do |request|
|
122
|
-
body = JSON.parse(request.response)
|
123
|
-
case body
|
124
|
-
when Hash
|
125
|
-
events = body
|
126
|
-
when Array
|
127
|
-
clients = body
|
128
|
-
end
|
129
|
-
end
|
115
|
+
unless multi.responses[:errback].size > 0
|
116
|
+
events = JSON.parse(multi.responses[:callback][:events].response)
|
117
|
+
clients = JSON.parse(multi.responses[:callback][:clients].response)
|
130
118
|
|
131
|
-
if events && clients
|
132
119
|
autocomplete = []
|
133
120
|
statuses = {:warning => [], :critical => [], :unknown => []}
|
134
121
|
subscriptions = {}
|
@@ -137,23 +124,21 @@ class Dashboard < Sinatra::Base
|
|
137
124
|
# searching by client
|
138
125
|
clients.each do |client|
|
139
126
|
client_name = client['name']
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
statuses[:unknown].push(event['status'])
|
154
|
-
end
|
155
|
-
checks.push(check)
|
127
|
+
autocomplete.push({:value => [client_name], :type => 'client', :name => client_name})
|
128
|
+
client['subscriptions'].each do |subscription|
|
129
|
+
subscriptions[subscription] ||= []
|
130
|
+
subscriptions[subscription].push(client_name)
|
131
|
+
end
|
132
|
+
events.each do |event|
|
133
|
+
case event['status']
|
134
|
+
when 1
|
135
|
+
statuses[:warning].push(event['status'])
|
136
|
+
when 2
|
137
|
+
statuses[:critical].push(event['status'])
|
138
|
+
else
|
139
|
+
statuses[:unknown].push(event['status'])
|
156
140
|
end
|
141
|
+
checks.push(event['check'])
|
157
142
|
end
|
158
143
|
end
|
159
144
|
|
@@ -181,29 +166,22 @@ class Dashboard < Sinatra::Base
|
|
181
166
|
end
|
182
167
|
|
183
168
|
aget '/clients/autocomplete.json' do
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
requests.each do |url|
|
191
|
-
multi.add EM::HttpRequest.new(url).get
|
169
|
+
begin
|
170
|
+
http = EM::HttpRequest.new($api_server + '/clients').get($api_options)
|
171
|
+
rescue => e
|
172
|
+
$logger.warn(e)
|
173
|
+
status 404
|
174
|
+
body '{"error":"could not retrieve clients from the sensu api"}'
|
192
175
|
end
|
193
176
|
|
194
|
-
|
195
|
-
|
196
|
-
clients
|
197
|
-
|
198
|
-
multi.responses[:succeeded].each do |request|
|
199
|
-
body = JSON.parse(request.response)
|
200
|
-
case body
|
201
|
-
when Array
|
202
|
-
clients = body
|
203
|
-
end
|
204
|
-
end
|
177
|
+
http.errback do
|
178
|
+
status 404
|
179
|
+
body '{"error":"could not retrieve clients from the sensu api"}'
|
180
|
+
end
|
205
181
|
|
206
|
-
|
182
|
+
http.callback do
|
183
|
+
if http.response_header.status == 200
|
184
|
+
clients = JSON.parse(http.response)
|
207
185
|
autocomplete = []
|
208
186
|
subscriptions = {}
|
209
187
|
|
@@ -236,9 +214,9 @@ class Dashboard < Sinatra::Base
|
|
236
214
|
|
237
215
|
aget '/events.json' do
|
238
216
|
begin
|
239
|
-
http = EM::HttpRequest.new($api_server + '/events').get
|
217
|
+
http = EM::HttpRequest.new($api_server + '/events').get($api_options)
|
240
218
|
rescue => e
|
241
|
-
$logger.
|
219
|
+
$logger.warn(e)
|
242
220
|
status 404
|
243
221
|
body '{"error":"could not retrieve events from the sensu api"}'
|
244
222
|
end
|
@@ -249,16 +227,26 @@ class Dashboard < Sinatra::Base
|
|
249
227
|
end
|
250
228
|
|
251
229
|
http.callback do
|
230
|
+
events = Hash.new
|
231
|
+
if http.response_header.status == 200
|
232
|
+
api_events = JSON.parse(http.response)
|
233
|
+
api_events.each do |event|
|
234
|
+
client = event.delete('client')
|
235
|
+
check = event.delete('check')
|
236
|
+
events[client] ||= Hash.new
|
237
|
+
events[client][check] = event
|
238
|
+
end
|
239
|
+
end
|
252
240
|
status http.response_header.status
|
253
|
-
body
|
241
|
+
body events.to_json
|
254
242
|
end
|
255
243
|
end
|
256
244
|
|
257
245
|
aget '/clients.json' do
|
258
246
|
begin
|
259
|
-
http = EM::HttpRequest.new($api_server + '/clients').get
|
247
|
+
http = EM::HttpRequest.new($api_server + '/clients').get($api_options)
|
260
248
|
rescue => e
|
261
|
-
$logger.
|
249
|
+
$logger.warn(e)
|
262
250
|
status 404
|
263
251
|
body '{"error":"could not retrieve clients from the sensu api"}'
|
264
252
|
end
|
@@ -276,9 +264,9 @@ class Dashboard < Sinatra::Base
|
|
276
264
|
|
277
265
|
aget '/client/:id.json' do |id|
|
278
266
|
begin
|
279
|
-
http = EM::HttpRequest.new($api_server + '/client/' + id).get
|
267
|
+
http = EM::HttpRequest.new($api_server + '/client/' + id).get($api_options)
|
280
268
|
rescue => e
|
281
|
-
$logger.
|
269
|
+
$logger.warn(e)
|
282
270
|
status 404
|
283
271
|
body '{"error":"could not retrieve client from the sensu api"}'
|
284
272
|
end
|
@@ -296,9 +284,9 @@ class Dashboard < Sinatra::Base
|
|
296
284
|
|
297
285
|
adelete '/client/:id.json' do |id|
|
298
286
|
begin
|
299
|
-
http = EventMachine::HttpRequest.new($api_server + '/client/' + id).delete
|
287
|
+
http = EventMachine::HttpRequest.new($api_server + '/client/' + id).delete($api_options)
|
300
288
|
rescue => e
|
301
|
-
$logger.
|
289
|
+
$logger.warn(e)
|
302
290
|
status 404
|
303
291
|
body '{"error":"could not delete client from the sensu api"}'
|
304
292
|
end
|
@@ -316,9 +304,9 @@ class Dashboard < Sinatra::Base
|
|
316
304
|
|
317
305
|
aget '/stash/*.json' do |path|
|
318
306
|
begin
|
319
|
-
http = EM::HttpRequest.new($api_server + '/stash/' + path).get
|
307
|
+
http = EM::HttpRequest.new($api_server + '/stash/' + path).get($api_options)
|
320
308
|
rescue => e
|
321
|
-
$logger.
|
309
|
+
$logger.warn(e)
|
322
310
|
status 404
|
323
311
|
body '{"error":"could not retrieve a stash from the sensu api"}'
|
324
312
|
end
|
@@ -342,9 +330,9 @@ class Dashboard < Sinatra::Base
|
|
342
330
|
'content-type' => 'application/json'
|
343
331
|
}
|
344
332
|
}
|
345
|
-
http = EM::HttpRequest.new($api_server + '/stash/' + path).post
|
333
|
+
http = EM::HttpRequest.new($api_server + '/stash/' + path).post(request_options.merge($api_options))
|
346
334
|
rescue => e
|
347
|
-
$logger.
|
335
|
+
$logger.warn(e)
|
348
336
|
status 404
|
349
337
|
body '{"error":"could not create a stash with the sensu api"}'
|
350
338
|
end
|
@@ -362,9 +350,9 @@ class Dashboard < Sinatra::Base
|
|
362
350
|
|
363
351
|
adelete '/stash/*.json' do |path|
|
364
352
|
begin
|
365
|
-
http = EM::HttpRequest.new($api_server + '/stash/' + path).delete
|
353
|
+
http = EM::HttpRequest.new($api_server + '/stash/' + path).delete($api_options)
|
366
354
|
rescue => e
|
367
|
-
$logger.
|
355
|
+
$logger.warn(e)
|
368
356
|
status 404
|
369
357
|
body '{"error":"could not delete a stash with the sensu api"}'
|
370
358
|
end
|
@@ -388,9 +376,9 @@ class Dashboard < Sinatra::Base
|
|
388
376
|
'content-type' => 'application/json'
|
389
377
|
}
|
390
378
|
}
|
391
|
-
http = EM::HttpRequest.new($api_server + '/event/resolve').post
|
379
|
+
http = EM::HttpRequest.new($api_server + '/event/resolve').post(request_options.merge($api_options))
|
392
380
|
rescue => e
|
393
|
-
$logger.
|
381
|
+
$logger.warn(e)
|
394
382
|
status 404
|
395
383
|
body '{"error":"could not resolve an event with the sensu api"}'
|
396
384
|
end
|
@@ -408,9 +396,9 @@ class Dashboard < Sinatra::Base
|
|
408
396
|
|
409
397
|
aget '/stashes.json' do
|
410
398
|
begin
|
411
|
-
http = EM::HttpRequest.new($api_server + '/stashes').get
|
399
|
+
http = EM::HttpRequest.new($api_server + '/stashes').get($api_options)
|
412
400
|
rescue => e
|
413
|
-
$logger.
|
401
|
+
$logger.warn(e)
|
414
402
|
status 404
|
415
403
|
body '{"error":"could not retrieve a list of stashes from the sensu api"}'
|
416
404
|
end
|
@@ -434,9 +422,9 @@ class Dashboard < Sinatra::Base
|
|
434
422
|
'content-type' => 'application/json'
|
435
423
|
}
|
436
424
|
}
|
437
|
-
http = EM::HttpRequest.new($api_server + '/stashes').post
|
425
|
+
http = EM::HttpRequest.new($api_server + '/stashes').post(request_options.merge($api_options))
|
438
426
|
rescue => e
|
439
|
-
$logger.
|
427
|
+
$logger.warn(e)
|
440
428
|
status 404
|
441
429
|
body '{"error":"could not retrieve a list of stashes from the sensu api"}'
|
442
430
|
end
|
@@ -454,7 +442,7 @@ class Dashboard < Sinatra::Base
|
|
454
442
|
|
455
443
|
def self.stop(signal)
|
456
444
|
$logger.warn('[stop] -- stopping sensu dashboard -- ' + signal)
|
457
|
-
EM::
|
445
|
+
EM::PeriodicTimer.new(0.25) do
|
458
446
|
EM::stop_event_loop
|
459
447
|
end
|
460
448
|
end
|
Binary file
|
@@ -46,6 +46,10 @@
|
|
46
46
|
<link rel="stylesheet" href="css/sonian.css">
|
47
47
|
<link rel="stylesheet" href="css/autoSuggest.css">
|
48
48
|
|
49
|
+
<!-- Favicon: Set the sensu fan image from github as the favicon -->
|
50
|
+
<link rel="icon" href="/favicon.ico" type="image/x-icon">
|
51
|
+
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
|
52
|
+
|
49
53
|
<!-- all our JS is at the bottom of the page, except for Modernizr. -->
|
50
54
|
<script src="js/modernizr-1.7.min.js"></script>
|
51
55
|
|
data/sensu-dashboard.gemspec
CHANGED
@@ -11,8 +11,8 @@ 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.
|
15
|
-
s.add_dependency("em-http-request", "0.
|
14
|
+
s.add_dependency("sensu", "~> 0.9.5")
|
15
|
+
s.add_dependency("em-http-request", "1.0.1")
|
16
16
|
s.add_dependency("em-websocket")
|
17
17
|
s.add_dependency("sass")
|
18
18
|
|
metadata
CHANGED
@@ -1,14 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sensu-dashboard
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
5
|
-
prerelease:
|
4
|
+
hash: 53
|
5
|
+
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 9
|
9
9
|
- 7
|
10
|
-
|
11
|
-
version: 0.9.7.beta
|
10
|
+
version: 0.9.7
|
12
11
|
platform: ruby
|
13
12
|
authors:
|
14
13
|
- Justin Kolberg
|
@@ -17,7 +16,7 @@ autorequire:
|
|
17
16
|
bindir: bin
|
18
17
|
cert_chain: []
|
19
18
|
|
20
|
-
date: 2012-
|
19
|
+
date: 2012-03-28 00:00:00 -07:00
|
21
20
|
default_executable:
|
22
21
|
dependencies:
|
23
22
|
- !ruby/object:Gem::Dependency
|
@@ -28,12 +27,12 @@ dependencies:
|
|
28
27
|
requirements:
|
29
28
|
- - ~>
|
30
29
|
- !ruby/object:Gem::Version
|
31
|
-
hash:
|
30
|
+
hash: 49
|
32
31
|
segments:
|
33
32
|
- 0
|
34
33
|
- 9
|
35
|
-
-
|
36
|
-
version: 0.9.
|
34
|
+
- 5
|
35
|
+
version: 0.9.5
|
37
36
|
type: :runtime
|
38
37
|
version_requirements: *id001
|
39
38
|
- !ruby/object:Gem::Dependency
|
@@ -44,12 +43,12 @@ dependencies:
|
|
44
43
|
requirements:
|
45
44
|
- - "="
|
46
45
|
- !ruby/object:Gem::Version
|
47
|
-
hash:
|
46
|
+
hash: 21
|
48
47
|
segments:
|
48
|
+
- 1
|
49
49
|
- 0
|
50
|
-
-
|
51
|
-
|
52
|
-
version: 0.3.0
|
50
|
+
- 1
|
51
|
+
version: 1.0.1
|
53
52
|
type: :runtime
|
54
53
|
version_requirements: *id002
|
55
54
|
- !ruby/object:Gem::Dependency
|
@@ -100,6 +99,7 @@ files:
|
|
100
99
|
- lib/sensu-dashboard/app.rb
|
101
100
|
- lib/sensu-dashboard/public/css/autoSuggest.css
|
102
101
|
- lib/sensu-dashboard/public/css/style.css
|
102
|
+
- lib/sensu-dashboard/public/favicon.ico
|
103
103
|
- lib/sensu-dashboard/public/img/cross.png
|
104
104
|
- lib/sensu-dashboard/public/img/footer_bg.png
|
105
105
|
- lib/sensu-dashboard/public/img/header_bg.png
|
@@ -152,14 +152,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
152
152
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
153
153
|
none: false
|
154
154
|
requirements:
|
155
|
-
- - "
|
155
|
+
- - ">="
|
156
156
|
- !ruby/object:Gem::Version
|
157
|
-
hash:
|
157
|
+
hash: 3
|
158
158
|
segments:
|
159
|
-
-
|
160
|
-
|
161
|
-
- 1
|
162
|
-
version: 1.3.1
|
159
|
+
- 0
|
160
|
+
version: "0"
|
163
161
|
requirements: []
|
164
162
|
|
165
163
|
rubyforge_project:
|