diff --git a/packages/xo-web/src/common/xo/index.js b/packages/xo-web/src/common/xo/index.js index 83c84cc998f..ffc7c485b29 100644 --- a/packages/xo-web/src/common/xo/index.js +++ b/packages/xo-web/src/common/xo/index.js @@ -2350,8 +2350,8 @@ export const createBackupNgJob = props => _call('backupNg.createJob', props)::ta export const getSuggestedExcludedTags = () => _call('backupNg.getSuggestedExcludedTags') -export const deleteBackupJobs = async ({ backupIds = [], metadataBackupIds = [] }) => { - const nJobs = backupIds.length + metadataBackupIds.length +export const deleteBackupJobs = async ({ backupIds = [], metadataBackupIds = [], mirrorBackupIds = [] }) => { + const nJobs = backupIds.length + metadataBackupIds.length + mirrorBackupIds.length if (nJobs === 0) { return } @@ -2380,6 +2380,13 @@ export const deleteBackupJobs = async ({ backupIds = [], metadataBackupIds = [] ) ) } + if (mirrorBackupIds.length !== 0) { + promises.push( + Promise.all(mirrorBackupIds.map(id => _call('mirrorBackup.deleteJob', { id: resolveId(id) })))::tap( + subscribeMirrorBackupJobs.forceRefresh + ) + ) + } return Promise.all(promises)::tap(subscribeSchedules.forceRefresh) } @@ -2472,6 +2479,8 @@ export const subscribeMirrorBackupJobs = createSubscription(() => _call('mirrorB export const createMirrorBackupJob = props => _call('mirrorBackup.createJob', props)::tap(subscribeMirrorBackupJobs.forceRefresh) +export const runMirrorBackupJob = props => _call('mirrorBackup.runJob', props) + // Plugins ----------------------------------------------------------- export const loadPlugin = async id => diff --git a/packages/xo-web/src/xo-app/backup/overview/tab-jobs.js b/packages/xo-web/src/xo-app/backup/overview/tab-jobs.js index b939a99d276..b9d05ccc782 100644 --- a/packages/xo-web/src/xo-app/backup/overview/tab-jobs.js +++ b/packages/xo-web/src/xo-app/backup/overview/tab-jobs.js @@ -29,6 +29,7 @@ import { enableSchedule, runBackupNgJob, runMetadataBackupJob, + runMirrorBackupJob, subscribeBackupNgJobs, subscribeBackupNgLogs, subscribeMetadataBackupJobs, @@ -50,10 +51,12 @@ const Li = props => ( /> ) +const isMirrorBackup = item => item?.type === 'mirrorBackup' + const MODES = [ { label: 'mirrorBackup', - test: job => job?.type === 'mirrorBackup', + test: isMirrorBackup, }, { label: 'rollingSnapshot', @@ -86,8 +89,8 @@ const MODES = [ ] const _deleteBackupJobs = items => { - const { backup: backupIds, metadataBackup: metadataBackupIds } = groupBy(items, 'type') - return deleteBackupJobs({ backupIds, metadataBackupIds }) + const { backup: backupIds, metadataBackup: metadataBackupIds, mirrorBackup: mirrorBackupIds } = groupBy(items, 'type') + return deleteBackupJobs({ backupIds, metadataBackupIds, mirrorBackupIds }) } const _runBackupJob = ({ id, name, nVms, schedule, type }) => @@ -104,7 +107,13 @@ const _runBackupJob = ({ id, name, nVms, schedule, type }) => })} ), - }).then(() => (type === 'backup' ? runBackupNgJob({ id, schedule }) : runMetadataBackupJob({ id, schedule }))) + }).then(() => + type === 'backup' + ? runBackupNgJob({ id, schedule }) + : isMirrorBackup({ type }) + ? runMirrorBackupJob({ id, schedule }) + : runMetadataBackupJob({ id, schedule }) + ) const CURSOR_POINTER_STYLE = { cursor: 'pointer' } const GoToLogs = decorate([