7.8 KiB
7.8 KiB
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: PyEverything wrapper
- DLL Local:
Everything-SDK\dll\Everything64.dll
- Función: Localizar archivos *.s7p en directorios de observación
- Optimización: Evitar último nivel del árbol para archivos .s7p
- 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 MD5 de (timestamp + tamaño) 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 MD5 de (timestamp + tamaño) de todos los archivos del directorio
- Compara con último hash almacenado
- Solo hace backup si hay diferencias
1.3 Scheduler de Background
- 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
- Escaneos: Automáticos cada 1 hora
- Backups: Mínimo cada 10 minutos
- Prioridad: Baja prioridad de sistema
2. Estructura de Datos
2.1 config.json (Configuración Global)
{
"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)
{
"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
- Cargar configuración desde
config.json
- Cargar estado de proyectos desde
projects.json
- Inicializar logger con timestamp de inicio
- Escanear directorios de observación usando Everything API
- Actualizar lista de proyectos detectados
- Iniciar scheduler
- Iniciar interfaz web Flask
4.2 Proceso de Backup
- Verificación de Espacio: Verificar mínimo 100MB libres
- Verificación de Acceso .s7p: Intentar comprimir solo archivo .s7p
- Hash Etapa 1: Verificar MD5 de (timestamp + tamaño) del archivo .s7p
- Hash Etapa 2: Si Etapa 1 detecta cambios, verificar hash completo
- Compresión: Crear archivo ZIP con estructura específica preservada
- Almacenamiento: Guardar en
backup_destination/ProjectPath/YYYY-MM-DD/HH-MM-SS_projects.zip
- 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 (Estructura Específica)
backup_destination/
├── LineA/
│ └── Project1/
│ ├── 2025-09-01/
│ │ ├── 02-15-30_projects.zip
│ │ └── 14-30-15_projects.zip
│ └── 2025-09-02/
│ └── 02-15-45_projects.zip
└── LineB/
└── Project2/
└── 2025-09-01/
└── 08-20-10_projects.zip
5.2 Contenido del ZIP
02-15-30_projects.zip
└── LineA/
└── Project1/
├── project.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: PyEverything wrapper con DLL local
- Hashing: hashlib MD5 para (timestamp + tamaño)
- Config: json (biblioteca estándar)
- Logging: logging (biblioteca estándar)
- File Access Check: Intento de compresión + verificación .s7p
- Process Priority: pywin32 para baja prioridad
- Disk Space: psutil para monitoreo de espacio libre
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
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.