gRPC Js Health Check

An implementation of gRPC Js health checks, written in typescript.
It is assumed that you are using the grpc-js
library.
Installation
npm install grpc-ts-health-check --save
Install the grpc-js
library:
npm install @grpc/grpc-js --save
Dependencies
- Google Protobuf: Protocol Buffers - Google's data interchange format.
- gRPC Boom: A zero dependency library to help create gRPC-friendly error objects.
Usage
Methods
Below is a list of available methods:
watch(request)
Set the initial status of the service and continues to watch for any changes.
request
- the HealthCheckRequest
object.
const healthClient = new HealthClient(`${host}:${port}`, grpc.credentials.createInsecure());
const request = new HealthCheckRequest();
request.setService(serviceName);
const healthStream = healthClient.watch(request);
healthStream.on('data', (response: HealthCheckResponse) => {
AppLogger.logger.debug(`Health Status: ${response.getStatus()}`);
});
check(request)
Checks the status of the service once.
request
- the HealthCheckRequest
object.
const healthClient = new HealthClient(`${host}:${port}`, grpc.credentials.createInsecure());
const request = new HealthCheckRequest();
request.setService(serviceName);
healthClient.check(request, (error: Error | null, response: HealthCheckResponse) => {
if (error) {
AppLogger.logger.error('Health Check Failed', error);
} else {
AppLogger.logger.debug(`Health Status: ${response.getStatus()}`);
}
});
Example
import * as grpc from '@grpc/grpc-js';
import { GrpcHealthCheck, HealthCheckResponse, HealthService } from 'grpc-ts-health-check';
const serviceName = 'auth.Authenticator';
const healthCheckStatusMap = {
serviceName: HealthCheckResponse.ServingStatus.UNKNOWN
};
function start(): grpc.Server {
const server: grpc.Server = new grpc.Server();
const grpcHealthCheck = new GrpcHealthCheck(healthCheckStatusMap);
server.addService(HealthService, grpcHealthCheck);
server.bind('localhost:9090', grpc.ServerCredentials.createInsecure());
server.start();
const healthClient = new HealthClient(`${host}:${port}`, grpc.credentials.createInsecure());
const request = new HealthCheckRequest();
request.setService(serviceName);
const healthStream = healthClient.watch(request);
healthStream.on('data', (response: HealthCheckResponse) => {
AppLogger.logger.debug(`Authenticator Service: Health Status: ${response.getStatus()}`);
});
setTimeout(() => {
healthClient.check(request, (error: Error | null, response: HealthCheckResponse) => {
if (error) {
AppLogger.logger.error('Authenticator Service: Health Check Failed', error);
} else {
AppLogger.logger.debug(
`Authenticator Service: Health Check Status: ${response.getStatus()}`
);
}
});
}, 5000);
return server;
}