diff piecrust/resources/server/piecrust-debug-info.js @ 219:d7a548ebcd58

serve: Add server sent events for showing pipeline errors in the debug window. The server can now run an endpoint that streams pipeline status, including errors or "fixed" statuses. As a result, I had to investigate using event-loop based server alternatives, before I figured out the correct flag to set in Werkzeug. Support for Gunicorn is therefore now possible, although disabled by default. I will come in handy though when proper support for CMS-mode is enabled.
author Ludovic Chabant <ludovic@chabant.com>
date Mon, 02 Feb 2015 08:34:44 -0800
parents
children 9612cfc6455a
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/piecrust/resources/server/piecrust-debug-info.js	Mon Feb 02 08:34:44 2015 -0800
@@ -0,0 +1,45 @@
+var eventSource = new EventSource("/__piecrust_debug/pipeline_status");
+
+//window.onbeforeunload = function(e) {
+//    console.log("Disconnecting SSE.", e);
+//    eventSource.close();
+//};
+
+eventSource.onerror = function(e) {
+    console.log("Error with SSE, closing.", e);
+    eventSource.close();
+};
+
+eventSource.addEventListener('pipeline_success', function(e) {
+    var placeholder = document.getElementById('piecrust-debug-info-pipeline-status');
+    //if (placeholder.firstChild !== null)
+    placeholder.removeChild(placeholder.firstChild);
+});
+
+eventSource.addEventListener('pipeline_error', function(e) {
+    var obj = JSON.parse(e.data);
+
+    var outer = document.createElement('div');
+    outer.style = 'padding: 1em;';
+    for (var i = 0; i < obj.assets.length; ++i) {
+        var item = obj.assets[i];
+        var markup = (
+            '<p>Error processing: <span style="font-family: monospace;">' +
+            item.path + '</span></p>\n' +
+            '<ul>');
+        for (var j = 0; j < item.errors.length; ++j) {
+            markup += (
+                '<li style="font-family: monospace;">' + 
+                item.errors[j] +
+                '</li>\n');
+        }
+        markup += '</ul>\n';
+        var entry = document.createElement('div');
+        entry.innerHTML = markup;
+        outer.appendChild(entry);
+    }
+
+    var placeholder = document.getElementById('piecrust-debug-info-pipeline-status');
+    placeholder.appendChild(outer);
+});
+