From e6c242a06487c9d35cf8471b9153baa76e3a3d23 Mon Sep 17 00:00:00 2001 From: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> Date: Sun, 15 Dec 2024 19:24:50 -0600 Subject: [PATCH] refactor: set logs no found when the search is empty --- .../dashboard/docker/logs/docker-logs-id.tsx | 15 +++++++++++++++ apps/dokploy/server/wss/docker-container-logs.ts | 12 +----------- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/apps/dokploy/components/dashboard/docker/logs/docker-logs-id.tsx b/apps/dokploy/components/dashboard/docker/logs/docker-logs-id.tsx index d05b481e..db1c774b 100644 --- a/apps/dokploy/components/dashboard/docker/logs/docker-logs-id.tsx +++ b/apps/dokploy/components/dashboard/docker/logs/docker-logs-id.tsx @@ -82,6 +82,7 @@ export const DockerLogsId: React.FC = ({ containerId, serverId }) => { if (!containerId) return; let isCurrentConnection = true; + let noDataTimeout: NodeJS.Timeout; setIsLoading(true); setRawLogs(""); setFilteredLogs([]); @@ -104,34 +105,48 @@ export const DockerLogsId: React.FC = ({ containerId, serverId }) => { console.log("Connecting to WebSocket:", wsUrl); const ws = new WebSocket(wsUrl); + const resetNoDataTimeout = () => { + if (noDataTimeout) clearTimeout(noDataTimeout); + noDataTimeout = setTimeout(() => { + if (isCurrentConnection) { + setIsLoading(false); + } + }, 2000); // Wait 2 seconds for data before showing "No logs found" + }; + ws.onopen = () => { if (!isCurrentConnection) { ws.close(); return; } console.log("WebSocket connected"); + resetNoDataTimeout(); }; ws.onmessage = (e) => { if (!isCurrentConnection) return; setRawLogs((prev) => prev + e.data); setIsLoading(false); + if (noDataTimeout) clearTimeout(noDataTimeout); }; ws.onerror = (error) => { if (!isCurrentConnection) return; console.error("WebSocket error:", error); setIsLoading(false); + if (noDataTimeout) clearTimeout(noDataTimeout); }; ws.onclose = (e) => { if (!isCurrentConnection) return; console.log("WebSocket closed:", e.reason); setIsLoading(false); + if (noDataTimeout) clearTimeout(noDataTimeout); }; return () => { isCurrentConnection = false; + if (noDataTimeout) clearTimeout(noDataTimeout); if (ws.readyState === WebSocket.OPEN) { ws.close(); } diff --git a/apps/dokploy/server/wss/docker-container-logs.ts b/apps/dokploy/server/wss/docker-container-logs.ts index 3df09ce0..0c1e66a4 100644 --- a/apps/dokploy/server/wss/docker-container-logs.ts +++ b/apps/dokploy/server/wss/docker-container-logs.ts @@ -60,7 +60,6 @@ export const setupDockerContainerLogsWebSocketServer = ( const command = search ? `${baseCommand} 2>&1 | grep --line-buffered -iF "${escapedSearch}"` : baseCommand; - console.log("Executing SSH command:", command); client.exec(command, (err, stream) => { if (err) { console.error("Execution error:", err); @@ -68,24 +67,15 @@ export const setupDockerContainerLogsWebSocketServer = ( client.end(); return; } - - let dataReceived = false; - stream .on("close", () => { - console.log("Stream closed, dataReceived:", dataReceived); - if (!dataReceived) { - ws.send("No matching logs found"); - } client.end(); ws.close(); }) .on("data", (data: string) => { - dataReceived = true; ws.send(data.toString()); }) .stderr.on("data", (data) => { - console.error("Stream stderr:", data.toString()); ws.send(data.toString()); }); }); @@ -111,7 +101,7 @@ export const setupDockerContainerLogsWebSocketServer = ( since === "all" ? "" : `--since ${since}` } --follow ${containerId}`; const command = search - ? `${baseCommand} 2>&1 | grep --line-buffered -iF '${search}'` + ? `${baseCommand} 2>&1 | grep -iF '${search}'` : baseCommand; const ptyProcess = spawn(shell, ["-c", command], { name: "xterm-256color",