refactor: set logs no found when the search is empty

This commit is contained in:
Mauricio Siu
2024-12-15 19:24:50 -06:00
parent c2fe1eed01
commit e6c242a064
2 changed files with 16 additions and 11 deletions

View File

@@ -82,6 +82,7 @@ export const DockerLogsId: React.FC<Props> = ({ containerId, serverId }) => {
if (!containerId) return; if (!containerId) return;
let isCurrentConnection = true; let isCurrentConnection = true;
let noDataTimeout: NodeJS.Timeout;
setIsLoading(true); setIsLoading(true);
setRawLogs(""); setRawLogs("");
setFilteredLogs([]); setFilteredLogs([]);
@@ -104,34 +105,48 @@ export const DockerLogsId: React.FC<Props> = ({ containerId, serverId }) => {
console.log("Connecting to WebSocket:", wsUrl); console.log("Connecting to WebSocket:", wsUrl);
const ws = new 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 = () => { ws.onopen = () => {
if (!isCurrentConnection) { if (!isCurrentConnection) {
ws.close(); ws.close();
return; return;
} }
console.log("WebSocket connected"); console.log("WebSocket connected");
resetNoDataTimeout();
}; };
ws.onmessage = (e) => { ws.onmessage = (e) => {
if (!isCurrentConnection) return; if (!isCurrentConnection) return;
setRawLogs((prev) => prev + e.data); setRawLogs((prev) => prev + e.data);
setIsLoading(false); setIsLoading(false);
if (noDataTimeout) clearTimeout(noDataTimeout);
}; };
ws.onerror = (error) => { ws.onerror = (error) => {
if (!isCurrentConnection) return; if (!isCurrentConnection) return;
console.error("WebSocket error:", error); console.error("WebSocket error:", error);
setIsLoading(false); setIsLoading(false);
if (noDataTimeout) clearTimeout(noDataTimeout);
}; };
ws.onclose = (e) => { ws.onclose = (e) => {
if (!isCurrentConnection) return; if (!isCurrentConnection) return;
console.log("WebSocket closed:", e.reason); console.log("WebSocket closed:", e.reason);
setIsLoading(false); setIsLoading(false);
if (noDataTimeout) clearTimeout(noDataTimeout);
}; };
return () => { return () => {
isCurrentConnection = false; isCurrentConnection = false;
if (noDataTimeout) clearTimeout(noDataTimeout);
if (ws.readyState === WebSocket.OPEN) { if (ws.readyState === WebSocket.OPEN) {
ws.close(); ws.close();
} }

View File

@@ -60,7 +60,6 @@ export const setupDockerContainerLogsWebSocketServer = (
const command = search const command = search
? `${baseCommand} 2>&1 | grep --line-buffered -iF "${escapedSearch}"` ? `${baseCommand} 2>&1 | grep --line-buffered -iF "${escapedSearch}"`
: baseCommand; : baseCommand;
console.log("Executing SSH command:", command);
client.exec(command, (err, stream) => { client.exec(command, (err, stream) => {
if (err) { if (err) {
console.error("Execution error:", err); console.error("Execution error:", err);
@@ -68,24 +67,15 @@ export const setupDockerContainerLogsWebSocketServer = (
client.end(); client.end();
return; return;
} }
let dataReceived = false;
stream stream
.on("close", () => { .on("close", () => {
console.log("Stream closed, dataReceived:", dataReceived);
if (!dataReceived) {
ws.send("No matching logs found");
}
client.end(); client.end();
ws.close(); ws.close();
}) })
.on("data", (data: string) => { .on("data", (data: string) => {
dataReceived = true;
ws.send(data.toString()); ws.send(data.toString());
}) })
.stderr.on("data", (data) => { .stderr.on("data", (data) => {
console.error("Stream stderr:", data.toString());
ws.send(data.toString()); ws.send(data.toString());
}); });
}); });
@@ -111,7 +101,7 @@ export const setupDockerContainerLogsWebSocketServer = (
since === "all" ? "" : `--since ${since}` since === "all" ? "" : `--since ${since}`
} --follow ${containerId}`; } --follow ${containerId}`;
const command = search const command = search
? `${baseCommand} 2>&1 | grep --line-buffered -iF '${search}'` ? `${baseCommand} 2>&1 | grep -iF '${search}'`
: baseCommand; : baseCommand;
const ptyProcess = spawn(shell, ["-c", command], { const ptyProcess = spawn(shell, ["-c", command], {
name: "xterm-256color", name: "xterm-256color",