diff --git a/apps/dokploy/server/wss/docker-container-logs.ts b/apps/dokploy/server/wss/docker-container-logs.ts index 982bf3f5d..d704467c0 100644 --- a/apps/dokploy/server/wss/docker-container-logs.ts +++ b/apps/dokploy/server/wss/docker-container-logs.ts @@ -5,6 +5,11 @@ import { Client } from "ssh2"; import { WebSocketServer } from "ws"; import { getShell } from "./utils"; +function heartbeat() { + // @ts-ignore + this.isAlive = true; +} + export const setupDockerContainerLogsWebSocketServer = ( server: http.Server, ) => { @@ -44,14 +49,10 @@ export const setupDockerContainerLogsWebSocketServer = ( return; } - const pingInterval = setInterval(() => { - if (ws.readyState === ws.OPEN) { - ws.ping(); - } - }, 30000); - - ws.on("close", () => clearInterval(pingInterval)); - + // @ts-ignore + ws.isAlive = true; + ws.on("error", console.error); + ws.on("pong", heartbeat); try { if (serverId) { const server = await findServerById(serverId); @@ -147,4 +148,18 @@ export const setupDockerContainerLogsWebSocketServer = ( ws.send(errorMessage); } }); + + const interval = setInterval(function ping() { + for (const ws of wssTerm.clients) { + // @ts-ignore + if (ws.isAlive === false) return ws.terminate(); + // @ts-ignore + ws.isAlive = false; + ws.ping(); + } + }, 30000); + + wssTerm.on("close", function close() { + clearInterval(interval); + }); };