@cryptotaxi247 / netdata-1 / commits / 28d959d98

reporting node.js errors once instead of always

Costa Tsaousis (ktsaou) committed Feb 2, 2016 at 02:30 UTC 28d959d98dfd2a02810a5e184a602d6da9abfd5c
3 files changed +46 -15
node.d/named.node.js
-2
@@ -418,8 +418,6 @@ var named = {
418 name: name,
419 request: netdata.requestFromURL(a_url),
420 update_every: update_every,
421 - added: false,
422 - enabled: true,
421 module: this
422 }, this.processResponse);
423 },
node.d/node_modules/netdata.js
+46 -11
@@ -87,6 +87,9 @@ var netdata = {
87 },
88
89 serviceAdd: function(service) {
90 + if(netdata.serviceIsInitialized(service) === false)
91 + netdata.serviceInit(service);
92 +
93 if(service.added !== true) {
94 service.updates = 0;
95 service.enabled = true;
@@ -119,12 +122,12 @@ var netdata = {
122 // begin data collection for a chart
123 service.begin = function(chart) {
124 if(this._current_chart !== null && this._current_chart !== chart) {
122 - netdata.error('Called begin() for chart ' + chart.id + ' while chart ' + this._current_chart.id + ' is still open. Closing it.');
125 + netdata.serviceError(this, 'Called begin() for chart ' + chart.id + ' while chart ' + this._current_chart.id + ' is still open. Closing it.');
126 this.end();
127 }
128
129 if(typeof(chart.id) === 'undefined' || netdata.charts[chart.id] != chart) {
127 - netdata.error('Called begin() for chart ' + chart.id + ' that is not mine. Where did you find it? Ignoring it.');
130 + netdata.serviceError(this, 'Called begin() for chart ' + chart.id + ' that is not mine. Where did you find it? Ignoring it.');
131 return false;
132 }
133
@@ -139,7 +142,7 @@ var netdata = {
142 var now = this.ended;
143 this.queue('BEGIN ' + this._current_chart.id + ' ' + ((this._current_chart._last_updated > 0)?((now - this._current_chart._last_updated) * 1000):'').toString());
144 }
142 - // else netdata.error('Called begin() for chart ' + chart.id + ' which is empty.');
145 + // else netdata.serviceError(this, 'Called begin() for chart ' + chart.id + ' which is empty.');
146
147 this._current_chart._last_updated = now;
148 this._current_chart._began = true;
@@ -152,12 +155,12 @@ var netdata = {
155 // we do most things on the first value we attempt to set
156 service.set = function(dimension, value) {
157 if(this._current_chart === null) {
155 - netdata.error('Called set(' + dimension + ', ' + value + ') without an open chart.');
158 + netdata.serviceError(this, 'Called set(' + dimension + ', ' + value + ') without an open chart.');
159 return false;
160 }
161
162 if(typeof(this._current_chart.dimensions[dimension]) === 'undefined') {
160 - netdata.error('Called set(' + dimension + ', ' + value + ') but dimension "' + dimension + '" does not exist in chart "' + this._current_chart.id + '".');
163 + netdata.serviceError(this, 'Called set(' + dimension + ', ' + value + ') but dimension "' + dimension + '" does not exist in chart "' + this._current_chart.id + '".');
164 return false;
165 }
166
@@ -170,7 +173,7 @@ var netdata = {
173 // end data collection for the current chart - after calling begin()
174 service.end = function() {
175 if(this._current_chart !== null && this._current_chart._began === false) {
173 - netdata.error('Called end() without an open chart.');
176 + netdata.serviceError(this, 'Called end() without an open chart.');
177 return false;
178 }
179
@@ -189,7 +192,7 @@ var netdata = {
192 // discard the collected values for the current chart - after calling begin()
193 service.flush = function() {
194 if(this._current_chart === null || this._current_chart._began === false) {
192 - netdata.error('Called flush() without an open chart.');
195 + netdata.serviceError(this, 'Called flush() without an open chart.');
196 return false;
197 }
198
@@ -430,6 +433,32 @@ var netdata = {
433 }
434 },
435
436 + serviceError: function(service, message) {
437 + if(service.error_reported === false) {
438 + netdata.error(service.module.name + ': ' + service.name + ': ' + message);
439 + service.error_reported = true;
440 + }
441 + else if(netdata.options.DEBUG === true)
442 + netdata.debug(service.module.name + ': ' + service.name + ': ' + message);
443 + },
444 +
445 + serviceErrorClear: function(service) {
446 + service.error_reported = false;
447 + },
448 +
449 + serviceInit: function(service) {
450 + service.error_reported = false;
451 + service.added = false;
452 + service.enabled = true;
453 + },
454 +
455 + serviceIsInitialized: function(service) {
456 + if(typeof service.error_reported === 'undefined')
457 + return false;
458 +
459 + return true;
460 + },
461 +
462 getResponse: function(service, response, callback) {
463 if(netdata.options.DEBUG === true) netdata.debug(service.module.name + ': ' + service.name + ': got response...');
464
@@ -439,7 +468,7 @@ var netdata = {
468
469 if(response.statusCode !== 200) {
470 if(end === false) {
442 - if(netdata.options.DEBUG === true) netdata.debug(service.module.name + ': ' + service.name + ': got HTTP code ' + response.statusCode + ', failed to get data.');
471 + netdata.serviceError(service, ': got HTTP code ' + response.statusCode + ', failed to get data.');
472 end = true;
473 netdata.processResponse(service, null, callback);
474 }
@@ -451,7 +480,7 @@ var netdata = {
480
481 response.on('error', function() {
482 if(end === false) {
454 - if(netdata.options.DEBUG === true) netdata.debug(service.module.name + ': ' + service.name + ': Read error, failed to get data.');
483 + netdata.serviceError(service, ': Read error, failed to get data.');
484 end = true;
485 netdata.processResponse(service, null, callback);
486 }
@@ -459,6 +488,7 @@ var netdata = {
488
489 response.on('end', function() {
490 if(end === false) {
491 + netdata.serviceErrorClear(service);
492 if(netdata.options.DEBUG === true) netdata.debug(service.module.name + ': ' + service.name + ': read completed.');
493 end = true;
494 netdata.processResponse(service, data, callback);
@@ -467,6 +497,9 @@ var netdata = {
497 },
498
499 serviceExecute: function(service, callback) {
500 + if(netdata.serviceIsInitialized(service) === false)
501 + netdata.serviceInit(service);
502 +
503 service.module.running++;
504
505 if(netdata.options.DEBUG === true) netdata.debug(service.module.name + ': ' + service.name + ': making request: ' + netdata.stringify(service.request));
@@ -476,13 +509,15 @@ var netdata = {
509 });
510
511 req.on('error', function(e) {
479 - netdata.error(service.module.name + ': ' + service.name + ': failed to make request: ' + netdata.stringify(service.request) + ', message: ' + e.message);
512 + netdata.serviceError(service, ': failed to make request: ' + netdata.stringify(service.request) + ', message: ' + e.message);
513 netdata.processResponse(service, null, callback);
514 });
515
516 // write data to request body
484 - if(typeof service.postData !== 'undefined' && service.request.method === 'POST')
517 + if(typeof service.postData !== 'undefined' && service.request.method === 'POST') {
518 + if(netdata.options.DEBUG === true) netdata.debug(service.module.name + ': ' + service.name + ': posting data: ' + service.postData);
519 req.write(service.postData);
520 + }
521
522 req.end();
523 },
node.d/sma_webbox.node.js
-2
@@ -194,8 +194,6 @@ var webbox = {
194 name: name,
195 request: netdata.requestFromURL('http://' + hostname + '/rpc'),
196 update_every: update_every,
197 - added: false,
198 - enabled: true,
197 module: this
198 };
199 service.postData = 'RPC={"proc":"GetPlantOverview","format":"JSON","version":"1.0","id":"1"}';