sensu-dashboard 0.7.0 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/sensu-dashboard/app.rb +62 -0
- data/lib/sensu-dashboard/public/js/functions.js +73 -0
- data/lib/sensu-dashboard/version.rb +1 -1
- data/lib/sensu-dashboard/views/layout.erb +1 -0
- data/lib/sensu-dashboard/views/sonian.sass +2 -1
- data/lib/sensu-dashboard/views/stash_templates.erb +44 -0
- data/lib/sensu-dashboard/views/stashes.erb +32 -0
- metadata +6 -4
data/lib/sensu-dashboard/app.rb
CHANGED
@@ -41,6 +41,12 @@ EventMachine.run do
|
|
41
41
|
body erb :clients
|
42
42
|
end
|
43
43
|
|
44
|
+
aget '/stashes' do
|
45
|
+
content_type 'text/html'
|
46
|
+
@js = erb :stash_templates, :layout => false
|
47
|
+
body erb :stashes
|
48
|
+
end
|
49
|
+
|
44
50
|
aget '/css/sonian.css' do
|
45
51
|
content_type 'text/css'
|
46
52
|
body sass :sonian
|
@@ -278,6 +284,62 @@ EventMachine.run do
|
|
278
284
|
end
|
279
285
|
end
|
280
286
|
|
287
|
+
aget '/stashes.json' do
|
288
|
+
begin
|
289
|
+
request_options = {
|
290
|
+
# :body => request.body.read,
|
291
|
+
:head => {
|
292
|
+
'content-type' => 'application/json'
|
293
|
+
}
|
294
|
+
}
|
295
|
+
http = EventMachine::HttpRequest.new("#{api_server}/stashes").get request_options
|
296
|
+
rescue => e
|
297
|
+
puts e
|
298
|
+
status 404
|
299
|
+
body '{"error":"could not retrieve a list of stashes from the sensu api"}'
|
300
|
+
end
|
301
|
+
|
302
|
+
http.errback do
|
303
|
+
status 404
|
304
|
+
body '{"error":"could not retrieve a list of stashes from the sensu api"}'
|
305
|
+
end
|
306
|
+
|
307
|
+
http.callback do
|
308
|
+
resp = http.response
|
309
|
+
puts resp
|
310
|
+
status http.response_header.status
|
311
|
+
body resp
|
312
|
+
end
|
313
|
+
end
|
314
|
+
|
315
|
+
apost '/stashes.json' do
|
316
|
+
begin
|
317
|
+
request_options = {
|
318
|
+
:body => request.body.read,
|
319
|
+
:head => {
|
320
|
+
'content-type' => 'application/json'
|
321
|
+
}
|
322
|
+
}
|
323
|
+
http = EventMachine::HttpRequest.new("#{api_server}/stashes").post request_options
|
324
|
+
rescue => e
|
325
|
+
puts e
|
326
|
+
status 404
|
327
|
+
body '{\"error\":\"could not retrieve a list of stashes from the sensu api\"}'
|
328
|
+
end
|
329
|
+
|
330
|
+
http.errback do
|
331
|
+
status 404
|
332
|
+
body '{\"error\":\"could not retrieve a list of stashes from the sensu api\"}'
|
333
|
+
end
|
334
|
+
|
335
|
+
http.callback do
|
336
|
+
resp = http.response
|
337
|
+
puts resp
|
338
|
+
status http.response_header.status
|
339
|
+
body resp
|
340
|
+
end
|
341
|
+
end
|
342
|
+
|
281
343
|
websocket_connections = Array.new
|
282
344
|
EventMachine::WebSocket.start(:host => "0.0.0.0", :port => 9000) do |websocket|
|
283
345
|
websocket.onopen do
|
@@ -152,6 +152,79 @@ function fetchClients() {
|
|
152
152
|
});
|
153
153
|
}
|
154
154
|
|
155
|
+
function fetchStashes() {
|
156
|
+
$('table#events > tbody').empty();
|
157
|
+
$.ajax({
|
158
|
+
type: 'GET',
|
159
|
+
url: '/stashes.json',
|
160
|
+
success: function(data, textStatus, xhr) {
|
161
|
+
$.ajax({
|
162
|
+
type: 'POST',
|
163
|
+
url: '/stashes.json',
|
164
|
+
data: JSON.stringify(data),
|
165
|
+
success: function(stash_data, textStatus, xhr) {
|
166
|
+
stashes = new Array();
|
167
|
+
for (stash in stash_data) {
|
168
|
+
stash_keys = new Array();
|
169
|
+
stash_values = new Array();
|
170
|
+
for (stash_value in stash_data[stash]) {
|
171
|
+
stash_keys.push(stash_value);
|
172
|
+
stash_values.push({
|
173
|
+
name: stash_value,
|
174
|
+
value: stash_data[stash][stash_value]
|
175
|
+
});
|
176
|
+
}
|
177
|
+
stashes.push({
|
178
|
+
identifier: SHA1(stash),
|
179
|
+
name: stash,
|
180
|
+
keys: stash_keys.join(', '),
|
181
|
+
values: stash_values
|
182
|
+
});
|
183
|
+
}
|
184
|
+
$('#stashTemplate').tmpl(stashes).appendTo('table#events > tbody');
|
185
|
+
$('tbody > tr').click(function() {
|
186
|
+
$('div#event_details_modal').empty();
|
187
|
+
var row = $(this).parent().children().index($(this));
|
188
|
+
$('#stashDetailsTemplate').tmpl(stashes[row]).appendTo('div#event_details_modal');
|
189
|
+
$('div#delete_stash').click(function() {
|
190
|
+
$('div#delete_stash > img').attr("src", "/img/loading_circle.gif");
|
191
|
+
$.ajax({
|
192
|
+
type: 'DELETE',
|
193
|
+
url: '/stash/'+stashes[row]['name']+'.json',
|
194
|
+
success: function(data, textStatus, xhr) {
|
195
|
+
$("#lean_overlay").fadeOut(200);
|
196
|
+
$("#event_details_modal").css({'display':'none'});
|
197
|
+
fetchStashes();
|
198
|
+
},
|
199
|
+
error: function(xhr, textStatus, errorThrown) {
|
200
|
+
$('div#delete_stash > img').attr("src", "/img/cross.png");
|
201
|
+
console.log('XHR: ' + xhr);
|
202
|
+
console.log('textStatus: ' + textStatus);
|
203
|
+
console.log('errorThrown: ' + errorThrown);
|
204
|
+
alert('Error deleting stash');
|
205
|
+
}
|
206
|
+
});
|
207
|
+
});
|
208
|
+
});
|
209
|
+
$('tr[rel*=leanModal]').leanModal({ top : 50, bottom : 50 });
|
210
|
+
},
|
211
|
+
error: function(xhr, textStatus, errorThrown) {
|
212
|
+
console.log('XHR: ' + xhr);
|
213
|
+
console.log('textStatus: ' + textStatus);
|
214
|
+
console.log('errorThrown: ' + errorThrown);
|
215
|
+
alert('Error retrieving stashes');
|
216
|
+
}
|
217
|
+
});
|
218
|
+
},
|
219
|
+
error: function(xhr, textStatus, errorThrown) {
|
220
|
+
console.log('XHR: ' + xhr);
|
221
|
+
console.log('textStatus: ' + textStatus);
|
222
|
+
console.log('errorThrown: ' + errorThrown);
|
223
|
+
alert('Error retrieving stashes');
|
224
|
+
}
|
225
|
+
});
|
226
|
+
}
|
227
|
+
|
155
228
|
function filterEvents() {
|
156
229
|
var values = $("input[type=hidden]").val().split(",");
|
157
230
|
filtered_events = [];
|
@@ -78,6 +78,7 @@ section#main_content
|
|
78
78
|
tbody tr
|
79
79
|
background-color: #fff
|
80
80
|
cursor: pointer
|
81
|
+
border-bottom: 1px solid #ccc
|
81
82
|
&.status2
|
82
83
|
background-color: #b55
|
83
84
|
color: #fff
|
@@ -95,7 +96,7 @@ section#main_content
|
|
95
96
|
border-top: 1px solid #ccc
|
96
97
|
&.status3
|
97
98
|
border-top: 1px solid #fffbb5
|
98
|
-
&.status2:hover, &.status1:hover, &.status3:hover
|
99
|
+
&.status2:hover, &.status1:hover, &.status3:hover, &:hover
|
99
100
|
background-color: #992222
|
100
101
|
color: #fff
|
101
102
|
border-bottom: 1px solid #880000
|
@@ -0,0 +1,44 @@
|
|
1
|
+
<!-- Stash template -->
|
2
|
+
<script id="stashTemplate" type="text/x-jquery-tmpl">
|
3
|
+
<tr id="${name}" rel="leanModal" href="#event_details_modal">
|
4
|
+
<td>${name}</td><td>${keys}</td>
|
5
|
+
</tr>
|
6
|
+
</script>
|
7
|
+
|
8
|
+
<!-- Stash details row template -->
|
9
|
+
<script id="stashDetailsTemplate" type="text/x-jquery-tmpl">
|
10
|
+
<h1 class="section_title">Actions</h1>
|
11
|
+
<div id="event_actions">
|
12
|
+
<div class="event_detail_group">
|
13
|
+
<div class="event_detail">
|
14
|
+
<div id="delete_stash" class="action_btn" style="margin-right: 7px;">
|
15
|
+
<img src="/img/cross.png" style="vertical-align: middle; padding-right: 7px;"/><strong>Delete Stash</strong>
|
16
|
+
</div>
|
17
|
+
</div>
|
18
|
+
<div style="clear: both;"></div>
|
19
|
+
</div>
|
20
|
+
</div>
|
21
|
+
<h1 class="section_title">Stash Information</h1>
|
22
|
+
<div class="event_detail_group">
|
23
|
+
<h1>Path</h1>
|
24
|
+
<p>${name}</p>
|
25
|
+
</div>
|
26
|
+
<div style="clear: both;"></div>
|
27
|
+
<h1 class="section_title">Stash Data</h1>
|
28
|
+
{{each values}}
|
29
|
+
<div class="event_detail_group">
|
30
|
+
<h1>${$value['name']}</h1>
|
31
|
+
<p>${$value['value']}</p>
|
32
|
+
</div>
|
33
|
+
{{/each}}
|
34
|
+
<div style="clear: both;"></div>
|
35
|
+
</script>
|
36
|
+
|
37
|
+
<script type="text/javascript">
|
38
|
+
fetchStashes();
|
39
|
+
|
40
|
+
ws = new WebSocket("ws://" + location.hostname + ":9000");
|
41
|
+
ws.onmessage = function(evt) {
|
42
|
+
fetchStashes();
|
43
|
+
}
|
44
|
+
</script>
|
@@ -0,0 +1,32 @@
|
|
1
|
+
<h1>Stashes</h1>
|
2
|
+
|
3
|
+
<table id="events">
|
4
|
+
|
5
|
+
<thead>
|
6
|
+
|
7
|
+
<tr>
|
8
|
+
<td class="col_clients">Path</td>
|
9
|
+
<td class="col_checks">Keys</td>
|
10
|
+
</tr>
|
11
|
+
|
12
|
+
</thead>
|
13
|
+
|
14
|
+
<tbody></tbody>
|
15
|
+
|
16
|
+
</table>
|
17
|
+
|
18
|
+
<div id="event_details_modal" class="event_details_modal">
|
19
|
+
<h1 class="section_title">Actions</h1>
|
20
|
+
<div id="event_actions">
|
21
|
+
<div class="event_detail_group">
|
22
|
+
<div class="event_detail">
|
23
|
+
<div id="delete_stash" class="action_btn" style="margin-right: 7px;">
|
24
|
+
<img src="/img/cross.png" style="vertical-align: middle; padding-right: 7px;"/><strong>Delete Stash</strong>
|
25
|
+
</div>
|
26
|
+
</div>
|
27
|
+
<div style="clear: both;"></div>
|
28
|
+
</div>
|
29
|
+
</div>
|
30
|
+
<h1 class="section_title">Stash Data</h1>
|
31
|
+
<div id="stash_data"></div>
|
32
|
+
</div>
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sensu-dashboard
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 63
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
8
|
+
- 8
|
9
9
|
- 0
|
10
|
-
version: 0.
|
10
|
+
version: 0.8.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Justin Kolberg
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2011-
|
19
|
+
date: 2011-12-06 00:00:00 -08:00
|
20
20
|
default_executable:
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|
@@ -125,6 +125,8 @@ files:
|
|
125
125
|
- lib/sensu-dashboard/views/index.erb
|
126
126
|
- lib/sensu-dashboard/views/layout.erb
|
127
127
|
- lib/sensu-dashboard/views/sonian.sass
|
128
|
+
- lib/sensu-dashboard/views/stash_templates.erb
|
129
|
+
- lib/sensu-dashboard/views/stashes.erb
|
128
130
|
- sensu-dashboard.gemspec
|
129
131
|
has_rdoc: true
|
130
132
|
homepage: https://github.com/sonian/sensu-dashboard
|