refactor(web): improved downgrade ux

This commit is contained in:
Zack Spear
2023-11-07 12:59:13 -08:00
committed by Zack Spear
parent 485fc2a3b6
commit 05ce165b83
6 changed files with 127 additions and 64 deletions

View File

@@ -16,8 +16,9 @@ $check = $notify['unraidos'] ? 0 : 1;
$restoreVersion = $restoreBranch = $restoreVersionReleaseDate = 'unknown';
$restoreExists = file_exists('/boot/previous/bzroot');
$restoreChangelogPath = '/boot/previous/changes.txt';
$restoreChangelogContent = file_get_contents($restoreChangelogPath);
$diagnosticsZip = htmlspecialchars(str_replace(' ', '_', strtolower($var['NAME'])));
$serverNameEscaped = htmlspecialchars(str_replace(' ', '_', strtolower($var['NAME'])));
if (file_exists($restoreChangelogPath)) {
exec("head -n4 $restoreChangelogPath", $rows);
@@ -37,57 +38,29 @@ if (file_exists($restoreChangelogPath)) {
?>
<script>
var diagnosticsFile = "";
var nchan_diagnostics = new NchanSubscriber('/sub/diagnostics', { subscriber: 'websocket' });
const args = {};
const nchan_diagnostics = new NchanSubscriber('/sub/diagnostics', { subscriber: 'websocket' });
const reportUrl = new URL('https://forums.unraid.net/bug-reports/');
let diagnosticsFile = '';
nchan_diagnostics.on('message', function(data) {
if (data == '_DONE_') {
nchan_diagnostics.stop();
$('.sweet-alert').hide('fast').removeClass('nchan');
swal.close();
$('div.spinner').show('slow');
location = diagnosticsFile;
setTimeout(cleanUp,4000);
setTimeout(() => {
cleanupDiagnostics();
reportAfterDiagnosticsDownload();
}, 2000);
} else if (data) {
let box = $('pre#swaltext');
box.html(box.html() + '<br>' + data).scrollTop(box[0].scrollHeight);
}
});
function downgradeAction() {
$.get('/plugins/dynamix.plugin.manager/include/Downgrade.php', { version: '<?=$restoreVersion?>' }, function() { refresh(); });
}
function downgrade() {
swal({
title: "_(Diagnostics)_",
text: "_(Please provide diagnostics when experiencing problems)_<br>_(Post these in the forums)_",
html: true,
type: 'warning',
showCancelButton: true,
confirmButtonText: "<?= _('Diagnostics') ?>",
cancelButtonText: "<?= _('Restore') ?>",
}, function(diag) {
if (diag) {
// get diagnostics and then downgrade
setTimeout(function() {
diagnostics(zipfile());
}, 250);
} else {
// downgrade immediately
downgradeAction();
}
});
}
function cleanUp() {
if (document.hasFocus()) {
$.post('/webGui/include/Download.php', { cmd: 'delete', file: diagnosticsFile }, downgradeAction());
} else {
setTimeout(cleanUp,2000);
}
}
function zipfile() {
function downloadDiagnostics() {
const tzoffset = (new Date()).getTimezoneOffset() * 60000; // offset in milliseconds
const localISOTime = (new Date(Date.now() - tzoffset));
const year = localISOTime.getFullYear();
@@ -96,12 +69,22 @@ function zipfile() {
const hours = String(localISOTime.getHours()).padStart(2, '0');
const minutes = String(localISOTime.getMinutes()).padStart(2, '0');
const dateOutput = `${year}${month}${day}_${hours}${minutes}`;
return '<?=$diagnosticsZip?>-diagnostics-' + dateOutput + '.zip';
}
function diagnostics(file) {
const zipName = '<?=$serverNameEscaped?>-diagnostics-' + dateOutput + '.zip';
nchan_diagnostics.start();
$.post('/webGui/include/Download.php', { cmd:'diag', file: file, anonymize: '' }, function(zip) {
if (zip) {
$.post(
'/webGui/include/Download.php',
{
cmd: 'diag',
file: zipName,
anonymize: '',
},
function(zip) {
if (!zip) {
return nchan_diagnostics.stop();
}
diagnosticsFile = zip;
swal({
title: "_(Downloading)_...",
@@ -112,9 +95,63 @@ function diagnostics(file) {
});
$('.sweet-alert').addClass('nchan');
$('button.confirm').prop('disabled', true);
} else {
nchan_diagnostics.stop();
},
);
}
function reportAfterDiagnosticsDownload() {
$('div.spinner').hide('fast');
swal({
title: "_(Open a bug report)_",
text: "_(Create a bug report on our forums with a description of the issue along with your diagsnotics)_",
html: true,
type: 'warning',
showCancelButton: true,
confirmButtonText: "<?= _('Create Bug Report') ?>",
cancelButtonText: "<?= _('Close') ?>",
}, function(confirm) {
if (!confirm) {
return false;
}
window.open(reportUrl, '_blank');
});
}
function cleanupDiagnostics() {
if (document.hasFocus()) {
return $.post('/webGui/include/Download.php', { cmd: 'delete', file: diagnosticsFile });
}
setTimeout(cleanupDiagnostics, 2000);
}
function startDowngrade() {
$('div.spinner').show('slow');
$.get(
'/plugins/dynamix.plugin.manager/include/Downgrade.php',
{
version: '<?=$restoreVersion?>',
},
function() {
refresh();
}
);
}
function confirmDowngrade() {
swal({
title: "_(Confirm Downgrade)_",
text: "<?= $restoreVersion ?><br>_(A reboot will be required)_",
html: true,
type: 'warning',
showCancelButton: true,
confirmButtonText: "<?= _('Confirm') ?>",
cancelButtonText: "<?= _('Cancel') ?>",
}, function(confirm) {
if (!confirm) {
return false;
}
startDowngrade();
});
}
</script>