AutoBackups/SOLUCION_CONFIGURACIONES_GL...

5.5 KiB

Solución: Aplicación de Configuraciones Globales a Proyectos

Problema Identificado

Cuando se agregaban nuevos proyectos al sistema, no se estaban asignando las configuraciones globales de backup definidas en config.json. Los proyectos solo recibían configuraciones básicas como default_schedule y default_schedule_time, pero faltaban configuraciones importantes como:

  • retry_delay_hours: Tiempo de espera antes de reintentar un backup fallido
  • backup_timeout_minutes: Tiempo máximo para completar un backup
  • min_backup_interval_minutes: Intervalo mínimo entre backups del mismo proyecto
  • min_free_space_mb: Espacio mínimo requerido antes de hacer backup
  • Todas las configuraciones de backup_options (compresión, algoritmo de hash, etc.)

Cambios Realizados

1. Nuevo Método en ProjectDiscoveryService

Se agregó el método _apply_global_configurations() en src/services/project_discovery_service.py:

def _apply_global_configurations(self, project_data: Dict[str, Any]) -> Dict[str, Any]:
    """Apply all global configurations to a new project"""
    global_settings = self.config.global_settings
    backup_options = self.config.backup_options
    
    # Apply global settings to schedule_config
    project_data["schedule_config"].update({
        "retry_delay_hours": global_settings.get("retry_delay_hours", 1),
        "backup_timeout_minutes": global_settings.get("backup_timeout_minutes", 0),
        "min_backup_interval_minutes": global_settings.get("min_backup_interval_minutes", 10),
        "min_free_space_mb": global_settings.get("min_free_space_mb", 100),
        # ... configuraciones existentes
    })
    
    # Apply backup options
    project_data["backup_options"] = {
        "compression_level": backup_options.get("compression_level", 6),
        "include_subdirectories": backup_options.get("include_subdirectories", True),
        # ... todas las opciones de backup
    }
    
    return project_data

2. Modificación de Funciones de Creación de Proyectos

Se actualizaron las funciones _create_project_from_s7p() y _create_manual_project() para aplicar las configuraciones globales:

# Apply global configurations
project_data = self._apply_global_configurations(project_data)

return Project(project_data)

3. Actualización del Modelo Project

Se expandió la clase Project en src/models/project_model.py para manejar las nuevas configuraciones:

En el constructor:

# Configuraciones de backup (heredadas de configuración global)
backup_options = project_data.get("backup_options", {})
self.compression_level = backup_options.get("compression_level", 6)
self.include_subdirectories = backup_options.get("include_subdirectories", True)
# ... todas las opciones de backup

# Configuraciones adicionales del proyecto (heredadas de global_settings)
self.retry_delay_hours = schedule_config.get("retry_delay_hours", 1)
self.backup_timeout_minutes = schedule_config.get("backup_timeout_minutes", 0)
# ... configuraciones adicionales

En el método to_dict():

"schedule_config": {
    # ... configuraciones existentes
    "retry_delay_hours": self.retry_delay_hours,
    "backup_timeout_minutes": self.backup_timeout_minutes,
    "min_backup_interval_minutes": self.min_backup_interval_minutes,
    "min_free_space_mb": self.min_free_space_mb,
},
"backup_options": {
    "compression_level": self.compression_level,
    "include_subdirectories": self.include_subdirectories,
    # ... todas las opciones de backup
},

4. Actualización de Proyectos Existentes

Se ejecutó un script para actualizar los 158 proyectos existentes con las configuraciones globales que faltaban, creando un backup de seguridad antes de la actualización.

Configuraciones Globales Aplicadas

Global Settings (en schedule_config)

  • retry_delay_hours: 1 hora por defecto
  • backup_timeout_minutes: 0 (sin límite) por defecto
  • min_backup_interval_minutes: 10 minutos por defecto
  • min_free_space_mb: 100 MB por defecto

Backup Options

  • compression_level: 6 (balanceado)
  • include_subdirectories: true
  • preserve_directory_structure: true
  • hash_algorithm: "md5"
  • hash_includes: ["timestamp", "size"]
  • backup_type: "complete"
  • process_priority: "low"
  • sequential_execution: true
  • filename_format: "HH-MM-SS_projects.zip"
  • date_format: "YYYY-MM-DD"

Verificación

Se realizaron pruebas que confirmaron:

  1. Proyectos existentes actualizados: Los 158 proyectos existentes ahora tienen todas las configuraciones globales
  2. Nuevos proyectos manuales: Reciben automáticamente todas las configuraciones globales
  3. Nuevos proyectos S7P: También reciben automáticamente todas las configuraciones globales

Beneficios

  • Consistencia: Todos los proyectos ahora heredan las mismas configuraciones globales
  • Mantenibilidad: Cambios en configuraciones globales se aplican a futuros proyectos
  • Flexibilidad: Cada proyecto mantiene sus configuraciones individuales que pueden ser modificadas independientemente
  • Retrocompatibilidad: Los proyectos existentes mantienen sus configuraciones actuales mientras reciben las nuevas

Archivos Modificados

  • src/services/project_discovery_service.py: Nuevo método _apply_global_configurations()
  • src/models/project_model.py: Expansión del modelo Project para manejar configuraciones adicionales
  • projects.json: Actualizado con configuraciones globales para todos los proyectos existentes
  • projects.json.backup: Backup de seguridad creado automáticamente