An health check library for validating the availability of core service dependencies like Redis, PostgreSQL, and RabbitMQ.
npm install @qrvey/health-checker
Or with yarn:
yarn add @qrvey/health-checker
Service | Dependency Key |
---|---|
PostgreSQL | database |
Redis | cache |
RabbitMQ | eventBroker |
const {
HealthCheckService,
} = require('@qrvey/health-checker');
HealthCheckService.check(['cache', 'database', 'eventBroker']).then((result) => {
console.log(result);
/*
{
status: 'OK',
details: {
cache: 'OK',
database: 'OK',
eventBroker: 'OK'
}
}
*/
});
You can also check specific dependencies only:
HealthCheckService.check(['cache']).then((result) => {
console.log(result);
/*
{
status: 'OK',
details: {
cache: 'OK'
}
}
*/
});
You can expose the health check as a simple route in your Fastify app.
const {
HealthCheckService,
} = require('@qrvey/health-checker');
const Fastify = require('fastify');
async function healthRoutes(fastify, _options) {
fastify.get('/health', async (_request, reply) => {
const dependencies = ['database', 'eventBroker'];
const result = await HealthCheckService.check(dependencies);
const httpStatus = result.status === "FAILED" ? 503 : 200;
return reply.code(httpStatus).send(result);
});
}
const app = Fastify({ logger: true });
app.register(healthRoutes);
app.listen({ port: 3000 });
GET /health
{
"status": "OK",
"details": {
"database": "OK",
"eventBroker": "OK"
}
}
If you want to explicitly validate that your service is subscribed to one or more RabbitMQ queues, you can pass an additional params object to the check method.
fastify.get('/health', async (_request, reply) => {
const dependencies = ['eventBroker'];
const params = {
eventBroker: {
queues: ['queue_name_1', 'queue_name_2'], // these must match the configured subscriptions
},
}
const result = await HealthCheckService.check(dependencies, params);
const httpStatus = result.status === "FAILED" ? 503 : 200;
return reply.code(httpStatus).send(result);
});
GET /health
{
"status": "OK",
"details": {
"eventBroker": "OK"
}
}