9514: Refactor job log related bit out of log_viewer.js into job_log_viewer.js
[arvados.git] / apps / workbench / app / assets / javascripts / log_viewer.js
index e152c6f854dddd96d7c1071acc8bbb39a6ce24b9..58bde9adecc6125b62208d2875e9c792ab980602 100644 (file)
@@ -1,56 +1,58 @@
-function addToLogViewer(logViewer, lines) {
-    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+)? (.*)/;
-    for (var a in lines) {
-        var v = lines[a].match(re);
-        if (v != null) {
+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);
+}
 
-            var ts = new Date(Date.UTC(v[2], v[3], v[4], v[6], v[7], v[8]));
+function updatePaging(id, logViewer, page) {
+    var p = "";
+    var i = logViewer.matchingItems.length;
+    var n;
+    for (n = 0; (n*page) < i; n += 1) {
+        if (n == logViewer.page_offset) {
+            p += "<span class='log-viewer-page-num'>" + (n+1) + "</span> ";
+        } else {
+            p += "<a href=\"#\" class='log-viewer-page-num log-viewer-page-" + n + "'>" + (n+1) + "</a> ";
+        }
+    }
+    $(id).html(p);
+    for (n = 0; (n*page) < i; n += 1) {
+        (function(n) {
+            $(".log-viewer-page-" + n).on("click", function() {
+                gotoPage(n, logViewer, page, id);
+                return false;
+            });
+        })(n);
+    }
 
-            v11 = v[11];
-            if (typeof v[11] === 'undefined') {
-                v11 = '&nbsp;';
-            }
+    if (logViewer.page_offset == 0) {
+        $(".log-viewer-page-up").addClass("text-muted");
+    } else {
+        $(".log-viewer-page-up").removeClass("text-muted");
+    }
 
-            var message = v[12];
-            var type = "";
-            if (v11 != '&nbsp;') {
-                if (/^stderr /.test(message)) {
-                    if (/^stderr crunchstat: /.test(message)) {
-                        type = "crunchstat";
-                        message = message.substr(19);
-                    } else if (/^stderr srun: /.test(message)) {
-                        type = "task-dispatch";
-                        message = message.substr(7);
-                    } else if (/^stderr slurmd/.test(message)) {
-                        type = "task-dispatch";
-                        message = message.substr(7);
-                    } else {
-                        type = "task-output";
-                        message = message.substr(7);
-                    }
-                } else {
-                    type = "task-dispatch";
-                }
-            } else {
-                if (/^status: /.test(message)) {
-                    type = "job-status";
-                    message = message.substr(8);
-                } else {
-                    type = "crunch";
-                }
-            }
+    if (logViewer.page_offset == (n-1)) {
+        $(".log-viewer-page-down").addClass("text-muted");
+    } else {
+        $(".log-viewer-page-down").removeClass("text-muted");
+    }
+}
 
-            logViewer.add({
-                id: logViewer.items.length,
-                timestamp: ts.toLocaleDateString() + " " + ts.toLocaleTimeString(),
-                taskid: v11,
-                message: message,
-                type: type
-            });
+function nextPage(logViewer, page, id) {
+    gotoPage(logViewer.page_offset+1, logViewer, page, id);
+}
 
-        } else {
-            console.log("Did not parse: " + lines[a]);
-        }
+function prevPage(logViewer, page, id) {
+    gotoPage(logViewer.page_offset-1, logViewer, page, id);
+}
+
+function addToLogViewer(logViewer, lines) {
+    var items = [];
+    for (var a in lines) {
+      items.push({
+        message: lines[a].replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;')
+      });
     }
-    logViewer.update();
+    logViewer.add(items);
 }