diff --git a/src/backups.js b/src/backups.js
index b4e091041..669053e83 100644
--- a/src/backups.js
+++ b/src/backups.js
@@ -367,7 +367,7 @@ function runBackupTask(backupId, dataDir, callback) {
cp = null;
if (error && (error.code === null /* signal */ || (error.code !== 0 && error.code !== 50))) { // backuptask crashed
- return callback(new BackupsError(BackupsError.INTERNAL_ERROR, 'backuptask crashed'));
+ return callback(new BackupsError(BackupsError.INTERNAL_ERROR, 'Backuptask crashed'));
} else if (error && error.code === 50) { // exited with error
var result = safe.fs.readFileSync(paths.BACKUP_RESULT_FILE, 'utf8') || safe.error.message;
return callback(new BackupsError(BackupsError.EXTERNAL_ERROR, result));
@@ -635,7 +635,7 @@ function backupBoxAndApps(auditSource, callback) {
var processed = 0;
var step = 100/(allApps.length+1);
- progress.set(progress.BACKUP, step * processed, '');
+ progress.set(progress.BACKUP, Math.min(step * processed, 5), '');
async.mapSeries(allApps, function iterator(app, iteratorCallback) {
progress.set(progress.BACKUP, step * processed, 'Backing up ' + (app.altDomain || config.appFqdn(app.location)));
diff --git a/webadmin/src/views/settings.html b/webadmin/src/views/settings.html
index acc7ec719..15a78a3ad 100644
--- a/webadmin/src/views/settings.html
+++ b/webadmin/src/views/settings.html
@@ -374,15 +374,22 @@
-
+
+
+
+
+ {{ createBackup.detail || 'Syncing ...' }}
+
+
+
+
-
{{ createBackup.message }} {{ createBackup.detail }}
+
{{ createBackup.message }}
{{ createBackup.result }}
-
Backup Successful
diff --git a/webadmin/src/views/settings.js b/webadmin/src/views/settings.js
index 25a8d72e7..f80069eae 100644
--- a/webadmin/src/views/settings.js
+++ b/webadmin/src/views/settings.js
@@ -122,6 +122,31 @@ angular.module('Application').controller('SettingsController', ['$scope', '$loca
errorMessage: '',
result: '',
+ updateStatus: function () {
+ Client.progress(function (error, data) {
+ if (error) return window.setTimeout($scope.createBackup.updateStatus, 250);
+
+ // check if we are done
+ if (!data.backup || data.backup.percent >= 100) {
+ if (data.backup && data.backup.message) console.error('Backup message: ' + data.backup.message); // backup error message
+
+ $scope.createBackup.busy = false;
+ $scope.createBackup.message = '';
+ $scope.createBackup.detail = '';
+ $scope.createBackup.percent = 100; // indicates that 'result' is valid
+ $scope.createBackup.result = data.backup ? data.backup.message : null;
+
+ return fetchBackups();
+ }
+
+ $scope.createBackup.busy = true;
+ $scope.createBackup.percent = data.backup.percent;
+ $scope.createBackup.message = data.backup.message;
+ $scope.createBackup.detail = data.backup.detail;
+ window.setTimeout($scope.createBackup.updateStatus, 500);
+ });
+ },
+
doCreateBackup: function () {
$scope.createBackup.busy = true;
$scope.createBackup.percent = 0;
@@ -147,31 +172,7 @@ angular.module('Application').controller('SettingsController', ['$scope', '$loca
return;
}
- function checkIfDone() {
- Client.progress(function (error, data) {
- if (error) return window.setTimeout(checkIfDone, 250);
-
- // check if we are done
- if (!data.backup || data.backup.percent >= 100) {
- if (data.backup && data.backup.message) console.error('Backup message: ' + data.backup.message); // backup error message
-
- $scope.createBackup.busy = false;
- $scope.createBackup.message = '';
- $scope.createBackup.detail = '';
- $scope.createBackup.percent = 100; // indicates that 'result' is valid
- $scope.createBackup.result = data.backup ? data.backup.message : null;
-
- return fetchBackups();
- }
-
- $scope.createBackup.percent = data.backup.percent;
- $scope.createBackup.message = data.backup.message;
- $scope.createBackup.detail = data.backup.detail;
- window.setTimeout(checkIfDone, 500);
- });
- }
-
- checkIfDone();
+ $scope.createBackup.updateStatus();
});
}
};
@@ -637,6 +638,9 @@ angular.module('Application').controller('SettingsController', ['$scope', '$loca
getBackupConfig();
getAutoupdatePattern();
+ // show backup status
+ $scope.createBackup.updateStatus();
+
if ($scope.config.provider === 'caas') {
getPlans();