Skip to main content
Glama
cron.ts2.44 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