AutoBackups/TECHNICAL_QUESTIONS.md

112 lines
4.4 KiB
Markdown

# AutoBackups - Decisiones Técnicas Finalizadas
## Decisiones Técnicas Confirmadas
### 1. Everything API - Integración ✅
**Decisión**: Everything SDK está instalado bajo `Everything-SDK\dll\Everything64.dll`
**Implementación**: Usar PyEverything (Wrapper) sin fallback
**Ruta DLL**: `Everything-SDK\dll\Everything64.dll`
### 2. Estructura de Backup - Clarificación de Rutas ✅
**Decisión**: Estructura específica con formato de fecha personalizado
**Ejemplo**:
- Directorio base: `C:\Projects\Siemens`
- Proyecto: `C:\Projects\Siemens\LineA\Project1\project.s7p`
- Backup: `backup_destination/LineA/Project1/2025-09-01/14-30-15_projects.zip`
**Formato**: YYYY-MM-DD para fechas, HH-MM-SS formato 24 horas
### 3. Configuración de Schedules - Granularidad ✅
**Decisión**: Ambos niveles (global con override por proyecto)
**Implementación**:
- Configuración global por defecto
- Override individual por proyecto
- Interfaz web para modificar ambos niveles
### 4. Hash de Archivos - Algoritmo y Almacenamiento ✅
**Decisión**: Hash de timestamps + tamaño (NO contenido)
**Algoritmo**: MD5 para velocidad
**Incluye**: timestamp + tamaño de archivo
**Prioridad**: Velocidad sobre seguridad criptográfica
### 5. Detección de Archivos en Uso - Método ✅
**Decisión**: Detección por intento de compresión
**Método Primario**: Intentar comprimir y detectar errores de exclusividad
**Método Rápido**: Verificar archivo .s7p antes de comprimir proyecto completo
**Manejo de Errores**: Marcar como problema de exclusividad si falla
### 6. Manejo de Proyectos Grandes - Performance ✅
**Decisión**: Sin límites de tamaño, tiempo o archivos
**Implementación**: Sin throttling, procesar cualquier tamaño de proyecto
**Prioridad**: Baja prioridad de sistema para no interferir
### 7. Configuración de Directorios - Recursividad ✅
**Decisión**: Búsqueda recursiva con optimización para .s7p
**Implementación**:
- Búsqueda recursiva en toda la jerarquía
- Optimización: evitar último nivel para archivos .s7p
- Razón: archivos .s7p no pueden estar en el último nivel del árbol
### 8. Backup Incremental vs Completo ✅
**Decisión**: Siempre backup completo
**Implementación**: Todo el proyecto cada vez
**Razón**: Simplicidad y asegurar integridad completa
### 9. Web Interface - Características Específicas ✅
**Must-have**:
- Lista de proyectos con estado ✅
- Trigger manual de backup ✅
- Ver logs básicos ✅
- Configurar schedules por proyecto ✅
- **Modificar configuración general (config.json) ✅**
**Nice-to-have**:
- Ver progreso de backup en tiempo real
- Estadísticas históricas
- Configurar nuevos directorios
### 10. Error Handling - Estrategias de Recuperación ✅
**Espacio Insuficiente**:
- Área de status en página web mostrando espacio libre
- Límite mínimo: 100MB libres para ejecutar backups
- Sin backups si espacio < 100MB
**Otros Errores**:
- Marcar para reintento en 1 hora
- Log de errores para diagnóstico
### 11. Startup Behavior - Inicialización ✅
**Decisión**: Aplicación de background con timers específicos
**Comportamiento**:
- Escaneos programados: cada 1 hora
- Backups mínimo: cada 10 minutos
- Aplicación siempre en background
- Baja prioridad de sistema
### 12. Multi-threading - Concurrencia ✅
**Decisión**: Ejecución secuencial (uno por vez)
**Implementación**:
- Backups secuenciales para economizar recursos
- Baja prioridad de sistema
- Orientado a operación en background sin interferir
## Especificación Técnica Finalizada ✅
### Resumen de Decisiones Clave:
1. **Everything SDK**: PyEverything wrapper con DLL local
2. **Estructura de Backup**: `backup_destination/ProjectPath/YYYY-MM-DD/HH-MM-SS_projects.zip`
3. **Hash**: MD5 de (timestamp + tamaño) para velocidad
4. **Detección de Uso**: Por intento de compresión + verificación .s7p
5. **Performance**: Sin límites, baja prioridad, secuencial
6. **Búsqueda**: Recursiva evitando último nivel para .s7p
7. **Backups**: Siempre completos
8. **Interfaz**: Flask con configuración de config.json
9. **Espacio**: Mínimo 100MB libres, status visible
10. **Background**: Escaneos 1h, backups min 10min
11. **Concurrencia**: Secuencial, baja prioridad
### Próximos Pasos:
1. Finalizar diseño técnico basado en decisiones
2. Actualizar `requirements.txt` con PyEverything
3. Comenzar implementación por fases
4. Crear estructura básica del proyecto