sensu-dashboard 0.8.1 → 0.9.0

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.
@@ -104,44 +104,45 @@ EventMachine.run do
104
104
  autocomplete = []
105
105
  statuses = {:warning => [], :critical => [], :unknown => []}
106
106
  subscriptions = {}
107
- checks = {}
107
+ checks = []
108
108
 
109
+ # searching by client
109
110
  clients.each do |client|
110
111
  client_name = client['name']
111
112
  if events.include?(client_name)
112
- autocomplete.push({:value => client_name, :name => client_name})
113
+ autocomplete.push({:value => [client_name], :type => 'client', :name => client_name})
113
114
  client['subscriptions'].each do |subscription|
114
115
  subscriptions[subscription] ||= []
115
116
  subscriptions[subscription].push(client_name)
116
117
  end
117
118
  events[client_name].each do |check, event|
118
- case event["status"]
119
+
120
+ case event['status']
119
121
  when 1
120
- statuses[:warning].push(client_name)
122
+ statuses[:warning].push(event['status'])
121
123
  when 2
122
- statuses[:critical].push(client_name)
124
+ statuses[:critical].push(event['status'])
123
125
  else
124
- statuses[:unknown].push(client_name)
126
+ statuses[:unknown].push(event['status'])
125
127
  end
126
- checks[check] ||= []
127
- checks[check].push(client_name)
128
+ checks.push(check)
128
129
  end
129
130
  end
130
131
  end
131
132
 
132
133
  # searching by subscription
133
134
  subscriptions.each do |k, v|
134
- autocomplete.push({:value => v.join(','), :name => k})
135
+ autocomplete.push({:value => v.uniq, :type => 'subscription', :name => k})
135
136
  end
136
137
 
137
138
  # searching by status
138
139
  statuses.each do |k, v|
139
- autocomplete.push({:value => v.join(','), :name => k})
140
+ autocomplete.push({:value => v.uniq, :type => 'status', :name => k})
140
141
  end
141
142
 
142
143
  # searching by check
143
- checks.each do |k, v|
144
- autocomplete.push({:value => v.join(','), :name => k})
144
+ checks.uniq.each do |v|
145
+ autocomplete.push({:value => [v], :type => 'check', :name => v})
145
146
  end
146
147
 
147
148
  body autocomplete.to_json
@@ -1,8 +1,17 @@
1
1
  // remap jQuery to $
2
2
  (function($){})(window.jQuery);
3
3
 
4
- var filtered_events = [];
5
- var filtered_events_count = 0;
4
+ Object.size = function(obj) {
5
+ var size = 0, key;
6
+ for (key in obj) {
7
+ if (obj.hasOwnProperty(key)) size++;
8
+ }
9
+ return size;
10
+ };
11
+
12
+ var selected_filters = {};
13
+ var grouped_filters = {};
14
+
6
15
  var filter_unknown_checks = true;
7
16
 
8
17
  function capitaliseFirstLetter(string) {
@@ -22,46 +31,107 @@ function fetchEvents() {
22
31
  var event_count = 0;
23
32
 
24
33
  $.getJSON('/events.json', function(data) {
25
- m_events = new Array();
34
+ var m_events = new Array();
26
35
 
27
36
  $('table#events > tbody').empty();
28
37
 
29
- for (var nodekey in data) {
30
- if ((filtered_events_count > 0) && ($.inArray(nodekey, filtered_events) == -1)) {
31
- } else {
32
- var node = data[nodekey];
33
-
34
- for (var a in node) {
35
- var is_unknown = node[a]['status'] >= 3 || node[a]['status'] < 0;
36
-
37
- if (filter_unknown_checks) {
38
- if (node[a]['output'] == 'Unknown check') {
39
- break;
40
- }
41
- }
42
-
43
- event_count++;
44
- var dataObject = {
45
- identifier: SHA1(nodekey+a),
46
- client: nodekey,
47
- check: a,
48
- status: node[a]['status'],
49
- output: node[a]['output'],
50
- occurrences: node[a]['occurrences'],
51
- is_unknown: is_unknown
52
- };
53
-
54
- if (m_events[node[a]['status']] == null) {
55
- m_events[node[a]['status']] = new Array();
56
- }
57
-
58
- m_events[node[a]['status']][nodekey+a] = dataObject;
38
+ // iterate through the filters
39
+ grouped_filters = {};
40
+ for (var i in selected_filters) {
41
+ var current_filter = selected_filters[i];
42
+
43
+ // store client filters in the grouped filters array
44
+ if (current_filter['type'] == 'client') {
45
+ grouped_filters['client'] || (grouped_filters['client'] = []);
46
+ for (var j in current_filter['value']) {
47
+ grouped_filters['client'].push(current_filter['value'][j]);
48
+ }
49
+ }
50
+
51
+ // store subscription filters in the grouped filters array
52
+ if (current_filter['type'] == 'subscription') {
53
+ grouped_filters['subscription'] || (grouped_filters['subscription'] = []);
54
+ for (var j in current_filter['value']) {
55
+ grouped_filters['subscription'].push(current_filter['value'][j]);
56
+ }
57
+ }
58
+
59
+ // store check filters in the grouped filters array
60
+ if (current_filter['type'] == 'check') {
61
+ grouped_filters['check'] || (grouped_filters['check'] = []);
62
+ for (var j in current_filter['value']) {
63
+ grouped_filters['check'].push(current_filter['value'][j]);
64
+ }
65
+ }
66
+
67
+ // store status filters in the grouped filters array
68
+ if (current_filter['type'] == 'status') {
69
+ grouped_filters['status'] || (grouped_filters['status'] = []);
70
+ for (var j in current_filter['value']) {
71
+ grouped_filters['status'].push(current_filter['value'][j]);
59
72
  }
60
73
  }
61
74
  }
62
75
 
63
- for (status in m_events) {
64
- for (a in m_events[status]) {
76
+ // iterate through each node
77
+ for (var nodekey in data) {
78
+ // skip node if client filters exist and the client is not in the filter
79
+ if ((Object.size(grouped_filters['client']) > 0) && ($.inArray(nodekey, grouped_filters['client']) == -1)) {
80
+ continue;
81
+ }
82
+
83
+ // skip node if subscription filters exist and the subscription is not in the filter
84
+ if ((Object.size(grouped_filters['subscription']) > 0) && ($.inArray(nodekey, grouped_filters['subscription']) == -1)) {
85
+ continue;
86
+ }
87
+
88
+ var node = data[nodekey];
89
+
90
+ // iterate through each event for the current node
91
+ for (var a in node) {
92
+ // skip unknown checks if the checkbox is enabled
93
+ if (filter_unknown_checks && (node[a]['output'] == 'Unknown check')) {
94
+ continue;
95
+ }
96
+
97
+ // skip event if check filters exist and the check is not in the filter
98
+ if ((Object.size(grouped_filters['check']) > 0) && ($.inArray(a, grouped_filters['check']) == -1)) {
99
+ continue;
100
+ }
101
+
102
+ // skip event if status filters exist and the status is not in the filter
103
+ if ((Object.size(grouped_filters['status']) > 0) && ($.inArray(node[a]['status'], grouped_filters['status']) == -1)) {
104
+ continue;
105
+ }
106
+
107
+ // if a status code does not exist, set it to unknown
108
+ node[a]['status'] || (node[a]['status'] = 3);
109
+
110
+ // if an output does not exist, set it to "nil"
111
+ node[a]['output'] || (node[a]['output'] = "nil output");
112
+
113
+ var is_unknown = node[a]['status'] >= 3 || node[a]['status'] < 0;
114
+
115
+ event_count++;
116
+ var dataObject = {
117
+ identifier: SHA1(nodekey+a),
118
+ client: nodekey,
119
+ check: a,
120
+ status: node[a]['status'],
121
+ output: node[a]['output'],
122
+ occurrences: node[a]['occurrences'],
123
+ is_unknown: is_unknown
124
+ };
125
+
126
+ if (!m_events[node[a]['status']]) {
127
+ m_events[node[a]['status']] = [];
128
+ }
129
+
130
+ m_events[node[a]['status']][nodekey+a] = dataObject;
131
+ }
132
+ }
133
+ for (var status in m_events) {
134
+ for (var a in m_events[status]) {
65
135
  var m_event = m_events[status][a];
66
136
  var ccheck = m_event['client'] + m_event['check'];
67
137
 
@@ -163,10 +233,10 @@ function fetchStashes() {
163
233
  data: JSON.stringify(data),
164
234
  success: function(stash_data, textStatus, xhr) {
165
235
  stashes = new Array();
166
- for (stash in stash_data) {
236
+ for (var stash in stash_data) {
167
237
  stash_keys = new Array();
168
238
  stash_values = new Array();
169
- for (stash_value in stash_data[stash]) {
239
+ for (var stash_value in stash_data[stash]) {
170
240
  stash_keys.push(stash_value);
171
241
  stash_values.push({
172
242
  name: stash_value,
@@ -225,21 +295,6 @@ function fetchStashes() {
225
295
  });
226
296
  }
227
297
 
228
- function filterEvents() {
229
- var values = $("input[type=hidden]").val().split(",");
230
- filtered_events = [];
231
- filtered_events_count = 0;
232
-
233
- for(value in values) {
234
- if(values[value] != "") {
235
- filtered_events_count++;
236
- filtered_events.push(values[value]);
237
- }
238
- }
239
-
240
- fetchEvents();
241
- }
242
-
243
298
  /* trigger when page is ready */
244
299
  $(document).ready(function() {
245
300
 
@@ -248,11 +303,11 @@ $(document).ready(function() {
248
303
  selectedItemProp: "name",
249
304
  searchObjProps: "name",
250
305
  selectionAdded: function(elem) {
251
- filterEvents();
306
+ fetchEvents();
252
307
  },
253
308
  selectionRemoved: function(elem) {
254
309
  elem.fadeTo("fast", 0, function() { elem.remove(); });
255
- filterEvents();
310
+ fetchEvents();
256
311
  }
257
312
  });
258
313
 
@@ -170,7 +170,7 @@
170
170
  var clientname = org_li.prev().text();
171
171
  clientname = clientname.substring(1, clientname.length);
172
172
  var clients = items[clientname];
173
- values_input.val(values_input.val().replace(","+clients+",",","));
173
+ delete selected_filters[clients];
174
174
  opts.selectionRemoved.call(this, org_li.prev());
175
175
  } else {
176
176
  opts.selectionClick.call(this, org_li.prev());
@@ -329,16 +329,16 @@
329
329
  }
330
330
 
331
331
  function add_selected_item(data, num){
332
- items[data[opts.selectedItemProp]] = data[opts.selectedValuesProp];
333
- if(values_input.val()=="") values_input.val(",");
334
- values_input.val(values_input.val()+data[opts.selectedValuesProp]+",");
332
+ var item_id = SHA1(data['name'] + data['type']);
333
+ selected_filters[item_id] = data;
334
+ items[data[opts.selectedItemProp]] = item_id;
335
335
  var item = $('<li class="as-selection-item" id="as-selection-'+num+'"></li>').click(function(){
336
336
  opts.selectionClick.call(this, $(this));
337
337
  selections_holder.children().removeClass("selected");
338
338
  $(this).addClass("selected");
339
339
  }).mousedown(function(){ input_focus = false; });
340
340
  var close = $('<a class="as-close">&times;</a>').click(function(){
341
- values_input.val(values_input.val().replace(","+data[opts.selectedValuesProp]+",",","));
341
+ delete selected_filters[item_id];
342
342
  opts.selectionRemoved.call(this, item);
343
343
  input_focus = true;
344
344
  input.focus();
@@ -1,5 +1,5 @@
1
1
  module Sensu
2
2
  module Dashboard
3
- VERSION = "0.8.1"
3
+ VERSION = "0.9.0"
4
4
  end
5
5
  end
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: 61
4
+ hash: 59
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 8
9
- - 1
10
- version: 0.8.1
8
+ - 9
9
+ - 0
10
+ version: 0.9.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-12-08 00:00:00 -08:00
19
+ date: 2011-12-15 00:00:00 -08:00
20
20
  default_executable:
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency