summaryrefslogtreecommitdiffstats
path: root/modules-available/dnbd3
diff options
context:
space:
mode:
authorSimon Rettberg2018-03-29 10:47:58 +0200
committerSimon Rettberg2018-03-29 10:47:58 +0200
commitaeb96b5b7019b2f0bc40ed699dc2877a8729a06b (patch)
tree9b7a24770cfad934489d1c5f23f136b17a4c41d4 /modules-available/dnbd3
parent[dnbd3] Clarify firewall setting (diff)
downloadslx-admin-aeb96b5b7019b2f0bc40ed699dc2877a8729a06b.tar.gz
slx-admin-aeb96b5b7019b2f0bc40ed699dc2877a8729a06b.tar.xz
slx-admin-aeb96b5b7019b2f0bc40ed699dc2877a8729a06b.zip
[dnbd3] Fix dnbd3 reboot status feedback
Closes #3276
Diffstat (limited to 'modules-available/dnbd3')
-rw-r--r--modules-available/dnbd3/page.inc.php37
-rw-r--r--modules-available/dnbd3/templates/page-serverlist.html24
2 files changed, 43 insertions, 18 deletions
diff --git a/modules-available/dnbd3/page.inc.php b/modules-available/dnbd3/page.inc.php
index 6e4f8885..f30abfe1 100644
--- a/modules-available/dnbd3/page.inc.php
+++ b/modules-available/dnbd3/page.inc.php
@@ -490,24 +490,37 @@ class Page_Dnbd3 extends Page
if (!isset($server['machineuuid'])) {
die('Not automatic server.');
}
- $this->assertPermission($server);
- if (!Module::isAvailable('rebootcontrol')) {
- die('No rebootcontrol');
- }
$uuid = $server['machineuuid'];
- $task = RebootControl::reboot([ $uuid ]);
+ $task = Request::any('taskid', false, 'string');
if ($task === false) {
- die('Taskmanager unreachable');
+ $this->assertPermission($server);
+ if (!Module::isAvailable('rebootcontrol')) {
+ die('No rebootcontrol');
+ }
+ $task = RebootControl::reboot([$uuid]);
+ if ($task === false) {
+ die('Taskmanager unreachable');
+ }
}
- $task = Taskmanager::waitComplete($task, 2000);
- if (is_array($task) && isset($task['data']) && isset($task['data']['clientStatus']) && isset($task['data']['clientStatus'][$uuid])) {
- $status = $task['data']['clientStatus'][$uuid];
+ $task = Taskmanager::waitComplete($task, 1000);
+ if (is_array($task) && isset($task['data']['clientStatus'][$uuid])) {
+ $status = [
+ 'rebootStatus' => $task['data']['clientStatus'][$uuid],
+ 'taskStatus' => $task['statusCode'],
+ 'taskId' => $task['id'],
+ ];
if (!empty($task['data']['error'])) {
- $status .= "\n --- \n" . $task['data']['error'];
+ $status['error'] = $task['data']['error'];
}
- die($status);
+ } else {
+ $status = [
+ 'rebootStatus' => 'FAILURE',
+ 'taskStatus' => 'FAILURE',
+ 'taskId' => $task['id'],
+ ];
}
- die('Unknown :-(');
+ Header('Content-Type: application/json; charset=utf-8');
+ die(json_encode($status));
}
}
diff --git a/modules-available/dnbd3/templates/page-serverlist.html b/modules-available/dnbd3/templates/page-serverlist.html
index a51e9723..65e4d6ea 100644
--- a/modules-available/dnbd3/templates/page-serverlist.html
+++ b/modules-available/dnbd3/templates/page-serverlist.html
@@ -389,20 +389,32 @@ document.addEventListener('DOMContentLoaded', function () {
}
$t.html('<span class="glyphicon glyphicon-refresh slx-rotation"></span>');
var sid = rebootServerId;
+ var taskId = false;
+ var lastText;
var query = function() {
+ data = {"token": TOKEN, "action": "reboot", "server": sid};
+ if (taskId !== false) data['taskid'] = taskId;
$.ajax({
- "data": {"token": TOKEN, "action": "reboot", "server": sid},
+ "data": data,
"method": "POST",
- "dataType": "text",
+ "dataType": "json",
"url": "?do=dnbd3"
}).done(function (data) {
- $t.text(data);
- if (data.indexOf('REBOOTING') !== -1 || data.indexOf('CONNECTING') !== -1) {
+ if (!data || !data.taskId) return;
+ if (taskId === false) taskId = data.taskId;
+ if (data.error) data.rebootStatus += ' (' + data.error + ')';
+ if (data.rebootStatus !== lastText) {
+ $t.empty().text(data.rebootStatus);
+ }
+ if (data.taskStatus === 'TASK_PROCESSING' || data.taskStatus === 'TASK_WAITING') {
setTimeout(query, 5000);
- $t.append($('<span class="glyphicon glyphicon-refresh slx-rotation"></span>'));
+ if (data.rebootStatus !== lastText) {
+ $t.append($('<span class="glyphicon glyphicon-refresh slx-rotation"></span>'));
+ }
}
+ lastText = data.rebootStatus;
}).fail(function () {
- $.text('Failed');
+ $t.text('Failed');
});
};
query();