mirror of
https://github.com/BrenBroZAYT/uptime-kuma-discord-bot.git
synced 2026-06-13 16:40:03 +00:00
Implement manual reconnection logic and update reconnection attempts handling in UptimeKumaService
This commit is contained in:
@@ -8,10 +8,10 @@ export class UptimeKumaService extends EventEmitter {
|
|||||||
private socket: Socket | null = null;
|
private socket: Socket | null = null;
|
||||||
private monitors: Map<number, MonitorStats> = new Map();
|
private monitors: Map<number, MonitorStats> = new Map();
|
||||||
private reconnectAttempts = 0;
|
private reconnectAttempts = 0;
|
||||||
private maxReconnectAttempts = 10;
|
|
||||||
private reconnectDelay = 5000;
|
private reconnectDelay = 5000;
|
||||||
private isAuthenticated = false;
|
private isAuthenticated = false;
|
||||||
private logger: Logger;
|
private logger: Logger;
|
||||||
|
private manualReconnectTimeout: NodeJS.Timeout | null = null;
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
super();
|
super();
|
||||||
@@ -26,7 +26,7 @@ export class UptimeKumaService extends EventEmitter {
|
|||||||
this.socket = io(config.uptimeKuma.url, {
|
this.socket = io(config.uptimeKuma.url, {
|
||||||
reconnection: true,
|
reconnection: true,
|
||||||
reconnectionDelay: this.reconnectDelay,
|
reconnectionDelay: this.reconnectDelay,
|
||||||
reconnectionAttempts: this.maxReconnectAttempts,
|
reconnectionAttempts: Infinity,
|
||||||
transports: ['websocket', 'polling'],
|
transports: ['websocket', 'polling'],
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -59,11 +59,29 @@ export class UptimeKumaService extends EventEmitter {
|
|||||||
this.logger.warn(`Disconnected from Uptime Kuma: ${reason}`);
|
this.logger.warn(`Disconnected from Uptime Kuma: ${reason}`);
|
||||||
this.isAuthenticated = false;
|
this.isAuthenticated = false;
|
||||||
this.emit('disconnected', reason);
|
this.emit('disconnected', reason);
|
||||||
|
|
||||||
|
// Manual reconnection fallback after 30 seconds of being disconnected
|
||||||
|
if (this.manualReconnectTimeout) {
|
||||||
|
clearTimeout(this.manualReconnectTimeout);
|
||||||
|
}
|
||||||
|
this.manualReconnectTimeout = setTimeout(() => {
|
||||||
|
if (!this.isConnected() && this.socket) {
|
||||||
|
this.logger.info('Attempting manual reconnection...');
|
||||||
|
this.socket.connect();
|
||||||
|
}
|
||||||
|
}, 30000);
|
||||||
});
|
});
|
||||||
|
|
||||||
this.socket.on('connect', () => {
|
this.socket.on('connect', () => {
|
||||||
if (this.isAuthenticated) {
|
// Clear manual reconnection timeout since we're connected
|
||||||
this.logger.info('Reconnected to Uptime Kuma');
|
if (this.manualReconnectTimeout) {
|
||||||
|
clearTimeout(this.manualReconnectTimeout);
|
||||||
|
this.manualReconnectTimeout = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.reconnectAttempts > 0) {
|
||||||
|
this.logger.info('Reconnected to Uptime Kuma, re-authenticating...');
|
||||||
|
this.reconnectAttempts = 0;
|
||||||
this.authenticate().catch(err => {
|
this.authenticate().catch(err => {
|
||||||
this.logger.error(`Re-authentication failed: ${err.message}`);
|
this.logger.error(`Re-authentication failed: ${err.message}`);
|
||||||
});
|
});
|
||||||
@@ -89,7 +107,8 @@ export class UptimeKumaService extends EventEmitter {
|
|||||||
});
|
});
|
||||||
|
|
||||||
this.socket.on('connect_error', (error) => {
|
this.socket.on('connect_error', (error) => {
|
||||||
this.logger.error(`Socket.io connection error: ${error.message}`);
|
this.reconnectAttempts++;
|
||||||
|
this.logger.error(`Socket.io connection error (attempt ${this.reconnectAttempts}): ${error.message}`);
|
||||||
});
|
});
|
||||||
|
|
||||||
this.socket.on('error', (error) => {
|
this.socket.on('error', (error) => {
|
||||||
@@ -243,6 +262,11 @@ export class UptimeKumaService extends EventEmitter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public disconnect(): void {
|
public disconnect(): void {
|
||||||
|
if (this.manualReconnectTimeout) {
|
||||||
|
clearTimeout(this.manualReconnectTimeout);
|
||||||
|
this.manualReconnectTimeout = null;
|
||||||
|
}
|
||||||
|
|
||||||
if (this.socket) {
|
if (this.socket) {
|
||||||
this.logger.info('Disconnecting from Uptime Kuma');
|
this.logger.info('Disconnecting from Uptime Kuma');
|
||||||
this.socket.disconnect();
|
this.socket.disconnect();
|
||||||
|
|||||||
Reference in New Issue
Block a user