38 lines
1.1 KiB
TypeScript
38 lines
1.1 KiB
TypeScript
|
import { Controller, Get, Inject } from '@nestjs/common';
|
||
|
import {
|
||
|
HealthCheckService,
|
||
|
HealthCheck,
|
||
|
HealthCheckResult,
|
||
|
} from '@nestjs/terminus';
|
||
|
import { MESSAGE_PUBLISHER } from 'src/app.constants';
|
||
|
import { IPublishMessage } from 'src/interfaces/message-publisher';
|
||
|
import { RepositoriesHealthIndicatorUseCase } from '../../domain/usecases/repositories.health-indicator.usecase';
|
||
|
|
||
|
@Controller('health')
|
||
|
export class HealthController {
|
||
|
constructor(
|
||
|
private readonly repositoriesHealthIndicatorUseCase: RepositoriesHealthIndicatorUseCase,
|
||
|
private healthCheckService: HealthCheckService,
|
||
|
@Inject(MESSAGE_PUBLISHER)
|
||
|
private readonly messagePublisher: IPublishMessage,
|
||
|
) {}
|
||
|
|
||
|
@Get()
|
||
|
@HealthCheck()
|
||
|
async check() {
|
||
|
try {
|
||
|
return await this.healthCheckService.check([
|
||
|
async () =>
|
||
|
this.repositoriesHealthIndicatorUseCase.isHealthy('repositories'),
|
||
|
]);
|
||
|
} catch (error) {
|
||
|
const healthCheckResult: HealthCheckResult = error.response;
|
||
|
this.messagePublisher.publish(
|
||
|
'logging.user.health.crit',
|
||
|
JSON.stringify(healthCheckResult.error),
|
||
|
);
|
||
|
throw error;
|
||
|
}
|
||
|
}
|
||
|
}
|