homeio
PublikFork dari doctor-io/homeio
runner.ts
import "server-only";
import { getDueTasks, runScheduledTask } from "./service";
const POLL_INTERVAL_MS = 60_000;
const MAX_CONCURRENT_TASKS = 3;
let started = false;
export function startScheduledTaskRunner() {
if (started) return;
started = true;
const tick = async () => {
try {
const dueTasks = await getDueTasks();
// Run at most MAX_CONCURRENT_TASKS tasks simultaneously
for (let i = 0; i < dueTasks.length; i += MAX_CONCURRENT_TASKS) {
const batch = dueTasks.slice(i, i + MAX_CONCURRENT_TASKS);
await Promise.allSettled(batch.map((task) => runScheduledTask(task.id)));
}
} catch {
// don't crash the runner
}
};
// Run immediately on startup, then every minute
tick();
setInterval(tick, POLL_INTERVAL_MS);
}