61 lines
1.5 KiB
JavaScript
61 lines
1.5 KiB
JavaScript
/**
|
|
* Scheduler service using node-cron
|
|
* Handles scheduled tasks like Formex sync
|
|
*/
|
|
import cron from 'node-cron';
|
|
import { sync as formexSync } from './formexCrawler.js';
|
|
|
|
let formexJob = null;
|
|
|
|
/**
|
|
* Initialize the scheduler with configured jobs
|
|
*/
|
|
export function initScheduler() {
|
|
const cronExpression = process.env.FORMEX_SYNC_CRON || '0 3 * * *'; // Default: 3:00 AM daily
|
|
|
|
// Validate cron expression
|
|
if (!cron.validate(cronExpression)) {
|
|
console.error(`Invalid FORMEX_SYNC_CRON expression: ${cronExpression}`);
|
|
return;
|
|
}
|
|
|
|
// Schedule Formex sync
|
|
formexJob = cron.schedule(cronExpression, async () => {
|
|
console.log(`[${new Date().toISOString()}] Running scheduled Formex sync...`);
|
|
try {
|
|
const result = await formexSync();
|
|
console.log(`[${new Date().toISOString()}] Scheduled sync complete:`, result);
|
|
} catch (err) {
|
|
console.error(`[${new Date().toISOString()}] Scheduled sync failed:`, err.message);
|
|
}
|
|
}, {
|
|
scheduled: true,
|
|
timezone: 'Europe/Zurich' // Swiss timezone
|
|
});
|
|
|
|
console.log(`Formex sync scheduled: ${cronExpression} (Europe/Zurich)`);
|
|
}
|
|
|
|
/**
|
|
* Stop all scheduled jobs
|
|
*/
|
|
export function stopScheduler() {
|
|
if (formexJob) {
|
|
formexJob.stop();
|
|
formexJob = null;
|
|
console.log('Scheduler stopped');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get scheduler status
|
|
*/
|
|
export function getSchedulerStatus() {
|
|
return {
|
|
formexSync: {
|
|
running: formexJob !== null,
|
|
schedule: process.env.FORMEX_SYNC_CRON || '0 3 * * *'
|
|
}
|
|
};
|
|
}
|