Repository navigation
Expand file tree
/
Copy pathsetup.sh
More file actions
executable file
·108 lines (94 loc) · 5.48 KB
/
Copy pathsetup.sh
File metadata and controls
executable file
·108 lines (94 loc) · 5.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#!/bin/bash
# Setup iniziale di tango-crawler.
# Eseguire una sola volta dalla directory del progetto.
set -euo pipefail
# ── Argomenti ─────────────────────────────────────────────────────────────────
MODE="${1:-}" # "build" per rebuild rapido, vuoto per setup completo
# ── Configurazione ────────────────────────────────────────────────────────────
NORMALIZE_AT="06:00" # orario giornaliero di normalizzazione (HH:MM)
DATA_DIR="$HOME/.local/share/tango-crawler"
REPO_DIR="$(cd "$(dirname "$0")" && pwd)"
COMPOSE="docker compose -f $REPO_DIR/docker-compose.yml"
# ── Helpers ───────────────────────────────────────────────────────────────────
info() { echo "[INFO] $*"; }
success() { echo "[OK] $*"; }
warning() { echo "[WARN] $*"; }
# ── Modalità build rapido ──────────────────────────────────────────────────────
if [ "$MODE" = "build" ]; then
info "Stop crawler..."
$COMPOSE down
info "Aggiorno repo..."
git -C "$REPO_DIR" pull
info "Rebuild + avvio..."
$COMPOSE up -d --build
success "Rebuild completato."
exit 0
fi
# ── Modalità fresh: build + setup completo ────────────────────────────────────
if [ "$MODE" = "fresh" ]; then
info "Stop crawler..."
$COMPOSE down
info "Aggiorno repo..."
git -C "$REPO_DIR" pull
info "Rilancio setup completo con rebuild..."
exec "$0"
fi
# ── 1. Directory dati ─────────────────────────────────────────────────────────
info "Creo directory dati: $DATA_DIR"
mkdir -p "$DATA_DIR"
success "Directory pronta."
# ── 2. sqlite3 sull'host (per query dirette) ──────────────────────────────────
if command -v sqlite3 &>/dev/null; then
success "sqlite3 già installato: $(sqlite3 --version | cut -d' ' -f1)"
else
info "Installo sqlite3..."
sudo apt-get install -y --quiet sqlite3
success "sqlite3 installato."
fi
# ── 3. Build immagine Docker ──────────────────────────────────────────────────
info "Build immagine Docker..."
$COMPOSE build --quiet
success "Immagine pronta."
# ── 4. Permessi sulla directory dati (file creati da Docker sono di root) ─────
for dbfile in "$DATA_DIR"/*.db "$DATA_DIR"/*.log; do
[ -f "$dbfile" ] || continue
if [ "$(stat -c '%U' "$dbfile")" = "root" ]; then
info "Correggo proprietario di $(basename "$dbfile")..."
sudo chown "$USER" "$dbfile"
fi
done
# ── 5. Migrazione/pulizia DB ──────────────────────────────────────────────────
if [ -f "$DATA_DIR/tracks.db" ]; then
info "Eseguo manutenzione tracks.db (migrazione schema + pulizia cortine)..."
python3 "$REPO_DIR/convert.py" --db "$DATA_DIR/tracks.db"
success "DB pronto."
else
info "Nessun tracks.db esistente, verrà creato al primo avvio."
fi
# ── 6. Cron job per normalizzazione giornaliera ───────────────────────────────
CRON_HOUR=$(echo "$NORMALIZE_AT" | cut -d: -f1)
CRON_MIN=$(echo "$NORMALIZE_AT" | cut -d: -f2)
DOCKER_BIN="$(which docker)"
CRON_CMD="$CRON_MIN $CRON_HOUR * * * \"$DOCKER_BIN\" compose -f $REPO_DIR/docker-compose.yml --profile normalize run --rm normalizer >> $DATA_DIR/normalize.log 2>&1 # tango-normalize"
# Rimuove eventuali voci precedenti, aggiunge quella aggiornata
( crontab -l 2>/dev/null | { grep -v "# tango-normalize" || true; }; echo "$CRON_CMD" ) | crontab -
success "Cron job configurato: normalizzazione ogni giorno alle $NORMALIZE_AT."
# ── 7. Avvio crawler ──────────────────────────────────────────────────────────
info "Avvio crawler..."
$COMPOSE up -d
success "Crawler avviato."
# ── Riepilogo ─────────────────────────────────────────────────────────────────
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo " Setup completato."
echo ""
echo " Dati: $DATA_DIR"
echo " Normalizza: ogni giorno alle $NORMALIZE_AT"
echo " Log cron: $DATA_DIR/normalize.log"
echo ""
echo " Comandi utili:"
echo " ./bin/tango help # tutti i comandi"
echo " ./bin/tango query --last 20 # ultimi brani"
echo " ./bin/tango stats orchestras --limit 10 # top orchestre"
echo " ./bin/tango logs # log crawler"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"