From 5f56512e56bd70a884bb3ab63cc0cdefe9dc38ba Mon Sep 17 00:00:00 2001 From: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> Date: Sun, 6 Oct 2024 14:16:31 -0600 Subject: [PATCH] refactor: update queue jobs --- apps/dokploy/server/api/routers/backup.ts | 4 --- apps/schedules/package.json | 1 + apps/schedules/src/index.ts | 6 ++-- apps/schedules/src/utils.ts | 42 +++++++++++++++++++++++ apps/schedules/src/workers.ts | 5 +-- pnpm-lock.yaml | 3 ++ 6 files changed, 53 insertions(+), 8 deletions(-) diff --git a/apps/dokploy/server/api/routers/backup.ts b/apps/dokploy/server/api/routers/backup.ts index 47c675884..553b7685c 100644 --- a/apps/dokploy/server/api/routers/backup.ts +++ b/apps/dokploy/server/api/routers/backup.ts @@ -11,13 +11,9 @@ import { createBackup, findBackupById, findMariadbByBackupId, - findMariadbById, findMongoByBackupId, - findMongoById, findMySqlByBackupId, - findMySqlById, findPostgresByBackupId, - findPostgresById, removeBackupById, removeScheduleBackup, runMariadbBackup, diff --git a/apps/schedules/package.json b/apps/schedules/package.json index adb44a35f..cd448d836 100644 --- a/apps/schedules/package.json +++ b/apps/schedules/package.json @@ -7,6 +7,7 @@ "start": "node --experimental-specifier-resolution=node dist/index.js" }, "dependencies": { + "drizzle-orm": "^0.30.8", "ioredis": "5.4.1", "bullmq": "5.4.2", "@hono/zod-validator": "0.3.0", diff --git a/apps/schedules/src/index.ts b/apps/schedules/src/index.ts index 4fd7f58b3..76965dc2b 100644 --- a/apps/schedules/src/index.ts +++ b/apps/schedules/src/index.ts @@ -6,10 +6,12 @@ import { logger } from "./logger"; import { cleanQueue, getJobRepeatable, removeJob, scheduleJob } from "./queue"; import { jobQueueSchema } from "./schema"; import { firstWorker, secondWorker } from "./workers"; +import { initializeJobs } from "./utils"; const app = new Hono(); cleanQueue(); +initializeJobs(); app.use(async (c, next) => { if (c.req.path === "/health") { @@ -27,7 +29,7 @@ app.use(async (c, next) => { app.post("/create-backup", zValidator("json", jobQueueSchema), async (c) => { const data = c.req.valid("json"); scheduleJob(data); - logger.info("Backup created successfully", data); + logger.info({ data }, "Backup created successfully"); return c.json({ message: "Backup created successfully" }); }); @@ -49,7 +51,7 @@ app.post("/update-backup", zValidator("json", jobQueueSchema), async (c) => { cronSchedule: job.pattern, }); } - logger.info("Job removed", result); + logger.info({ result }, "Job removed"); } scheduleJob(data); logger.info("Backup updated successfully"); diff --git a/apps/schedules/src/utils.ts b/apps/schedules/src/utils.ts index fcc2bdf59..a244ef763 100644 --- a/apps/schedules/src/utils.ts +++ b/apps/schedules/src/utils.ts @@ -8,8 +8,12 @@ import { runMySqlBackup, runPostgresBackup, } from "@dokploy/server"; +import { db } from "@dokploy/server/dist/db"; +import { eq } from "drizzle-orm"; import { logger } from "./logger"; import type { QueueJob } from "./schema"; +import { scheduleJob } from "./queue"; +import { backups, server } from "@dokploy/server/dist/db/schema"; export const runJobs = async (job: QueueJob) => { try { @@ -40,3 +44,41 @@ export const runJobs = async (job: QueueJob) => { return true; }; + +export const initializeJobs = async () => { + logger.info("Setting up Jobs...."); + + const servers = await db.query.server.findMany({ + where: eq(server.enableDockerCleanup, true), + }); + + for (const server of servers) { + const { serverId } = server; + scheduleJob({ + serverId, + type: "server", + cronSchedule: "0 0 * * *", + }); + } + + logger.info({ Quantity: servers.length }, "Servers Initialized"); + + const backupsResult = await db.query.backups.findMany({ + where: eq(backups.enabled, true), + with: { + mariadb: true, + mysql: true, + postgres: true, + mongo: true, + }, + }); + + for (const backup of backupsResult) { + scheduleJob({ + backupId: backup.backupId, + type: "backup", + cronSchedule: backup.schedule, + }); + } + logger.info({ Quantity: backupsResult.length }, "Backups Initialized"); +}; diff --git a/apps/schedules/src/workers.ts b/apps/schedules/src/workers.ts index 7711891e3..52166a752 100644 --- a/apps/schedules/src/workers.ts +++ b/apps/schedules/src/workers.ts @@ -2,11 +2,12 @@ import { type Job, Worker } from "bullmq"; import type { QueueJob } from "./schema"; import { runJobs } from "./utils"; import { connection } from "./queue"; +import { logger } from "./logger"; export const firstWorker = new Worker( "backupQueue", async (job: Job) => { - console.log("Job received", job.data); + logger.info({ data: job.data }, "Job received"); await runJobs(job.data); }, { @@ -17,7 +18,7 @@ export const firstWorker = new Worker( export const secondWorker = new Worker( "backupQueue", async (job: Job) => { - console.log(job.data); + logger.info({ data: job.data }, "Job received"); await runJobs(job.data); }, { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a036a4a51..89d30902f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -462,6 +462,9 @@ importers: dotenv: specifier: ^16.3.1 version: 16.4.5 + drizzle-orm: + specifier: ^0.30.8 + version: 0.30.10(@types/react@18.3.5)(postgres@3.4.4)(react@18.2.0) hono: specifier: ^4.5.8 version: 4.5.8