Cambios realizados:
1. dasuten_exportar_srvv-fenix.rb:
- Genera backup en disco local: E:\BK_SQL\sysdasuten\
- Copia automáticamente a unidad de red X: (share srv-ns8)
- Usa PowerShell para copiar al share mapeado
- Verifica ambos destinos
2. dasuten_transferir_srvv-fenix-srv-ns8.rb:
- Simplificado: ya no descarga desde fenix vía SMB
- El backup ya está en /mnt/ns8Disco2/bkps-dasuten/
- Copia local: share → /var/tmp/ (para rclone upload)
Flujo actualizado:
1. SQL Server → E:\BK_SQL\sysdasuten\archivo.bak (local fenix)
2. PowerShell → X:\archivo.bak (share srv-ns8)
3. Transfer dron → /var/tmp/archivo.bak (para rclone)
4. Upload dron → Google Drive
Requisito en srvv-fenix:
net use X: \\10.0.10.8\bkps-dasuten /user:rmonla <password>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Cambios realizados:
1. srv-ns8 - Share SMB configurado:
- Path: /mnt/ns8Disco2/bkps-dasuten
- Share name: bkps-dasuten
- Usuario: rmonla
- Acceso: \\10.0.10.8\bkps-dasuten
2. dasuten_transferir_srvv-fenix-srv-ns8.rb:
- Elimina copia automática al share
- Agrega nota sobre cómo copiar manualmente desde fenix
- Mantiene backup en /var/tmp/ para upload a Drive
Uso desde srvv-fenix (Windows):
net use X: \\10.0.10.8\bkps-dasuten /user:rmonla <password>
copy E:\BK_SQL\sysdasuten\archivo.bak X:\
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Cambios realizados:
1. dasuten_transferir_srvv-fenix-srv-ns8.rb:
- Agrega paso [3/3] para copiar al directorio compartido
- Directorio: /mnt/ns8Disco2/bkps-dasuten/
- Mantiene copia temporal en /var/tmp/ para upload a Drive
- Output incluye backup_ns8 con ruta completa
Flujo actualizado:
srvv-fenix (E:\BK_SQL\sysdasuten\)
↓ SMB
srv-ns8 (/var/tmp/) ← temporal para upload
↓ copia local
srv-ns8 (/mnt/ns8Disco2/bkps-dasuten/) ← share permanente
Resultado:
- Backup original se preserva en fenix
- Copia en share ns8 para resguardo local
- Copia temporal para upload a Google Drive
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Cambios realizados:
1. dasuten_exportar_srvv-fenix.rb (FULL):
- Nuevo formato: E:\BK_SQL\sysdasuten\sysdasuten_FULL_YYYYMMDD_HHMMSS.bak
- Crea directorio con xp_create_subdir si no existe
- Usa compresión nativa de SQL Server (WITH COMPRESSION)
- Output: backup_tipo='full'
2. dasuten_exportar_diferencial_srvv-fenix.rb (DIF):
- Nuevo formato: E:\BK_SQL\sysdasuten\sysdasuten_DIF_YYYYMMDD_HHMMSS.bak
- Crea directorio si no existe
- Usa compresión nativa (WITH DIFFERENTIAL, COMPRESSION)
- Output: backup_tipo='differential'
3. dasuten_download_drive-dasu-sql4.rb:
- Lee nombre de archivo desde upload_output JSON
- Guarda como F:\BACKUP\{nombre_real_del_archivo}.bak
- Soporta formatos FULL y DIF
4. dasuten_restaurar_dasu-sql4.rb:
- Lee backup_local desde download_output JSON
- Busca patrón sysdasuten_FULL_*.bak si no hay output
- Encuentra el más reciente por LastWriteTime
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Soporte para comando `relay` en el CLI (start/stop/status/ps1)
- Redirige tráfico HTTPS a través de puerto `socat` en host relay (ej: srv-dasu)
- Permite a las PCs de LAN interna que no corren VPN conectar con NS8 W-ZOMBI en Tailscale.
- Se integra de forma robusta con la tool de `wzombi`
- Crear ámbito A07_dtic-DNS con manifiesto y plan A07.P001
- Implementar CLI dns.rb con 7 subcomandos (status, zona, registros, buscar, backup, reload, corefile)
- Detectar servidor srvv-dns: CoreDNS en Docker (10.0.10.2, VM 112 en srv-pmox1)
- Documentar zona frlr.utn.edu.ar con 20+ registros (A, CNAME, MX, TXT, SRV)
- Actualizar ficha nodos/srvv-dns.md con información técnica completa
- Agregar script reparar.sh para ns8-apps (pendiente de ejecución)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Cambios:
- ejecutor.rb: Corregir lectura de output con Open3
- bitacora_db.rb: Agregar métodos crear_evento/actualizar_evento (public)
- dron_db.rb: Corregir conversión de PG::Result a Hash (.first.to_h)
- vigilante.rb: Corregir formato de fecha en dashboard
- migrations/004: Crear tabla bitacoras.events para Bitácora Web
Pruebas:
- dron lanzar --evento AUTO --nota "Test" -- echo "hola" ✅
- dron flota ✅
- dron salud ✅
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Principio "Menos es Más": código común centralizado en un solo lugar.
Cambios:
- Nuevo módulo Dron::Base con funcionalidad compartida:
- logger: Logger compartido (evita crear múltiples instancias)
- db_query: Ejecución de SQL con resultados
- db_exec: Ejecución de SQL sin resultados
- formato_duracion: Utilitario para formatear segundos
- slice_safe: Slice seguro de strings
- blank?: Verificación de strings vacíos/nulos
- Todos los módulos atómicos (ejecutor, vigilante, sanador, bitacora)
ahora usan Base.logger, Base.db_query, Base.db_exec
Beneficios:
- Un solo lugar para corregir errores comunes
- Menos duplicación de código (~40% menos líneas)
- Consistencia en manejo de logs y DB
- Fácil extensión: nuevos drones heredan funcionalidad automática
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Implementación del sistema AtomicDrones basado en "Menos es Más":
- Refactorización de dron.rb a dispatcher + módulos atómicos
- Nuevos módulos: ejecutor, vigilante, sanador, bitacora
- DronDB para acceso a datos en PostgreSQL
- Tablas: dron_logs, dron_avances, dron_metricas
- Views: vw_dron_estado, vw_dron_zombies, vw_dron_metricas_semanal
- Health check con detección de zombies (heartbeat > 5min)
- Dashboard compacto de la flota
- Saneamiento con reintentos (backoff exponencial) y limpieza
Comandos soportados:
- dron lanzar: Ejecutar comando como dron
- dron flota: Dashboard de la flota
- dron salud: Health check activo
- dron estado <ID>: Estado detallado
- dron sanear: Saneamiento completo
- dron limpiar: Limpieza de antiguos
- dron reintentar: Re-intentar fallidos
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Nuevo subcomando: ./adn/tools/run nodos info <nodo>
- Muestra IP, puerto SSH, usuario, auth, bóveda, host, SO, VMID
- Lecturas directas de fichas nodos/*.md via NodosInfo
- Campos no detectados se marcan como (no detectado)
- Completa la arquitectura: info.rb es submódulo + herramienta CLI
Ejemplo: nodos info pcv-dasu0 → IP, puerto 7022, DASUTEN\admindasu...
- 15 tests, 0 failures
- Evento 1079 (17:25→17:28)
Arquitectura antes:
core/nodos_info.rb → usado por 4 CLIs
core/ejecutor_remoto.rb → usado por proceso.rb
core/triggers.rb → usado por triggers.rb
core/eventos.rb → usado por triggers.rb
core/configurador.rb → usado por backup.rb
Arquitectura después:
cli/nodos/info.rb ← submódulo de nodos
cli/ssh/ejecutor.rb ← submódulo de ssh
cli/triggers/motor.rb ← submódulo de triggers
cli/triggers/eventos.rb ← submódulo de triggers
cli/backup/configurador.rb ← submódulo de backup
core/ queda limpio con solo infraestructura genuina:
colores, constants, error_handler, logger, help_formatter,
conciliador (transversal), validador (obsoleto)
- 15 tests pasan sin regresiones
- Evento 1078 (17:14→17:17)
- Crear adn/tools/cli/ssh.rb con soporte passphrase RSA y contraseñas
- ProxyJump automático para VMs DASUTEN (dc/sql/pcv-dasuten via srv-dasu)
- Registrar subcomando ssh en run y adn/README.md
- Verificado: conexión exitosa a srv-dasu via Tailscale
- 15 tests pasan sin regresiones
- Evento 1075 (15:47→15:56)
- S1: Eliminar 'triggers' duplicado en run (líneas 109/131)
- S2: Eliminar cli/commit.rb (truncado, sin uso)
- S3: Eliminar cli/inicio.rb y cli/cierre.rb (legacy, jornada.rb los reemplaza)
- S4: Mover 4 planes obsoletos de docs/plan/adn/ a docs/_hist/plan/adn/
- S5: Mover 14 backups de planes y 3 docs técnicos a docs/_hist/
- S6: Eliminar manifiesto vacío P2604_proyecto_p2604.md
- S7: Corregir referencia a plan obsoleto en run
- S8: Dejar de cargar core/validador.rb obsoleto en run
- S9: Limpiar progreso duplicado en P2604_mejoras_ADN.md
- Agregar Fase 10 al plan P2604 con 10 tareas
- Un solo punto de verdad: adn/README.md
- Un solo plan: docs/proy/p2604_mejoras_ADN/P2604_mejoras_ADN.md
- Registro en bitácora: evento 1073