AutoBackups/TECHNICAL_QUESTIONS.md

4.4 KiB

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