refactor(ambitos): Migración completa dtic-DASUTEN (A04) y dtic-BKPs (A03) + herramientas ADN

Migración dtic-DASUTEN a estándar A04:
- A04_dtic-DASUTEN.md: Manifiesto creado
- A04.P001 a A04.P005: Planes renombrados de P2601.*
- _hist/_hist_P2601_dasuten.md: Legacy archivado

Migración dtic-BKPs a estándar A03:
- A03_dtic-BKPs.md: Manifiesto creado
- A03.P001, A03.P002: Planes migrados
- docs/ambito/dtic-BKPs/: Nueva estructura

Herramientas ADN nuevas:
- adn/tools/bkps/: BKPs migrado a tools ADN
- adn/tools/cli/dron.rb: Vigía de tareas largas
- adn/tools/cli/copiloto.rb: Asistente CLI
- adn/tools/cli/novato.rb: CLI de aprendizaje

Limpieza:
- dtic-BKPs/ → _hist/dtic-BKPs/ (legacy archivado)
- adn/tools/cli/backup.rb → _hist/ (migrado a bkps.rb)

Otros:
- nodos/pcv-dasu1.md, srvv-data.md, srvv-nginx-rm.md: Actualizados
- adn/tools/core/conciliador.rb: Mejoras
- adn/tools/w-zombi/data/cmd.json: Actualizado

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Ricardo Monla
2026-04-07 10:23:53 -03:00
co-authored by Claude Opus 4.6
parent 018e45e046
commit 1802c25194
61 changed files with 3148 additions and 1201 deletions
+87
View File
@@ -0,0 +1,87 @@
#!/bin/bash
# ==========================================================
# adn/tools/bkps/cron-bkps.sh — Wrapper cron para backups
# ----------------------------------------------------------
# Ejecuta un comando bkps con:
# - Lockfile (evita ejecuciones simultáneas)
# - Bitácora automática vía dron
# - Logging de salida
#
# Uso en crontab:
# 0 2 * * * /ruta/adn/tools/bkps/cron-bkps.sh C4
# 0 3 * * * /ruta/adn/tools/bkps/cron-bkps.sh T3
#
# Ejemplo manual:
# ./adn/tools/bkps/cron-bkps.sh C4 "Pipeline nocturno C4"
# ==========================================================
set -euo pipefail
# ─── Configuración ─────────────────────────────────────────
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../../.." && pwd)"
ADN_RUN="$PROJECT_ROOT/adn/tools/run"
LOCK_DIR="$PROJECT_ROOT/tmp/locks"
LOG_DIR="$PROJECT_ROOT/tmp/logs/bkps"
mkdir -p "$LOCK_DIR" "$LOG_DIR"
# ─── Argumentos ────────────────────────────────────────────
REF="${1:-}"
NOTA="${2:-Cron: bkps run $REF --batch}"
AMBITO="dtic-BKPs"
NODO="srv-ns8"
if [ -z "$REF" ]; then
echo "✗ Uso: cron-bkps.sh <T1|C1|ID> [nota]"
exit 1
fi
# ─── Lockfile ──────────────────────────────────────────────
LOCKFILE="$LOCK_DIR/bkps_${REF}.lock"
if [ -f "$LOCKFILE" ]; then
PID_LOCK=$(cat "$LOCKFILE")
if kill -0 "$PID_LOCK" 2>/dev/null; then
echo "⚠ bkps $REF ya está corriendo (PID: $PID_LOCK, lock: $LOCKFILE)"
exit 0 # No es error, simplemente ya está corriendo
else
echo " Lock stale removido (PID $PID_LOCK ya no existe)"
rm -f "$LOCKFILE"
fi
fi
echo $$ > "$LOCKFILE"
trap 'rm -f "$LOCKFILE"' EXIT
# ─── Log ───────────────────────────────────────────────────
FECHA=$(date +%Y-%m-%d)
HORA=$(date +%H:%M)
LOGFILE="$LOG_DIR/bkps_${REF}_${FECHA}_${HORA//:/}.log"
echo "[$(date)] cron-bkps: Iniciando $REF" >> "$LOGFILE"
# ─── Bitácora + Ejecución via Dron ──────────────────────
# Crear evento
EVENTO_ID=$("$ADN_RUN" db evento:crear \
--ambito "$AMBITO" \
--nodo "$NODO" \
--descripcion "$NOTA" \
--inicio "$HORA" \
--modo R --ia 2>&1 | grep -oP 'ID \K\d+' | tail -1)
if [ -z "$EVENTO_ID" ]; then
echo "[$(date)] cron-bkps: ⚠ No se pudo crear evento, ejecutando sin bitácora" >> "$LOGFILE"
"$ADN_RUN" bkps run "$REF" --batch >> "$LOGFILE" 2>&1
EXIT_CODE=$?
else
echo "[$(date)] cron-bkps: Evento #$EVENTO_ID creado, delegando al dron" >> "$LOGFILE"
"$ADN_RUN" dron lanzar \
--evento "$EVENTO_ID" \
--nota "$NOTA" \
-- "$ADN_RUN" bkps run "$REF" --batch >> "$LOGFILE" 2>&1
EXIT_CODE=$?
fi
echo "[$(date)] cron-bkps: Finalizado con código $EXIT_CODE" >> "$LOGFILE"
exit $EXIT_CODE