AutoBackups/SPECIFICATION.md

7.2 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: 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)

{
  "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

  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

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.