UNPKG

@bbc/sofie-server-core-integration

Version:
73 lines 2.95 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.HealthEndpoints = void 0; const tslib_1 = require("tslib"); const koa_1 = tslib_1.__importDefault(require("koa")); const router_1 = tslib_1.__importDefault(require("@koa/router")); const status_1 = require("@bbc/sofie-shared-lib/dist/lib/status"); const lib_1 = require("@bbc/sofie-shared-lib/dist/lib/lib"); /** * Exposes health endpoints for Kubernetes or other orchestrators to monitor * see https://kubernetes.io/docs/concepts/configuration/liveness-readiness-startup-probes */ class HealthEndpoints { connector; coreHandler; config; app = new koa_1.default(); constructor(connector, coreHandler, config) { this.connector = connector; this.coreHandler = coreHandler; this.config = config; if (!config.port) return; // disabled const router = new router_1.default(); router.get('/healthz', async (ctx) => { if (this.connector.initializedError !== undefined) { ctx.status = 503; ctx.body = `Error during initialization: ${this.connector.initializedError}`; return; } if (!this.connector.initialized) { ctx.status = 503; ctx.body = 'Not initialized'; return; } const coreStatus = this.coreHandler.getCoreStatus(); if (coreStatus.statusCode === status_1.StatusCode.UNKNOWN) ctx.status = 503; else if (coreStatus.statusCode === status_1.StatusCode.FATAL) ctx.status = 503; else if (coreStatus.statusCode === status_1.StatusCode.BAD) ctx.status = 503; else if (coreStatus.statusCode === status_1.StatusCode.WARNING_MAJOR) ctx.status = 200; else if (coreStatus.statusCode === status_1.StatusCode.WARNING_MINOR) ctx.status = 200; else if (coreStatus.statusCode === status_1.StatusCode.GOOD) ctx.status = 200; else (0, lib_1.assertNever)(coreStatus.statusCode); if (ctx.status !== 200) { ctx.body = `Status: ${status_1.StatusCode[coreStatus.statusCode]}, messages: ${coreStatus.messages.join(', ')}`; } else { ctx.body = 'OK'; } }); router.get('/readyz', async (ctx) => { if (!this.coreHandler.connectedToCore) { ctx.status = 503; ctx.body = 'Not connected to Core'; return; } // else ctx.status = 200; ctx.body = 'READY'; }); this.app.use(router.routes()).use(router.allowedMethods()); this.app.listen(this.config.port); } } exports.HealthEndpoints = HealthEndpoints; //# sourceMappingURL=health.js.map