@cryptotaxi247 / netdata-1 / commits / e98a1f05a

improvements suggested by codeclimate

Costa Tsaousis (ktsaou) committed Jan 7, 2017 at 15:05 UTC e98a1f05abf52168d5a13dea5234f992f295c815
4 files changed +258 -188
.codeclimate.yml
+8
@@ -20,6 +20,14 @@ engines:
20 enabled: false
21 complexity:
22 enabled: false
23 + no-eval:
24 + enabled: false
25 + no-extend-native:
26 + enabled: false
27 + no-void:
28 + enabled: false
29 + no-alert:
30 + enabled: false
31 fixme:
32 enabled: false
33 phpmd:
node.d/snmp.node.js
+88 -49
@@ -109,7 +109,7 @@ var net_snmp = require('net-snmp');
109 var extend = require('extend');
110 var netdata = require('netdata');
111
112 -if(netdata.options.DEBUG === true) netdata.debug('loaded ' + __filename + ' plugin');
112 +if(netdata.options.DEBUG === true) netdata.debug('loaded', __filename, ' plugin');
113
114 netdata.processors.snmp = {
115 name: 'snmp',
@@ -125,62 +125,72 @@ netdata.processors.snmp = {
125 },
126
127 prepare: function(service) {
128 + var __DEBUG = netdata.options.DEBUG;
129 +
130 if(typeof service.snmp_oids === 'undefined' || service.snmp_oids === null || service.snmp_oids.length === 0) {
131 // this is the first time we see this service
132
131 - if(netdata.options.DEBUG === true)
133 + if(__DEBUG === true)
134 netdata.debug(service.module.name + ': ' + service.name + ': preparing ' + this.name + ' OIDs');
135
136 // build an index of all OIDs
137 service.snmp_oids_index = {};
136 - for(var c in service.request.charts) {
138 + var chart_keys = Object.keys(service.request.charts);
139 + var chart_keys_len = chart_keys.length;
140 + while(chart_keys_len--) {
141 + var c = chart_keys[chart_keys_len];
142 + var chart = service.request.charts[c];
143 +
144 // for each chart
145
139 - if(netdata.options.DEBUG === true)
146 + if(__DEBUG === true)
147 netdata.debug(service.module.name + ': ' + service.name + ': indexing ' + this.name + ' chart: ' + c);
148
142 - if(typeof service.request.charts[c].titleoid !== 'undefined') {
143 - service.snmp_oids_index[this.fixoid(service.request.charts[c].titleoid)] = {
149 + if(typeof chart.titleoid !== 'undefined') {
150 + service.snmp_oids_index[this.fixoid(chart.titleoid)] = {
151 type: 'title',
145 - link: service.request.charts[c]
152 + link: chart
153 };
154 }
155
149 - for(var d in service.request.charts[c].dimensions) {
156 + var dim_keys = Object.keys(chart.dimensions);
157 + var dim_keys_len = dim_keys.length;
158 + while(dim_keys_len--) {
159 + var d = dim_keys[dim_keys_len];
160 + var dim = chart.dimensions[d];
161 +
162 // for each dimension in the chart
163
152 - var oid = this.fixoid(service.request.charts[c].dimensions[d].oid);
153 - var oidname = this.fixoid(service.request.charts[c].dimensions[d].oidname);
164 + var oid = this.fixoid(dim.oid);
165 + var oidname = this.fixoid(dim.oidname);
166
155 - if(netdata.options.DEBUG === true)
167 + if(__DEBUG === true)
168 netdata.debug(service.module.name + ': ' + service.name + ': indexing ' + this.name + ' chart: ' + c + ', dimension: ' + d + ', OID: ' + oid + ", OID name: " + oidname);
169
170 // link it to the point we need to set the value to
171 service.snmp_oids_index[oid] = {
172 type: 'value',
161 - link: service.request.charts[c].dimensions[d]
173 + link: dim
174 };
175
176 if(typeof oidname !== 'undefined')
177 service.snmp_oids_index[oidname] = {
178 type: 'name',
167 - link: service.request.charts[c].dimensions[d]
179 + link: dim
180 };
181
182 // and set the value to null
171 - service.request.charts[c].dimensions[d].value = null;
183 + dim.value = null;
184 }
185 }
186
175 - if(netdata.options.DEBUG === true)
187 + if(__DEBUG === true)
188 netdata.debug(service.module.name + ': ' + service.name + ': indexed ' + this.name + ' OIDs: ' + netdata.stringify(service.snmp_oids_index));
189
190 // now create the array of OIDs needed by net-snmp
179 - service.snmp_oids = new Array();
180 - for(var o in service.snmp_oids_index)
181 - service.snmp_oids.push(o);
191 + service.snmp_oids = Object.keys(service.snmp_oids_index);
192
183 - if(netdata.options.DEBUG === true)
193 + if(__DEBUG === true)
194 netdata.debug(service.module.name + ': ' + service.name + ': final list of ' + this.name + ' OIDs: ' + netdata.stringify(service.snmp_oids));
195
196 service.snmp_oids_cleaned = 0;
@@ -189,14 +199,19 @@ netdata.processors.snmp = {
199 service.snmp_oids_cleaned = 1;
200
201 // the second time, keep only values
202 +
203 service.snmp_oids = new Array();
193 - for(var o in service.snmp_oids_index)
194 - if(service.snmp_oids_index[o].type === 'value')
195 - service.snmp_oids.push(o);
204 + var oid_keys = Object.keys(service.snmp_oids_index);
205 + var oid_keys_len = oid_keys.length;
206 + while(oid_keys_len--) {
207 + if (service.snmp_oids_index[oid_keys[oid_keys_len]].type === 'value')
208 + service.snmp_oids.push(oid_keys[oid_keys_len]);
209 + }
210 }
211 },
212
213 getdata: function(service, index, ok, failed, callback) {
214 + var __DEBUG = netdata.options.DEBUG;
215 var that = this;
216
217 if(index >= service.snmp_oids.length) {
@@ -218,7 +233,7 @@ netdata.processors.snmp = {
233 index += service.request.max_request_size;
234 }
235
221 - if(netdata.options.DEBUG === true)
236 + if(__DEBUG === true)
237 netdata.debug(service.module.name + ': ' + service.name + ': making ' + slice.length + ' entries request, max is: ' + service.request.max_request_size);
238
239 service.snmp_session.get(slice, function(error, varbinds) {
@@ -231,14 +246,15 @@ netdata.processors.snmp = {
246 service.snmp_oids_index[slice[len]].value = null;
247 }
248 else {
234 - if(netdata.options.DEBUG === true)
249 + if(__DEBUG === true)
250 netdata.debug(service.module.name + ': ' + service.name + ': got valid ' + service.module.name + ' response: ' + netdata.stringify(varbinds));
251
237 - for(var i = 0; i < varbinds.length; i++) {
252 + var varbinds_len = varbinds.length;
253 + for(var i = 0; i < varbinds_len ; i++) {
254 var value = null;
255
256 if(net_snmp.isVarbindError(varbinds[i])) {
241 - if(netdata.options.DEBUG === true)
257 + if(__DEBUG === true)
258 netdata.debug(service.module.name + ': ' + service.name + ': failed ' + service.module.name + ' get for OIDs ' + varbinds[i].oid);
259
260 service.error('OID ' + varbinds[i].oid + ' gave error: ' + snmp.varbindError(varbinds[i]));
@@ -246,7 +262,7 @@ netdata.processors.snmp = {
262 failed++;
263 }
264 else {
249 - if(netdata.options.DEBUG === true)
265 + if(__DEBUG === true)
266 netdata.debug(service.module.name + ': ' + service.name + ': found ' + service.module.name + ' value of OIDs ' + varbinds[i].oid + " = " + varbinds[i].value);
267
268 if(varbinds[i].type === net_snmp.ObjectType.OctetString)
@@ -266,7 +282,7 @@ netdata.processors.snmp = {
282 }
283 }
284
269 - if(netdata.options.DEBUG === true)
285 + if(__DEBUG === true)
286 netdata.debug(service.module.name + ': ' + service.name + ': finished ' + service.module.name + ' with ' + ok + ' successful and ' + failed + ' failed values');
287 }
288 that.getdata(service, index, ok, failed, callback);
@@ -274,12 +290,14 @@ netdata.processors.snmp = {
290 },
291
292 process: function(service, callback) {
293 + var __DEBUG = netdata.options.DEBUG;
294 +
295 this.prepare(service);
296
297 if(service.snmp_oids.length === 0) {
298 // no OIDs found for this service
299
282 - if(netdata.options.DEBUG === true)
300 + if(__DEBUG === true)
301 service.error('no OIDs to process.');
302
303 callback(null);
@@ -290,13 +308,13 @@ netdata.processors.snmp = {
308 // no SNMP session has been created for this service
309 // the SNMP session is just the initialization of NET-SNMP
310
293 - if(netdata.options.DEBUG === true)
311 + if(__DEBUG === true)
312 netdata.debug(service.module.name + ': ' + service.name + ': opening ' + this.name + ' session on ' + service.request.hostname + ' community ' + service.request.community + ' options ' + netdata.stringify(service.request.options));
313
314 // create the SNMP session
315 service.snmp_session = net_snmp.createSession (service.request.hostname, service.request.community, service.request.options);
316
299 - if(netdata.options.DEBUG === true)
317 + if(__DEBUG === true)
318 netdata.debug(service.module.name + ': ' + service.name + ': got ' + this.name + ' session: ' + netdata.stringify(service.snmp_session));
319
320 // if we later need traps, this is how to do it:
@@ -323,19 +341,28 @@ var snmp = {
341 if(service.added !== true)
342 service.commit();
343
326 - for(var c in service.request.charts) {
327 - var chart = snmp.charts[c];
344 + var chart_keys = Object.keys(service.request.charts);
345 + var chart_keys_len = chart_keys.length;
346 + for(var i = 0; i < chart_keys_len; i++) {
347 + var c = chart_keys[i];
348
349 + var chart = snmp.charts[c];
350 if(typeof chart === 'undefined') {
351 chart = service.chart(c, service.request.charts[c]);
352 snmp.charts[c] = chart;
353 }
354
355 service.begin(chart);
335 -
336 - for( var d in service.request.charts[c].dimensions )
337 - if(service.request.charts[c].dimensions[d].value !== null)
338 - service.set(d, service.request.charts[c].dimensions[d].value);
356 +
357 + var dimensions = service.request.charts[c].dimensions;
358 + var dim_keys = Object.keys(dimensions);
359 + var dim_keys_len = dim_keys.length;
360 + for(var j = 0; j < dim_keys_len ; j++) {
361 + var d = dim_keys[j];
362 +
363 + if (dimensions[d].value !== null)
364 + service.set(d, dimensions[d].value);
365 + }
366
367 service.end();
368 }
@@ -347,7 +374,9 @@ var snmp = {
374 // its purpose is to prepare the request and call
375 // netdata.serviceExecute()
376 serviceExecute: function(conf) {
350 - if(netdata.options.DEBUG === true)
377 + var __DEBUG = netdata.options.DEBUG;
378 +
379 + if(__DEBUG === true)
380 netdata.debug(this.name + ': snmp hostname: ' + conf.hostname + ', update_every: ' + conf.update_every);
381
382 var service = netdata.service({
@@ -359,30 +388,40 @@ var snmp = {
388 });
389
390 // multiply the charts, if required
362 - for(var c in service.request.charts) {
363 - if(netdata.options.DEBUG === true)
391 + var chart_keys = Object.keys(service.request.charts);
392 + var chart_keys_len = chart_keys.length;
393 + for( var i = 0; i < chart_keys_len ; i++ ) {
394 + var c = chart_keys[i];
395 + var service_request_chart = service.request.charts[c];
396 +
397 + if(__DEBUG === true)
398 netdata.debug(this.name + ': snmp hostname: ' + conf.hostname + ', examining chart: ' + c);
399
366 - if(typeof service.request.charts[c].update_every === 'undefined')
367 - service.request.charts[c].update_every = service.update_every;
400 + if(typeof service_request_chart.update_every === 'undefined')
401 + service_request_chart.update_every = service.update_every;
402
369 - if(typeof service.request.charts[c].multiply_range !== 'undefined') {
370 - var from = service.request.charts[c].multiply_range[0];
371 - var to = service.request.charts[c].multiply_range[1];
372 - var prio = service.request.charts[c].priority || 1;
403 + if(typeof service_request_chart.multiply_range !== 'undefined') {
404 + var from = service_request_chart.multiply_range[0];
405 + var to = service_request_chart.multiply_range[1];
406 + var prio = service_request_chart.priority || 1;
407
408 if(prio < snmp.base_priority) prio += snmp.base_priority;
409
410 while(from <= to) {
411 var id = c + from.toString();
378 - var chart = extend(true, {}, service.request.charts[c]);
412 + var chart = extend(true, {}, service_request_chart);
413 chart.title += from.toString();
414
415 if(typeof chart.titleoid !== 'undefined')
416 chart.titleoid += from.toString();
417
418 chart.priority = prio++;
385 - for(var d in chart.dimensions) {
419 +
420 + var dim_keys = Object.keys(chart.dimensions);
421 + var dim_keys_len = dim_keys.length;
422 + for(var j = 0; j < dim_keys_len ; j++) {
423 + var d = dim_keys[j];
424 +
425 chart.dimensions[d].oid += from.toString();
426
427 if(typeof chart.dimensions[d].oidname !== 'undefined')
@@ -434,7 +473,7 @@ var snmp = {
473 service.module.processResponse(serv, data);
474 callback();
475 });
437 - },
476 + }
477 };
478
479 module.exports = snmp;
web/dashboard.js
+161 -138
@@ -32,7 +32,7 @@
32 // global namespace
33 var NETDATA = window.NETDATA || {};
34
35 -(function(window, document, undefined) {
35 +(function(window, document) {
36 // ------------------------------------------------------------------------
37 // compatibility fixes
38
@@ -194,10 +194,7 @@ var NETDATA = window.NETDATA || {};
194
195 if(typeof netdataRegistry === 'undefined') {
196 // backward compatibility
197 - if(typeof netdataNoRegistry !== 'undefined' && netdataNoRegistry === false)
198 - netdataRegistry = true;
199 - else
200 - netdataRegistry = false;
197 + netdataRegistry = (typeof netdataNoRegistry !== 'undefined' && netdataNoRegistry === false);
198 }
199 if(netdataRegistry === false && typeof netdataRegistryCallback === 'function')
200 netdataRegistry = true;
@@ -333,7 +330,7 @@ var NETDATA = window.NETDATA || {};
330
331 retries_on_data_failures: 3, // how many retries to make if we can't fetch chart data from the server
332
336 - setOptionCallback: function() { ; }
333 + setOptionCallback: function() { }
334 },
335
336 debug: {
@@ -342,7 +339,7 @@ var NETDATA = window.NETDATA || {};
339 focus: false,
340 visibility: false,
341 chart_data_url: false,
345 - chart_errors: false, // FIXME
342 + chart_errors: false, // FIXME: remember to set it to false before merging
343 chart_timing: false,
344 chart_calls: false,
345 libraries: false,
@@ -431,7 +428,11 @@ var NETDATA = window.NETDATA || {};
428 };
429
430 NETDATA.localStorageGetRecursive = function(obj, prefix, callback) {
434 - for(var i in obj) {
431 + var keys = Object.keys(obj);
432 + var len = keys.length;
433 + while(len--) {
434 + var i = keys[len];
435 +
436 if(typeof obj[i] === 'object') {
437 //console.log('object ' + prefix + '.' + i.toString());
438 NETDATA.localStorageGetRecursive(obj[i], prefix + '.' + i.toString(), callback);
@@ -478,7 +479,10 @@ var NETDATA = window.NETDATA || {};
479 NETDATA.setOption('stop_updates_when_focus_is_lost', true);
480
481 NETDATA.resetOptions = function() {
481 - for(var i in NETDATA.localStorage.default) {
482 + var keys = Object.keys(NETDATA.localStorage.default);
483 + var len = keys.length;
484 + while(len--) {
485 + var i = keys[len];
486 var a = i.split('.');
487
488 if(a[0] === 'options') {
@@ -494,7 +498,7 @@ var NETDATA = window.NETDATA || {};
498 }
499 }
500 }
497 - }
501 + };
502
503 // ----------------------------------------------------------------------------------------------------------------
504
@@ -788,6 +792,13 @@ var NETDATA = window.NETDATA || {};
792 // Every time we download a chart definition, we save it here with .add()
793 // Then we try to get it back with .get(). If that fails, we download it.
794
795 + NETDATA.fixHost = function(host) {
796 + while(host.slice(-1) === '/')
797 + host = host.substring(0, host.length - 1);
798 +
799 + return host;
800 + };
801 +
802 NETDATA.chartRegistry = {
803 charts: {},
804
@@ -821,8 +832,7 @@ var NETDATA = window.NETDATA || {};
832 },
833
834 downloadAll: function(host, callback) {
824 - while(host.slice(-1) === '/')
825 - host = host.substring(0, host.length - 1);
835 + host = NETDATA.fixHost(host);
836
837 var self = this;
838
@@ -840,13 +850,13 @@ var NETDATA = window.NETDATA || {};
850 else NETDATA.error(406, host + '/api/v1/charts');
851
852 if(typeof callback === 'function')
843 - callback(data);
853 + return callback(data);
854 })
855 .fail(function() {
856 NETDATA.error(405, host + '/api/v1/charts');
857
858 if(typeof callback === 'function')
849 - callback(null);
859 + return callback(null);
860 });
861 }
862 };
@@ -971,7 +981,7 @@ var NETDATA = window.NETDATA || {};
981 dimensionStatus.prototype.setOptions = function(name_div, value_div, color) {
982 this.color = color;
983
974 - if(this.name_div != name_div) {
984 + if(this.name_div !== name_div) {
985 this.name_div = name_div;
986 this.name_div.title = this.label;
987 this.name_div.style.color = this.color;
@@ -981,7 +991,7 @@ var NETDATA = window.NETDATA || {};
991 this.name_div.className = 'netdata-legend-name selected';
992 }
993
984 - if(this.value_div != value_div) {
994 + if(this.value_div !== value_div) {
995 this.value_div = value_div;
996 this.value_div.title = this.label;
997 this.value_div.style.color = this.color;
@@ -1086,26 +1096,34 @@ var NETDATA = window.NETDATA || {};
1096 };
1097
1098 dimensionsVisibility.prototype.invalidateAll = function() {
1089 - for(var d in this.dimensions)
1090 - this.dimensions[d].invalidate();
1099 + var keys = Object.keys(this.dimensions);
1100 + var len = keys.length;
1101 + while(len--)
1102 + this.dimensions[keys[len]].invalidate();
1103 };
1104
1105 dimensionsVisibility.prototype.selectAll = function() {
1094 - for(var d in this.dimensions)
1095 - this.dimensions[d].select();
1106 + var keys = Object.keys(this.dimensions);
1107 + var len = keys.length;
1108 + while(len--)
1109 + this.dimensions[keys[len]].select();
1110 };
1111
1112 dimensionsVisibility.prototype.countSelected = function() {
1099 - var i = 0;
1100 - for(var d in this.dimensions)
1101 - if(this.dimensions[d].isSelected()) i++;
1113 + var selected = 0;
1114 + var keys = Object.keys(this.dimensions);
1115 + var len = keys.length;
1116 + while(len--)
1117 + if(this.dimensions[keys[len]].isSelected()) selected++;
1118
1103 - return i;
1119 + return selected;
1120 };
1121
1122 dimensionsVisibility.prototype.selectNone = function() {
1107 - for(var d in this.dimensions)
1108 - this.dimensions[d].unselect();
1123 + var keys = Object.keys(this.dimensions);
1124 + var len = keys.length;
1125 + while(len--)
1126 + this.dimensions[keys[len]].unselect();
1127 };
1128
1129 dimensionsVisibility.prototype.selected2BooleanArray = function(array) {
@@ -1289,13 +1307,11 @@ var NETDATA = window.NETDATA || {};
1307 this.view_before = 0;
1308
1309 this.value_decimal_detail = -1;
1292 - {
1293 - var d = self.data('decimal-digits');
1294 - if(typeof d === 'number') {
1295 - this.value_decimal_detail = 1;
1296 - while(d-- > 0)
1297 - this.value_decimal_detail *= 10;
1298 - }
1310 + var d = self.data('decimal-digits');
1311 + if(typeof d === 'number') {
1312 + this.value_decimal_detail = 1;
1313 + while(d-- > 0)
1314 + this.value_decimal_detail *= 10;
1315 }
1316
1317 this.auto = {
@@ -1729,7 +1745,7 @@ var NETDATA = window.NETDATA || {};
1745 this.event_resize.chart_last_h = this.element.clientHeight;
1746
1747 var now = Date.now();
1732 - if(now - this.event_resize.last <= NETDATA.options.current.double_click_speed && this.element_legend_childs.perfect_scroller != null) {
1748 + if(now - this.event_resize.last <= NETDATA.options.current.double_click_speed && this.element_legend_childs.perfect_scroller !== null) {
1749 // double click / double tap event
1750
1751 // console.dir(this.element_legend_childs.content);
@@ -1742,21 +1758,21 @@ var NETDATA = window.NETDATA || {};
1758 - this.element_legend_childs.perfect_scroller.clientHeight;
1759
1760 // if we are not optimal, be optimal
1745 - if(this.event_resize.chart_last_h != optimal) {
1761 + if(this.event_resize.chart_last_h !== optimal) {
1762 // this.log('resize to optimal, current = ' + this.event_resize.chart_last_h.toString() + 'px, original = ' + this.event_resize.chart_original_h.toString() + 'px, optimal = ' + optimal.toString() + 'px, internal = ' + this.height_original.toString());
1763 resizeChartToHeight(optimal.toString() + 'px');
1764 }
1765
1766 // else if the current height is not the original/saved height
1767 // reset to the original/saved height
1752 - else if(this.event_resize.chart_last_h != this.event_resize.chart_original_h) {
1768 + else if(this.event_resize.chart_last_h !== this.event_resize.chart_original_h) {
1769 // this.log('resize to original, current = ' + this.event_resize.chart_last_h.toString() + 'px, original = ' + this.event_resize.chart_original_h.toString() + 'px, optimal = ' + optimal.toString() + 'px, internal = ' + this.height_original.toString());
1770 resizeChartToHeight(this.event_resize.chart_original_h.toString() + 'px');
1771 }
1772
1773 // else if the current height is not the internal default height
1774 // reset to the internal default height
1759 - else if((this.event_resize.chart_last_h.toString() + 'px') != this.height_original) {
1775 + else if((this.event_resize.chart_last_h.toString() + 'px') !== this.height_original) {
1776 // this.log('resize to internal default, current = ' + this.event_resize.chart_last_h.toString() + 'px, original = ' + this.event_resize.chart_original_h.toString() + 'px, optimal = ' + optimal.toString() + 'px, internal = ' + this.height_original.toString());
1777 resizeChartToHeight(this.height_original.toString());
1778 }
@@ -1773,7 +1789,7 @@ var NETDATA = window.NETDATA || {};
1789 // console.log(wanted);
1790
1791 // this.log('resize to firstChild, current = ' + this.event_resize.chart_last_h.toString() + 'px, original = ' + this.event_resize.chart_original_h.toString() + 'px, optimal = ' + optimal.toString() + 'px, internal = ' + this.height_original.toString() + 'px, firstChild = ' + wanted.toString() + 'px' );
1776 - if(this.event_resize.chart_last_h != wanted)
1792 + if(this.event_resize.chart_last_h !== wanted)
1793 resizeChartToHeight(wanted.toString() + 'px');
1794 }
1795 }
@@ -1890,10 +1906,7 @@ var NETDATA = window.NETDATA || {};
1906 };
1907
1908 this.globalSelectionSyncIsMaster = function() {
1893 - if(NETDATA.globalSelectionSync.state === this)
1894 - return true;
1895 - else
1896 - return false;
1909 + return (NETDATA.globalSelectionSync.state === this);
1910 };
1911
1912 // this chart is the master of the global selection sync
@@ -1962,12 +1975,8 @@ var NETDATA = window.NETDATA || {};
1975 // sync all the visible charts to the given time
1976 // this is to be called from the chart libraries
1977 this.globalSelectionSync = function(t) {
1965 - if(this.globalSelectionSyncAbility() === false) {
1966 - if(this.debug === true)
1967 - this.log('sync: cannot sync (yet?).');
1968 -
1978 + if(this.globalSelectionSyncAbility() === false)
1979 return;
1970 - }
1980
1981 if(this.globalSelectionSyncIsMaster() === false) {
1982 if(this.debug === true)
@@ -1975,12 +1984,8 @@ var NETDATA = window.NETDATA || {};
1984
1985 this.globalSelectionSyncBeMaster();
1986
1978 - if(this.globalSelectionSyncAbility() === false) {
1979 - if(this.debug === true)
1980 - this.log('sync: cannot sync (yet?).');
1981 -
1987 + if(this.globalSelectionSyncAbility() === false)
1988 return;
1983 - }
1989 }
1990
1991 NETDATA.globalSelectionSync.last_t = t;
@@ -2429,7 +2434,7 @@ var NETDATA = window.NETDATA || {};
2434 };
2435
2436 this.legendUpdateDOM = function() {
2432 - var needed = false;
2437 + var needed = false, dim, keys, len, i;
2438
2439 // check that the legend DOM is up to date for the downloaded dimensions
2440 if(typeof this.element_legend_childs.series !== 'object' || this.element_legend_childs.series === null) {
@@ -2473,9 +2478,12 @@ var NETDATA = window.NETDATA || {};
2478 if(this.colors === null) {
2479 // this is the first time we update the chart
2480 // let's assign colors to all dimensions
2476 - if(this.library.track_colors() === true)
2477 - for(var dim in this.chart.dimensions)
2478 - this._chartDimensionColor(this.chart.dimensions[dim].name);
2481 + if(this.library.track_colors() === true) {
2482 + keys = Object.keys(this.chart.dimensions);
2483 + len = keys.length;
2484 + for(i = 0; i < len ;i++)
2485 + this._chartDimensionColor(this.chart.dimensions[keys[i]].name);
2486 + }
2487 }
2488 // we will re-generate the colors for the chart
2489 // based on the selected dimensions
@@ -2554,7 +2562,7 @@ var NETDATA = window.NETDATA || {};
2562
2563 if(this.library.toolboxPanAndZoom !== null) {
2564
2557 - function get_pan_and_zoom_step(event) {
2565 + var get_pan_and_zoom_step = function(event) {
2566 if (event.ctrlKey)
2567 return NETDATA.options.current.pan_and_zoom_factor * NETDATA.options.current.pan_and_zoom_factor_multiplier_control;
2568
@@ -2566,7 +2574,7 @@ var NETDATA = window.NETDATA || {};
2574
2575 else
2576 return NETDATA.options.current.pan_and_zoom_factor;
2569 - }
2577 + };
2578
2579 this.element_legend_childs.toolbox.className += ' netdata-legend-toolbox';
2580 this.element.appendChild(this.element_legend_childs.toolbox);
@@ -2786,13 +2794,15 @@ var NETDATA = window.NETDATA || {};
2794 if(this.debug === true)
2795 this.log('labels from data: "' + this.element_legend_childs.series.labels_key + '"');
2796
2789 - for(var i = 0, len = this.data.dimension_names.length; i < len ;i++) {
2797 + for(i = 0, len = this.data.dimension_names.length; i < len ;i++) {
2798 genLabel(this, content, this.data.dimension_ids[i], this.data.dimension_names[i], i);
2799 }
2800 }
2801 else {
2802 var tmp = new Array();
2795 - for(var dim in this.chart.dimensions) {
2803 + keys = Object.keys(this.chart.dimensions);
2804 + for(i = 0, len = keys.length; i < len ;i++) {
2805 + dim = keys[i];
2806 tmp.push(this.chart.dimensions[dim].name);
2807 genLabel(this, content, dim, this.chart.dimensions[dim].name, i);
2808 }
@@ -3088,8 +3098,10 @@ var NETDATA = window.NETDATA || {};
3098 if(this.debug === true)
3099 this.log('I am already updating...');
3100
3091 - if(typeof callback === 'function') callback();
3092 - return false;
3101 + if(typeof callback === 'function')
3102 + return callback();
3103 +
3104 + return;
3105 }
3106
3107 // due to late initialization of charts and libraries
@@ -3098,29 +3110,37 @@ var NETDATA = window.NETDATA || {};
3110 if(this.debug === true)
3111 this.log('I am not enabled');
3112
3101 - if(typeof callback === 'function') callback();
3102 - return false;
3113 + if(typeof callback === 'function')
3114 + return callback();
3115 +
3116 + return;
3117 }
3118
3119 if(canBeRendered() === false) {
3106 - if(typeof callback === 'function') callback();
3107 - return false;
3108 - }
3120 + if(typeof callback === 'function')
3121 + return callback();
3122
3110 - if(this.chart === null) {
3111 - this.getChart(function() { that.updateChart(callback); });
3112 - return false;
3123 + return;
3124 }
3125
3126 + if(this.chart === null)
3127 + return this.getChart(function() {
3128 + return that.updateChart(callback);
3129 + });
3130 +
3131 if(this.library.initialized === false) {
3132 if(this.library.enabled === true) {
3117 - this.library.initialize(function() { that.updateChart(callback); });
3118 - return false;
3133 + return this.library.initialize(function () {
3134 + return that.updateChart(callback);
3135 + });
3136 }
3137 else {
3138 error('chart library "' + this.library_name + '" is not available.');
3122 - if(typeof callback === 'function') callback();
3123 - return false;
3139 +
3140 + if(typeof callback === 'function')
3141 + return callback();
3142 +
3143 + return;
3144 }
3145 }
3146
@@ -3178,10 +3198,10 @@ var NETDATA = window.NETDATA || {};
3198
3199 NETDATA.statistics.refreshes_active--;
3200 that._updating = false;
3181 - if(typeof callback === 'function') callback();
3182 - });
3201
3184 - return true;
3202 + if(typeof callback === 'function')
3203 + return callback();
3204 + });
3205 };
3206
3207 this.isVisible = function(nocache) {
@@ -3345,12 +3365,12 @@ var NETDATA = window.NETDATA || {};
3365 state.running = false;
3366
3367 if(typeof callback !== 'undefined')
3348 - callback();
3368 + return callback();
3369 });
3370 }
3371 else {
3372 if(typeof callback !== 'undefined')
3353 - callback();
3373 + return callback();
3374 }
3375 };
3376
@@ -3373,7 +3393,9 @@ var NETDATA = window.NETDATA || {};
3393 this.chart = NETDATA.chartRegistry.get(this.host, this.id);
3394 if(this.chart) {
3395 this._defaultsFromDownloadedChart(this.chart);
3376 - if(typeof callback === 'function') callback();
3396 +
3397 + if(typeof callback === 'function')
3398 + return callback();
3399 }
3400 else {
3401 this.chart_url = "/api/v1/chart?chart=" + this.id;
@@ -3397,7 +3419,8 @@ var NETDATA = window.NETDATA || {};
3419 error('chart not found on url "' + that.chart_url + '"');
3420 })
3421 .always(function() {
3400 - if(typeof callback === 'function') callback();
3422 + if(typeof callback === 'function')
3423 + return callback();
3424 });
3425 }
3426 };
@@ -3458,7 +3481,7 @@ var NETDATA = window.NETDATA || {};
3481 script.src = NETDATA.jQuery;
3482
3483 // script.onabort = onError;
3461 - script.onerror = function(err, t) { NETDATA.error(101, NETDATA.jQuery); };
3484 + script.onerror = function() { NETDATA.error(101, NETDATA.jQuery); };
3485 if(typeof callback === "function")
3486 script.onload = callback;
3487
@@ -3466,7 +3489,7 @@ var NETDATA = window.NETDATA || {};
3489 s.parentNode.insertBefore(script, s);
3490 }
3491 else if(typeof callback === "function")
3469 - callback();
3492 + return callback();
3493 };
3494
3495 NETDATA._loadCSS = function(filename) {
@@ -3543,10 +3566,12 @@ var NETDATA = window.NETDATA || {};
3566 };
3567
3568 NETDATA.pause = function(callback) {
3546 - if(NETDATA.options.pause === true)
3547 - callback();
3548 - else
3549 - NETDATA.options.pauseCallback = callback;
3569 + if(typeof callback === 'function') {
3570 + if (NETDATA.options.pause === true)
3571 + return callback();
3572 + else
3573 + NETDATA.options.pauseCallback = callback;
3574 + }
3575 };
3576
3577 NETDATA.unpause = function() {
@@ -3725,7 +3750,8 @@ var NETDATA = window.NETDATA || {};
3750 NETDATA.options.targets.push(NETDATA.chartState(targets[len]));
3751 }
3752
3728 - if(typeof callback === 'function') callback();
3753 + if(typeof callback === 'function')
3754 + return callback();
3755 };
3756
3757 // this is the main function - where everything starts
@@ -3801,13 +3827,13 @@ var NETDATA = window.NETDATA || {};
3827 })
3828 .always(function() {
3829 if(typeof callback === "function")
3804 - callback();
3830 + return callback();
3831 });
3832 }
3833 else {
3834 NETDATA.chartLibraries.peity.enabled = false;
3835 if(typeof callback === "function")
3810 - callback();
3836 + return callback();
3837 }
3838 };
3839
@@ -3863,13 +3889,13 @@ var NETDATA = window.NETDATA || {};
3889 })
3890 .always(function() {
3891 if(typeof callback === "function")
3866 - callback();
3892 + return callback();
3893 });
3894 }
3895 else {
3896 NETDATA.chartLibraries.sparkline.enabled = false;
3897 if(typeof callback === "function")
3872 - callback();
3898 + return callback();
3899 }
3900 };
3901
@@ -4050,7 +4076,7 @@ var NETDATA = window.NETDATA || {};
4076 })
4077 .always(function() {
4078 if(typeof callback === "function")
4053 - callback();
4079 + return callback();
4080 });
4081 };
4082
@@ -4073,13 +4099,13 @@ var NETDATA = window.NETDATA || {};
4099 if(NETDATA.chartLibraries.dygraph.enabled === true && NETDATA.options.current.smooth_plot === true)
4100 NETDATA.dygraphSmoothInitialize(callback);
4101 else if(typeof callback === "function")
4076 - callback();
4102 + return callback();
4103 });
4104 }
4105 else {
4106 NETDATA.chartLibraries.dygraph.enabled = false;
4107 if(typeof callback === "function")
4082 - callback();
4108 + return callback();
4109 }
4110 };
4111
@@ -4527,7 +4553,7 @@ var NETDATA = window.NETDATA || {};
4553
4554 // http://dygraphs.com/gallery/interaction-api.js
4555 var normal_def;
4530 - if(typeof event.wheelDelta === 'number' && event.wheelDelta != NaN)
4556 + if(typeof event.wheelDelta === 'number' && !isNaN(event.wheelDelta))
4557 // chrome
4558 normal_def = event.wheelDelta / 40;
4559 else
@@ -4688,7 +4714,7 @@ var NETDATA = window.NETDATA || {};
4714 else {
4715 NETDATA.chartLibraries.morris.enabled = false;
4716 if(typeof callback === "function")
4691 - callback();
4717 + return callback();
4718 }
4719 }
4720 else {
@@ -4709,14 +4735,14 @@ var NETDATA = window.NETDATA || {};
4735 })
4736 .always(function() {
4737 if(typeof callback === "function")
4712 - callback();
4738 + return callback();
4739 });
4740 }
4741 }
4742 else {
4743 NETDATA.chartLibraries.morris.enabled = false;
4744 if(typeof callback === "function")
4719 - callback();
4745 + return callback();
4746 }
4747 };
4748
@@ -4775,13 +4801,13 @@ var NETDATA = window.NETDATA || {};
4801 })
4802 .always(function() {
4803 if(typeof callback === "function")
4778 - callback();
4804 + return callback();
4805 });
4806 }
4807 else {
4808 NETDATA.chartLibraries.raphael.enabled = false;
4809 if(typeof callback === "function")
4784 - callback();
4810 + return callback();
4811 }
4812 };
4813
@@ -4819,7 +4845,7 @@ var NETDATA = window.NETDATA || {};
4845 else {
4846 NETDATA.chartLibraries.c3.enabled = false;
4847 if(typeof callback === "function")
4822 - callback();
4848 + return callback();
4849 }
4850 }
4851 else {
@@ -4840,14 +4866,14 @@ var NETDATA = window.NETDATA || {};
4866 })
4867 .always(function() {
4868 if(typeof callback === "function")
4843 - callback();
4869 + return callback();
4870 });
4871 }
4872 }
4873 else {
4874 NETDATA.chartLibraries.c3.enabled = false;
4875 if(typeof callback === "function")
4850 - callback();
4876 + return callback();
4877 }
4878 };
4879
@@ -4939,13 +4965,13 @@ var NETDATA = window.NETDATA || {};
4965 })
4966 .always(function() {
4967 if(typeof callback === "function")
4942 - callback();
4968 + return callback();
4969 });
4970 }
4971 else {
4972 NETDATA.chartLibraries.d3.enabled = false;
4973 if(typeof callback === "function")
4948 - callback();
4974 + return callback();
4975 }
4976 };
4977
@@ -4979,13 +5005,13 @@ var NETDATA = window.NETDATA || {};
5005 NETDATA.chartLibraries.google.enabled = false;
5006 NETDATA.error(100, NETDATA.google_js);
5007 if(typeof callback === "function")
4982 - callback();
5008 + return callback();
5009 });
5010 }
5011 else {
5012 NETDATA.chartLibraries.google.enabled = false;
5013 if(typeof callback === "function")
4988 - callback();
5014 + return callback();
5015 }
5016 };
5017
@@ -5136,13 +5162,13 @@ var NETDATA = window.NETDATA || {};
5162 })
5163 .always(function() {
5164 if(typeof callback === "function")
5139 - callback();
5165 + return callback();
5166 })
5167 }
5168 else {
5169 NETDATA.chartLibraries.easypiechart.enabled = false;
5170 if(typeof callback === "function")
5145 - callback();
5171 + return callback();
5172 }
5173 };
5174
@@ -5348,13 +5374,13 @@ var NETDATA = window.NETDATA || {};
5374 })
5375 .always(function() {
5376 if(typeof callback === "function")
5351 - callback();
5377 + return callback();
5378 })
5379 }
5380 else {
5381 NETDATA.chartLibraries.gauge.enabled = false;
5382 if(typeof callback === "function")
5357 - callback();
5383 + return callback();
5384 }
5385 };
5386
@@ -5382,7 +5408,7 @@ var NETDATA = window.NETDATA || {};
5408 min = max;
5409 max = t;
5410 }
5385 - else if(min == max)
5411 + else if(min === max)
5412 max = min + 1;
5413
5414 // gauge.js has an issue if the needle
@@ -5909,7 +5935,7 @@ var NETDATA = window.NETDATA || {};
5935 async: false,
5936 isAlreadyLoaded: function() {
5937 // check if bootstrap is loaded
5912 - if(typeof $().emulateTransitionEnd == 'function')
5938 + if(typeof $().emulateTransitionEnd === 'function')
5939 return true;
5940 else {
5941 if(typeof netdataNoBootstrap !== 'undefined' && netdataNoBootstrap)
@@ -5949,7 +5975,7 @@ var NETDATA = window.NETDATA || {};
5975 NETDATA.loadRequiredJs = function(index, callback) {
5976 if(index >= NETDATA.requiredJs.length) {
5977 if(typeof callback === 'function')
5952 - callback();
5978 + return callback();
5979 return;
5980 }
5981
@@ -6041,7 +6067,7 @@ var NETDATA = window.NETDATA || {};
6067 var value = entry.value;
6068 if(NETDATA.alarms.current !== null) {
6069 var t = NETDATA.alarms.current.alarms[entry.chart + '.' + entry.name];
6044 - if(typeof t !== 'undefined' && entry.status == t.status)
6070 + if(typeof t !== 'undefined' && entry.status === t.status)
6071 value = t.value;
6072 }
6073
@@ -6253,13 +6279,13 @@ var NETDATA = window.NETDATA || {};
6279 NETDATA.alarms.first_notification_id = data.latest_alarm_log_unique_id;
6280
6281 if(typeof callback === 'function')
6256 - callback(data);
6282 + return callback(data);
6283 })
6284 .fail(function() {
6285 NETDATA.error(415, NETDATA.alarms.server);
6286
6287 if(typeof callback === 'function')
6262 - callback(null);
6288 + return callback(null);
6289 });
6290 },
6291
@@ -6298,23 +6324,21 @@ var NETDATA = window.NETDATA || {};
6324 })
6325 .done(function(data) {
6326 if(typeof callback === 'function')
6301 - callback(data);
6327 + return callback(data);
6328 })
6329 .fail(function() {
6330 NETDATA.error(416, NETDATA.alarms.server);
6331
6332 if(typeof callback === 'function')
6307 - callback(null);
6333 + return callback(null);
6334 });
6335 },
6336
6337 init: function() {
6312 - var host = NETDATA.serverDefault;
6313 - while(host.slice(-1) === '/')
6314 - host = host.substring(0, host.length - 1);
6315 - NETDATA.alarms.server = host;
6338 + NETDATA.alarms.server = NETDATA.fixHost(NETDATA.serverDefault);
6339
6317 - NETDATA.alarms.last_notification_id = NETDATA.localStorageGet('last_notification_id', NETDATA.alarms.last_notification_id, null);
6340 + NETDATA.alarms.last_notification_id =
6341 + NETDATA.localStorageGet('last_notification_id', NETDATA.alarms.last_notification_id, null);
6342
6343 if(NETDATA.alarms.onclick === null)
6344 NETDATA.alarms.onclick = NETDATA.alarms.scrollToAlarm;
@@ -6410,8 +6434,7 @@ var NETDATA = window.NETDATA || {};
6434 },
6435
6436 hello: function(host, callback) {
6413 - while(host.slice(-1) === '/')
6414 - host = host.substring(0, host.length - 1);
6437 + host = NETDATA.fixHost(host);
6438
6439 // send HELLO to a netdata server:
6440 // 1. verifies the server is reachable
@@ -6433,13 +6456,13 @@ var NETDATA = window.NETDATA || {};
6456 }
6457
6458 if(typeof callback === 'function')
6436 - callback(data);
6459 + return callback(data);
6460 })
6461 .fail(function() {
6462 NETDATA.error(407, host);
6463
6464 if(typeof callback === 'function')
6442 - callback(null);
6465 + return callback(null);
6466 });
6467 },
6468
@@ -6476,7 +6499,7 @@ var NETDATA = window.NETDATA || {};
6499 }
6500 else {
6501 if(typeof callback === 'function')
6479 - callback(null);
6502 + return callback(null);
6503 }
6504 }
6505 else {
@@ -6484,14 +6507,14 @@ var NETDATA = window.NETDATA || {};
6507 NETDATA.registry.person_guid = data.person_guid;
6508
6509 if(typeof callback === 'function')
6487 - callback(data.urls);
6510 + return callback(data.urls);
6511 }
6512 })
6513 .fail(function() {
6514 NETDATA.error(410, NETDATA.registry.server);
6515
6516 if(typeof callback === 'function')
6494 - callback(null);
6517 + return callback(null);
6518 });
6519 },
6520
@@ -6514,13 +6537,13 @@ var NETDATA = window.NETDATA || {};
6537 }
6538
6539 if(typeof callback === 'function')
6517 - callback(data);
6540 + return callback(data);
6541 })
6542 .fail(function() {
6543 NETDATA.error(412, NETDATA.registry.server);
6544
6545 if(typeof callback === 'function')
6523 - callback(null);
6546 + return callback(null);
6547 });
6548 },
6549
@@ -6543,13 +6566,13 @@ var NETDATA = window.NETDATA || {};
6566 }
6567
6568 if(typeof callback === 'function')
6546 - callback(data);
6569 + return callback(data);
6570 })
6571 .fail(function() {
6572 NETDATA.error(418, NETDATA.registry.server);
6573
6574 if(typeof callback === 'function')
6552 - callback(null);
6575 + return callback(null);
6576 });
6577 },
6578
@@ -6572,13 +6595,13 @@ var NETDATA = window.NETDATA || {};
6595 }
6596
6597 if(typeof callback === 'function')
6575 - callback(data);
6598 + return callback(data);
6599 })
6600 .fail(function() {
6601 NETDATA.error(414, NETDATA.registry.server);
6602
6603 if(typeof callback === 'function')
6581 - callback(null);
6604 + return callback(null);
6605 });
6606 }
6607 };
web/index.html
+1 -1
@@ -3259,4 +3259,4 @@
3259 </div>
3260 </body>
3261 </html>
3262 -<script type="text/javascript" src="dashboard.js?v20170105-7"></script>
3262 +<script type="text/javascript" src="dashboard.js?v20170107-5"></script>