@neoskop/nestjs-probes
Version:
51 lines (41 loc) • 1.46 kB
text/typescript
import { Inject, Injectable } from '@nestjs/common';
import { HealthIndicatorResult } from '@nestjs/terminus';
import { ProbesModuleOptions } from './probes-module-options.interface';
import { PROBES_MODULE_OPTIONS } from './probes.constants';
import { ProbeType } from './types';
()
export class ProbesService {
private statusMap: { [key in ProbeType]?: boolean } = {};
constructor(
(PROBES_MODULE_OPTIONS)
private readonly options: ProbesModuleOptions,
) {}
public async checkProbe(probeName: ProbeType): Promise<boolean> {
const check = this.options.checks[probeName];
if (check !== undefined) {
let newStatus: boolean;
if (typeof check === 'function') {
const result = await check();
if (typeof result === 'object') {
newStatus = this.checkTerminusHealthResults([result]);
} else if (typeof result === 'boolean') {
newStatus = result;
}
} else {
const results = await Promise.all(check.map(async (f) => await f()));
newStatus = this.checkTerminusHealthResults(results);
}
this.statusMap[probeName] = newStatus;
} else {
this.statusMap[probeName] = true;
}
return this.statusMap[probeName];
}
private checkTerminusHealthResults(
results: HealthIndicatorResult[],
): boolean {
return results.every(
(result) => result[Object.keys(result)[0]].status === 'up',
);
}
}