+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: AGPL-3.0
+
function newTaskState() {
return {"complete_count": 0,
"failure_count": 0,
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') {
} else if (/^srun: /.test(message) || /^slurmd/.test(message)) {
type = "task-dispatch";
} else {
- type = "task-output";
+ type = "task-print";
}
} else {
var m;
}
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, '<').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);
function generateJobOverview(id, logViewer, taskState) {
var html = "";
- var first = logViewer.items[1];
- var last = logViewer.items[logViewer.items.length-1];
-
- {
- html += "<div>";
- 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;
var tcount = taskState.task_count;
- html += ". Ran " + dumbPluralize(tcount, " task") + " over ";
+ html += "<p>";
+ html += "Started at " + first.values().timestamp + ". ";
+ html += "Ran " + dumbPluralize(tcount, " task") + " over ";
if (hours > 0) {
html += dumbPluralize(hours, " hour");
}
html += " (" + dumbPluralize(taskState.failure_count, " failure") + ")";
html += ". Finished at " + last.values().timestamp + ".";
- html += "</div>";
+ html += "</p>";
+ } else {
+ html = "<p>Job log is empty or failed to load.</p>";
}
$(id).html(html);
function prevPage(logViewer, page, id) {
gotoPage(logViewer.page_offset-1, logViewer, page, id);
-}
\ No newline at end of file
+}