10 KiB
10 KiB
Estructura del Proyecto CloudRestoreAS
CloudRestoreAs/
│
├── app/ # Código fuente de la aplicación
│ ├── __init__.py # Inicialización del paquete
│ ├── constants.py # Constantes globales y configuración por defecto
│ │
│ ├── db/ # Capa de acceso a datos (SQLite)
│ │ ├── __init__.py
│ │ ├── database.py # Gestor de conexiones y esquema SQLite
│ │ ├── job_repository.py # Repositorio de jobs
│ │ ├── job_step_repository.py # Repositorio de pasos de jobs
│ │ ├── node_repository.py # Repositorio de nodos (mapeos)
│ │ ├── event_repository.py # Repositorio de eventos/logs
│ │ └── config_repository.py # Repositorio de configuración
│ │
│ ├── engine/ # Motor de procesamiento
│ │ ├── __init__.py
│ │ ├── engine.py # Motor principal y coordinador
│ │ ├── file_watcher.py # Vigilancia de carpetas y detección de archivos
│ │ └── restore_worker.py # Worker para procesamiento de jobs
│ │
│ ├── extract/ # Módulo de extracción
│ │ ├── __init__.py
│ │ └── seven_zip.py # Integración con 7-Zip
│ │
│ ├── sql/ # Módulo SQL Server
│ │ ├── __init__.py
│ │ └── sql_manager.py # Gestor de conexiones y operaciones SQL Server
│ │
│ ├── ui/ # Interfaz gráfica (PySide6)
│ │ ├── __init__.py
│ │ ├── main_window.py # Ventana principal y system tray
│ │ ├── dashboard_tab.py # Tab de dashboard (estadísticas)
│ │ ├── jobs_tab.py # Tab de gestión de jobs
│ │ ├── nodes_tab.py # Tab de gestión de nodos
│ │ ├── config_tab.py # Tab de configuración
│ │ └── logs_tab.py # Tab de logs y eventos
│ │
│ └── utils/ # Utilidades
│ ├── __init__.py
│ ├── logger.py # Configuración de logging rotativo
│ └── crypto.py # Cifrado/descifrado de contraseñas (DPAPI)
│
├── data/ # Datos de la aplicación
│ └── app.db # Base de datos SQLite (generada en ejecución)
│
├── logs/ # Archivos de log
│ └── app.log # Log principal (con rotación automática)
│
├── runner.py # Punto de entrada principal
├── requirements.txt # Dependencias Python
│
├── install.ps1 # Instalador de DESPLIEGUE Windows (binario autocontenido)
├── start.ps1 # Script de inicio rápido (PowerShell)
├── start.bat # Script de inicio rápido (Batch)
├── build.ps1 # Script para generar ejecutable con PyInstaller
├── test_installation.py # Script de verificación de instalación
│
├── README.md # Documentación completa
├── QUICKSTART.md # Guía rápida de inicio
├── ADVANCED.md # Configuración avanzada
├── SCRIPTS.md # Ejemplos de scripts de automatización
├── CHANGELOG.md # Historial de cambios
├── LICENSE # Licencia MIT
│
├── .gitignore # Archivos ignorados por Git
│
└── (después del build)
├── build/ # Directorio temporal de PyInstaller
├── dist/ # Ejecutable generado
│ └── CloudRestoreAS.exe # Aplicación ejecutable
└── CloudRestoreAS.spec # Archivo de configuración de PyInstaller
Descripción de Componentes
Módulo db (Base de Datos)
Capa de abstracción para SQLite con repositorios para cada entidad:
- database.py: Gestor de conexiones y definición de esquema
- job_repository.py: CRUD para jobs (create, get, update, stats)
- job_step_repository.py: Gestión de pasos de ejecución de jobs
- node_repository.py: Mapeos nodo → base de datos
- event_repository.py: Log de eventos del sistema
- config_repository.py: Almacenamiento de configuración
Módulo engine (Motor)
Lógica de procesamiento y coordinación:
- engine.py: Motor principal, maneja workers y file watcher
- file_watcher.py: Monitorea carpetas, detecta estabilidad de archivos
- restore_worker.py: Ejecuta el pipeline completo de restauración por job
Módulo extract (Extracción)
Integración con 7-Zip:
- seven_zip.py: Wrapper para ejecutar 7z.exe, soporte multipart
Módulo sql (SQL Server)
Operaciones con SQL Server:
- sql_manager.py: Conexiones, RESTORE FILELISTONLY, RESTORE DATABASE
Módulo ui (Interfaz Gráfica)
Interfaz de usuario con PySide6/Qt:
- main_window.py: Ventana principal, menús, system tray
- dashboard_tab.py: Vista de estadísticas en tiempo real
- jobs_tab.py: Lista y detalles de jobs
- nodes_tab.py: CRUD de mapeos de nodos
- config_tab.py: Configuración completa de la aplicación
- logs_tab.py: Visualización de eventos y logs
Módulo utils (Utilidades)
Funciones auxiliares:
- logger.py: Configuración de logging rotativo
- crypto.py: Cifrado de contraseñas con DPAPI de Windows
Flujo de Datos
┌─────────────────┐
│ Carpeta Entrada │ ← Usuario copia archivos ZIP aquí
└────────┬────────┘
│
▼
┌─────────────────┐
│ File Watcher │ ← Monitorea carpeta cada N segundos
└────────┬────────┘
│ Detecta archivo estable
▼
┌─────────────────┐
│ RestoreEngine │ ← Crea job en DB, encola worker
└────────┬────────┘
│
▼
┌─────────────────┐
│ RestoreWorker │ ← Procesa job en thread separado
└────────┬────────┘
│
├─► 1. Node Mapping (DB lookup)
├─► 2. Extract (7-Zip)
├─► 3. Locate .bak
├─► 4. SQL Connect
├─► 5. FILELISTONLY
├─► 6. RESTORE DATABASE
└─► 7. Cleanup (mover a Procesados)
│
▼
┌─────────────────────┐
│ Carpeta Procesados │ ← ZIP movido aquí si éxito
└─────────────────────┘
Base de Datos SQLite
Esquema de Tablas
jobs
- job_id (PK)
- created_at, updated_at
- source_path, source_name, source_hash
- node_name, db_name
- status, attempts, last_error
- started_at, finished_at
- total_ms, extract_ms, restore_ms, filelist_ms
job_steps
- id (PK)
- job_id (FK)
- step, started_at, finished_at
- duration_ms, exit_code
- stdout, stderr, error
nodes
- node_name (PK)
- db_name, active
- notes, updated_at
events
- id (PK)
- created_at, level
- job_id (FK, opcional)
- message
config
- key (PK)
- value (JSON)
- updated_at
Dependencias Externas
Software Requerido
- Python 3.11+: Lenguaje de programación base
- 7-Zip: Para extracción de archivos ZIP
- ODBC Driver 17+: Para conexión con SQL Server
- SQL Server: Servidor de bases de datos destino
Bibliotecas Python
- PySide6: Framework Qt para interfaz gráfica
- pyodbc: Driver ODBC para SQL Server
- pywin32: APIs de Windows (DPAPI para cifrado)
Configuración en Tiempo de Ejecución
La configuración se almacena en:
- SQLite (
data/app.db, tablaconfig): Configuración principal - Memoria (
RestoreEngine._config): Cache en ejecución
Formato de configuración:
{
"paths": {...},
"sql": {...},
"concurrency": {...},
"stability": {...},
"timeouts": {...},
"retries": {...},
"features": {...}
}
Logging
Sistema de logging en múltiples niveles:
- Archivo (
logs/app.log): RotatingFileHandler (10MB × 10 archivos) - Consola: StreamHandler (stdout)
- Base de Datos (
events): Eventos importantes
Niveles: DEBUG, INFO, WARNING, ERROR, CRITICAL
Threading
- Thread Principal: UI de Qt (debe mantenerse libre)
- QThreadPool: Workers para extracción y restauración
- Thread Daemon: File watcher
- Timer Qt: Actualización de stats cada 5s
Empaquetado
PyInstaller genera ejecutable único:
CloudRestoreAS.exe
├─► Python runtime embebido
├─► Todas las dependencias
├─► Código de la aplicación
└─► Assets (si los hay)
Tamaño aproximado: 80-120 MB (con PySide6 embebido)
Extensibilidad
Agregar Nuevo Tipo de Backup
- Extender
extract/con nuevo extractor - Modificar
restore_worker.pypara detectar tipo - Agregar lógica de procesamiento específica
Agregar Nuevo Motor de Base de Datos
- Crear nuevo gestor en
sql/(ej:postgres_manager.py) - Modificar
restore_worker.pypara seleccionar gestor - Actualizar UI de configuración
Agregar Notificaciones
- Crear módulo
notifications/con proveedores (email, slack, etc.) - Conectar a señales del motor (
job_completed,error_occurred) - Agregar configuración en UI
Versión: 1.0.0
Última Actualización: 2026-01-25
Mantenido por: Aduanasoft