1
0
Fork 0
burlesque/server/static/app.js

89 lines
2.8 KiB
JavaScript

function loadStatus(callback) {
var xhr = new XMLHttpRequest(),
loading = document.getElementById('loading');
loading.setAttribute('style', 'display: block;');
xhr.open('GET', '/status', true);
xhr.onreadystatechange = function() {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
var queues = JSON.parse(xhr.responseText);
loading.setAttribute('style', 'display: none;');
callback(queues);
}
}
};
xhr.send(null);
}
function updateDashboard(queues) {
var queuesList = document.getElementById('queues'),
placeholder = document.getElementById('placeholder'),
fatThreshold = 100,
hotThreshold = 1000;
if (Object.keys(queues).length === 0) {
var td = placeholder.getElementsByTagName('td')[0];
td.innerHTML = 'Empty';
} else if (placeholder) {
queuesList.removeChild(placeholder);
}
for (queue in queues) {
var meta = queues[queue],
id = 'queue_' + queue,
tr = document.getElementById(id);
if (!tr) {
tr = document.createElement('tr');
tr.setAttribute('id', id);
var nameCol = document.createElement('td');
nameCol.appendChild(document.createTextNode(queue));
tr.appendChild(nameCol);
tr.appendChild(document.createElement('td'));
tr.appendChild(document.createElement('td'));
queuesList.appendChild(tr);
}
var cols = tr.getElementsByTagName('td'),
nameCol = cols[0],
messagesCol = cols[1],
subscriptionsCol = cols[2];
messagesCol.innerHTML = Number(meta.messages).toLocaleString();
subscriptionsCol.innerHTML = Number(meta.subscriptions).toLocaleString();
if (meta.messages > hotThreshold) {
nameCol.setAttribute('class', 'name hot');
messagesCol.setAttribute('class', 'messages hot');
} else if (meta.messages > fatThreshold) {
nameCol.setAttribute('class', 'name fat');
messagesCol.setAttribute('class', 'messages fat');
} else if (meta.messages === 0) {
messagesCol.setAttribute('class', 'messages zero');
} else {
nameCol.setAttribute('class', 'name');
messagesCol.setAttribute('class', 'messages');
}
if (meta.subscriptions === 0) {
subscriptionsCol.setAttribute('class', 'subscriptions zero');
} else {
subscriptionsCol.setAttribute('class', 'subscriptions');
}
}
}
function loop(timeout, func) {
func();
window.setTimeout(function(){
loop(timeout, func);
}, timeout);
}
loop(1000, function(){
loadStatus(updateDashboard);
});