diff --git a/src/health/health.module.ts b/src/health/health.module.ts index 2d5e6d1..b1a2629 100644 --- a/src/health/health.module.ts +++ b/src/health/health.module.ts @@ -4,8 +4,10 @@ import { TerminusModule } from '@nestjs/terminus'; import { TypeOrmModule } from '@nestjs/typeorm'; import { HealthController } from './controllers'; import { HttpModule } from '@nestjs/axios'; +import { HealthService } from './services'; @Module({ imports: [TerminusModule, HttpModule, TypeOrmModule], controllers: [HealthController], + providers: [HealthService], }) export class HealthModule {} diff --git a/src/health/services/health.service.ts b/src/health/services/health.service.ts new file mode 100644 index 0000000..a330262 --- /dev/null +++ b/src/health/services/health.service.ts @@ -0,0 +1,33 @@ +import { Injectable } from '@nestjs/common'; +import { + HealthCheckService, + TypeOrmHealthIndicator, + DiskHealthIndicator, + MemoryHealthIndicator, + HttpHealthIndicator, + HealthCheckResult, +} from '@nestjs/terminus'; + +@Injectable() +export class HealthService { + constructor( + private health: HealthCheckService, + private db: TypeOrmHealthIndicator, + private memory: MemoryHealthIndicator, + private disk: DiskHealthIndicator, + private http: HttpHealthIndicator, + ) {} + + check(): Promise { + return this.health.check([ + () => this.db.pingCheck('database'), + () => + this.disk.checkStorage('disk', { + thresholdPercent: 0.9, + path: '/', + }), + () => this.memory.checkHeap('memory_heap', 300 * 1024 * 1024), + () => this.http.pingCheck('tuya', process.env.TUYA_EU_URL), + ]); + } +} diff --git a/src/health/services/index.ts b/src/health/services/index.ts new file mode 100644 index 0000000..1e2e6d7 --- /dev/null +++ b/src/health/services/index.ts @@ -0,0 +1 @@ +export * from './health.service';