UNPKG

@qrvey/health-checker

Version:

![install size](https://packagephobia.com/badge?p=@qrvey/health-checker) ![coverage](https://img.shields.io/badge/unit_test_coverage-87%25-brightgreen)

44 lines 1.64 kB
"use strict"; 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