Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Retry on server error #25

Merged
merged 2 commits into from Nov 7, 2017
Merged
Changes from all commits
Commits
File filter...
Filter file types
Jump to…
Jump to file
Failed to load files.

Always

Just for now

@@ -14,7 +14,7 @@ var arrSize = 100,
timerFunction = null;

//
// Variables for buffer array
// Variables for buffer array
//
var arrBufferedMsg = [],
timerFunctionForBufferedLogs = null;
@@ -24,6 +24,15 @@ var arrBufferedMsg = [],
//
var isValidToken = true;

//
// Variables for server retry
//
var arrRetryLogs = [],
maxRetryAllowed = 5,
totalRetries = 0,
statusCode,
notFailedOnServerError = true;

var https = require('https'),
util = require('util'),
request = require('request'),
@@ -44,7 +53,8 @@ var failCodes = common.failCodes = {
410: 'Gone',
500: 'Internal Server Error',
501: 'Not Implemented',
503: 'Throttled'
503: 'Throttled',
504: 'Gateway Timeout'
};

//
@@ -157,18 +167,25 @@ common.loggly = function () {
}
if (requestBody) {
requestOptions.body = requestBody;
arrRetryLogs = arrRetryLogs.concat(requestBody);
}
function sendLogs() {
if (arrRetryLogs.length && !requestBody) requestOptions.body = arrRetryLogs[0];
try {
request(requestOptions, function (err, res, body) {
if (err) {
return onError(err);
}
var statusCode = res.statusCode.toString();
if (err) return onError(err);
statusCode = res.statusCode.toString();
if(statusCode === '403') isValidToken = false;
if (statusCode === '500' || statusCode === '503' || statusCode === '504') retryOnServerError(res);

This comment has been minimized.

@mchaudhary

mchaudhary Nov 7, 2017

@Shwetajain148 you should use the curl braces after if condition don't put under if statements without having { even if you have single statement.

This comment has been minimized.

@Shwetajain148

Shwetajain148 Jan 22, 2018
Author

@mchaudhary Thanks for pointing out this. I will take of your input in my future commits.

if (statusCode === '200') {
arrRetryLogs.splice(0, 1);
totalRetries = 0;
}
if (Object.keys(failCodes).indexOf(statusCode) !== -1) {
return onError((new Error('Loggly Error (' + statusCode + '): ' + failCodes[statusCode])));
}
if (statusCode !== '503' && statusCode !== '500' && statusCode !== '504') {
return onError((new Error('Loggly Error (' + statusCode + '): ' + failCodes[statusCode])));
}
}
success(res, body);
});
}
@@ -177,23 +194,33 @@ common.loggly = function () {
}
}
function sendBulkLogs() {
if (arrMsg.length === 0) {
return;
if (arrMsg.length === 0 && arrRetryLogs.length === 0) return;
var retryLogs = [];
if (arrRetryLogs.length && !arrMsg.length) {
retryLogs = arrRetryLogs.slice(0, arrSize);
requestOptions.body = retryLogs.join('\n');
}
//
// Join Array Message with new line ('\n') character
//
requestOptions.body = arrMsg.join('\n');
arrMsg.length = 0;
if (arrMsg.length) {
requestOptions.body = arrMsg.join('\n');
arrMsg.length = 0;
}
try {
request(requestOptions, function (err, res, body) {
if (err) {
return onError(err);
}
if (err) return onError(err);
var statusCode = res.statusCode.toString();
if(statusCode === '403') isValidToken = false;
if (statusCode === '500' || statusCode === '503' || statusCode === '504') retryOnServerError(res);
if (statusCode === '200') {
arrRetryLogs.splice(0, arrSize);
totalRetries = 0;
}
if (Object.keys(failCodes).indexOf(statusCode) !== -1) {
return onError((new Error('Loggly Error (' + statusCode + '): ' + failCodes[statusCode])));
if (statusCode !== '503' && statusCode !== '500' && statusCode !== '504') {
return onError((new Error('Loggly Error (' + statusCode + '): ' + failCodes[statusCode])));
}
}
success(res, body);
});
@@ -227,6 +254,27 @@ common.loggly = function () {
sendLogs();
}

//
//function to retry sending logs maximum 5 times if server error occurs
//
function retryOnServerError(err) {
if (!arrRetryLogs.length) return;
else {
if (notFailedOnServerError && totalRetries >= maxRetryAllowed) {
console.log('Failed after ' + totalRetries + ' retries on error - ' + statusCode, '"'+err.statusMessage+'"');
notFailedOnServerError = false;
arrRetryLogs.length = 0;
totalRetries = 0;
}
while (isValidToken && totalRetries < maxRetryAllowed) {
console.log('Failed on error code ' + statusCode);
console.log('Retried ' + (totalRetries + 1) + ' time');
totalRetries++;
isBulk ? sendBulkLogs() : sendLogs();
}
}
}

//
// retries to send buffered logs to loggly in every 30 seconds
//
@@ -251,7 +299,7 @@ common.loggly = function () {
requestOptionsForBufferedLogs.body = isBulk ? arrayMessage.join('\n') : arrayMessage[0];
request(requestOptionsForBufferedLogs, function (err, res, body) {
if(err) return;
var statusCode = res.statusCode.toString();
statusCode = res.statusCode.toString();
if(statusCode === "200") {
arrBufferedMsg.splice(0, logsInBunch);
sendBufferdLogstoLoggly();
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.