mirror of
https://github.com/Start9Labs/start-sdk.git
synced 2026-03-26 02:11:56 +00:00
44 lines
1.2 KiB
TypeScript
44 lines
1.2 KiB
TypeScript
import { InterfaceReceipt } from "../mainFn/interfaceReceipt";
|
|
import { Daemon, Effects } from "../types";
|
|
import { CheckResult } from "./checkFns/CheckResult";
|
|
import { HealthReceipt } from "./HealthReceipt";
|
|
import { Trigger } from "./trigger";
|
|
import { TriggerInput } from "./trigger/TriggerInput";
|
|
import { defaultTrigger } from "./trigger/defaultTrigger";
|
|
|
|
export function healthCheck(o: {
|
|
effects: Effects;
|
|
name: string;
|
|
trigger?: Trigger;
|
|
fn(): Promise<CheckResult> | CheckResult;
|
|
onFirstSuccess?: () => () => Promise<unknown> | unknown;
|
|
}) {
|
|
new Promise(async () => {
|
|
let currentValue: TriggerInput = {
|
|
lastResult: null,
|
|
hadSuccess: false,
|
|
};
|
|
const getCurrentValue = () => currentValue;
|
|
const trigger = (o.trigger ?? defaultTrigger)(getCurrentValue);
|
|
for (
|
|
let res = await trigger.next();
|
|
!res.done;
|
|
res = await trigger.next()
|
|
) {
|
|
try {
|
|
const { status, message } = await o.fn();
|
|
await o.effects.setHealth({
|
|
name: o.name,
|
|
status,
|
|
message,
|
|
});
|
|
currentValue.hadSuccess = true;
|
|
currentValue.lastResult = "success";
|
|
} catch (_) {
|
|
currentValue.lastResult = "failure";
|
|
}
|
|
}
|
|
});
|
|
return {} as HealthReceipt;
|
|
}
|