#!/bin/bash # Poll silenzioso della coda Adrian→gemello-ufficio, pensato per il tool Monitor (Claude Code): # ogni riga stampata è una notifica. Path Dropbox locale come primario (testato a lungo, # convenzione dell'intero ecosistema) — Z: (WebDAV verso Nave) SOLO come fallback quando il # locale resta indietro rispetto a Z: oltre STALL_THRESHOLD secondi (incidente reale 07/09/2026: # sync Dropbox fermo 5+ minuti dopo lo switch account, nessun alert esistente lo segnalava — # dettaglio: archivio/Adrian/progetti/project_bridge_mailbox_gemello_ufficio.md). # # Uso: slave_mailbox_watch_gemello_ufficio.sh (nessun argomento, path hardcoded per questa coda # specifica — non generico come slave_mailbox_read.sh, perché la logica di fallback needs sapere # quale coppia locale/Z: confrontare). # Nessun `set -e`: un loop persistente non deve morire su un hiccup transitorio (es. wc -c su # un file momentaneamente non raggiungibile durante un ciclo di sync) — ogni fallimento va # gestito localmente (`|| true`, default a 0), mai lasciato terminare lo script. set -uo pipefail cd "$(dirname "${BASH_SOURCE[0]}")/.." # root Dropbox/adrian MAILBOX_DIR="scripts/slave-mailbox" LOCAL_FILE="$MAILBOX_DIR/mailbox_to_gemello_ufficio.log" LOCAL_OFFSET="$MAILBOX_DIR/mailbox_to_gemello_ufficio.offset" Z_ROOT="/z/Dropbox/adrian" Z_FILE="$Z_ROOT/$MAILBOX_DIR/mailbox_to_gemello_ufficio.log" Z_OFFSET="$Z_ROOT/$MAILBOX_DIR/mailbox_to_gemello_ufficio.offset" STALL_THRESHOLD=45 # secondi di ritardo locale-vs-Z: tollerati prima di attivare il fallback CHECK_EVERY=10 # ogni N iterazioni del poll da 2s (~20s) controlla lo stallo i=0 stall_since=0 while true; do # --- lettura primaria: path Dropbox locale --- OUT=$(bash scripts/slave_mailbox_read.sh mailbox_to_gemello_ufficio.log mailbox_to_gemello_ufficio.offset) if [ -n "$OUT" ]; then printf '%s\n' "$OUT" LSIZE=$(wc -c < "$LOCAL_FILE" 2>/dev/null | tr -d '[:space:]') [ -n "$LSIZE" ] && echo "$LSIZE" > "$Z_OFFSET" 2>/dev/null || true stall_since=0 fi # --- controllo di stallo periodico (locale vs Z:) --- # Trigger sul confronto Z:-vs-OFFSET (non Z:-vs-locale): il file locale può restare indietro # a lungo dopo che il fallback ha già consumato tutto il nuovo contenuto — confrontare solo # con la dimensione del locale avrebbe fatto scattare lo stesso alert ogni ciclo anche a coda # vuota (visto in produzione 07/09, corretto). L'offset è la vera fonte di "cosa resta da # leggere", il file locale è solo il trasporto primario. i=$((i + 1)) if [ $((i % CHECK_EVERY)) -eq 0 ]; then CUR_OFFSET=$(cat "$LOCAL_OFFSET" 2>/dev/null | tr -d '[:space:]'); CUR_OFFSET=${CUR_OFFSET:-0} ZSIZE=$(wc -c < "$Z_FILE" 2>/dev/null | tr -d '[:space:]'); ZSIZE=${ZSIZE:-0} if [ "$ZSIZE" -gt "$CUR_OFFSET" ]; then now=$(date +%s) if [ "$stall_since" -eq 0 ]; then stall_since=$now else elapsed=$((now - stall_since)) if [ "$elapsed" -ge "$STALL_THRESHOLD" ]; then printf '[ATTENZIONE] sync Dropbox in ritardo da %ss (offset=%sB, Z:=%sB) — leggo il contenuto nuovo via Z: come fallback\n' "$elapsed" "$CUR_OFFSET" "$ZSIZE" OUT2=$(cd "$Z_ROOT" && bash scripts/slave_mailbox_read.sh mailbox_to_gemello_ufficio.log mailbox_to_gemello_ufficio.offset) if [ -n "$OUT2" ]; then printf '%s\n' "$OUT2" fi # allinea l'offset locale così non si rilegge quando Dropbox recupera echo "$ZSIZE" > "$LOCAL_OFFSET" 2>/dev/null || true stall_since=0 fi fi else stall_since=0 fi fi sleep 2 done