> render html correctly > should render messag
exports[` > renders loading correctly 1`] = `
"
-"
+
+"
`;
exports[` > should parse messages 1`] = `
diff --git a/assets/components/ScrollableView.vue b/assets/components/ScrollableView.vue
index 79cc52af..7ced5c66 100644
--- a/assets/components/ScrollableView.vue
+++ b/assets/components/ScrollableView.vue
@@ -20,9 +20,6 @@
;
function useLogStream(url: Ref, loadMoreUrl?: Ref) {
const messages: ShallowRef[]> = shallowRef([]);
const buffer: ShallowRef[]> = shallowRef([]);
+ const opened = ref(false);
const { paused: scrollingPaused } = useScrollContext();
function flushNow() {
@@ -122,6 +123,7 @@ function useLogStream(url: Ref, loadMoreUrl?: Ref) {
function connect({ clear } = { clear: true }) {
close();
if (clear) clearMessages();
+ opened.value = false;
es = new EventSource(urlWithParams.value);
es.addEventListener("container-event", (e) => {
const event = JSON.parse((e as MessageEvent).data) as { actorId: string; name: string };
@@ -150,6 +152,9 @@ function useLogStream(url: Ref, loadMoreUrl?: Ref) {
}
};
es.onerror = () => clearMessages();
+ es.onopen = () => {
+ opened.value = true;
+ };
}
watch(urlWithParams, () => connect(), { immediate: true });
@@ -205,5 +210,5 @@ function useLogStream(url: Ref, loadMoreUrl?: Ref) {
}
});
- return { messages, loadOlderLogs, isLoadingMore, hasComplexLogs };
+ return { messages, loadOlderLogs, isLoadingMore, hasComplexLogs, opened };
}
diff --git a/internal/web/__snapshots__/web.snapshot b/internal/web/__snapshots__/web.snapshot
index 6a92e61f..e14ab130 100644
--- a/internal/web/__snapshots__/web.snapshot
+++ b/internal/web/__snapshots__/web.snapshot
@@ -164,7 +164,9 @@ Cache-Control: no-cache
Connection: keep-alive
Content-Security-Policy: default-src 'self' 'wasm-unsafe-eval' blob: https://cdn.jsdelivr.net https://*.duckdb.org; style-src 'self' 'unsafe-inline'; img-src 'self' data:;
Content-Type: text/event-stream
-X-Accel-Buffering: no
+X-Accel-Buffering: no
+
+:ping
/* snapshot: Test_handler_streamLogs_error_std */
HTTP/1.1 400 Bad Request
@@ -185,6 +187,8 @@ Content-Security-Policy: default-src 'self' 'wasm-unsafe-eval' blob: https://cdn
Content-Type: text/event-stream
X-Accel-Buffering: no
+:ping
+
data: {"m":"INFO Testing logs...","ts":0,"id":4256192898,"l":"info","s":"stdout","c":"123456"}
@@ -201,6 +205,8 @@ Content-Security-Policy: default-src 'self' 'wasm-unsafe-eval' blob: https://cdn
Content-Type: text/event-stream
X-Accel-Buffering: no
+:ping
+
event: container-event
data: {"name":"container-stopped","host":"localhost","actorId":"123456"}
@@ -214,6 +220,8 @@ Content-Security-Policy: default-src 'self' 'wasm-unsafe-eval' blob: https://cdn
Content-Type: text/event-stream
X-Accel-Buffering: no
+:ping
+
data: {"m":"INFO Testing logs...","ts":1589396137772,"id":1469707724,"l":"info","s":"stdout","c":"123456"}
id: 1589396137772
diff --git a/internal/web/logs.go b/internal/web/logs.go
index 681aa75d..d108d72a 100644
--- a/internal/web/logs.go
+++ b/internal/web/logs.go
@@ -395,6 +395,7 @@ func streamLogsForContainers(w http.ResponseWriter, r *http.Request, multiHostCl
multiHostClient.SubscribeContainersStarted(r.Context(), newContainers, filter)
ticker := time.NewTicker(5 * time.Second)
+ sseWriter.Ping()
loop:
for {
select {