feat:Deamons need over time after start

This commit is contained in:
BluJ
2023-04-27 11:41:18 -06:00
parent 1d4d076070
commit c1226cf2b4
5 changed files with 23 additions and 16 deletions

View File

@@ -15,7 +15,6 @@ export function healthCheck(o: {
}) { }) {
new Promise(async () => { new Promise(async () => {
let currentValue: TriggerInput = { let currentValue: TriggerInput = {
lastResult: null,
hadSuccess: false, hadSuccess: false,
} }
const getCurrentValue = () => currentValue const getCurrentValue = () => currentValue
@@ -33,9 +32,9 @@ export function healthCheck(o: {
message, message,
}) })
currentValue.hadSuccess = true currentValue.hadSuccess = true
currentValue.lastResult = "success" currentValue.lastResult = "passing"
} catch (_) { } catch (_) {
currentValue.lastResult = "failure" currentValue.lastResult = "failing"
} }
} }
}) })

View File

@@ -1,4 +1,6 @@
import { HealthStatus } from "../../types"
export type TriggerInput = { export type TriggerInput = {
lastResult?: "success" | "failure" | null lastResult?: HealthStatus
hadSuccess?: boolean hadSuccess?: boolean
} }

View File

@@ -12,7 +12,7 @@ export function changeOnFirstSuccess(o: {
beforeFirstSuccess.next() beforeFirstSuccess.next()
for ( for (
let res = await beforeFirstSuccess.next(); let res = await beforeFirstSuccess.next();
currentValue?.lastResult !== "success" && !res.done; currentValue?.lastResult !== "passing" && !res.done;
res = await beforeFirstSuccess.next() res = await beforeFirstSuccess.next()
) { ) {
yield yield

View File

@@ -1,4 +1,4 @@
import { HealthReceipt, ReadyProof } from "../health" import { HealthReceipt, ReadyProof, TriggerInput } from "../health"
import { CheckResult } from "../health/checkFns" import { CheckResult } from "../health/checkFns"
import { Trigger } from "../health/trigger" import { Trigger } from "../health/trigger"
import { defaultTrigger } from "../health/trigger/defaultTrigger" import { defaultTrigger } from "../health/trigger/defaultTrigger"
@@ -82,21 +82,26 @@ export class Daemons<Ids extends string | never> {
const { command } = daemon const { command } = daemon
const child = effects.runDaemon(command) const child = effects.runDaemon(command)
let currentInput = {} let currentInput: TriggerInput = {}
const getCurrentInput = () => currentInput const getCurrentInput = () => currentInput
const trigger = (daemon.ready.trigger ?? defaultTrigger)( const trigger = (daemon.ready.trigger ?? defaultTrigger)(
getCurrentInput, getCurrentInput,
) )
for ( return new Promise(async (resolve) => {
let res = await trigger.next(); for (
!res.done; let res = await trigger.next();
res = await trigger.next() !res.done;
) { res = await trigger.next()
const response = await daemon.ready.fn() ) {
if (response.status === "passing") { const response = await daemon.ready.fn()
return child currentInput.lastResult = response.status || null
if (!currentInput.hadSuccess && response.status === "passing") {
currentInput.hadSuccess = true
resolve(child)
}
} }
} resolve(child)
})
return child return child
}) })
} }

View File

@@ -6,6 +6,7 @@ import {
} from "../config/configTypes" } from "../config/configTypes"
import { deepMerge } from "../util" import { deepMerge } from "../util"
import { InputSpec, matchInputSpec } from "./output" import { InputSpec, matchInputSpec } from "./output"
import * as _I from "../index"
export type IfEquals<T, U, Y = unknown, N = never> = (<G>() => G extends T export type IfEquals<T, U, Y = unknown, N = never> = (<G>() => G extends T
? 1 ? 1