AutoBackups/SOLUCION_CONFIGURACIONES_GL...

126 lines
5.5 KiB
Markdown

# 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`:
```python
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:
```python
# 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:**
```python
# 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()`:**
```python
"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