ai_api / src /shared /services /providerLimitsSyncScheduler.ts
Yogesh
initial deploy
cd8bd0a
Raw
History Blame Contribute Delete
2.41 kB
import {
getLastProviderLimitsAutoSyncTime,
getProviderLimitsSyncIntervalMinutes,
getProviderLimitsSyncIntervalMs,
syncAllProviderLimits,
} from "@/lib/usage/providerLimits";
const STARTUP_DELAY_MS = 5_000;
let schedulerTimer: NodeJS.Timeout | null = null;
let startupTimer: NodeJS.Timeout | null = null;
let isRunning = false;
async function runProviderLimitsSyncCycle(): Promise<void> {
if (isRunning) {
console.log("[ProviderLimitsSync] Skipping cycle β€” previous run still in progress");
return;
}
isRunning = true;
const start = Date.now();
try {
const result = await syncAllProviderLimits({ source: "scheduled" });
console.log(
`[ProviderLimitsSync] Cycle complete: ${result.succeeded}/${result.total} synced in ${Date.now() - start}ms`
);
} catch (error) {
console.warn("[ProviderLimitsSync] Cycle failed:", (error as Error).message);
} finally {
isRunning = false;
}
}
export function startProviderLimitsSyncScheduler(): void {
if (schedulerTimer || startupTimer) {
console.log("[ProviderLimitsSync] Scheduler already running β€” skipping start");
return;
}
const intervalMs = getProviderLimitsSyncIntervalMs();
const intervalMinutes = getProviderLimitsSyncIntervalMinutes();
console.log(`[ProviderLimitsSync] Scheduler started β€” interval: ${intervalMinutes}m`);
void (async () => {
let initialDelayMs = STARTUP_DELAY_MS;
const lastAutoSyncAt = await getLastProviderLimitsAutoSyncTime();
if (lastAutoSyncAt) {
const lastRunMs = Date.parse(lastAutoSyncAt);
if (Number.isFinite(lastRunMs)) {
const elapsedMs = Date.now() - lastRunMs;
if (elapsedMs < intervalMs) {
initialDelayMs = Math.max(intervalMs - elapsedMs, STARTUP_DELAY_MS);
}
}
}
startupTimer = setTimeout(() => {
startupTimer = null;
void runProviderLimitsSyncCycle();
schedulerTimer = setInterval(() => {
void runProviderLimitsSyncCycle();
}, intervalMs);
schedulerTimer.unref?.();
}, initialDelayMs);
startupTimer.unref?.();
})();
}
export function stopProviderLimitsSyncScheduler(): void {
if (startupTimer) {
clearTimeout(startupTimer);
startupTimer = null;
}
if (schedulerTimer) {
clearInterval(schedulerTimer);
schedulerTimer = null;
console.log("[ProviderLimitsSync] Scheduler stopped");
}
}