fix(systemd): versionar obs-index-sync.{sh,service,timer} no repo + remover --watch do indexer (decisão v2.7.2, incidente 110% CPU) — F0.5 Pipeline QT #2401

This commit is contained in:
2026-07-03 05:23:50 +01:00
parent f733998945
commit 9b2dfdc412
4 changed files with 53 additions and 1 deletions
+10
View File
@@ -0,0 +1,10 @@
[Unit]
Description=Observabilidade — indexer sessões + sync EasyPanel
After=network-online.target
[Service]
Type=oneshot
ExecStart=/home/ealmeida/.local/bin/obs-index-sync.sh
Environment="PATH=/home/ealmeida/.nvm/versions/node/v22.22.2/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
StandardOutput=append:/home/ealmeida/.logs/observability/indexer.log
StandardError=append:/home/ealmeida/.logs/observability/indexer.log
+31
View File
@@ -0,0 +1,31 @@
#!/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"
+10
View File
@@ -0,0 +1,10 @@
[Unit]
Description=Observabilidade — timer 15min
[Timer]
# OnCalendar absoluto: imune a daemon-reload (ver nota em monitor-alerts.timer).
OnCalendar=*:0/15
Persistent=true
[Install]
WantedBy=timers.target
+2 -1
View File
@@ -5,7 +5,8 @@ After=default.target
[Service] [Service]
Type=simple Type=simple
WorkingDirectory=/media/ealmeida/Dados/Dev/DashDescomplicar WorkingDirectory=/media/ealmeida/Dados/Dev/DashDescomplicar
ExecStart=/home/ealmeida/.nvm/versions/node/v22.22.2/bin/npx tsx api/scripts/sessions-indexer.ts --watch # NUNCA --watch: incidente 110% CPU (i7-7500U) — decisão v2.7.2: timer 15min --full (ver obs-index-sync.timer)
ExecStart=/home/ealmeida/.nvm/versions/node/v22.22.2/bin/npx tsx api/scripts/sessions-indexer.ts --full
Restart=on-failure Restart=on-failure
RestartSec=5 RestartSec=5
KillMode=mixed KillMode=mixed