mirror of
https://github.com/Dokploy/dokploy.git
synced 2026-06-19 14:15:21 +02:00
- 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.
49 lines
1.5 KiB
TypeScript
49 lines
1.5 KiB
TypeScript
import { findVolumeBackupById } from "@dokploy/server/services/volume-backups";
|
|
import {
|
|
createDeploymentVolumeBackup,
|
|
execAsync,
|
|
execAsyncRemote,
|
|
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);
|
|
const serverId =
|
|
volumeBackup.application?.serverId || volumeBackup.compose?.serverId;
|
|
const deployment = await createDeploymentVolumeBackup({
|
|
volumeBackupId: volumeBackup.volumeBackupId,
|
|
title: "Volume Backup",
|
|
description: "Volume Backup",
|
|
});
|
|
|
|
try {
|
|
const command = await backupVolume(volumeBackup);
|
|
|
|
const commandWithLog = `(${command}) >> ${deployment.logPath} 2>&1`;
|
|
if (serverId) {
|
|
await execAsyncRemote(serverId, commandWithLog);
|
|
} else {
|
|
await execAsync(commandWithLog);
|
|
}
|
|
|
|
await updateDeploymentStatus(deployment.deploymentId, "done");
|
|
} catch (error) {
|
|
await updateDeploymentStatus(deployment.deploymentId, "error");
|
|
console.error(error);
|
|
}
|
|
};
|