@bbc/sofie-server-core-integration
Version:
Library for connecting to Core
73 lines • 2.95 kB
JavaScript
;
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