From b93fbf41cc56d8425979a956bf96796b834aad25 Mon Sep 17 00:00:00 2001 From: shulkaolka Date: Thu, 30 Nov 2023 15:25:36 +0200 Subject: [PATCH] add retry lib --- templates/lib/utils/helpers.js | 50 ++++++++++++++-------------------- templates/package-lock.json | 14 ++++++++++ templates/package.json | 7 +++-- 3 files changed, 39 insertions(+), 32 deletions(-) diff --git a/templates/lib/utils/helpers.js b/templates/lib/utils/helpers.js index d0f8fda..f0ea651 100644 --- a/templates/lib/utils/helpers.js +++ b/templates/lib/utils/helpers.js @@ -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) { diff --git a/templates/package-lock.json b/templates/package-lock.json index 4ca00f9..35f65f8 100644 --- a/templates/package-lock.json +++ b/templates/package-lock.json @@ -13,6 +13,7 @@ "dayjs": "^1.10.7", "formdata-node": "4.4.1", "lodash.get": "4.4.2", + "retry": "^0.13.1", "swagger-client": "^3.8.22" }, "devDependencies": { @@ -3157,6 +3158,14 @@ "node": ">=4" } }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "engines": { + "node": ">= 4" + } + }, "node_modules/rimraf": { "version": "2.4.5", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", @@ -6241,6 +6250,11 @@ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, + "retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==" + }, "rimraf": { "version": "2.4.5", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", diff --git a/templates/package.json b/templates/package.json index fe05fba..f6a775a 100644 --- a/templates/package.json +++ b/templates/package.json @@ -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",