4.0.0 • Published 2 years ago
@betsys-nestjs/health-check v4.0.0
Health Check Library
Library for implementation of standardized health endpoint in NestJS applications.
Dependencies
Package | Version |
---|---|
@nestjs/common | ^10.0.0 |
@nestjs/core | ^10.0.0 |
@nestjs/microservices | ^10.0.0 |
@nestjs/swagger | ^7.0.0 |
@nestjs/terminus | ^10.0.0 |
reflect-metadata | <1.0.0 |
rxjs | ^7.0.0 |
Usage
Import HealthCheckModule
to your health module with using .forRoot function and register all your health indicators:
@Module({
imports: [
HealthCheckModule.forRoot({
imports: [
PostgresqlModule.forFeature(connectionPostgresFeatureConfig()),
MongoModule.forFeature(connectionMongoFeatureConfig()),
RedisModule.forFeature(connectionRedisFeatureConfig()),
ElasticModule.forFeature(connectionElasticFeatureConfig()),
],
indicators: [
{
factory: (connection: PostgresConnection) => new PostgresqlHealthIndicator(connection, 'postgres'),
inject: [getPostgresConnectionToken()],
},
{
factory: (connection: MongoConnection) => new MongoHealthIndicator(connection, 'mongo'),
inject: [getMongoConnectionToken()],
},
{
factory: (connection: ElasticConnection) => new ElasticHealthIndicator(connection, 'elastic'),
inject: [getElasticConnectionToken()],
},
{
factory: (client: RedisClient) => new RedisHealthIndicator(client, 'redis'),
inject: [getRedisClientToken()],
probeType: ProbeTypes.Liveness,
},
],
kubernetesProbesStyle: true,
}),
],
})
export class HealthModule {
}
probeType
- type of health indicator probe. Default isReadiness
.kubernetesProbesStyle
- if true, health check will be registered as Kubernetes probes endpoints and divided by theirprobeType
(/health/readiness
,/health/liveness
, and/health/startup
). If false, single health check endpoint will be registered (/health
) containing all indicators ofReadiness
type.
Creating your own indicator
To create custom health indicator, you need to create a new class that extends from HealthIndicator
and implement getHealth method.
import { Injectable } from '@nestjs/common';
import { HealthCheckError, HealthIndicator, HealthIndicatorResult } from '@betsys/nestjs-health-check';
@Injectable()
export class SimpleHealthIndicator extends HealthIndicator {
constructor(
private readonly someThirdPartyOperation: SomeThirdPartyOperation,
private readonly key: string,
) {
super();
}
async isHealthy(): Promise<HealthIndicatorResult> {
let isHealthy = false;
try {
const result = await this.someThirdPartyOperation.execute();
isHealthy = result.isValid();
} catch (error) {
const typesError = error as Error;
const status = this.getStatus(this.key, false, { error: typesError.message || error });
throw new HealthCheckError(typesError.message || 'Unknown error', status);
}
if (!isHealthy) {
const status = this.getStatus(this.key, false);
throw new HealthCheckError('Simple service check failed!', status);
}
return this.getStatus(this.key, true);
}
}