@bbc/http-transport
Version:
A flexible, modular REST client built for ease-of-use and resilience.
48 lines (35 loc) • 1.07 kB
JavaScript
;
function isRetry(ctx) {
const attempts = ctx.retryAttempts || [];
return attempts.length > 0;
}
function isCriticalError(ctx) {
return ctx.res.statusCode >= 500;
}
function hasElapsedTime(ctx) {
return ctx.res?.elapsedTime !== undefined;
}
function getBaseMessage(ctx) {
return `${ctx.req.getMethod()} ${ctx.req.getUrl()} ${ctx.res.statusCode}`;
}
function createRequestMessage(ctx) {
const res = ctx.res;
const message = getBaseMessage(ctx);
if (hasElapsedTime(ctx)) return `${message} ${res.elapsedTime} ms`;
return message;
}
function createRetryMessage(ctx) {
const message = `Attempt ${ctx.retryAttempts.length} ${getBaseMessage(ctx)}`;
if (hasElapsedTime(ctx)) return `${message} ${ctx.res.elapsedTime} ms`;
return message;
}
module.exports = (customLogger) => {
const logger = customLogger || console;
return async (ctx, next) => {
await next();
if (isRetry(ctx) && isCriticalError(ctx)) {
return logger.warn(createRetryMessage(ctx));
}
logger.info(createRequestMessage(ctx));
};
};