mirror of
https://github.com/andwati/dokploy.git
synced 2026-10-31 17:22:16 +00:00
feat: extend volume backup functionality with scheduling and management
- Added support for volume backup jobs in the scheduling and removal processes. - Enhanced job management to include volume backups in the job queue. - Updated schema to accommodate volume backup data structure. - Implemented initialization of volume backup jobs based on server status, improving backup management.
This commit is contained in:
@@ -5,6 +5,7 @@ import {
|
||||
findBackupById,
|
||||
findScheduleById,
|
||||
findServerById,
|
||||
findVolumeBackupById,
|
||||
keepLatestNBackups,
|
||||
runCommand,
|
||||
runComposeBackup,
|
||||
@@ -12,9 +13,15 @@ import {
|
||||
runMongoBackup,
|
||||
runMySqlBackup,
|
||||
runPostgresBackup,
|
||||
runVolumeBackup,
|
||||
} from "@dokploy/server";
|
||||
import { db } from "@dokploy/server/dist/db";
|
||||
import { backups, schedules, server } from "@dokploy/server/dist/db/schema";
|
||||
import {
|
||||
backups,
|
||||
schedules,
|
||||
server,
|
||||
volumeBackups,
|
||||
} from "@dokploy/server/dist/db/schema";
|
||||
import { and, eq } from "drizzle-orm";
|
||||
import { logger } from "./logger.js";
|
||||
import { scheduleJob } from "./queue.js";
|
||||
@@ -93,6 +100,12 @@ export const runJobs = async (job: QueueJob) => {
|
||||
if (schedule.enabled) {
|
||||
await runCommand(schedule.scheduleId);
|
||||
}
|
||||
} else if (job.type === "volume-backup") {
|
||||
const { volumeBackupId } = job;
|
||||
const volumeBackup = await findVolumeBackupById(volumeBackupId);
|
||||
if (volumeBackup.enabled) {
|
||||
await runVolumeBackup(volumeBackupId);
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
logger.error(error);
|
||||
@@ -184,4 +197,44 @@ export const initializeJobs = async () => {
|
||||
{ Quantity: filteredSchedulesBasedOnServerStatus.length },
|
||||
"Schedules Initialized",
|
||||
);
|
||||
|
||||
const volumeBackupsResult = await db.query.volumeBackups.findMany({
|
||||
where: eq(volumeBackups.enabled, true),
|
||||
with: {
|
||||
application: {
|
||||
with: {
|
||||
server: true,
|
||||
},
|
||||
},
|
||||
compose: {
|
||||
with: {
|
||||
server: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const filteredVolumeBackupsBasedOnServerStatus = volumeBackupsResult.filter(
|
||||
(volumeBackup) => {
|
||||
if (volumeBackup.application) {
|
||||
return volumeBackup.application.server?.serverStatus === "active";
|
||||
}
|
||||
if (volumeBackup.compose) {
|
||||
return volumeBackup.compose.server?.serverStatus === "active";
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
for (const volumeBackup of filteredVolumeBackupsBasedOnServerStatus) {
|
||||
scheduleJob({
|
||||
volumeBackupId: volumeBackup.volumeBackupId,
|
||||
type: "volume-backup",
|
||||
cronSchedule: volumeBackup.cronExpression,
|
||||
});
|
||||
}
|
||||
|
||||
logger.info(
|
||||
{ Quantity: filteredVolumeBackupsBasedOnServerStatus.length },
|
||||
"Volume Backups Initialized",
|
||||
);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user