126 lines
5.5 KiB
Markdown
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
|