diff --git a/apps/worker/src/index.ts b/apps/worker/src/index.ts new file mode 100644 index 0000000..c10e059 --- /dev/null +++ b/apps/worker/src/index.ts @@ -0,0 +1,42 @@ +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);