[Informes DASUTEN] Actualizados con novedades del pipeline de backups

Actualización de informes ejecutivo y técnico con:

1. Estado 100% completado (vs 95% anterior)
2. Impresión resuelta mediante symlink C:\Sistema
3. Pipeline de backups implementado:
   - 6 drones atómicos secuenciales
   - Comunicación vía JSON (/tmp/dron_*_output.json)
   - Google Drive como intermediario
   - DBCC CHECKDB para verificación

4. Dos modos de backup:
   - Completo: Semanal (~1.3 GB, 35-40 min)
   - Diferencial: Diario (~0.4-10 MB, 5-10 min)

5. Módulo común DasuExecutor:
   - Centraliza ejecución PowerShell remota
   - Elimina código repetido (-52% líneas)
   - 6 drones refactorizados

6. Integración con bkps.rb:
   - dasuten_full (semanal)
   - dasuten_diferencial (diario)

7. Nuevo anexo técnico en informe técnico:
   - Arquitectura de drones
   - Flujos completo y diferencial
   - Comandos de ejecución
   - Lecciones aprendidas

Versiones:
- 01_informe_ejecutivo: v0.3 → v0.4
- 02_informe_tecnico: v0.2 → v0.3
This commit is contained in:
Ricardo Monla
2026-04-14 20:28:38 -03:00
parent 892019fa22
commit ebe8cba9d0
2 changed files with 210 additions and 33 deletions
@@ -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.*
@@ -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.*