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"}';