Add new batch scheduler service
This commit is contained in:
@ -6,13 +6,17 @@ interface BatchSchedulerState {
|
||||
nextRun?: string;
|
||||
isRunning: boolean;
|
||||
intervalId?: NodeJS.Timeout;
|
||||
canForceStop: boolean;
|
||||
}
|
||||
|
||||
class BatchScheduler {
|
||||
private state: BatchSchedulerState = {
|
||||
enabled: true,
|
||||
isRunning: false,
|
||||
canForceStop: false,
|
||||
};
|
||||
|
||||
private currentAbortController?: AbortController;
|
||||
|
||||
private readonly SIX_HOURS_MS = 6 * 60 * 60 * 1000; // 6 hours in milliseconds
|
||||
|
||||
@ -64,16 +68,26 @@ class BatchScheduler {
|
||||
}
|
||||
|
||||
this.state.isRunning = true;
|
||||
this.state.canForceStop = true;
|
||||
this.state.lastRun = new Date().toISOString();
|
||||
|
||||
// Create new AbortController for this batch run
|
||||
this.currentAbortController = new AbortController();
|
||||
|
||||
try {
|
||||
console.log("🔄 Running scheduled batch process...");
|
||||
await batchProcess();
|
||||
await batchProcess(this.currentAbortController.signal);
|
||||
console.log("✅ Scheduled batch process completed");
|
||||
} catch (error) {
|
||||
console.error("❌ Error during scheduled batch process:", error);
|
||||
if (error instanceof Error && error.name === 'AbortError') {
|
||||
console.log("🛑 Batch process was forcefully stopped");
|
||||
} else {
|
||||
console.error("❌ Error during scheduled batch process:", error);
|
||||
}
|
||||
} finally {
|
||||
this.state.isRunning = false;
|
||||
this.state.canForceStop = false;
|
||||
this.currentAbortController = undefined;
|
||||
}
|
||||
}
|
||||
|
||||
@ -117,6 +131,17 @@ class BatchScheduler {
|
||||
};
|
||||
}
|
||||
|
||||
public forceStop(): boolean {
|
||||
if (!this.state.isRunning || !this.currentAbortController) {
|
||||
console.log("ℹ️ No batch process currently running to stop");
|
||||
return false;
|
||||
}
|
||||
|
||||
console.log("🛑 Force stopping batch process...");
|
||||
this.currentAbortController.abort();
|
||||
return true;
|
||||
}
|
||||
|
||||
public isEnabled(): boolean {
|
||||
return this.state.enabled;
|
||||
}
|
||||
|
Reference in New Issue
Block a user