return;
}
- // create the event log dispatcher
- event_log_disp = new WebSocket(url);
+ // grab websocket connection from window, if one exists
+ event_log_disp = $(window).data("arv-websocket");
+ if (event_log_disp == null) {
+ // create the event log dispatcher
+ event_log_disp = new WebSocket(url);
- event_log_disp.onopen = function(event) { onEventLogDispatcherOpen(event) };
- event_log_disp.onmessage = function(event) { onEventLogDispatcherMessage(event) };
+ event_log_disp.onopen = function(event) { onEventLogDispatcherOpen(event) };
+ event_log_disp.onmessage = function(event) { onEventLogDispatcherMessage(event) };
+
+ // store websocket in window to allow reuse when multiple divs subscribe for events
+ $(window).data("arv-websocket", event_log_disp);
+
+ // detach elementId when user leaves this window
+ window.onbeforeunload = function (event) {detachElement(event, elementId);}
+ }
// Add the elementId to listener map
event_log_listener_map = JSON.parse(sessionStorage.getItem("event_log_listener_map"));
}
}
}
+
+/**
+ * When leaving this window, remove elementId from map
+ */
+function detachElement(event, elementId) {
+ event_log_listener_map = JSON.parse(sessionStorage.getItem("event_log_listener_map"));
+ if (event_log_listener_map !== null) {
+ delete event_log_listener_map[elementId];
+ }
+
+ // According to documenation, browser will close the connection when page is left.
+ // However, there are suggestions of inconsistency; so to be safe, close explicitly.
+ if (event_log_disp !== null) {
+ event_log_disp.close();
+ }
+}
-<span>
- <h3>Log for pipeline</h3>
- <image hidden=true id="pipeline_event_log_img" src="/favicon.ico" onclick="sendToDispatcher();" onload="subscribeToEventLog('<%=$arvados_api_client.discovery[:websocketUrl]%>?api_token=<%=Thread.current[:arvados_api_token]%>', '<%=@object.uuid%>', 'pipeline_event_log_area')";></image>
- <textarea row="10" cols="80" id="pipeline_event_log_area"></textarea>
-</span>
+<% if !@object.state.in? ['Complete', 'Failed'] %>
+ <span>
+ <h3>Log for pipeline</h3>
+ <image hidden=true id="pipeline_event_log_img" src="/favicon.ico" onclick="sendToDispatcher();" onload="subscribeToEventLog('<%=$arvados_api_client.discovery[:websocketUrl]%>?api_token=<%=Thread.current[:arvados_api_token]%>', '<%=@object.uuid%>', 'pipeline_event_log_area')";></image>
+
+ <textarea row="10" cols="80" id="pipeline_event_log_area"></textarea>
+ </span>
+<% end %>