X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/549f4a1deddb41f6abbc493a660d9fb0976da91a..bfd5100c4e0bed1910875099937169f1b0c8ce7b:/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 405c8ef637..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,7 +224,9 @@ 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); @@ -277,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 +}