blob: 8d55030797b86e302188f49287392cf51a065be2 [file] [log] [blame]
<!DOCTYPE HTML>
<html>
<body>
<h2>Deployment</h2>
<section>
<p>Deployment ID <span id="id">Loading...</span></p>
<p>Status <span id="status">Loading...</span></p>
<p>Actions Completed <span id="actions">Loading...</span></p>
<p><div id="progress"></div></p>
<form class="form">
<p>
<button id="expand" onClick="return showHide()">More details...</button>
<button id="abort" onClick="return confirmAbort()">Abort</button>
</p>
</form>
</section>
<div id="details" style="display:none;"></div>
<script type="text/javascript">
function showHide() {
var style = $('#details').is(':visible');
if(style == false) {
$('#expand').html('Less details...');
} else {
$('#expand').html('More details...');
}
$('#details').toggle();
return false;
}
function render(command) {
var cmd = $.getUrlVar('cmd');
$('#id').text(cmd);
$('#status').text(command['status']);
var buffer = [];
var i = 0;
buffer[i++]=command['completedActions'];
buffer[i++]=' of ';
buffer[i++]=command['totalActions'];
$('#actions').text(buffer.join(""));
var progress = command['completedActions']/command['totalActions']*100;
$('#progress').progressbar({ value: progress });
buffer = [];
i = 0;
var actionEntries;
try {
if(command['actionEntries'].constructor.toString().indexOf('Array') == -1) {
actionEntries = [];
actionEntries[0] = command['actionEntries'];
} else {
actionEntries = command['actionEntries'];
}
for(var action in actionEntries) {
buffer[i++]=renderAction(actionEntries[action]['action']);
try {
buffer[i++]=renderHostStatus(actionEntries[action]['hostStatus']);
} catch(err) {
// Protect rendering code from missing data.
}
}
} catch(err2) {
// Protect rendering code from missing data.
}
$('#details').html(buffer.join(""));
}
function renderAction(action) {
var buffer = [];
var i = 0;
if(action['@type']=='scriptAction') {
buffer[i++] = renderScriptAction(action);
} else if(action['@type']=='packageAction') {
buffer[i++] = renderPackageAction(action);
} else if(action['@type']=='daemonAction') {
buffer[i++] = renderDaemonAction(action);
}
return buffer.join("");
}
function renderScriptAction(action) {
var buffer = [];
var i = 0;
buffer[i++] = "<p>Action: ";
buffer[i++] = action['script'];
buffer[i++] = " ";
if (action['parameters'].constructor.toString().indexOf('Array') == -1) {
buffer[i++] = action['parameters'];
} else {
buffer[i++] = action['parameters'].join(" ");
}
buffer[i++] = "</p>";
return buffer.join("");
}
function renderPackageAction(action) {
var buffer = [];
var i = 0;
buffer[i++] = "<p>Action: ";
buffer[i++] = action['actionType'];
buffer[i++] = " ";
var list = action['packages'];
if(list.constructor.toString().indexOf('Array') == -1) {
buffer[i++] = action['packages']['name'];
} else {
for(var x in list) {
buffer[i++] = list[x]['name'];
buffer[i++] = " ";
}
}
buffer[i++] = "</p>";
return buffer.join("");
}
function renderDaemonAction(action) {
console.log(action);
var buffer = [];
var i = 0;
buffer[i++] = "<p>Action: ";
buffer[i++] = action['actionType'];
buffer[i++] = " ";
buffer[i++] = action['daemon'];
buffer[i++] = "</p>";
return buffer.join("");
}
function renderHostStatus(hostStatus) {
var buffer = [];
var i = 0;
if (hostStatus.constructor.toString().indexOf('Array') == -1) {
buffer[i++] = "<span class='block'>"+hostStatus['host']+" "+hostStatus['status']+"</span> ";
} else {
for(var hs in hostStatus) {
buffer[i++] = "<span class='block'>"+hostStatus[hs]['host']+" "+hostStatus[hs]['status']+"</span> ";
}
}
return buffer.join("");
}
function checkStatus() {
var cmd = $.getUrlVar('cmd');
jQuery.getJSON('/v1/command/status/'+cmd,
function(command) {
render(command);
if(command['status']!='SUCCEEDED' &&
command['status']!='FAILED') {
var timeout = setTimeout("checkStatus()",3000);
}
}
)
.error(
function() {
var command = [];
command['status'] = "Unknown";
command['completedActions'] = "0";
command['totalActions'] = "0";
render(command);
var timeout = setTimeout("checkStatus()",3000);
}
);
}
function confirmAbort() {
var question = "Abort deployment "+$.getUrlVar('cmd')+"?";
if(confirm(question)) {
abortCommand($.getUrlVar('cmd'));
}
return false;
}
function abortCommand(cmd) {
$.ajax({
type: 'DELETE',
url: '/v1/controller/abort/'+cmd,
success: function(data) {
console.log(data);
},
dataType:'json'
});
}
$.extend({
getUrlVars: function(){
var vars = [], hash;
var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
for(var i = 0; i < hashes.length; i++) {
hash = hashes[i].split('=');
vars.push(hash[0]);
vars[hash[0]] = hash[1];
}
return vars;
},
getUrlVar: function(name){
return $.getUrlVars()[name];
}
});
$(document).ready(function() {
checkStatus();
});
</script>
</body>
</html>