Fix sometimes slow server-console logs.

This commit is contained in:
Atlante45 2016-03-24 17:56:11 -07:00
parent caf2595e13
commit 76c30d9014

View file

@ -44,6 +44,14 @@ ready = function() {
var domainServer = remote.getGlobal('domainServer'); var domainServer = remote.getGlobal('domainServer');
var acMonitor = remote.getGlobal('acMonitor'); var acMonitor = remote.getGlobal('acMonitor');
var pendingLines = {
'ds': new Array(),
'ac': new Array()
};
var UPDATE_INTERVAL = 16; // Update log at ~60 fps
var interval = setInterval(flushPendingLines, UPDATE_INTERVAL);
var logWatchers = { var logWatchers = {
'ds': { 'ds': {
}, },
@ -83,7 +91,7 @@ ready = function() {
var logTail = new Tail(cleanFilePath, '\n', { start: start, interval: 500 }); var logTail = new Tail(cleanFilePath, '\n', { start: start, interval: 500 });
logTail.on('line', function(msg) { logTail.on('line', function(msg) {
appendLogMessage(msg, stream); pendingLines[stream].push(msg);
}); });
logTail.on('error', function(error) { logTail.on('error', function(error) {
@ -107,6 +115,7 @@ ready = function() {
} }
window.onbeforeunload = function(e) { window.onbeforeunload = function(e) {
clearInterval(interval);
domainServer.removeListener('logs-updated', updateLogFiles); domainServer.removeListener('logs-updated', updateLogFiles);
acMonitor.removeListener('logs-updated', updateLogFiles); acMonitor.removeListener('logs-updated', updateLogFiles);
}; };
@ -164,14 +173,23 @@ ready = function() {
return !filter || message.toLowerCase().indexOf(filter) >= 0; return !filter || message.toLowerCase().indexOf(filter) >= 0;
} }
function appendLogMessage(msg, name) { function appendLogMessages(name) {
var array = pendingLines[name];
if (array.length === 0) {
return;
}
if (array.length > maxLogLines) {
array = array.slice(-maxLogLines);
}
console.log(name, array.length);
var id = name == "ds" ? "domain-server" : "assignment-client"; var id = name == "ds" ? "domain-server" : "assignment-client";
var $pidLog = $('#' + id); var $pidLog = $('#' + id);
var size = ++tabStates[id].size; var size = tabStates[id].size + array.length;
if (size > maxLogLines) { if (size > maxLogLines) {
$pidLog.find('div.log-line:first').remove(); $pidLog.find('div.log-line:lt(' + (size - maxLogLines) + ')').remove();
removed = true;
} }
var wasAtBottom = false; var wasAtBottom = false;
@ -179,17 +197,25 @@ ready = function() {
wasAtBottom = $pidLog[0].scrollTop >= ($pidLog[0].scrollHeight - $pidLog.height()); wasAtBottom = $pidLog[0].scrollTop >= ($pidLog[0].scrollHeight - $pidLog.height());
} }
var $logLine = $('<div class="log-line">').text(msg); for (line in array) {
if (!shouldDisplayLogMessage(msg)) { var $logLine = $('<div class="log-line">').text(array[line]);
$logLine.hide(); if (!shouldDisplayLogMessage(array[line])) {
$logLine.hide();
}
$pidLog.append($logLine);
} }
$pidLog.append($logLine); delete pendingLines[name];
pendingLines[name] = new Array();
if (wasAtBottom) { if (wasAtBottom) {
$pidLog.scrollTop($pidLog[0].scrollHeight); $pidLog.scrollTop($pidLog[0].scrollHeight);
} }
}
function flushPendingLines() {
appendLogMessages('ds');
appendLogMessages('ac');
} }
// handle filtering of table rows on input change // handle filtering of table rows on input change