@harmonyjs/controller-cloud-health
Version:
REST controller for Harmony
78 lines (65 loc) • 2.52 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
var Fastify = _interopDefault(require('fastify'));
var health = require('@cloudnative/health-connect');
function wrap(path) {
if (path.startsWith('/')) {
return path;
}
return `/${path}`;
}
const ControllerCloudHealth = function ControllerCloudHealth(config) {
return {
name: 'ControllerCloudHealth',
async initialize({
logger,
server
}) {
const readinessPath = config.readinessPath || '/ready';
const livenessPath = config.livenessPath || '/live';
const healthPath = config.healthPath || '/health';
const healthcheck = new health.HealthChecker();
const instance = config.standalone ? Fastify() : server;
instance.register((fastify, opts, done) => {
logger.info(`Registering liveness probe on path ${wrap(livenessPath)}`);
fastify.use(wrap(livenessPath), health.LivenessEndpoint(healthcheck));
logger.info(`Registering readiness probe on path ${wrap(readinessPath)}`);
fastify.use(wrap(readinessPath), health.ReadinessEndpoint(healthcheck));
logger.info(`Registering health probe on path ${wrap(healthPath)}`);
fastify.use(wrap(healthPath), health.HealthEndpoint(healthcheck));
logger.info('All probes registered');
done();
}, {
prefix: config.prefix
});
config.checks.startup.forEach((check, i) => {
healthcheck.registerStartupCheck(new health.StartupCheck(`startup_${i}`, check));
});
config.checks.liveness.forEach((check, i) => {
healthcheck.registerLivenessCheck(new health.LivenessCheck(`liveness_${i}`, check));
});
config.checks.readiness.forEach((check, i) => {
healthcheck.registerReadinessCheck(new health.ReadinessCheck(`readiness_${i}`, check));
});
config.checks.shutdown.forEach((check, i) => {
healthcheck.registerShutdownCheck(new health.ShutdownCheck(`shutdown_${i}`, check));
});
if (config.standalone) {
instance.listen(config.standalone.port, config.standalone.host);
}
}
};
};
ControllerCloudHealth.startupLock = () => {
let release = () => {};
const lock = new Promise(resolve => {
release = resolve;
});
return {
lock,
release
};
};
exports.default = ControllerCloudHealth;
//# sourceMappingURL=index.js.map