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 1 commit
Commits
File filter...
Filter file types
Jump to…
Jump to file
Failed to load files.

Always

Just for now

Prev

modified server retry code

  • Loading branch information
Shweta Jain
Shweta Jain committed Oct 31, 2017
commit 6ded6c80f2e20b308607493d129129383abe005d
@@ -28,10 +28,10 @@ var isValidToken = true;
// Variables for server retry
//
var arrRetryLogs = [],
maxRetryAllowed = 5,
totalRetries = 0,
statusCode,
notfailedOnServerError = true;
maxRetryAllowed = 5,
totalRetries = 0,
statusCode,
notFailedOnServerError = true;

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

@@ -148,7 +147,6 @@ common.loggly = function () {
arrayLogs.push(requestOptions.body);
}
storeLogs(arrayLogs);
//storeLogsforServerRetry(arrayLogs);

if (!responded) {
responded = true;
@@ -171,21 +169,18 @@ common.loggly = function () {
requestOptions.body = requestBody;
arrRetryLogs = arrRetryLogs.concat(requestBody);
}
if (arrRetryLogs.length && !requestBody) {
requestOptions.body = arrRetryLogs[0];
}
function sendLogs() {
if (arrRetryLogs.length && !requestBody) requestOptions.body = arrRetryLogs[0];
try {
request(requestOptions, function (err, res, body) {
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 (statusCode === '500' || statusCode === '503' || statusCode === '504') retryOnServerError(res);
if (Object.keys(failCodes).indexOf(statusCode) !== -1) {
if (statusCode !== '503' && statusCode !== '500' && statusCode !== '504') {
return onError((new Error('Loggly Error (' + statusCode + '): ' + failCodes[statusCode])));
@@ -199,28 +194,29 @@ 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) {
requestOptions.body = arrRetryLogs.join('\n');
retryLogs = arrRetryLogs.slice(0, arrSize);
requestOptions.body = retryLogs.join('\n');
}
//
// Join Array Message with new line ('\n') character
//
if (arrMsg.length) 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);

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 (statusCode === '500' || statusCode === '503' || statusCode === '504') retryOnServerError(res);
if (Object.keys(failCodes).indexOf(statusCode) !== -1) {
if (statusCode !== '503' && statusCode !== '500' && statusCode !== '504') {
return onError((new Error('Loggly Error (' + statusCode + '): ' + failCodes[statusCode])));
@@ -258,17 +254,24 @@ common.loggly = function () {
sendLogs();
}

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

@@ -296,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();
@@ -314,13 +317,6 @@ common.loggly = function () {
if (numberOfLogsToBeRemoved > 0) arrBufferedMsg = arrBufferedMsg.splice(numberOfLogsToBeRemoved);
arrBufferedMsg = arrBufferedMsg.concat(logs);
}

//function storeLogsforServerRetry(logs) {
// if (!logs.length || !bufferOptions) return;
// arrRetryLogs = arrRetryLogs.concat(logs);
// isBulk ? sendBulkLogs(arrRetryLogs) : sendLogs(arrRetryLogs);
// //sendLogs(arrInputLogs);
// }
};
//
// ### function serialize (obj, key)
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.