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;
}