%jDdZddlmZddlZddlZddlZddlmZddl m Z ddl m Z e e jjZedz Ze dZed z d z Zd ed z fd edz fdedz fgZdddZdZddZdddZd dZd!dZd"dZd#dZd$dZedk(reyy)%zLRaccoglie gli ultimi eventi dei log critici e produce un report giornaliero.) annotationsN)deque)Path)Iterablereportsz/mnt/ssd/data/Dropbox/adrianscriptszslave_mailbox_write.shbackup_completoz scripts/logs/backup_completo.log pcloud_mirrorzscripts/logs/pcloud_mirror.logsnapshot_avampostoz2gemello-nave/config-backups/avamposto_snapshot.logz===== INIZIO BACKUP COMPLETOz$--- Inizio del processo di mirroring)r r )fatalerrorfailedfallitozpermission deniedtimeoutunablect|dz } |js|jr$|j|k(ry|j |j |y#t $rYywxYw)z>Crea/aggiusta un symlink nel logbook per facile consultazione.z.logN)BASE_DIR is_symlinkexistsresolveunlink symlink_toOSError)namepath link_paths A/mnt/ssd/data/Dropbox/adrian/gemello-nave/logbook/collect_logs.py_ensure_symlinkr3sndV4=(I    !Y%5%5%7  "d*    T"    s3A$!A$$ A0/A0c |jddd5}t||}dddtS#1swYxYw#t$rgcYSwxYw)z%Ritorna le ultime max_lines dal file.rutf-8ignore)encodingerrorsN)openrlistr)r max_lineshandledqs r_tailr*AsZ YYsWXY > 6&"695B 6Bx 6 6  s#A 6A?A AAcg}|D]S}|jdvsdvrtfdtDs5|j|j U|S)z7Ritorna le righe che contengono parole chiave critiche.zcompleted without errorszno errors were foundc3&K|]}|v yw)N).0keywordlowers r z#_scan_for_issues..Rs8Gw%8s)r0anyKEYWORDSappendrstrip)linesissuesliner0s @r_scan_for_issuesr9Ks\ F)  % .2HE2Q  8x8 8 MM$++- ( ) Mctjddd|jddg}g}tD]\}}t |||j d||j d||j s7|j d |j d|j |d t|| }|s#|j d |j dtj|}|}|r#d } t|D] \} } || vs | } | || d }t|} | r[|j d|jd| D|j d|j |dt| dn"|j d|j d|j ddj|zdz|j d|rddj|znd} |jd| dj|j!dz}|t#|fS)z9Crea il report testuale e indica se sono emerse anomalie.T)parentsexist_oku# Logbook report – seconds)timespecz## z Percorso: u⚠️ Log mancante.z : log assenter'u'ℹ️ Nessun contenuto (file vuoto?).Nu-⚠️ Anomalie rilevate nelle ultime righe:c3&K|] }d| yw)z Nr-)r.r8s rr1zbuild_report..sA$$tf Asz: z segnalazioniu1✅ Nessuna anomalia rilevata nelle ultime righe.z```  z ```⚠️ Problemi individuati: z, u(✅ Tutti i log analizzati risultano OK.) REPORTS_DIRmkdir isoformat LOG_SOURCESrr4rr*RUN_START_MARKERSget enumerater9extendlenjoininsertstripbool)nowr' report_lines global_issuesrr tail_linesmarker scan_lines last_startidxr8r7header report_texts r build_reportr]WsOdT2  y ABC L "M!& dd#c$L)j/0{{}    7 8    #  D6!7 8 495     I J    # "&&t, J&z2 % TT>!$J %%' 4 !*-     O P   A&A A    #  D6CK= !F G    S T    #Gdii &;;gEFBM& T  )499]+CC 7 6"))L)//1D8K ]+ ++r:cd|jdd}t|z }|j|dtdz }|j|d|S)Nreport_z%Y%m%dz.txtr!)r#z latest.txt)strftimerF write_text)contentrSfilename report_pathlatests r write_reportrfsZh/05H(K7W5 < 'F g0 r:ctd|jDd}|jdd}|r7tjdt t d|gt tdy y ) zScrive in mailbox verso gemello-nave (perimetro esteso 11/09/2026) - stesso pattern di check_job_health.py. Nessuna dedup: gira una sola volta al giorno, il rischio di spam da ripetizione e' trascurabile rispetto a check_job_health (ogni 30 min).c3DK|]}|jds|yw)u⚠️ ProblemiN) startswith)r.ls rr1z"_notify_mailbox..s`aq||L^?_`s  r@rDznuovi problemi rilevati: bashlogbookF)cwdcheckN)next splitlinesreplace subprocessrunstr MAILBOX_WRITE ADRIAN_ROOT)r\ issues_linetexts r_notify_mailboxrysd`;#9#9#;`bdeK   ?A\ ]D  S'D 9K   r:cxtjd}|jdtdd|j }t j j}t||j\}}t||}|r t|t||rtd|ytd |y) Nz4Genera un riepilogo dai log principali della Flotta.) descriptionz--linesxzrsR" > ! ! # * *" 12 i'*BB  &HHIk$DDE;)]]^  6;     :,z  +4 zFr: