diff --git a/domain-server/resources/web/content/js/content.js b/domain-server/resources/web/content/js/content.js
index 1e5b6ac131..69a8c93f82 100644
--- a/domain-server/resources/web/content/js/content.js
+++ b/domain-server/resources/web/content/js/content.js
@@ -2,10 +2,19 @@ $(document).ready(function(){
var RESTORE_SETTINGS_UPLOAD_ID = 'restore-settings-button';
var RESTORE_SETTINGS_FILE_ID = 'restore-settings-file';
+ var UPLOAD_CONTENT_ALLOWED_DIV_ID = 'upload-content-allowed';
+ var UPLOAD_CONTENT_RECOVERING_DIV_ID = 'upload-content-recovering';
+
+ function progressBarHTML(extraClass, label) {
+ var html = "
";
+ html += "
";
+ return html;
+ }
function setupBackupUpload() {
// construct the HTML needed for the settings backup panel
- var html = "";
$('#' + Settings.UPLOAD_CONTENT_BACKUP_PANEL_ID + ' .panel-body').html(html);
}
@@ -71,6 +83,7 @@ $(document).ready(function(){
var MANUAL_ARCHIVES_TABLE_ID = 'manual-archives-table';
var MANUAL_ARCHIVES_TBODY_ID = 'manual-archives-tbody';
var AUTO_ARCHIVES_SETTINGS_LINK_ID = 'auto-archives-settings-link';
+ var ACTION_MENU_CLASS = 'action-menu';
var automaticBackups = [];
var manualBackups = [];
@@ -84,7 +97,9 @@ $(document).ready(function(){
html += "";
html += "";
- var backups_table_head = "Archive Name | Archive Date | Actions |
";
+ var backups_table_head = "Archive Name | Archive Date | "
+ + " | "
+ + "
";
html += backups_table_head;
html += "
";
@@ -105,7 +120,7 @@ $(document).ready(function(){
var BACKUP_DOWNLOAD_LINK_CLASS = 'download-backup';
var BACKUP_DELETE_LINK_CLASS = 'delete-backup';
- function reloadLatestBackups() {
+ function reloadBackupInformation() {
// make a GET request to get backup information to populate the table
$.ajax({
url: '/api/backups',
@@ -125,7 +140,7 @@ $(document).ready(function(){
return ""
+ "" + backup.name + " | "
+ moment(backup.createdAtMillis).format('lll')
- + " | "
+ + " | | ";
}
+ function updateProgressBars($progressBar, value) {
+ $progressBar.attr('aria-valuenow', value).attr('style', 'width: ' + value + '%');
+ $progressBar.find('.sr-only').html(data.status.recoveryProgress + "% Complete");
+ }
+
+ function updateOrAddTableRow(backup, tableBodyID) {
+ // check for a backup with this ID
+ var $backupRow = $("tr[data-backup-id='" + backup.id + "']");
+
+ if ($backupRow.length == 0) {
+ // create a new row and then add it to the table
+ $backupRow = $(createBackupTableRow(backup));
+ $('#' + tableBodyID).append($backupRow);
+ }
+
+ // update the row status column depending on if it is available or recovering
+ if (!backup.isAvailable) {
+ // add a progress bar to the status row for availability
+ $backupRow.find('td.backup-status').html(progressBarHTML('availability', 'Archiving'));
+
+ // set the value of the progress bar based on availability progress
+ updateProgressBars($backupRow.find('.progress-bar'), backup.availabilityProgress);
+ } else if (backup.id == data.status.recoveringBackupId) {
+ // add a progress bar to the status row for recovery
+ $backupRow.find('td.backup-status').html(progressBarHTML('recovery', 'Restoring'));
+ } else {
+ // no special status for this row, use an empty status column
+ $backupRow.find('td.backup-status').html('');
+ }
+
+ $backupRow.find('td.' + ACTION_MENU_CLASS + ' .dropdown').toggle(backup.isAvailable);
+ }
+
var automaticRows = "";
if (automaticBackups.length > 0) {
for (var backupIndex in automaticBackups) {
- // create a table row for this backup and add it to the rows we'll put in the table body
- automaticRows += createBackupTableRow(automaticBackups[backupIndex]);
+ updateOrAddTableRow(automaticBackups[backupIndex], AUTOMATIC_ARCHIVES_TBODY_ID)
}
}
- $('#' + AUTOMATIC_ARCHIVES_TBODY_ID).html(automaticRows);
-
- var manualRows = "";
-
if (manualBackups.length > 0) {
for (var backupIndex in manualBackups) {
- // create a table row for this backup and add it to the rows we'll put in the table body
- manualRows += createBackupTableRow(manualBackups[backupIndex]);
+ updateOrAddTableRow(manualBackups[backupIndex], MANUAL_ARCHIVES_TBODY_ID)
}
}
- $('#' + MANUAL_ARCHIVES_TBODY_ID).html(manualRows);
+ // check if the restore action on all rows should be enabled or disabled
+ $('.' + BACKUP_RESTORE_LINK_CLASS).parent().toggleClass('disabled', data.status.isRecovering);
+
+ // hide or show the manual content upload file and button depending on our recovering status
+ $('#' + UPLOAD_CONTENT_ALLOWED_DIV_ID).toggle(!data.status.isRecovering);
+ $('#' + UPLOAD_CONTENT_RECOVERING_DIV_ID).toggle(data.status.isRecovering);
+
+ // update the progress bars for current restore status
+ if (data.status.isRecovering) {
+ updateProgressBars($('.recovery.progress-bar'), data.status.recoveryProgress);
+ }
// tell bootstrap sortable to update for the new rows
$.bootstrapSortable({ applyLast: true });
@@ -247,7 +299,7 @@ $(document).ready(function(){
}).always(function(){
// reload the list of content archives in case we deleted a backup
// or it's no longer an available backup for some other reason
- reloadLatestBackups();
+ reloadBackupInformation();
});
}
)
@@ -306,7 +358,7 @@ $(document).ready(function(){
}).done(function(data) {
// since we successfully setup a new content archive, reload the table of archives
// which should show that this archive is pending creation
- reloadLatestBackups();
+ reloadBackupInformation();
}).fail(function(jqXHR, textStatus, errorThrown) {
});
@@ -322,6 +374,9 @@ $(document).ready(function(){
setupContentArchives();
// load the latest backups immediately
- reloadLatestBackups();
+ reloadBackupInformation();
+
+ // setup a timer to reload them every 5 seconds
+ setTimeout(reloadBackupInformation(), 5000);
};
});
diff --git a/domain-server/resources/web/css/style.css b/domain-server/resources/web/css/style.css
index 2bcc870ecf..62f442584e 100644
--- a/domain-server/resources/web/css/style.css
+++ b/domain-server/resources/web/css/style.css
@@ -466,6 +466,11 @@ tr.gray-tr {
background-color: #f5f5f5;
}
+table .action-menu {
+ text-align: right;
+ width: 90px;
+}
+
.dropdown-toggle span.glyphicon-option-vertical {
font-size: 110%;
cursor: pointer;
diff --git a/domain-server/resources/web/js/domain-server.js b/domain-server/resources/web/js/domain-server.js
index 2c12e2683a..ed9559b6e9 100644
--- a/domain-server/resources/web/js/domain-server.js
+++ b/domain-server/resources/web/js/domain-server.js
@@ -62,7 +62,7 @@ $(document).ready(function(){
},
1: {
html_id: Settings.UPLOAD_CONTENT_BACKUP_PANEL_ID,
- label: 'Upload Content'
+ label: 'Upload Content Archive'
}
};