Skip to content

Commit

Permalink
add retry lib
Browse files Browse the repository at this point in the history
  • Loading branch information
shulkaolka committed Nov 30, 2023
1 parent 2ae3389 commit b93fbf4
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 32 deletions.
50 changes: 21 additions & 29 deletions templates/lib/utils/helpers.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,39 +5,31 @@ const FormDataNode = require("formdata-node");
const path = require("path");
const axios = require("axios");
const Swagger = require("swagger-client");
const retry = require("retry");
const { File } = FormDataNode;

function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}

const executeSwaggerCall = async function (callParams) {
let maxRetries = 5;
let retryDelay = 5000; // 5 seconds in milliseconds
let currentRetry = 0;
let response;
let err;

while (currentRetry < maxRetries) {
try {
response = await Swagger.execute(callParams);
break;
} catch (error) {
if (error.response.status && error.response.status > 400 && error.response.status !== 401 && error.response.status !== 403) {
err = error;
currentRetry++;
this.logger.info(`Received ${error.response.status} status. Attempt #${currentRetry}. Retrying in ${retryDelay / 1000} seconds...`);
await sleep(retryDelay);
} else {
throw error;
const operation = retry.operation({
retries: 5,
factor: 2,
minTimeout: 5000,
maxTimeout: 6000,
randomize: true,
});
return new Promise((resolve, reject) => {
operation.attempt(async (currentAttempt) => {
try {
const response = await Swagger.execute(callParams);
resolve(response);
} catch (error) {
if (operation.retry(error) && error.status && error.status > 400 && error.status !== 401 && error.status !== 403) {
this.logger.info(`Received response status: ${error.status}. Attempt #${currentAttempt}. Retrying in ${operation._originalTimeouts[currentAttempt-1]} ms...`);
return;
}
reject(operation.mainError());
}
}
}
if (err && currentRetry === maxRetries) {
this.logger.info("Max retries reached. Throwing error...");
throw err;
}
return response;
});
});
};

const executeCall = async function (callParams) {
Expand Down
14 changes: 14 additions & 0 deletions templates/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 4 additions & 3 deletions templates/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,11 @@
"dependencies": {
"@openintegrationhub/ferryman": "2.3.1",
"axios": "^1.4.0",
"formdata-node": "4.4.1",
"swagger-client": "^3.8.22",
"dayjs": "^1.10.7",
"lodash.get": "4.4.2"
"formdata-node": "4.4.1",
"lodash.get": "4.4.2",
"retry": "^0.13.1",
"swagger-client": "^3.8.22"
},
"devDependencies": {
"chai": "^4.3.7",
Expand Down

0 comments on commit b93fbf4

Please sign in to comment.