diff --git a/system_monitor.py b/system_monitor.py index c04ef3e..c586fc8 100644 --- a/system_monitor.py +++ b/system_monitor.py @@ -445,11 +445,28 @@ def on_message(client, userdata, msg): publish_all_ini_files(client) def auto_publish_task(client): + disconnect_counter = 0 + update_interval = cfg['settings'].get('update_interval', 30) + while True: - status = publish_all(client) - publish_all_ini_files(client) - check_auto_healing(client, status) - time.sleep(cfg['settings'].get('update_interval', 30)) + if not client.is_connected(): + disconnect_counter += 1 + logger.warning(f"⚠️ Broker MQTT irraggiungibile. Watchdog {disconnect_counter}/5...") + + # Dopo ~2.5 minuti di disconnessione (5 tentativi x 30s), killa il processo + if disconnect_counter >= 5: + logger.error("🚨 Connessione persa definitivamente. Chiusura forzata per riavvio tramite systemd...") + os._exit(1) + else: + if disconnect_counter > 0: + logger.info("✅ Connessione MQTT ripristinata spontaneamente.") + disconnect_counter = 0 + + status = publish_all(client) + publish_all_ini_files(client) + check_auto_healing(client, status) + + time.sleep(update_interval) def start_service(): global current_status