diff --git a/dashboard/src/js/client.js b/dashboard/src/js/client.js index 5deae0e60..56037e4db 100644 --- a/dashboard/src/js/client.js +++ b/dashboard/src/js/client.js @@ -1008,6 +1008,14 @@ angular.module('Application').service('Client', ['$http', '$interval', '$timeout }); }; + Client.prototype.getBackupMountStatus = function (callback) { + get('/api/v1/backups/mount_status', null, function (error, data, status) { + if (error) return callback(error); + if (status !== 200) return callback(new ClientError(status, data)); + + callback(null, data); + }); + }; Client.prototype.remountBackupStorage = function (callback) { post('/api/v1/backups/remount', {}, null, function (error, data, status) { if (error) return callback(error); diff --git a/dashboard/src/views/backups.html b/dashboard/src/views/backups.html index d869a5d88..cab689190 100644 --- a/dashboard/src/views/backups.html +++ b/dashboard/src/views/backups.html @@ -468,7 +468,7 @@
{{ backupConfig.backupFolder }} - + {{ backupConfig.mountOptions.diskPath || backupConfig.mountPoint }}{{ (backupConfig.prefix ? '/' : '') + backupConfig.prefix }} {{ backupConfig.mountOptions.host }}:{{ backupConfig.mountOptions.remoteDir }}{{ (backupConfig.prefix ? '/' : '') + backupConfig.prefix }} diff --git a/dashboard/src/views/backups.js b/dashboard/src/views/backups.js index fafd6d7c0..462932c62 100644 --- a/dashboard/src/views/backups.js +++ b/dashboard/src/views/backups.js @@ -12,7 +12,7 @@ angular.module('Application').controller('BackupsController', ['$scope', '$locat $scope.config = Client.getConfig(); $scope.user = Client.getUserInfo(); $scope.memory = null; // { memory, swap } - + $scope.mountStatus = null; // { state, message } $scope.manualBackupApps = []; $scope.backupConfig = {}; @@ -727,6 +727,12 @@ angular.module('Application').controller('BackupsController', ['$scope', '$locat if (error) return console.error(error); $scope.backupConfig = backupConfig; + + Client.getBackupMountStatus(function (error, mountStatus) { + if (error) return console.error(error); + + $scope.mountStatus = mountStatus; + }); }); } diff --git a/src/backups.js b/src/backups.js index bb7679c10..f81b43e56 100644 --- a/src/backups.js +++ b/src/backups.js @@ -27,6 +27,7 @@ exports = module.exports = { testProviderConfig, remount, + getMountStatus, BACKUP_IDENTIFIER_BOX: 'box', BACKUP_IDENTIFIER_MAIL: 'mail', @@ -50,6 +51,7 @@ const assert = require('assert'), eventlog = require('./eventlog.js'), hat = require('./hat.js'), locker = require('./locker.js'), + mounts = require('./mounts.js'), path = require('path'), paths = require('./paths.js'), safe = require('safetydance'), @@ -361,3 +363,18 @@ async function remount(auditSource) { await storage.api(backupConfig.provider).remount(backupConfig); } + +async function getMountStatus() { + const backupConfig = await settings.getBackupConfig(); + + let hostPath; + if (mounts.isManagedProvider(backupConfig.provider)) { + hostPath = paths.MANAGED_BACKUP_MOUNT_DIR; + } else if (backupConfig.provider === 'mountpoint') { + hostPath = backupConfig.mountPoint; + } else if (backupConfig.provider === 'filesystem') { + hostPath = backupConfig.backupFolder; + } + + return await mounts.getStatus(backupConfig.provider, hostPath); // { state, message } +} diff --git a/src/routes/backups.js b/src/routes/backups.js index a42987a56..a4d0c413b 100644 --- a/src/routes/backups.js +++ b/src/routes/backups.js @@ -6,6 +6,7 @@ exports = module.exports = { create, cleanup, remount, + getMountStatus }; const assert = require('assert'), @@ -63,3 +64,9 @@ async function remount(req, res, next) { next(new HttpSuccess(202, {})); } + +async function getMountStatus(req, res, next) { + const [error, mountStatus] = await safe(backups.getMountStatus()); + if (error) return next(BoxError.toHttpError(error)); + next(new HttpSuccess(200, mountStatus)); +} diff --git a/src/server.js b/src/server.js index fa9531f44..806edf26a 100644 --- a/src/server.js +++ b/src/server.js @@ -145,6 +145,7 @@ async function initializeExpressSync() { // backup routes router.get ('/api/v1/backups', token, authorizeAdmin, routes.backups.list); + router.get ('/api/v1/backups/mount_status', token, authorizeAdmin, routes.backups.getMountStatus); router.post('/api/v1/backups/create', token, authorizeAdmin, routes.backups.create); router.post('/api/v1/backups/cleanup', json, token, authorizeAdmin, routes.backups.cleanup); router.post('/api/v1/backups/remount', json, token, authorizeAdmin, routes.backups.remount); diff --git a/src/settings.js b/src/settings.js index a25298d18..c9a98a2c1 100644 --- a/src/settings.js +++ b/src/settings.js @@ -406,13 +406,7 @@ async function getBackupConfig() { const value = await get(exports.BACKUP_CONFIG_KEY); if (value === null) return gDefaults[exports.BACKUP_CONFIG_KEY]; - const backupConfig = JSON.parse(value); // provider, token, password, region, prefix, bucket - - if (mounts.isManagedProvider(backupConfig.provider) || backupConfig.provider === 'mountpoint') { - const hostPath = mounts.isManagedProvider(backupConfig.provider) ? paths.MANAGED_BACKUP_MOUNT_DIR : backupConfig.mountPoint; - backupConfig.mountStatus = await mounts.getStatus(backupConfig.provider, hostPath); // { state, message } - } - + const backupConfig = JSON.parse(value); // { provider, token, password, region, prefix, bucket } return backupConfig; }