mirror of
https://github.com/Dokploy/dokploy.git
synced 2026-06-21 07:05:21 +02:00
49 lines
1.5 KiB
TypeScript
49 lines
1.5 KiB
TypeScript
import { findVolumeBackupById } from "@dokploy/server/services/volume-backups";
|
|
import { scheduledJobs, scheduleJob } from "node-schedule";
|
|
import {
|
|
createDeploymentVolumeBackup,
|
|
execAsync,
|
|
execAsyncRemote,
|
|
updateDeploymentStatus,
|
|
} from "../..";
|
|
import { backupVolume } from "./backup";
|
|
|
|
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);
|
|
}
|
|
};
|