import { Worker } from "bullmq"; import IORedis from "ioredis"; import { processGenerationJob } from "./processor.js"; const redisUrl = process.env.REDIS_URL ?? "redis://localhost:6379"; const connection = new IORedis(redisUrl, { maxRetriesPerRequest: null }); const worker = new Worker( "codeboard-generate", async (job) => { console.log(`[worker] Processing job ${job.id}: ${job.data.repoUrl}`); return processGenerationJob(job); }, { connection, concurrency: 2, removeOnComplete: { count: 100 }, removeOnFail: { count: 50 }, } ); worker.on("completed", (job) => { console.log(`[worker] Job ${job.id} completed`); }); worker.on("failed", (job, err) => { console.error(`[worker] Job ${job?.id} failed:`, err.message); }); worker.on("ready", () => { console.log("[worker] Ready and waiting for jobs on codeboard-generate"); }); async function shutdown() { console.log("[worker] Shutting down..."); await worker.close(); await connection.quit(); process.exit(0); } process.on("SIGTERM", shutdown); process.on("SIGINT", shutdown);