32 lines
1.7 KiB
Bash
32 lines
1.7 KiB
Bash
#!/bin/bash
|
|
# obs-index-sync.sh — indexa sessões Claude/Hermes/OpenCode e sincroniza sessions.db para o volume EasyPanel.
|
|
# CANÓNICO: este ficheiro vive NO REPO (systemd/obs-index-sync.sh) e é instalado por systemd/install-indexer.sh.
|
|
# Lição 05-2026: a cópia única em ~/.local/bin perdeu-se e ninguém deu conta durante semanas (F0.5 Pipeline QT #2401).
|
|
set -uo pipefail
|
|
DASH_DIR="/media/ealmeida/Dados/Dev/DashDescomplicar"
|
|
DB_LOCAL="$HOME/.claude-work/sessions.db"
|
|
REMOTE_HOST="root@5.9.90.70"
|
|
REMOTE_PATH="/root/data/dashboard-descomplicar/sessions.db"
|
|
LOG="$HOME/.logs/observability/indexer.log"
|
|
NODE="/home/ealmeida/.nvm/versions/node/v22.22.2/bin/node"
|
|
NPX="/home/ealmeida/.nvm/versions/node/v22.22.2/bin/npx"
|
|
mkdir -p "$(dirname "$LOG")"
|
|
echo "[$(date -Iseconds)] Inicio" >> "$LOG"
|
|
# Indexar
|
|
cd "$DASH_DIR"
|
|
OBSERVABILIDADE_DB="$DB_LOCAL" "$NPX" tsx api/scripts/sessions-indexer.ts --full >> "$LOG" 2>&1 || true
|
|
# Checkpoint DB e forcar journal_mode=DELETE para evitar WAL inconsistente
|
|
python3 -c "
|
|
import sqlite3, os
|
|
path = os.path.expanduser(\"$DB_LOCAL\")
|
|
db = sqlite3.connect(path)
|
|
db.execute(\"PRAGMA wal_checkpoint(TRUNCATE)\")
|
|
db.execute(\"PRAGMA journal_mode=DELETE\")
|
|
db.close()
|
|
" 2>/dev/null || true
|
|
# Sincronizar para EasyPanel
|
|
rsync -az --checksum "$DB_LOCAL" "$REMOTE_HOST:$REMOTE_PATH" >> "$LOG" 2>&1
|
|
# Limpar WAL/SHM no host EasyPanel e reiniciar servico Swarm
|
|
ssh "$REMOTE_HOST" "rm -f /root/data/dashboard-descomplicar/sessions.db-shm /root/data/dashboard-descomplicar/sessions.db-wal && docker service update --detach=true --force descomplicar_dashboard_descomplicar 1>/dev/null 2>&1" >> "$LOG" 2>&1 || true
|
|
echo "[$(date -Iseconds)] Concluido - $(du -sh "$DB_LOCAL" | cut -f1)" >> "$LOG"
|