4.0.0 • Published 2 years ago

@betsys-nestjs/health-check v4.0.0

Weekly downloads
-
License
MIT
Repository
-
Last release
2 years ago

Health Check Library

Library for implementation of standardized health endpoint in NestJS applications.

Dependencies

PackageVersion
@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 is Readiness.
  • kubernetesProbesStyle - if true, health check will be registered as Kubernetes probes endpoints and divided by their probeType (/health/readiness, /health/liveness, and /health/startup). If false, single health check endpoint will be registered (/health) containing all indicators of Readiness 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);
    }
}
3.1.0

2 years ago

4.0.0

2 years ago

3.0.3

2 years ago

3.0.2

3 years ago

3.0.1

3 years ago

3.0.0

3 years ago

2.0.5

3 years ago

2.0.4

3 years ago

2.0.3

3 years ago

2.0.2

3 years ago