function addToLogViewer(logViewer, lines, taskState) {
var re = /((\d\d\d\d)-(\d\d)-(\d\d))_((\d\d):(\d\d):(\d\d)) ([a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{15}) (\d+) (\d+)? (.*)/;
+
+ var items = [];
for (var a in lines) {
var v = lines[a].match(re);
if (v != null) {
taskState[v11].outcome = "success";
taskState[v11].runtime = Number(m[1]);
taskState.complete_count += 1;
- console.log(taskState[v11].runtime);
}
else if (m = /^failure \(\#\d+, (temporary|permanent)\) after (\d+) second/.exec(message)) {
taskState[v11].outcome = "failure";
if (m[1] == "permanent") {
taskState.incomplete_count += 1;
}
- console.log(taskState[v11].runtime);
}
else if (m = /^child \d+ started on ([^.]*)\.(\d+)/.exec(message)) {
taskState[v11].node = m[1];
if (taskState.nodes.indexOf(m[1], 0) == -1) {
taskState.nodes.push(m[1]);
}
- for (var i in logViewer.items) {
+ for (var i in items) {
if (i > 0) {
- var val = logViewer.items[i].values();
- if (val.taskid === v11) {
- val.node = m[1];
- val.slot = m[2];
- logViewer.items[i].values(val);
+ if (items[i].taskid === v11) {
+ items[i].node = m[1];
+ items[i].slot = m[2];
}
}
}
type = "crunch";
}
- logViewer.add({
+ items.push({
id: logViewer.items.length,
ts: ts,
timestamp: ts.toLocaleDateString() + " " + ts.toLocaleTimeString(),
message: message,
type: type
});
-
} else {
console.log("Did not parse: " + lines[a]);
}
}
- logViewer.update();
+ logViewer.add(items);
}
function sortById(a, b, opt) {
}
$(id).html(html);
+}
+
+function gotoPage(n, logViewer, page, id) {
+ logViewer.page_offset = n;
+ logViewer.show(n*page, page);
+}
+
+function updatePaging(id, logViewer, page) {
+ var p = "";
+ var i = logViewer.matchingItems.length;
+ for (var n = 0; (n*page) < i; n += 1) {
+ if (n == logViewer.page_offset) {
+ p += " " + (n+1) + " ";
+ } else {
+ p += "<a href=\"#\" class='log-viewer-page-" + n + "'>" + (n+1) + "</a> ";
+ }
+ }
+ $(id).html(p);
+ for (var n = 0; (n*page) < i; n += 1) {
+ (function(n) {
+ $(".log-viewer-page-" + n).on("click", function() {
+ gotoPage(n, logViewer, page, id);
+ return false;
+ });
+ })(n);
+ }
+}
+
+function nextPage(logViewer, page, id) {
+ gotoPage(logViewer.page_offset+1, logViewer, page, id);
+}
+
+function prevPage(logViewer, page, id) {
+ gotoPage(logViewer.page_offset-1, logViewer, page, id);
}
\ No newline at end of file
<script>
(function() {
+var pagesize = 100;
var logViewer = new List('log-viewer', {
valueNames: [ 'id', 'timestamp', 'taskid', 'message', 'type'],
- page: 10000,
+ page: pagesize
});
+logViewer.page_offset = 0;
+logViewer.on("updated", function() { updatePaging(".log-viewer-paging", logViewer, pagesize) } );
+$(".log-viewer-page-up").on("click", function() { prevPage(logViewer, pagesize, ".log-viewer-paging"); return false; });
+$(".log-viewer-page-down").on("click", function() { nextPage(logViewer, pagesize, ".log-viewer-paging"); return false; });
+
var taskState = newTaskState();
var makeFilter = function() {
</div>
+ <div style="font-size: 18px">
+ <a href="#" class="log-viewer-page-up"><span class='glyphicon glyphicon-arrow-up'></span></a>
+ <span class="log-viewer-paging"></span>
+ <a href="#" class="log-viewer-page-down"><span class='glyphicon glyphicon-arrow-down'></span></a>
+ </div>
+
<table class="log-viewer-table">
<thead>
<tr>
</tbody>
</table>
+
+ <div style="font-size: 18px">
+ <a href="#" class="log-viewer-page-up"><span class='glyphicon glyphicon-arrow-up'></span></a>
+ <span class="log-viewer-paging"></span>
+ <a href="#" class="log-viewer-page-down"><span class='glyphicon glyphicon-arrow-down'></span></a>
+ </div>
+
+
</div>
<% if !@object.log %>