From 0676b67cd3b8e73eab945ffb01a37e8720ea57c3 Mon Sep 17 00:00:00 2001 From: BluJ Date: Wed, 17 May 2023 15:04:25 -0600 Subject: [PATCH] chore: update the healthchecks and HealthCheck --- lib/StartSdk.ts | 6 +++++- lib/trigger/defaultTrigger.ts | 7 ++++--- lib/trigger/successFailure.ts | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 41 insertions(+), 4 deletions(-) create mode 100644 lib/trigger/successFailure.ts diff --git a/lib/StartSdk.ts b/lib/StartSdk.ts index b771f73..e97060c 100644 --- a/lib/StartSdk.ts +++ b/lib/StartSdk.ts @@ -51,6 +51,7 @@ import { SetInterfaces, setupInterfaces, } from "./interfaces/setupInterfaces" +import { successFailure } from "./trigger/successFailure" // prettier-ignore type AnyNeverCond = @@ -96,10 +97,12 @@ export class StartSdk { input: Type }) => Promise, ) => createAction(metaData, fn), + HealthCheck: { + of: healthCheck, + }, healthCheck: { checkPortListening, checkWebUrl, - of: healthCheck, runHealthScript, }, patterns, @@ -186,6 +189,7 @@ export class StartSdk { defaultTrigger, cooldownTrigger, changeOnFirstSuccess, + successFailure, }, Backups: { diff --git a/lib/trigger/defaultTrigger.ts b/lib/trigger/defaultTrigger.ts index 7c34cc7..bd52dc7 100644 --- a/lib/trigger/defaultTrigger.ts +++ b/lib/trigger/defaultTrigger.ts @@ -1,7 +1,8 @@ import { cooldownTrigger } from "./cooldownTrigger" import { changeOnFirstSuccess } from "./changeOnFirstSuccess" +import { successFailure } from "./successFailure" -export const defaultTrigger = changeOnFirstSuccess({ - beforeFirstSuccess: cooldownTrigger(0), - afterFirstSuccess: cooldownTrigger(30000), +export const defaultTrigger = successFailure({ + duringSuccess: cooldownTrigger(0), + duringError: cooldownTrigger(30000), }) diff --git a/lib/trigger/successFailure.ts b/lib/trigger/successFailure.ts new file mode 100644 index 0000000..1886402 --- /dev/null +++ b/lib/trigger/successFailure.ts @@ -0,0 +1,32 @@ +import { Trigger } from "." + +export function successFailure(o: { + duringSuccess: Trigger + duringError: Trigger +}): Trigger { + return async function* (getInput) { + while (true) { + const beforeSuccess = o.duringSuccess(getInput) + yield + let currentValue = getInput() + beforeSuccess.next() + for ( + let res = await beforeSuccess.next(); + currentValue?.lastResult !== "passing" && !res.done; + res = await beforeSuccess.next() + ) { + yield + currentValue = getInput() + } + const duringError = o.duringError(getInput) + for ( + let res = await duringError.next(); + currentValue?.lastResult === "passing" && !res.done; + res = await duringError.next() + ) { + yield + currentValue = getInput() + } + } + } +}