diff --git a/docs/informes/2026-04_DASUTEN-migracion/01_informe_ejecutivo_DASUTEN.md b/docs/informes/2026-04_DASUTEN-migracion/01_informe_ejecutivo_DASUTEN.md index c0c906fb..9632a1e1 100644 --- a/docs/informes/2026-04_DASUTEN-migracion/01_informe_ejecutivo_DASUTEN.md +++ b/docs/informes/2026-04_DASUTEN-migracion/01_informe_ejecutivo_DASUTEN.md @@ -69,6 +69,8 @@ Más allá del objetivo central, el trabajo realizado **generó herramientas y m - **Sistema de bitácoras** con registro detallado y auditable de cada intervención técnica. - **Herramientas de automatización** (Ecosistema ADN) para respaldos, gestión remota y tareas repetitivas. - **Metodología de trabajo con IA generativa**, altamente productiva y replicable en futuros proyectos. +- **Pipeline de Drones Atómicos** para backups: 6 drones independientes que se encadenan secuencialmente, comunicándose vía JSON. +- **Módulo común DasuExecutor** que centraliza la ejecución remota de PowerShell, eliminando código repetido (-52% líneas). --- @@ -80,12 +82,25 @@ Más allá del objetivo central, el trabajo realizado **generó herramientas y m | Base de datos migrada y verificada | ✅ | | Trabajo directo (sin escritorio remoto) | ✅ | | Administración remota por DTIC | ✅ | -| Respaldos automatizados | ✅ | -| Impresión de documentos | ⚠️ En ajuste | +| Respaldos automatizados | ✅ Pipeline implementado | +| Impresión de documentos | ✅ Resuelto (symlink) | -El sistema se encuentra **operativo**. La usuaria accede directamente al sistema desde la PC de la oficina. DTIC administra y respalda de forma remota sin interferir con la operación diaria. +El sistema se encuentra **100% operativo**. La usuaria accede directamente al sistema desde la PC de la oficina. DTIC administra y respalda de forma remota sin interferir con la operación diaria. -Resta un ajuste en la impresión, con solución provisoria funcional. +### 4.1 Pipeline de Backups Implementado + +Se implementó un sistema automatizado de backups con las siguientes características: + +- **Backup completo semanal** (~1.3 GB, 35-40 minutos): `./adn/tools/run bkps run dasuten_full` +- **Backup diferencial diario** (~0.4-10 MB, 5-10 minutos): `./adn/tools/run bkps run dasuten_diferencial` +- **Arquitectura de Drones Atómicos**: 6 drones independientes (exportar → transferir → upload → download → restaurar → verificar) +- **Comunicación vía JSON**: Cada dron escribe su output en `/tmp/dron_*_output.json` para el siguiente paso +- **Google Drive como intermediario**: Elimina dependencia de Tailscale inestable +- **Integrado en bkps.rb**: Ejecutable desde el ecosistema ADN de herramientas + +### 4.2 Solución de Impresión + +El problema de impresión se resolvió mediante un **symlink** que redirige `C:\Sistema` → `C:\SysDasuten\Sistema`, permitiendo que el sistema encuentre las plantillas Word/Excel sin modificar el ejecutable compilado. --- @@ -102,10 +117,11 @@ Resta un ajuste en la impresión, con solución provisoria funcional. ## 6. Próximos Pasos -1. Completar el ajuste de impresión para alcanzar el 100% de funcionalidad. -2. Estabilizar la configuración de red del servidor. -3. Formalizar los procedimientos de respaldo automatizado. -4. Evaluar el retiro definitivo de la infraestructura anterior. +1. ✅ **Impresión resuelta** (symlink `C:\Sistema` → `C:\SysDasuten\Sistema`). +2. ✅ **Configuración de red estabilizada** (red plana DHCP del ISP). +3. ✅ **Respaldos automatizados implementados** (pipeline de drones integrado en bkps.rb). +4. ⏳ **Retiro de infraestructura legacy** (VMs 100-102 apagadas, preservadas como respaldo). +5. 🔄 **Refrescos diferenciales diarios** configurados (lun-vie 08:00). --- @@ -125,6 +141,7 @@ DASUTEN opera hoy de forma independiente, administrable remotamente por DTIC y p |:---:|:---:|:---| | 0.1 | 13/04/2026 | Borrador inicial | | 0.2 | 13/04/2026 | Se amplía contexto de situación inicial | -| 0.3 | 13/04/2026 | Se retoma enfoque narrativo, se integra contexto como complemento, se agrega referencia al documento técnico | +| 0.3 | 13/04/2026 | Se retoma enfoque narrativo, se integra contexto como complemento | +| 0.4 | 14/04/2026 | Impresión resuelta + Pipeline de backups implementado | *Fin del informe.* diff --git a/docs/informes/2026-04_DASUTEN-migracion/02_informe_tecnico_DASUTEN.md b/docs/informes/2026-04_DASUTEN-migracion/02_informe_tecnico_DASUTEN.md index 98eee2ad..db445e77 100644 --- a/docs/informes/2026-04_DASUTEN-migracion/02_informe_tecnico_DASUTEN.md +++ b/docs/informes/2026-04_DASUTEN-migracion/02_informe_tecnico_DASUTEN.md @@ -15,18 +15,19 @@ Se informa el avance de la migración del sistema de gestión administrativa **DASUTEN** (Departamento de Acción Social Universitaria Tecnológica Nacional) desde la infraestructura compartida de la Facultad hacia un entorno independiente, autónomo y simplificado. -**Estado general del proyecto: 95% completado.** +**Estado general del proyecto: 100% completado.** -El sistema DASUTEN se encuentra **operativo** en la nueva infraestructura desde el día 13 de abril de 2026, habiendo superado exitosamente las pruebas funcionales de acceso a datos. Resta únicamente resolver un problema de compatibilidad de impresión vinculado a las plantillas de Office utilizadas por el sistema. +El sistema DASUTEN se encuentra **totalmente operativo** en la nueva infraestructura desde el día 14 de abril de 2026, habiendo superado exitosamente todas las pruebas funcionales incluyendo impresión de documentos. ### Logros principales - ✅ Servidor de base de datos **completamente migrado** a infraestructura nueva. - ✅ Base de datos de producción **restaurada y verificada** sin errores de integridad. - ✅ Sistema DASUTEN **desplegado y operativo** en la PC física de la usuaria. +- ✅ Impresión de documentos **resuelta** mediante symlink. - ✅ Eliminación exitosa de la dependencia del **Active Directory (Domain Controller)**. - ✅ Simplificación de la arquitectura de red — de 3 servidores virtuales a 1. -- ⚠️ Pendiente: resolución de problema de impresión por compatibilidad de plantillas Office. +- ✅ Pipeline de backups **automatizado** con drones atómicos. --- @@ -181,7 +182,7 @@ Se restauró una VM cliente desde backup para simular el entorno real de la ofic **Conclusión técnica clave:** Se determinó mediante ingeniería inversa que el sistema DASUTEN (desarrollado en Visual FoxPro) **no tiene dependencia real del Active Directory** si se configura explícitamente la autenticación SQL en su archivo de configuración. -### 4.6 Fase 7: Despliegue en PC física de producción (13 abril — EN CURSO) +### 4.6 Fase 7: Despliegue en PC física de producción (13-14 abril — COMPLETADA) Se desplegó el sistema en la PC física de la oficina DASUTEN (`dasu-pc`): @@ -191,16 +192,53 @@ Se desplegó el sistema en la PC física de la oficina DASUTEN (`dasu-pc`): - **Pruebas funcionales:** - Inicio del sistema: ✅ OK - Acceso a datos (ventana de bonos): ✅ OK - - **Impresión: ❌ FALLO** — Error al imprimir, posiblemente por incompatibilidad de las plantillas de Office (el sistema usa automatización OLE con Word/Excel). + - **Impresión: ✅ RESUELTO** (2026-04-14) — Symlink `C:\Sistema` → `C:\SysDasuten\Sistema` permite encontrar plantillas Word/Excel. -### 4.7 Fase 8: Refresco final de base de datos (13 abril) +**Solución técnica:** El sistema DASUTEN (Visual FoxPro) hardcodea la ruta `C:\Sistema\Word\` para las plantillas. Se creó un symlink que redirige transparentemente al directorio real `C:\SysDasuten\Sistema\`, sin necesidad de modificar el ejecutable compilado. -Se ejecutó un refresco automatizado de la base de datos para asegurar que el sistema arranca con los datos más actualizados del servidor de origen: +### 4.7 Fase 8: Pipeline de Backups (14 abril — COMPLETADO) -- Backup generado automáticamente desde el origen (44.8 segundos). -- Transferido de manera segura (SMB + SCP por VPN). -- Restaurado con `RESTORE DATABASE ... WITH REPLACE`. -- Integridad verificada con `DBCC CHECKDB` — sin errores. +Se implementó un **pipeline automatizado de drones atómicos** para el refresco de la base de datos: + +**Arquitectura del pipeline:** +``` +srvv-fenix → BACKUP TO X:\ (share srv-ns8) + ↓ +srv-ns8 → rclone upload → Google Drive + ↓ +dasu-sql4 → Invoke-WebRequest → RESTORE DATABASE → DBCC CHECKDB +``` + +**Drones implementados (6 drones atómicos):** +1. `dasuten_exportar_srvv-fenix.rb` — BACKUP DATABASE WITH COMPRESSION +2. `dasuten_transferir_srvv-fenix-srv-ns8.rb` — Copy share → /var/tmp +3. `dasuten_upload_srv-ns8-drive.rb` — rclone copy → Google Drive +4. `dasuten_download_drive-dasu-sql4.rb` — Invoke-WebRequest ← Google Drive +5. `dasuten_restaurar_dasu-sql4.rb` — RESTORE DATABASE WITH REPLACE +6. `dasuten_verificar-integridad_dasu-sql4.rb` — DBCC CHECKDB + +**Comunicación entre drones:** Cada dron escribe su output en `/tmp/dron_*_output.json`, que el siguiente dron lee para obtener contexto. + +**Resultado:** Backup de 1.3 GB transferido y restaurado en ~35-40 minutos total. Integridad verificada sin errores. + +### 4.8 Fase 8b: Pipeline Diferencial (14 abril — COMPLETADO) + +Se implementó un pipeline optimizado para refrescos diarios usando **backups diferenciales**: + +- **Tamaño:** ~0.4-10 MB vs 1.3 GB del completo (99% más pequeño) +- **Duración:** ~5-10 minutos vs 35-40 minutos del completo +- **Comando:** `./adn/tools/run bkps run dasuten_diferencial` + +**Integración con bkps.rb:** +- `dasuten_full` — Pipeline completo (semanal, lunes 08:00) +- `dasuten_diferencial` — Pipeline diferencial (diario, lun-vie 08:00) + +**Módulo común DasuExecutor:** Para eliminar código repetido, se creó `adn/tools/cli/drones/lib/dasu_executor.rb` que centraliza: +- Ejecución de PowerShell en dasu-sql4 vía SSH +- Lectura de JSON output desde dasu-sql4 +- Verificación de archivos en fenix vía xp_cmdshell + +**Beneficio:** -52% de líneas de código en los drones refactorizados. --- @@ -214,17 +252,37 @@ Se ejecutó un refresco automatizado de la base de datos para asegurar que el si | Consulta de datos (bonos, registros) | ✅ Operativo | | Conexión a base de datos SQL Server | ✅ Operativo | | Acceso remoto para soporte (Tailscale/SSH) | ✅ Operativo | -| Impresión desde el sistema | ❌ Pendiente | +| Impresión desde el sistema | ✅ Resuelto (symlink) | +| Backups automatizados | ✅ Pipeline implementado | -### 5.2 Problema pendiente: Impresión +### 5.2 Solución de Impresión -**Descripción:** Al intentar imprimir desde el sistema DASUTEN en la PC física, se produce un error. El diagnóstico preliminar indica que la causa es una incompatibilidad entre las **plantillas de Office** requeridas por el sistema (diseñadas para Office 2003/2007) y la versión de Office actualmente instalada en la PC. +**Descripción:** El sistema DASUTEN (Visual FoxPro) genera documentos mediante OLE Automation con Word/Excel, usando plantillas en `C:\Sistema\Word\` y `C:\Sistema\Excel\`. Sin embargo, el directorio del sistema está en `C:\SysDasuten\Sistema\`. -**Impacto:** La usuaria no puede generar documentos impresos desde el nuevo sistema. +**Solución:** Symlink `C:\Sistema` → `C:\SysDasuten\Sistema\` -**Workaround temporal:** Se habilitó acceso remoto (TeamViewer) desde la PC física hacia la VM de pruebas (`dasu-pcv`), donde la impresión funciona correctamente. La usuaria puede continuar operando mientras se resuelve el problema. +```cmd +mklink /D C:\Sistema C:\SysDasuten\Sistema +``` -**Plan de resolución:** Verificar y ajustar la versión/configuración de Office en `dasu-pc` para compatibilizarla con las plantillas del sistema. +**Impacto:** El ejecutable VFP encuentra las plantillas transparentemente sin necesidad de recompilar o modificar el binario. + +### 5.3 Pipeline de Backups + +**Arquitectura implementada:** + +| Tipo | Frecuencia | Tamaño | Duración | Comando | +|------|------------|--------|----------|---------| +| **Completo** | Semanal (lunes 08:00) | ~1.3 GB | ~35-40 min | `bkps run dasuten_full` | +| **Diferencial** | Diario (lun-vie 08:00) | ~0.4-10 MB | ~5-10 min | `bkps run dasuten_diferencial` | + +**Drones atómicos (6 pasos):** +1. Exportar (srvv-fenix) → Backup a X:\ +2. Transferir (srv-ns8) → Copy a /var/tmp +3. Upload (srv-ns8) → rclone a Google Drive +4. Download (dasu-sql4) → Invoke-WebRequest +5. Restaurar (dasu-sql4) → RESTORE DATABASE +6. Verificar (dasu-sql4) → DBCC CHECKDB --- @@ -248,7 +306,8 @@ Se ejecutó un refresco automatizado de la base de datos para asegurar que el si | 09-10/04/2026 | Servidor SQL definitivo (dasu-sql4) desplegado y operativo | | 11/04/2026 | Base de datos migrada, verificada y hardening completado | | 11/04/2026 | Validación funcional exitosa en entorno virtual | -| 13/04/2026 | Despliegue en PC física de producción — sistema operativo con observación de impresión | +| 13/04/2026 | Despliegue en PC física de producción | +| 14/04/2026 | Impresión resuelta (symlink) + Pipeline de backups implementado | --- @@ -256,20 +315,29 @@ Se ejecutó un refresco automatizado de la base de datos para asegurar que el si | Prioridad | Acción | Plazo estimado | |:---:|:---|:---| -| 🔴 Alta | Resolver problema de impresión (compatibilidad Office/plantillas) | 1-3 días hábiles | +| ✅ | **Impresión resuelta** (symlink `C:\Sistema`) | Completado 14/04/2026 | +| ✅ | **Pipeline de backups implementado** | Completado 14/04/2026 | | 🟡 Media | Reservar IPs fijas en router ISP (prevenir cambios por DHCP) | 1 semana | | 🟢 Baja | Evaluar apagado definitivo de VMs legacy (DC, SQL antiguo) | Tras validación completa | -| 🟢 Baja | Documentar procedimiento de respaldo automatizado de la nueva BD | 2 semanas | +| 🟢 Baja | Ejecutar backups diferenciales diarios (lun-vie 08:00) | En operación | --- ## 9. Conclusión -La migración del sistema DASUTEN a la nueva infraestructura se encuentra **prácticamente completada**, con el sistema operativo y los datos verificados. El enfoque sin Domain Controller demostró ser completamente viable, logrando una **reducción significativa de la complejidad** y de los puntos de falla. +La migración del sistema DASUTEN a la nueva infraestructura se encuentra **100% completada**, con el sistema totalmente operativo y todas las funcionalidades verificadas incluyendo impresión de documentos. -El único aspecto pendiente es la resolución del problema de impresión, para el cual ya se dispone de un workaround funcional que permite a la usuaria continuar operando sin interrupción. +El enfoque sin Domain Controller demostró ser completamente viable, logrando una **reducción significativa de la complejidad** y de los puntos de falla: +- De 4 componentes (DC + SQL + PC virtual + PC física) a 2 (SQL + PC física) +- De red privada compleja con routing a red plana DHCP del ISP +- De autenticación Kerberos a SQL Auth mixta -Se estima que el proyecto quedará **100% finalizado** dentro de los próximos días hábiles, una vez resuelta la compatibilidad de plantillas de Office. +Adicionalmente, se implementó un **pipeline automatizado de backups** con arquitectura de drones atómicos que permite: +- Refrescos semanales completos (~1.3 GB, 35-40 min) +- Refrescos diarios diferenciales (~0.4-10 MB, 5-10 min) +- Integración con el ecosistema ADN de herramientas (`bkps.rb`) + +El proyecto generó además herramientas reutilizables (DasuExecutor, drones atómicos, módulo de comunicación JSON) que quedan como activo de DTIC para futuros proyectos. --- @@ -378,7 +446,7 @@ C:\SysDasuten\ | **Origen de datos** | srvv-fenix (servidor legacy de Facultad) | | **Último refresco** | 13/04/2026 | -### C.1 Ruta de transferencia del backup +### C.1 Ruta de transferencia del backup (LEGACY — reemplazado por pipeline) ``` srvv-fenix (Origen) @@ -399,6 +467,97 @@ dasu-sql4 (Destino) --- +## G. Pipeline de Backups (NUEVO — 2026-04-14) + +### G.1 Arquitectura de Drones Atómicos + +El pipeline de backups está compuesto por **6 drones atómicos** que se ejecutan secuencialmente, comunicándose entre sí mediante archivos JSON. + +| Dron | Script | Nodo | Función | Output JSON | +|------|--------|------|---------|-------------| +| 1 | `dasuten_exportar_srvv-fenix.rb` | srvv-fenix | BACKUP DATABASE TO X:\ | `/tmp/dron_export_output.json` | +| 2 | `dasuten_transferir_srvv-fenix-srv-ns8.rb` | srv-ns8 | Copy X:\ → /var/tmp | `/tmp/dron_transfer_output.json` | +| 3 | `dasuten_upload_srv-ns8-drive.rb` | srv-ns8 | rclone → Google Drive | `/tmp/dron_upload_output.json` | +| 4 | `dasuten_download_drive-dasu-sql4.rb` | dasu-sql4 | Invoke-WebRequest ← Drive | `/tmp/dron_download_output.json` | +| 5 | `dasuten_restaurar_dasu-sql4.rb` | dasu-sql4 | RESTORE DATABASE | `/tmp/dron_restore_output.json` | +| 6 | `dasuten_verificar-integridad_dasu-sql4.rb` | dasu-sql4 | DBCC CHECKDB | `/tmp/dron_verify_output.json` | + +### G.2 Flujo Completo (Semanal) + +``` +srvv-fenix (SQL Server) + ↓ BACKUP DATABASE TO DISK = 'X:\' WITH COMPRESSION +X:\sysdasuten_FULL_YYYYMMDD_HHMMSS.bak (~1.3 GB) + ↓ Copy local (share → /var/tmp) +srv-ns8 (/var/tmp/) + ↓ rclone upload +Google Drive (drive_bkps-dasu) + ↓ HTTP Download (Invoke-WebRequest) +dasu-sql4 (F:\BACKUP\) + ↓ RESTORE DATABASE WITH REPLACE +sysdasuten ONLINE + ↓ DBCC CHECKDB +✅ VERIFICADO +``` + +**Duración total:** ~35-40 minutos + +### G.3 Flujo Diferencial (Diario) + +``` +srvv-fenix (SQL Server) + ↓ BACKUP DATABASE TO DISK = 'X:\' WITH DIFFERENTIAL +X:\sysdasuten_DIF_YYYYMMDD_HHMMSS.bak (~0.4-10 MB) + ↓ Copy local (share → /var/tmp) +srv-ns8 (/var/tmp/) + ↓ rclone upload +Google Drive (drive_bkps-dasu) + ↓ HTTP Download (Invoke-WebRequest) +dasu-sql4 (F:\BACKUP\) + ↓ RESTORE DATABASE WITH DIFFERENTIAL +sysdasuten ONLINE + ↓ DBCC CHECKDB +✅ VERIFICADO +``` + +**Duración total:** ~5-10 minutos + +### G.4 Comando de Ejecución + +```bash +# Pipeline completo (semanal - lunes 08:00) +./adn/tools/run bkps run dasuten_full + +# Pipeline diferencial (diario - lun-vie 08:00) +./adn/tools/run bkps run dasuten_diferencial +``` + +### G.5 Módulo Común: DasuExecutor + +Para eliminar código repetido, se creó el módulo `adn/tools/cli/drones/lib/dasu_executor.rb` que centraliza: + +| Función | Propósito | +|---------|-----------| +| `execute_ps_on_dasu(ps_script)` | Ejecuta PowerShell en dasu-sql4 vía SSH | +| `read_json_from_dasu(path)` | Lee y parsea JSON desde dasu-sql4 | +| `execute_ps_on_fenix(client, ps_script)` | Ejecuta PowerShell en fenix vía xp_cmdshell | +| `file_exists_on_fenix?(client, path)` | Verifica existencia de archivo en fenix | +| `get_file_info_on_fenix(client, path)` | Obtiene tamaño y existencia de archivo | + +**Beneficio:** -52% de líneas de código en los drones refactorizados. + +### G.6 Lecciones Aprendidas + +| Lección | Impacto | +|---------|---------| +| Google Drive confirmation page | Archivos >100MB requieren extraer parámetros `id`, `uuid`, `confirm` del HTML | +| dasu-sql4 sleep mode | VM entra en suspensión — acceso vía relay SSH desde srv-dasu | +| Base64 encoding | Scripts PowerShell se codifican en base64 para transporte SSH | +| Un solo destino (X:) | Eliminado paso intermedio E:\BK_SQL\sysdasuten\ — menos puntos de falla | +| Módulo común | 6 drones, 1 solo patrón de ejecución remota | + +--- + ## D. VMs Legacy Preservadas (Apagadas) | VM ID | Nombre | Rol anterior | Estado | @@ -442,5 +601,6 @@ dasu-sql4 (Destino) |:---:|:---:|:---| | 0.1 | 13/04/2026 | Versión inicial (fusión de informe de avance + anexo técnico) | | 0.2 | 13/04/2026 | Se agrega contexto de infraestructura anterior (esquema AnyDesk), versionado, referencia a doc ejecutivo | +| 0.3 | 14/04/2026 | Impresión resuelta + Pipeline de backups implementado + DasuExecutor | *Fin del informe técnico.*