@betsys-nestjs/health-check
v4.0.0
Published
Betsys NestJS module for health-check implementation
Downloads
14
Maintainers
Keywords
Readme
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);
}
}