diff --git a/src/views/backups.html b/src/views/backups.html index de0587150..5181390af 100644 --- a/src/views/backups.html +++ b/src/views/backups.html @@ -15,6 +15,39 @@ + + + +
+

Schedule and Retention

+
+ +
+

Cloudron makes a complete backup of your system based on this scheduled interval and keeps backups with the specified retention policy.

+
+
+ Interval +
+
+ {{ prettyBackupInterval(backupConfig.intervalSecs) }} +
+
+
+
+ Retention Policy +
+
+ {{ prettyBackupRetentionPolicy(backupConfig.retentionPolicy) }} +
+
+
+
+
+ +
+
+
+

Listing

diff --git a/src/views/backups.js b/src/views/backups.js index c0fd1f235..661f7cf03 100644 --- a/src/views/backups.js +++ b/src/views/backups.js @@ -123,6 +123,16 @@ angular.module('Application').controller('BackupsController', ['$scope', '$locat } }; + $scope.prettyBackupInterval = function (interval) { + var tmp = $scope.intervalTimes.find(function (i) { return i.value === interval; }); + return tmp ? tmp.name : ''; + }; + + $scope.prettyBackupRetentionPolicy = function (retentionPolicy) { + var tmp = $scope.retentionPolicies.find(function (p) { return angular.equals(p.value, retentionPolicy); }); + return tmp ? tmp.name : ''; + }; + $scope.createBackup = { busy: false, percent: 0, @@ -262,6 +272,53 @@ angular.module('Application').controller('BackupsController', ['$scope', '$locat download('cloudron_backup.json', JSON.stringify(tmp)); }; + $scope.configureScheduleAndRetention = { + busy: false, + error: {}, + + retentionPolicy: $scope.retentionPolicies[0], + intervalSecs: 24 * 60 * 60, + + show: function () { + $scope.configureScheduleAndRetention.error = {}; + $scope.configureScheduleAndRetention.busy = false; + $scope.configureScheduleAndRetention.retentionPolicy = $scope.retentionPolicies.find(function (x) { return angular.equals(x.value, $scope.backupConfig.retentionPolicy); }).value; + $scope.configureScheduleAndRetention.intervalSecs = $scope.backupConfig.intervalSecs; + + $('#configureScheduleAndRetentionModal').modal('show'); + }, + + submit: function () { + $scope.configureScheduleAndRetention.error = {}; + $scope.configureScheduleAndRetention.busy = true; + + // start with the full backupConfig since the api requires all fields + var backupConfig = $scope.backupConfig; + backupConfig.retentionPolicy = $scope.configureScheduleAndRetention.retentionPolicy; + backupConfig.intervalSecs = $scope.configureScheduleAndRetention.intervalSecs; + + Client.setBackupConfig(backupConfig, function (error) { + $scope.configureScheduleAndRetention.busy = false; + + if (error) { + if (error.statusCode === 424) { + $scope.configureScheduleAndRetention.error.generic = error.message; + } else if (error.statusCode === 400) { + $scope.configureScheduleAndRetention.error.generic = error.message; + } else { + console.error('Unable to change schedule or retention.', error); + } + + return; + } + + $('#configureScheduleAndRetentionModal').modal('hide'); + + getBackupConfig(); + }); + } + }; + $scope.configureBackup = { busy: false, error: {}, @@ -275,8 +332,6 @@ angular.module('Application').controller('BackupsController', ['$scope', '$locat region: '', endpoint: '', backupFolder: '', - retentionPolicy: $scope.retentionPolicies[0], - intervalSecs: 24 * 60 * 60, acceptSelfSignedCerts: false, useHardlinks: true, externalDisk: false, @@ -319,8 +374,6 @@ angular.module('Application').controller('BackupsController', ['$scope', '$locat $scope.configureBackup.endpoint = $scope.backupConfig.endpoint; $scope.configureBackup.password = $scope.backupConfig.password; $scope.configureBackup.backupFolder = $scope.backupConfig.backupFolder; - $scope.configureBackup.retentionPolicy = $scope.retentionPolicies.find(function (x) { return angular.equals(x.value, $scope.backupConfig.retentionPolicy); }).value; - $scope.configureBackup.intervalSecs = $scope.backupConfig.intervalSecs; $scope.configureBackup.format = $scope.backupConfig.format; $scope.configureBackup.acceptSelfSignedCerts = !!$scope.backupConfig.acceptSelfSignedCerts; $scope.configureBackup.useHardlinks = !$scope.backupConfig.noHardlinks; @@ -335,9 +388,10 @@ angular.module('Application').controller('BackupsController', ['$scope', '$locat var backupConfig = { provider: $scope.configureBackup.provider, - retentionPolicy: $scope.configureBackup.retentionPolicy, - intervalSecs: $scope.configureBackup.intervalSecs, - format: $scope.configureBackup.format + format: $scope.configureBackup.format, + // required for api call to provide all fields + intervalSecs: $scope.backupConfig.intervalSecs, + retentionPolicy: $scope.backupConfig.retentionPolicy }; if ($scope.configureBackup.password) backupConfig.password = $scope.configureBackup.password;