uptime/src/util/scheduler.ts

26 lines
653 B
TypeScript

import * as TE from "fp-ts/lib/TaskEither";
import { pipe } from "fp-ts/lib/function";
import type { Schedule } from "../canary";
interface ScheduledJob {
id: string;
execute: TE.TaskEither<Error, boolean>;
at: Date;
schedule: Schedule;
}
type SchedulerState = ReadonlyArray<ScheduledJob>;
export const schedulerLoop =
(state: SchedulerState): TE.TaskEither<Error, void> =>
() => {
const loop = (currentState: SchedulerState): TE.TaskEither<Error, void> =>
pipe(
executeDueJobs(currentState),
delay(1000), // Delay for 1 second
map((newState) => loop(newState)),
);
return loop(state)();
};