Update system_monitor.py
This commit is contained in:
+27
-16
@@ -446,27 +446,38 @@ def on_message(client, userdata, msg):
|
|||||||
|
|
||||||
def auto_publish_task(client):
|
def auto_publish_task(client):
|
||||||
disconnect_counter = 0
|
disconnect_counter = 0
|
||||||
update_interval = cfg['settings'].get('update_interval', 30)
|
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
if not client.is_connected():
|
try:
|
||||||
disconnect_counter += 1
|
# Forza la conversione a intero per evitare crash silenziosi su time.sleep
|
||||||
logger.warning(f"⚠️ Broker MQTT irraggiungibile. Watchdog {disconnect_counter}/5...")
|
update_interval = int(cfg['settings'].get('update_interval', 30))
|
||||||
|
|
||||||
# Dopo ~2.5 minuti di disconnessione (5 tentativi x 30s), killa il processo
|
if not client.is_connected():
|
||||||
if disconnect_counter >= 5:
|
disconnect_counter += 1
|
||||||
logger.error("🚨 Connessione persa definitivamente. Chiusura forzata per riavvio tramite systemd...")
|
logger.warning(f"⚠️ Broker MQTT irraggiungibile. Watchdog {disconnect_counter}/5...")
|
||||||
os._exit(1)
|
|
||||||
else:
|
|
||||||
if disconnect_counter > 0:
|
|
||||||
logger.info("✅ Connessione MQTT ripristinata spontaneamente.")
|
|
||||||
disconnect_counter = 0
|
|
||||||
|
|
||||||
status = publish_all(client)
|
if disconnect_counter >= 5:
|
||||||
publish_all_ini_files(client)
|
logger.error("🚨 Connessione persa definitivamente. Hard Kill del processo...")
|
||||||
check_auto_healing(client, status)
|
os._exit(1)
|
||||||
|
else:
|
||||||
|
if disconnect_counter > 0:
|
||||||
|
logger.info("✅ Connessione MQTT ripristinata spontaneamente.")
|
||||||
|
disconnect_counter = 0
|
||||||
|
|
||||||
time.sleep(update_interval)
|
# Le funzioni di sistema e file IO sono ora blindate per non far crashare il loop
|
||||||
|
status = publish_all(client)
|
||||||
|
publish_all_ini_files(client)
|
||||||
|
check_auto_healing(client, status)
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
# Cattura e scrive nei log qualsiasi anomalia interna che prima uccideva il thread
|
||||||
|
logger.error(f"❌ Errore critico nel thread Watchdog: {e}")
|
||||||
|
|
||||||
|
try:
|
||||||
|
time.sleep(update_interval)
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"⚠️ Errore nel timer di sleep: {e}")
|
||||||
|
time.sleep(30) # Fallback
|
||||||
|
|
||||||
def start_service():
|
def start_service():
|
||||||
global current_status
|
global current_status
|
||||||
|
|||||||
Reference in New Issue
Block a user