diff --git a/src/backuptask.js b/src/backuptask.js index c70eeaa47..7d92127c5 100644 --- a/src/backuptask.js +++ b/src/backuptask.js @@ -7,6 +7,7 @@ exports = module.exports = { restore, downloadApp, + backupApp, backupMail, downloadMail, @@ -302,6 +303,24 @@ async function rotateAppBackup(backupConfig, app, tag, options, progressCallback return id; } +async function backupApp(app, options, progressCallback) { + assert.strictEqual(typeof app, 'object'); + assert.strictEqual(typeof options, 'object'); + assert.strictEqual(typeof progressCallback, 'function'); + + let backupId = null; + await locks.wait(`${locks.TYPE_APP_BACKUP_PREFIX}${app.id}`); + if (options.snapshotOnly) { + await snapshotApp(app, progressCallback); + } else { + const tag = (new Date()).toISOString().replace(/[T.]/g, '-').replace(/[:Z]/g,''); + backupId = await backupAppWithTag(app, tag, options, progressCallback); + } + await locks.release(`${locks.TYPE_APP_BACKUP_PREFIX}${app.id}`); + + return backupId; +} + async function snapshotApp(app, progressCallback) { assert.strictEqual(typeof app, 'object'); assert.strictEqual(typeof progressCallback, 'function'); @@ -512,18 +531,9 @@ async function appBackup(appId, options, progressCallback) { const app = await apps.get(appId); if (!app) throw new BoxError(BoxError.BAD_FIELD, 'App not found'); - let backupId = null; await progressCallback({ percent: 1, message: `Backing up ${app.fqdn}. Waiting for lock` }); - await locks.wait(`${locks.TYPE_APP_BACKUP_PREFIX}${app.id}`); const startTime = new Date(); - if (options.snapshotOnly) { - await snapshotApp(app, progressCallback); - } else { - const tag = (new Date()).toISOString().replace(/[T.]/g, '-').replace(/[:Z]/g,''); - backupId = await backupAppWithTag(app, tag, options, progressCallback); - } - await locks.release(`${locks.TYPE_APP_BACKUP_PREFIX}${app.id}`); - + const backupId = await backupApp(app, options, progressCallback); await progressCallback({ percent: 100, message: `app ${app.fqdn} backup finished. Took ${(new Date() - startTime)/1000} seconds` }); return backupId; }