mirror of
https://github.com/Finsys/dockhand.git
synced 2026-06-17 19:09:33 +03:00
fix: prevent WebSocket connection drops on hawser handler errors
Wrap globalThis.__hawserHandleMessage in try-catch to prevent unhandled promise rejections from closing WebSocket connections abruptly. Previously, if the async handler threw an error, the WebSocket would close with code 1006 (abnormal closure) without proper error logging. This caused connections to die after 1-2 seconds, triggering rapid reconnection storms and preventing stats from being retrieved. The inner try-catch ensures handler errors are logged but don't close the connection, allowing the agent to recover and continue processing messages.
This commit is contained in:
committed by
Jarek Krochmalski
parent
7e3797cbfe
commit
91ef3e3c9b
@@ -191,7 +191,7 @@ async function handleTerminalConnection(ws, url, connId) {
|
||||
};
|
||||
if (target.tls.ca) tlsOpts.ca = [target.tls.ca, ...rootCertificates];
|
||||
if (target.tls.cert) tlsOpts.cert = [target.tls.cert];
|
||||
if (target.tls.key) tlsOpts.key = target.tls.key;
|
||||
if (target.tls.key) tlsOpts.key = [target.tls.key];
|
||||
dockerStream = tlsConnect(tlsOpts);
|
||||
} else {
|
||||
// Plain HTTP (direct TCP or hawser-standard)
|
||||
@@ -430,7 +430,12 @@ function handleHawserConnection(ws, connId, remoteIp) {
|
||||
|
||||
// Use the global hawser message handler injected by the SvelteKit app
|
||||
if (typeof globalThis.__hawserHandleMessage === 'function') {
|
||||
await globalThis.__hawserHandleMessage(ws, msg, connId, remoteIp);
|
||||
try {
|
||||
await globalThis.__hawserHandleMessage(ws, msg, connId, remoteIp);
|
||||
} catch (handlerError) {
|
||||
console.error('[Hawser WS] Handler error:', handlerError);
|
||||
// Don't close connection - let it recover
|
||||
}
|
||||
} else {
|
||||
console.warn('[Hawser WS] No global handler registered');
|
||||
ws.send(JSON.stringify({ type: 'error', message: 'Server not ready' }));
|
||||
@@ -456,4 +461,3 @@ server.listen(PORT, HOST, () => {
|
||||
console.log(`Listening on http://${HOST}:${PORT}/ with WebSocket`);
|
||||
});
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user