# AutoBackups - Especificación Técnica Detallada ## Resumen Ejecutivo AutoBackups es una aplicación Python que automatiza el backup de proyectos Simatic S7 y directorios definidos por el usuario, utilizando la API de Everything para búsqueda eficiente de archivos y un sistema de hash inteligente para evitar backups innecesarios. ## Arquitectura del Sistema ### 1. Componentes Principales #### 1.1 Motor de Búsqueda (Everything API) - **Librería**: `python-everything` o integración directa con Everything SDK - **Función**: Localizar archivos *.s7p en directorios de observación - **Ventaja**: Aprovecha el índice existente de Everything para búsquedas instantáneas #### 1.2 Sistema de Hash en Dos Etapas **Etapa 1**: Hash rápido de archivos *.s7p - Solo verifica timestamps de archivos .s7p - Si no hay cambios → no se procede con backup - Si hay cambios → procede a Etapa 2 **Etapa 2**: Hash completo del proyecto - Calcula hash de todos los archivos del directorio del proyecto - Compara con último hash almacenado - Solo hace backup si hay diferencias #### 1.3 Scheduler Flexible - **daily**: Una vez al día a hora configurada - **hourly**: Cada hora - **3-hour**: Cada 3 horas - **7-hour**: Cada 7 horas - **startup**: Al iniciar la aplicación - **manual**: Solo bajo demanda del usuario ### 2. Estructura de Datos #### 2.1 config.json (Configuración Global) ```json { "observation_directories": [ { "path": "C:\\Projects\\Siemens", "type": "siemens_s7", "enabled": true }, { "path": "D:\\Engineering\\Projects", "type": "siemens_s7", "enabled": true }, { "path": "C:\\Important\\Docs", "type": "manual", "enabled": true } ], "backup_destination": "D:\\Backups\\AutoBackups", "default_schedule": "daily", "default_schedule_time": "02:00", "retry_delay_hours": 1, "web_interface": { "host": "127.0.0.1", "port": 5000 }, "logging": { "level": "INFO", "max_log_files": 30 } } ``` #### 2.2 projects.json (Estado de Proyectos) ```json { "projects": [ { "id": "project_001", "name": "PLC_MainLine", "path": "C:\\Projects\\Siemens\\PLC_MainLine", "type": "siemens_s7", "s7p_file": "C:\\Projects\\Siemens\\PLC_MainLine\\PLC_MainLine.s7p", "schedule": "daily", "schedule_time": "02:00", "enabled": true, "last_backup": "2025-09-01T02:15:30", "last_s7p_hash": "abc123def456", "last_full_hash": "def789ghi012", "last_s7p_timestamp": "2025-08-31T14:30:00", "status": "ready", "retry_count": 0, "next_retry": null, "error_message": null } ] } ``` ### 3. Flujo de Operación #### 3.1 Inicio de Aplicación 1. Cargar configuración desde `config.json` 2. Cargar estado de proyectos desde `projects.json` 3. Inicializar logger con timestamp de inicio 4. Escanear directorios de observación usando Everything API 5. Actualizar lista de proyectos detectados 6. Iniciar scheduler 7. Iniciar interfaz web Flask #### 3.2 Proceso de Backup 1. **Verificación de Acceso**: Intentar abrir archivos en modo lectura 2. **Hash Etapa 1**: Verificar timestamp del archivo .s7p 3. **Hash Etapa 2**: Si Etapa 1 detecta cambios, verificar hash completo 4. **Compresión**: Crear archivo ZIP con estructura de directorios preservada 5. **Almacenamiento**: Guardar en `backup_destination/YYYY-MM-DD_HH-MM-SS/` 6. **Actualización**: Actualizar hashes y timestamps en `projects.json` #### 3.3 Gestión de Errores - **Archivos en uso**: Marcar proyecto para reintento en 1 hora - **Errores de permisos**: Log de error y notificación en interfaz - **Errores de espacio**: Verificar espacio disponible antes de backup ### 4. Interfaz Web #### 4.1 Dashboard Principal - **Lista de Proyectos**: Tabla con estado, último backup, próximo backup - **Controles Globales**: Backup manual global, pausar/reanudar scheduler - **Estadísticas**: Total de proyectos, backups exitosos, errores #### 4.2 Configuración de Proyectos - **Habilitación/Deshabilitación**: Toggle por proyecto - **Configuración de Schedule**: Dropdown con opciones de frecuencia - **Backup Manual**: Botón de backup inmediato por proyecto #### 4.3 Logs y Monitoreo - **Log Viewer**: Mostrar logs recientes con filtros por nivel - **Estado del Sistema**: Información de Everything API, espacio en disco ### 5. Estructura de Backup #### 5.1 Nomenclatura de Archivos ``` backup_destination/ ├── 2025-09-01_02-15-30/ │ ├── Projects_Siemens_PLC_MainLine.zip │ └── Important_Docs_Documentation.zip └── 2025-09-02_02-15-45/ └── Projects_Siemens_PLC_SecondaryLine.zip ``` #### 5.2 Contenido del ZIP ``` PLC_MainLine.zip └── Projects/ └── Siemens/ └── PLC_MainLine/ ├── PLC_MainLine.s7p ├── subfolder1/ └── subfolder2/ ``` ### 6. Tecnologías y Librerías #### 6.1 Python Core - **Python**: 3.12 - **Framework Web**: Flask - **Scheduler**: APScheduler - **Compresión**: zipfile (biblioteca estándar) #### 6.2 Librerías Específicas - **Everything API**: `python-everything` o implementación custom - **Hashing**: hashlib (biblioteca estándar) - **Config**: json (biblioteca estándar) - **Logging**: logging (biblioteca estándar) - **File Access Check**: Implementación custom con try/except #### 6.3 Frontend - **HTML/CSS/JavaScript**: Vanilla (sin React por simplicidad) - **AJAX**: Para comunicación con Flask API - **Bootstrap**: Para estilizado responsivo ### 7. Consideraciones de Seguridad #### 7.1 Acceso a Archivos - Verificación de permisos antes de backup - Manejo seguro de rutas para evitar path traversal - Logs de todos los accesos a archivos #### 7.2 Interfaz Web - Solo acceso local (127.0.0.1) - No autenticación requerida (uso local únicamente) - Validación de inputs en formularios ### 8. Logging y Monitoreo #### 8.1 Estructura de Logs ``` .logs/ ├── autobackups_2025-09-01_08-30-15.log ├── autobackups_2025-09-02_08-30-22.log └── ... ``` #### 8.2 Niveles de Log - **INFO**: Inicio/fin de backups, descubrimiento de proyectos - **WARNING**: Archivos en uso, reintentos - **ERROR**: Fallos de backup, errores de configuración - **DEBUG**: Detalles de hashes, operaciones de archivos ### 9. Instalación y Despliegue #### 9.1 Entorno Miniconda ```bash conda create --name autobackups python=3.12 conda activate autobackups pip install -r requirements.txt ``` #### 9.2 Ejecución - **Desarrollo**: `python src/app.py` - **Producción**: `pythonw.exe src/app.py` (sin consola) - **Como servicio**: Futuro enhancement con `python-windows-service` ### 10. Roadmap de Desarrollo #### Fase 1: Core Backend - [ ] Integración con Everything API - [ ] Sistema de hash en dos etapas - [ ] Motor de backup básico - [ ] Scheduler con APScheduler #### Fase 2: Interfaz Web - [ ] Dashboard básico con Flask - [ ] API REST para operaciones CRUD - [ ] Frontend con HTML/JS/Bootstrap #### Fase 3: Características Avanzadas - [ ] Logs web viewer - [ ] Configuración avanzada de directorios - [ ] Estadísticas y reportes #### Fase 4: Optimizaciones - [ ] Ejecución como servicio Windows - [ ] Notificaciones por email - [ ] Backup incremental Este documento será la base para el desarrollo del proyecto AutoBackups.