mirror of
https://github.com/Dokploy/dokploy.git
synced 2026-06-24 00:25:27 +02:00
feat: enhance volume backup scheduling and management
- Added initVolumeBackupsCronJobs function to initialize scheduled volume backups on server startup. - Updated volumeBackupsRouter to handle scheduling and removal of volume backup jobs based on user input. - Improved create and update volume backup logic to include scheduling functionality for both cloud and local environments. - Introduced utility functions for scheduling and removing volume backup jobs, enhancing overall backup management.
This commit is contained in:
@@ -1,3 +1,30 @@
|
||||
export * from "./backup";
|
||||
export * from "./restore";
|
||||
export * from "./utils";
|
||||
import { volumeBackups } from "@dokploy/server/db/schema";
|
||||
import { eq } from "drizzle-orm";
|
||||
import { db } from "../../db/index";
|
||||
import { scheduleVolumeBackup } from "./utils";
|
||||
|
||||
export const initVolumeBackupsCronJobs = async () => {
|
||||
console.log("Setting up volume backups cron jobs....");
|
||||
try {
|
||||
const volumeBackupsResult = await db.query.volumeBackups.findMany({
|
||||
where: eq(volumeBackups.enabled, true),
|
||||
with: {
|
||||
application: true,
|
||||
compose: true,
|
||||
},
|
||||
});
|
||||
|
||||
console.log(`Initializing ${volumeBackupsResult.length} volume backups`);
|
||||
for (const volumeBackup of volumeBackupsResult) {
|
||||
scheduleVolumeBackup(volumeBackup.volumeBackupId);
|
||||
console.log(
|
||||
`Initialized volume backup: ${volumeBackup.name} ${volumeBackup.serviceType} ✅`,
|
||||
);
|
||||
}
|
||||
} catch (error) {
|
||||
console.log(`Error initializing volume backups: ${error}`);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -6,6 +6,19 @@ import {
|
||||
updateDeploymentStatus,
|
||||
} from "../..";
|
||||
import { backupVolume } from "./backup";
|
||||
import { scheduleJob, scheduledJobs } from "node-schedule";
|
||||
|
||||
export const scheduleVolumeBackup = async (volumeBackupId: string) => {
|
||||
const volumeBackup = await findVolumeBackupById(volumeBackupId);
|
||||
scheduleJob(volumeBackupId, volumeBackup.cronExpression, async () => {
|
||||
await runVolumeBackup(volumeBackupId);
|
||||
});
|
||||
};
|
||||
|
||||
export const removeVolumeBackupJob = async (volumeBackupId: string) => {
|
||||
const currentJob = scheduledJobs[volumeBackupId];
|
||||
currentJob?.cancel();
|
||||
};
|
||||
|
||||
export const runVolumeBackup = async (volumeBackupId: string) => {
|
||||
const volumeBackup = await findVolumeBackupById(volumeBackupId);
|
||||
|
||||
Reference in New Issue
Block a user