Skip to main content
Glama
cron.ts2.68 kB
import cron from 'node-cron'; import { logger } from './logger'; // Assuming logger exists // ============================================ // Job Definitions // ============================================ const jobs = { // Run every minute heartbeat: { schedule: '* * * * *', task: async () => { logger.info('Heartbeat: System is alive'); }, }, // Run every night at midnight dailyCleanup: { schedule: '0 0 * * *', task: async () => { logger.info('Starting daily cleanup...'); // Db cleanup logic here await new Promise(resolve => setTimeout(resolve, 1000)); logger.info('Daily cleanup completed'); }, }, // Run every Monday at 9am weeklyReport: { schedule: '0 9 * * 1', task: async () => { logger.info('Generating weekly report...'); // Report logic here }, }, }; // ============================================ // Scheduler Service // ============================================ type JobName = keyof typeof jobs; export class Scheduler { private tasks: Map<JobName, cron.ScheduledTask> = new Map(); init() { logger.info('Initializing scheduler...'); Object.entries(jobs).forEach(([name, config]) => { const task = cron.schedule(config.schedule, async () => { logger.info(`Starting job: ${name}`); try { await config.task(); logger.info(`Job completed: ${name}`); } catch (error) { logger.error(`Job failed: ${name}`, error); } }, { scheduled: false, // Don't start immediately timezone: 'UTC', }); this.tasks.set(name as JobName, task); }); this.startAll(); } startAll() { this.tasks.forEach(task => task.start()); logger.info('All scheduled tasks started'); } stopAll() { this.tasks.forEach(task => task.stop()); logger.info('All scheduled tasks stopped'); } stop(name: JobName) { const task = this.tasks.get(name); if (task) { task.stop(); logger.info(`Stopped job: ${name}`); } } start(name: JobName) { const task = this.tasks.get(name); if (task) { task.start(); logger.info(`Started job: ${name}`); } } } export const scheduler = new Scheduler(); // Start automatically if not imported as module if (require.main === module) { scheduler.init(); }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/millsydotdev/Code-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server