X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/a8d207b68612e2e6d6afcd16b0c68f98bbaab16e..31e1d10eb4a54b13f55b3c9638f46032be633ff9:/apps/workbench/app/assets/javascripts/log_viewer.js diff --git a/apps/workbench/app/assets/javascripts/log_viewer.js b/apps/workbench/app/assets/javascripts/log_viewer.js index e89ac83c11..0e12f9cfd4 100644 --- a/apps/workbench/app/assets/javascripts/log_viewer.js +++ b/apps/workbench/app/assets/javascripts/log_viewer.js @@ -10,11 +10,12 @@ 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 = []; + var count = logViewer.items.length; for (var a in lines) { var v = lines[a].match(re); if (v != null) { - var ts = new Date(Date.UTC(v[2], v[3], v[4], v[6], v[7], v[8])); + var ts = new Date(Date.UTC(v[2], v[3]-1, v[4], v[6], v[7], v[8])); v11 = v[11]; if (typeof v[11] === 'undefined') { @@ -41,7 +42,7 @@ function addToLogViewer(logViewer, lines, taskState) { } else if (/^srun: /.test(message) || /^slurmd/.test(message)) { type = "task-dispatch"; } else { - type = "task-output"; + type = "task-print"; } } else { var m; @@ -82,17 +83,18 @@ function addToLogViewer(logViewer, lines, taskState) { } items.push({ - id: logViewer.items.length, + id: count, ts: ts, timestamp: ts.toLocaleDateString() + " " + ts.toLocaleTimeString(), taskid: v11, node: node, slot: slot, - message: message, + message: message.replace(/&/g, '&').replace(//g, '>'), type: type }); + count += 1; } else { - console.log("Did not parse: " + lines[a]); + console.log("Did not parse line " + a + ": " + lines[a]); } } logViewer.add(items); @@ -181,13 +183,9 @@ function dumbPluralize(n, s, p) { function generateJobOverview(id, logViewer, taskState) { var html = ""; - var first = logViewer.items[1]; - var last = logViewer.items[logViewer.items.length-1]; - - { - html += "
"; - html += "Started at " + first.values().timestamp; - + if (logViewer.items.length > 2) { + var first = logViewer.items[1]; + var last = logViewer.items[logViewer.items.length-1]; var duration = (last.values().ts.getTime() - first.values().ts.getTime()) / 1000; var hours = 0; @@ -206,7 +204,9 @@ function generateJobOverview(id, logViewer, taskState) { var tcount = taskState.task_count; - html += ". Ran " + dumbPluralize(tcount, " task") + " over "; + html += "

"; + html += "Started at " + first.values().timestamp + ". "; + html += "Ran " + dumbPluralize(tcount, " task") + " over "; if (hours > 0) { html += dumbPluralize(hours, " hour"); } @@ -224,13 +224,17 @@ function generateJobOverview(id, logViewer, taskState) { html += " (" + dumbPluralize(taskState.failure_count, " failure") + ")"; html += ". Finished at " + last.values().timestamp + "."; - html += "

"; + html += "

"; + } else { + html = "

Job log is empty or failed to load.

"; } $(id).html(html); } function gotoPage(n, logViewer, page, id) { + if (n < 0) { return; } + if (n*page > logViewer.matchingItems.length) { return; } logViewer.page_offset = n; logViewer.show(n*page, page); } @@ -238,15 +242,16 @@ function gotoPage(n, logViewer, page, id) { function updatePaging(id, logViewer, page) { var p = ""; var i = logViewer.matchingItems.length; - for (var n = 0; (n*page) < i; n += 1) { + var n; + for (n = 0; (n*page) < i; n += 1) { if (n == logViewer.page_offset) { - p += " " + (n+1) + " "; + p += "" + (n+1) + " "; } else { - p += "" + (n+1) + " "; + p += "" + (n+1) + " "; } } $(id).html(p); - for (var n = 0; (n*page) < i; n += 1) { + for (n = 0; (n*page) < i; n += 1) { (function(n) { $(".log-viewer-page-" + n).on("click", function() { gotoPage(n, logViewer, page, id); @@ -254,6 +259,18 @@ function updatePaging(id, logViewer, page) { }); })(n); } + + if (logViewer.page_offset == 0) { + $(".log-viewer-page-up").addClass("text-muted"); + } else { + $(".log-viewer-page-up").removeClass("text-muted"); + } + + if (logViewer.page_offset == (n-1)) { + $(".log-viewer-page-down").addClass("text-muted"); + } else { + $(".log-viewer-page-down").removeClass("text-muted"); + } } function nextPage(logViewer, page, id) { @@ -262,4 +279,4 @@ function nextPage(logViewer, page, id) { function prevPage(logViewer, page, id) { gotoPage(logViewer.page_offset-1, logViewer, page, id); -} \ No newline at end of file +}