18 KiB
18 KiB
US-ADM-006: Gestionar Backups y Restauración
ID: US-ADM-006
Módulo: MAI-013
Relacionado con: RF-ADM-005, ET-ADM-004
Prioridad: CrÃtica
Story Points: 8
ð Historia de Usuario
Como Director General o Administrador de Sistemas
Quiero gestionar backups automáticos y poder restaurar el sistema cuando sea necesario
Para garantizar la continuidad del negocio y cumplir con los RTO/RPO definidos
â Criterios de Aceptación
1. Ver Lista de Backups
Given que soy Director o SysAdmin
When accedo a "Administración > Backups"
Then debo ver una tabla con todos los backups con:
- Fecha y hora de creación
- Tipo (Full, Incremental, Files, Snapshot)
- Tamaño (GB)
- Estado (Completado, En Progreso, Fallido)
- Verificado (â/â)
- Ubicación (Local, S3)
- Expira en (dÃas restantes)
- Acciones: Descargar, Restaurar, Verificar, Eliminar
And ordenados por fecha descendente
2. Crear Backup Manual
Given que necesito un backup inmediato antes de un cambio crÃtico
When hago clic en "Crear Backup Manual"
And selecciono tipo: "Full"
And confirmo la acción
Then el sistema debe:
- Iniciar el proceso de backup inmediatamente
- Mostrar progreso en tiempo real (%)
- Ejecutar pg_dump de la base de datos
- Calcular checksum SHA-256
- Subir a S3 con encriptación AES-256
- Actualizar estado a "Completado"
- Enviar notificación de éxito
- Estimar tiempo de finalización
3. Backups Automáticos Programados
Given que el sistema está en producción
Then deben ejecutarse automáticamente:
- Backup Full: Diario a las 3:00 AM
- Backup Incremental: Cada 6 horas
- Snapshot de archivos: Cada 12 horas
And si alguno falla:
- Reintentar automáticamente 3 veces
- Enviar alerta crÃtica por email + SMS
- Registrar en audit log con severidad "crÃtica"
4. Monitoreo de Progreso en Tiempo Real
Given que un backup está en progreso
When estoy en la página de Backups
Then debo ver:
- Barra de progreso animada
- Porcentaje completado (actualizado cada 5 segundos)
- Tiempo transcurrido
- Tiempo estimado restante
- Etapa actual: "Exportando base de datos...", "Calculando checksum...", "Subiendo a S3..."
5. Restaurar desde Backup
Given que necesito restaurar el sistema a un punto anterior
When selecciono un backup verificado
And hago clic en "Restaurar"
Then el sistema debe mostrar:
- â ïž Advertencia crÃtica: "Esta acción detendrá el sistema"
- Confirmación con checkbox: "Entiendo que se perderán cambios posteriores"
- Input para escribir: "RESTAURAR" (para confirmar)
When confirmo
Then el sistema debe:
- Validar checksum del backup antes de restaurar
- Detener la aplicación (modo mantenimiento)
- Crear un backup de seguridad pre-restauración
- Ejecutar pg_restore
- Reiniciar aplicación
- Enviar notificación de restauración exitosa
- Registrar en audit log
6. Verificación de Integridad
Given que un backup fue creado hace 3 dÃas
When hago clic en "Verificar Integridad"
Then el sistema debe:
- Descargar backup desde S3 (si no está local)
- Recalcular checksum
- Comparar con checksum original
- Crear base de datos temporal: "backup_test_[uuid]"
- Ejecutar pg_restore en DB temporal
- Ejecutar queries de validación básica
- Eliminar DB temporal
- Marcar backup como "Verificado" con timestamp
- Mostrar resultado: â
"Backup Ãntegro y restaurable"
7. Prueba de Restauración Automática
Given que es el primer domingo de cada mes a las 2:00 AM
When se ejecuta el cron de prueba de restauración
Then el sistema debe:
- Seleccionar el backup más reciente
- Crear DB temporal
- Restaurar en DB temporal
- Validar integridad de datos
- Enviar reporte por email:
- â
Backup restaurado exitosamente
- Tiempo de restauración: 12 minutos
- Registros validados: 150,000
- Estado: APTO PARA PRODUCCIÃN
- Eliminar DB temporal
8. Estrategia 3-2-1
Given que se completa un backup
Then el sistema debe mantener:
- 3 copias:
- 1 en disco local (/backups/)
- 1 en S3 región primaria (us-east-1)
- 1 en S3 región secundaria (us-west-2) via replicación
- 2 tipos de medios:
- Disco (local)
- Cloud (S3)
- 1 copia offsite:
- S3 fuera del datacenter principal
And validar que las 3 copias existen
9. Retención Automática
Given que existen backups con diferentes antigÃŒedades
Then el sistema debe mantener:
- Backups diarios: Ãltimos 7 dÃas
- Backups semanales: Ãltimas 4 semanas
- Backups mensuales: Ãltimos 12 meses
- Backups anuales: Ãltimos 3 años
And eliminar automáticamente los que excedan retención
And enviar notificación antes de eliminar backups antiguos
10. Dashboard de Salud de Backups
Given que accedo al Dashboard de Backups
Then debo ver widgets con:
- Estado del último backup (â
/â)
- Próximo backup programado (countdown)
- Tasa de éxito (últimos 30 dÃas)
- Espacio usado (local + S3)
- Gráfico de tamaño de backups (tendencia)
- Backups sin verificar (alerta si >3)
- RTO estimado (basado en última restauración)
- RPO actual (<1 hora)
ðš Mockup / Wireframe
Lista de Backups
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â Gestión de Backups [Crear Backup] [âïž Config] â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ€
â â
â ð Dashboard â
â ââââââââââââââ¬âââââââââââââ¬âââââââââââââ¬ââââââââââââââââââââââ â
â â Ãltimo â Próximo en â Tasa Ãxito â Espacio Usado â â
â â â
Exitoso â 2h 15m â 98.5% â 450 GB (Local) â â
â â Hace 4h â â (30 dÃas) â 1.2 TB (S3) â â
â ââââââââââââââŽâââââââââââââŽâââââââââââââŽââââââââââââââââââââââ â
â â
â Fecha/Hora Tipo Tamaño Estado Verificadoâ
â âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â 20 Nov 03:00 Full 12.5 GB â
â â
â [â][ð][â] â
â â
â 19 Nov 21:00 Incremental 2.3 GB â
â â
â [â][ð][â] â
â â
â 19 Nov 15:00 Incremental 1.8 GB â
â â
â [Verificar] [â][ð][â] â
â â
â 19 Nov 03:00 Full 12.1 GB â
â â
â [â][ð][â] â
â â
â 18 Nov 15:00 Incremental â³ En progreso... â
â ââââââââââââââââââââââ 60% â
â Subiendo a S3... 8 min restantes â
â â
â 18 Nov 03:00 Full â FALLIDO â
â Error: Insufficient disk space â
â [ð Reintentar] â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
Modal Crear Backup Manual
âââââââââââââââââââââââââââââââââââââââââââââââ
â Crear Backup Manual [X]â
âââââââââââââââââââââââââââââââââââââââââââââââ€
â â
â â ïž Esta operación puede afectar el â
â rendimiento del sistema temporalmente â
â â
â Tipo de Backup * â
â â Full (Base de datos completa) â
â â Incremental (Solo cambios) â
â â Files (Archivos y documentos) â
â â
â Tamaño estimado: ~12 GB â
â Tiempo estimado: ~15 minutos â
â â
â âïž Subir a S3 â
â âïž Calcular checksum â
â âïž Notificar al completar â
â â
â Etiqueta (opcional) â
â âââââââââââââââââââââââââââââââââââââââââââ â
â â Pre-migration-v2.5 â â
â âââââââââââââââââââââââââââââââââââââââââââ â
â â
â [Cancelar] [Iniciar Backup] â
âââââââââââââââââââââââââââââââââââââââââââââââ
Modal Restaurar Backup
âââââââââââââââââââââââââââââââââââââââââââââââ
â â ïž RESTAURAR BACKUP - ACCIÃN CRÃTICA [X]â
âââââââââââââââââââââââââââââââââââââââââââââââ€
â â
â ðš ADVERTENCIA IMPORTANTE: â
â â
â ⢠Esta acción DETENDRà el sistema â
â ⢠Se perderán todos los cambios posteriores â
â al backup seleccionado â
â ⢠Usuarios serán desconectados â
â ⢠Tiempo estimado de downtime: 15-30 min â
â â
â âââââââââââââââââââââââââââââââââââââââââââ â
â â
â Backup Seleccionado: â
â ⢠Fecha: 19 Nov 2025, 03:00 AM â
â ⢠Tipo: Full â
â ⢠Tamaño: 12.1 GB â
â ⢠Verificado: â
SÃ (18 Nov) â
â ⢠Checksum: â
Válido â
â â
â âïž Entiendo que se perderán cambios desde â
â el 19 Nov 03:00 hasta ahora â
â â
â âïž He notificado al equipo del downtime â
â â
â Para confirmar, escribe: RESTAURAR â
â âââââââââââââââââââââââââââââââââââââââââââ â
â â â â
â âââââââââââââââââââââââââââââââââââââââââââ â
â â
â [Cancelar] [RESTAURAR AHORA] â
â (deshabilitado) â
âââââââââââââââââââââââââââââââââââââââââââââââ
Modal Progreso de Restauración
âââââââââââââââââââââââââââââââââââââââââââââââ
â Restauración en Progreso... [ð] â
âââââââââââââââââââââââââââââââââââââââââââââââ€
â â
â ð SISTEMA EN MODO MANTENIMIENTO â
â â
â Progreso Global: â
â ââââââââââââââââââââââââââââââââ 65% â
â â
â Etapa Actual: â
â â
1. Backup de seguridad creado â
â â
2. Aplicación detenida â
â â
3. Validación de checksum â
â ð 4. Restaurando base de datos... â
â ââââââââââââââââââââââââââ 80% â
â â³ 5. Reiniciar aplicación â
â â³ 6. Validar integridad â
â â
â Tiempo transcurrido: 12 minutos â
â Tiempo estimado restante: 6 minutos â
â â
â ð Log en tiempo real: â
â [03:15:22] Extrayendo tablas... â
â [03:15:45] Restaurando Ãndices... â
â [03:16:10] Aplicando constraints... â
â â
â [Cancelar Restauración] â
â (solo primeros 2 minutos) â
âââââââââââââââââââââââââââââââââââââââââââââââ
𧪠Casos de Prueba
CP-001: Crear Backup Manual Exitoso
Precondiciones:
- Sistema en estado normal
- Espacio suficiente en disco
Pasos:
- Ir a "Backups"
- Clic "Crear Backup Manual"
- Seleccionar "Full"
- Confirmar
Resultado Esperado:
- â Backup inicia inmediatamente
- â Progreso visible en tiempo real
- â Estado cambia a "Completado" al finalizar
- â Archivo .dump creado en /backups/
- â Subido a S3 con encriptación
- â Checksum calculado y almacenado
- â Email de confirmación enviado
CP-002: Backup Automático Diario
Precondiciones:
- Cron configurado para 3:00 AM
Pasos:
- Esperar a las 3:00 AM
- Verificar ejecución
Resultado Esperado:
- â Backup ejecuta automáticamente
- â Tipo "Full" creado
- â Sin intervención manual
- â Notificación enviada al completar
CP-003: Restaurar desde Backup
Precondiciones:
- Backup verificado disponible
Pasos:
- Seleccionar backup del 19 Nov
- Clic "Restaurar"
- Aceptar advertencias
- Escribir "RESTAURAR"
- Confirmar
Resultado Esperado:
- â Sistema entra en modo mantenimiento
- â Backup de seguridad creado antes de restaurar
- â Checksum validado
- â pg_restore ejecuta correctamente
- â Aplicación reinicia
- â Datos restaurados al 19 Nov
- â Email de confirmación enviado
- â Tiempo total <30 minutos
CP-004: Verificar Integridad de Backup
Precondiciones:
- Backup de 3 dÃas de antigÃŒedad sin verificar
Pasos:
- Clic "Verificar Integridad" en el backup
- Esperar proceso
Resultado Esperado:
- â Checksum recalculado y validado
- â DB temporal creada
- â Restore exitoso en DB temporal
- â Queries de validación ejecutadas
- â DB temporal eliminada
- â Backup marcado con â "Verificado"
- â Timestamp de verificación actualizado
CP-005: Backup Falla por Espacio Insuficiente
Precondiciones:
- Disco casi lleno
Pasos:
- Intentar crear backup manual
Resultado Esperado:
- â Backup falla con error claro
- â Estado: "FALLIDO"
- â Error message: "Insufficient disk space"
- â Alerta crÃtica enviada por email + SMS
- â Audit log registra fallo con severidad "crÃtica"
- â No se crea archivo corrupto
CP-006: Retención Automática
Precondiciones:
- Backup de hace 8 dÃas (retención = 7 dÃas)
Pasos:
- Cron de limpieza ejecuta
Resultado Esperado:
- â Backup eliminado automáticamente
- â Archivo local eliminado
- â Objeto S3 eliminado
- â Registro en audit log
- â Email de notificación enviado
ð Dependencias
Requisitos Previos:
- ET-ADM-004: Tabla
backup_recordsimplementada - ET-ADM-004: BackupService con cron jobs
- pg_dump y pg_restore instalados
- AWS S3 bucket configurado con permisos
- Espacio en disco adecuado
APIs Necesarias:
GET /api/admin/backups- Lista de backupsPOST /api/admin/backups- Crear backup manualPOST /api/admin/backups/:id/restore- RestaurarPOST /api/admin/backups/:id/verify- Verificar integridadDELETE /api/admin/backups/:id- EliminarGET /api/admin/backups/dashboard- EstadÃsticas
ð Métricas de Ãxito
- RTO (Recovery Time Objective): <4 horas
- RPO (Recovery Point Objective): <1 hora
- Tasa de éxito de backups: >99%
- Tiempo de backup full: <30 minutos
- Tiempo de restauración: <30 minutos
- Backups verificados: 100% mensualmente
ð Consideraciones de Seguridad
- Encriptación: Todos los backups en S3 con AES-256
- Acceso: Solo usuarios con rol "director" pueden restaurar
- Validación: Siempre validar checksum antes de restaurar
- AuditorÃa: Todas las operaciones registradas
- Backup pre-restauración: Siempre crear backup de seguridad antes de restaurar
Generado: 2025-11-20
Estado: â
Listo para desarrollo