import { cleanUpDockerBuilder, cleanUpSystemPrune, cleanUpUnusedImages, findBackupById, runMariadbBackup, runMongoBackup, runMySqlBackup, runPostgresBackup, } from "@dokploy/server"; import { db } from "@dokploy/server/dist/db"; import { backups, server } from "@dokploy/server/dist/db/schema"; import { eq } from "drizzle-orm"; import { logger } from "./logger"; import { scheduleJob } from "./queue"; import type { QueueJob } from "./schema"; export const runJobs = async (job: QueueJob) => { try { if (job.type === "backup") { const { backupId } = job; const backup = await findBackupById(backupId); const { databaseType, postgres, mysql, mongo, mariadb } = backup; if (databaseType === "postgres" && postgres) { await runPostgresBackup(postgres, backup); } else if (databaseType === "mysql" && mysql) { await runMySqlBackup(mysql, backup); } else if (databaseType === "mongo" && mongo) { await runMongoBackup(mongo, backup); } else if (databaseType === "mariadb" && mariadb) { await runMariadbBackup(mariadb, backup); } } if (job.type === "server") { const { serverId } = job; await cleanUpUnusedImages(serverId); await cleanUpDockerBuilder(serverId); await cleanUpSystemPrune(serverId); // await sendDockerCleanupNotifications(); } } catch (error) { logger.error(error); } 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"); };