netgescon-master/scripts/Script fatti per prova e per ora sospesi/analizza_errori_log.py

70 lines
2.4 KiB
Python

import os
import re
import json
LOGFILE = "log/import_mdb_to_mysql.jsonlog"
def estrai_blocchi_errori(logfile):
# Carica tutto il log in memoria per poter "navigare" avanti e indietro
with open(logfile, encoding="utf-8") as f:
lines = f.readlines()
# Trova indici delle righe con errori
error_lines = [(i, line) for i, line in enumerate(lines) if re.search(r'error', line, re.IGNORECASE)]
risultati = []
for idx, error_line in error_lines:
# Cerca indietro la riga "start_mdb" più vicina
file_mdb = None
for j in range(idx, -1, -1):
if '"event": "start_mdb"' in lines[j]:
try:
obj = json.loads(lines[j])
file_mdb = obj.get("file")
except Exception:
pass
break
# Estrai altre info utili: ad esempio tabella, azioni
tabella = ""
try:
obj = json.loads(error_line)
tabella = obj.get("table") or obj.get("table_mdb") or ""
except Exception:
pass
# Cerca le azioni fatte per quel file: le righe tra "start_mdb" e il prossimo "start_mdb" o fine file
azioni = []
start_idx = next((j for j in range(idx, -1, -1) if '"event": "start_mdb"' in lines[j]), None)
end_idx = next((j for j in range(idx+1, len(lines)) if '"event": "start_mdb"' in lines[j]), len(lines))
# Trova tutte le importazioni tabella in questo blocco
if start_idx is not None:
for row in lines[start_idx:end_idx]:
if ('"import_table"' in row or '"empty_table"' in row or '"table_done"' in row):
azioni.append(row.strip())
risultati.append({
"file_mdb": file_mdb,
"errore": error_line.strip(),
"tabella": tabella,
"azioni": azioni
})
return risultati
if __name__ == "__main__":
if not os.path.exists(LOGFILE):
print(f"Log non trovato: {LOGFILE}")
exit(1)
blocchi = estrai_blocchi_errori(LOGFILE)
for b in blocchi:
print(f"\n=== ERRORE SU FILE: {b['file_mdb']} ===")
print(f"Errore: {b['errore']}")
if b['tabella']:
print(f"Tabella coinvolta: {b['tabella']}")
print("Azioni svolte su questo file:")
for az in b["azioni"]:
print(" ", az)
print("-" * 50)