Skip to content

Commit

Permalink
Update request.ts
Browse files Browse the repository at this point in the history
  • Loading branch information
ashish-egov authored Jun 18, 2024
1 parent 71e961f commit c475730
Showing 1 changed file with 90 additions and 71 deletions.
161 changes: 90 additions & 71 deletions utilities/project-factory/src/server/utils/request.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { Response } from "express"; // Importing necessary module Response from Express
import { getFormattedStringForDebug, logger } from "./logger"; // Importing logger from logger module
import { cacheResponse, getCachedResponse, throwErrorViaRequest } from "./genericUtils"; // Importing necessary functions from genericUtils module
import config from "../config";

var Axios = require("axios").default; // Importing axios library
var get = require("lodash/get"); // Importing get function from lodash library
Expand Down Expand Up @@ -64,86 +65,104 @@ const httpRequest = async (
_method: string = "post",
responseType: string = "",
headers: any = defaultheader,
sendStatusCode: any = false
sendStatusCode: any = false,
dontThrowError: any = false,
retry: any = false
): Promise<any> => {
try {
if (headers && headers.cachekey && cacheEnabled) {
const cacheData = getCachedResponse(headers.cachekey); // Get cached response data
if (cacheData) {
return cacheData; // Return cached data if available
let attempt = 0; // Track the number of attempts
const maxAttempts = parseInt(config.values.maxHttpRetries) || 4; // Maximum number of retry attempts

while (attempt < maxAttempts) {
try {
if (headers && headers.cachekey && cacheEnabled) {
const cacheData = getCachedResponse(headers.cachekey); // Get cached response data
if (cacheData) {
return cacheData; // Return cached data if available
}
logger.info(
"NO CACHE FOUND :: REQUEST :: " +
JSON.stringify(headers.cachekey)
);
}
logger.info(
"NO CACHE FOUND :: REQUEST :: " +
JSON.stringify(headers.cachekey)
"INTER-SERVICE :: REQUEST :: " +
getServiceName(_url) +
" CRITERIA :: " +
JSON.stringify(_params)
);
}
logger.info(
"INTER-SERVICE :: REQUEST :: " +
getServiceName(_url) +
" CRITERIA :: " +
JSON.stringify(_params)
);
logger.debug("INTER-SERVICE :: REQUESTBODY :: " + getFormattedStringForDebug(_requestBody))
// Make HTTP request using Axios
const response = await Axios({
method: _method,
url: _url,
data: _requestBody,
params: _params,
headers: { ...defaultheader, ...headers },
responseType,
});
logger.debug("INTER-SERVICE :: REQUESTBODY :: " + getFormattedStringForDebug(_requestBody))
// Make HTTP request using Axios
const response = await axiosInstance({
method: _method,
url: _url,
data: _requestBody,
params: _params,
headers: { ...defaultheader, ...headers },
responseType,
});

const responseStatus = parseInt(get(response, "status"), 10); // Get response status
logger.info(
"INTER-SERVICE :: SUCCESS :: " +
getServiceName(_url) +
":: CODE :: " +
responseStatus
);
logger.debug("INTER-SERVICE :: RESPONSEBODY :: " +getFormattedStringForDebug(response.data));
const responseStatus = parseInt(get(response, "status"), 10); // Get response status
logger.info(
"INTER-SERVICE :: SUCCESS :: " +
getServiceName(_url) +
":: CODE :: " +
responseStatus
);
logger.debug("INTER-SERVICE :: RESPONSEBODY :: " + getFormattedStringForDebug(response.data));

// If response status is successful, cache the response data if caching is enabled
if (responseStatus === 200 || responseStatus === 201 || responseStatus === 202) {
if (headers && headers.cachekey) {
cacheResponse(response.data, headers.cachekey)
// If response status is successful, cache the response data if caching is enabled
if (responseStatus === 200 || responseStatus === 201 || responseStatus === 202) {
if (headers && headers.cachekey) {
cacheResponse(response.data, headers.cachekey);
}
// Return response data with status code if sendStatusCode flag is false
if (!sendStatusCode)
return response.data;
else return { ...response.data, "statusCode": responseStatus };
}
// Return response data with status code if sendStatusCode flag is false
if (!sendStatusCode)
return response.data;
else return { ...response.data, "statusCode": responseStatus }
}
} catch (error: any) {
var errorResponse = error?.response; // Get error response
// Log error details
logger.error(
"INTER-SERVICE :: FAILURE :: " +
getServiceName(_url) +
":: CODE :: " +
errorResponse?.status +
":: ERROR :: " +
errorResponse?.data?.Errors?.[0]?.code || error +
":: DESCRIPTION :: " +
errorResponse?.data?.Errors?.[0]?.description
);
logger.error("error occured while making request to " +
getServiceName(_url) +
": error response :" +
(errorResponse ? parseInt(errorResponse?.status, 10) : error?.message))
logger.error(":: ERROR STACK :: " + error?.stack || error);
// Throw error response via request if error response contains errors
if (errorResponse?.data?.Errors?.[0]) {
errorResponse.data.Errors[0].status = errorResponse?.data?.Errors?.[0]?.status || errorResponse?.status
throwErrorViaRequest(errorResponse?.data?.Errors?.[0]);
}
else {
// Throw error message via request
throwErrorViaRequest(
"error occured while making request to " +
} catch (error: any) {
var errorResponse = error?.response; // Get error response
// Log error details
logger.error(
"INTER-SERVICE :: FAILURE :: " +
getServiceName(_url) +
": error response :" +
(errorResponse ? parseInt(errorResponse?.status, 10) : error?.message)
":: CODE :: " +
errorResponse?.status +
":: ERROR :: " +
errorResponse?.data?.Errors?.[0]?.code || error +
":: DESCRIPTION :: " +
errorResponse?.data?.Errors?.[0]?.description
);
logger.error("error occurred while making request to " +
getServiceName(_url) +
": error response :" +
(errorResponse ? parseInt(errorResponse?.status, 10) : error?.message))
logger.error(":: ERROR STACK :: " + error?.stack || error);
if (!dontThrowError) {
// Throw error response via request if error response contains errors
if (errorResponse?.data?.Errors?.[0]) {
errorResponse.data.Errors[0].status = errorResponse?.data?.Errors?.[0]?.status || errorResponse?.status
throwErrorViaRequest(errorResponse?.data?.Errors?.[0]);
} else {
// Throw error message via request
throwErrorViaRequest(
"error occurred while making request to " +
getServiceName(_url) +
": error response :" +
(errorResponse ? parseInt(errorResponse?.status, 10) : error?.message)
);
}
} else if (dontThrowError && retry) {
attempt++; // Increment the attempt count
if (attempt >= maxAttempts) {
return errorResponse?.data || { Errors: [{ code: error.message, description: error.stack }] }; // Return the error response or error details
}
// Wait for a short period before retrying
logger.info(`Waiting for 20 seconds before retrying httprequest with url ${_url}`);
await new Promise(resolve => setTimeout(resolve, 20000));
} else {
return errorResponse?.data || { Errors: [{ code: error.message, description: error.stack }] }; // Return the error response or error details
}
}
}
};
Expand Down

0 comments on commit c475730

Please sign in to comment.