fix(core): Handle websocket connection error more gracefully in task runners (#11635)

This commit is contained in:
Iván Ovejero 2024-11-11 11:30:57 +01:00 committed by GitHub
parent 835fbfe337
commit af7d6e68d0
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -1,4 +1,4 @@
import { ApplicationError } from 'n8n-workflow';
import { ApplicationError, ensureError } from 'n8n-workflow';
import { nanoid } from 'nanoid';
import { type MessageEvent, WebSocket } from 'ws';
@ -88,6 +88,24 @@ export abstract class TaskRunner {
},
maxPayload: opts.maxPayloadSize,
});
this.ws.addEventListener('error', (event) => {
const error = ensureError(event.error);
if (
'code' in error &&
typeof error.code === 'string' &&
['ECONNREFUSED', 'ENOTFOUND'].some((code) => code === error.code)
) {
console.error(
`Error: Failed to connect to n8n. Please ensure n8n is reachable at: ${opts.n8nUri}`,
);
process.exit(1);
} else {
console.error(`Error: Failed to connect to n8n at ${opts.n8nUri}`);
console.error('Details:', event.message || 'Unknown error');
}
});
this.ws.addEventListener('message', this.receiveMessage);
this.ws.addEventListener('close', this.stopTaskOffers);
}