@qrvey/health-checker
Version:
 
44 lines • 1.64 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.withTimeout = withTimeout;
exports.withTimeoutAndTiming = withTimeoutAndTiming;
const constants_1 = require("./constants");
const logger_1 = __importDefault(require("./logger"));
function withTimeout(context, healthCheckFn, ms = constants_1.DEFAULT_HEALTH_CHECK_TIMEOUT) {
return new Promise((resolve, reject) => {
const timeoutId = setTimeout(() => {
const message = `[${context}] HealthChecker timeout after ${ms}ms`;
logger_1.default.error(message);
reject(new Error(message));
}, ms);
healthCheckFn
.then((value) => {
clearTimeout(timeoutId);
resolve(value);
})
.catch((error) => {
clearTimeout(timeoutId);
reject(error);
});
});
}
async function withTimeoutAndTiming(context, healthCheckPromise, ms = constants_1.DEFAULT_HEALTH_CHECK_TIMEOUT) {
const start = Date.now();
const result = await withTimeout(context, healthCheckPromise, ms);
const durationMs = Date.now() - start;
const metadata = result && typeof result === 'object' && 'metadata' in result
? result.metadata
: undefined;
const status = result && typeof result === 'object' && 'status' in result
? result.status
: undefined;
return {
durationMs,
status,
metadata,
};
}
//# sourceMappingURL=withTimeout.js.map