An implementation of gRPC health checks, written in typescript.
It is assumed that you are using the grpc
library.
npm install grpc-ts-health-check --save
Install the grpc
library:
npm install grpc --save
- Google Protobuf: Protocol Buffers - Google's data interchange format.
- gRPC Boom: A zero dependency library to help create gRPC-friendly error objects.
Below is a list of available methods:
Set the initial status of the service and continues to watch for any changes.
request
- theHealthCheckRequest
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()}`);
});
Checks the status of the service once.
request
- theHealthCheckRequest
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()}`);
}
});
import * as grpc from 'grpc';
import { GrpcHealthCheck, HealthCheckResponse, HealthService } from 'grpc-ts-health-check';
const serviceName = 'auth.Authenticator';
const healthCheckStatusMap = {
serviceName: HealthCheckResponse.ServingStatus.UNKNOWN
};
function start(): grpc.Server {
// Create the server
const server: grpc.Server = new grpc.Server();
// Register the health service
const grpcHealthCheck = new GrpcHealthCheck(healthCheckStatusMap);
server.addService(HealthService, grpcHealthCheck);
// Bind and start the server
server.bind('localhost:9090', grpc.ServerCredentials.createInsecure());
server.start();
// Create the health client
const healthClient = new HealthClient(`${host}:${port}`, grpc.credentials.createInsecure());
const request = new HealthCheckRequest();
request.setService(serviceName);
// Watch health status - streaming request
// This will set the initial health status
// and continue to watch the service for changes.
const healthStream = healthClient.watch(request);
healthStream.on('data', (response: HealthCheckResponse) => {
AppLogger.logger.debug(`Authenticator Service: Health Status: ${response.getStatus()}`);
});
// Check health status - single request
// This will provide the current health status
// of the service when the request is executed.
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;
}