Skip to content
Snippets Groups Projects
Verified Commit f17987ac authored by Konstantin Tsabolov's avatar Konstantin Tsabolov
Browse files

feat(shared): add shared health module

parent b403af93
No related branches found
No related tags found
No related merge requests found
export const NATS = 'NATS';
import { Controller, Get, VERSION_NEUTRAL } from '@nestjs/common';
import { ApiTags } from '@nestjs/swagger';
import { HealthCheck, HealthCheckService } from '@nestjs/terminus';
import { NATSHealthIndicator } from './indicators/nats.health.js';
@Controller({ version: VERSION_NEUTRAL })
@ApiTags('Health')
export class HealthController {
public constructor(
private readonly natsHealthIndicator: NATSHealthIndicator,
private readonly health: HealthCheckService,
) {}
@Get()
@HealthCheck()
public check() {
return this.health.check([() => this.natsHealthIndicator.isHealthy()]);
}
}
import { ConfigurableModuleBuilder } from '@nestjs/common';
export interface HealthModuleOptions {
nats?: {
monitoringUrl: string;
};
}
export const {
ConfigurableModuleClass,
MODULE_OPTIONS_TOKEN,
OPTIONS_TYPE,
ASYNC_OPTIONS_TYPE,
} = new ConfigurableModuleBuilder<HealthModuleOptions>().build();
import { HttpModule } from '@nestjs/axios';
import { Module } from '@nestjs/common';
import { TerminusModule } from '@nestjs/terminus';
import { HealthController } from './health.controller.js';
import { ConfigurableModuleClass } from './health.module-definition.js';
import { NATSHealthIndicator } from './indicators/nats.health.js';
@Module({
imports: [HttpModule, TerminusModule],
controllers: [HealthController],
providers: [NATSHealthIndicator],
})
export class HealthModule extends ConfigurableModuleClass {}
import type { HealthIndicatorResult } from '@nestjs/terminus';
import { Inject, Injectable } from '@nestjs/common';
import { HealthIndicator, HttpHealthIndicator } from '@nestjs/terminus';
import { NATS } from '../constants.js';
import {
HealthModuleOptions,
MODULE_OPTIONS_TOKEN,
} from '../health.module-definition.js';
@Injectable()
export class NATSHealthIndicator extends HealthIndicator {
public constructor(
@Inject(MODULE_OPTIONS_TOKEN)
private readonly moduleOptions: HealthModuleOptions,
private readonly http: HttpHealthIndicator,
) {
super();
}
public async isHealthy(): Promise<HealthIndicatorResult> {
if (this.moduleOptions.nats?.monitoringUrl) {
return this.http.pingCheck(NATS, this.moduleOptions.nats.monitoringUrl);
}
return this.getStatus(NATS, true, {
message: 'NATS server monitoring URL is not provided. Skipping check.',
});
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment