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)