70 lines
2.4 KiB
Python
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) |