zerobyte/apps/agent/src/jobs/index.ts
2026-05-09 11:00:27 +02:00

23 lines
764 B
TypeScript

import { logger } from "@zerobyte/core/node";
import { Effect, Fiber } from "effect";
import { CleanupDanglingVolumeMountsJob } from "./cleanup-dangling";
import type { AgentJob } from "./types";
const agentJobs = [CleanupDanglingVolumeMountsJob];
export const startAgentJobs = (jobs: readonly AgentJob[] = agentJobs) => {
return jobs.map((job) =>
Effect.runFork(
Effect.forever(
Effect.gen(function* () {
yield* job.run();
yield* Effect.sleep(job.intervalMs);
}),
).pipe(Effect.ensuring(logger.effect.debug(`Agent job stopped: ${job.name}`))),
),
);
};
export const stopAgentJobs = (fibers: readonly Fiber.RuntimeFiber<never, never>[]) => {
return Effect.forEach(fibers, (fiber) => Fiber.interrupt(fiber), { discard: true });
};