Files
SIAX-MONITOR/tareas.txt
pablinux d18cb7c3dd fix: Fase 4.2 - Corrección de registros duplicados en API central (idempotencia)
Implementada lógica idempotente en monitor.rs para evitar la creación
infinita de registros duplicados en la API central.

PROBLEMA RESUELTO:
- Monitor enviaba POST cada 60s sin verificar si app ya existe
- Resultado: Miles de registros duplicados en base de datos central
- Impacto: Saturación de BD y datos inconsistentes

SOLUCIÓN IMPLEMENTADA:
1. Cache local de IDs de apps (AppIdCache con HashMap + RwLock)
2. Función sync_to_cloud() con lógica idempotente:
   - Verificar cache local primero
   - Si no está en cache: GET para buscar en API central
   - Si no existe en API: POST para crear (solo primera vez)
   - Si existe: PUT para actualizar estado
3. Uso correcto de endpoints de API central:
   - GET /api/apps_servcs/apps (buscar)
   - POST /api/apps_servcs/apps (crear)
   - PUT /api/apps_servcs/apps/:id/status (actualizar)

FUNCIONES IMPLEMENTADAS:
- sync_to_cloud() - Coordina flujo idempotente
- find_app_in_cloud() - Busca app por nombre + servidor
- create_app_in_cloud() - Crea nueva app (retorna ID)
- update_app_in_cloud() - Actualiza estado existente

CAMBIOS TÉCNICOS:
- Agregado cache AppIdCache (Arc<RwLock<HashMap<String, i32>>>)
- Tipos CloudApp y CloudAppsResponse para deserialización
- Box<dyn Error + Send + Sync> para compatibilidad tokio
- Revertido cambios incompletos en AppManager

RESULTADO:
 Primera ejecución: Crea app en API central (POST)
 Siguientes ejecuciones: Solo actualiza estado (PUT)
🚫 NO más duplicados infinitos
📊 Base de datos limpia y consistente

Archivos modificados:
- src/monitor.rs: +180/-50 líneas (lógica idempotente completa)
- src/orchestrator/app_manager.rs: Revertido cambios incompletos
- tareas.txt: Documentación completa de Fase 4.2
2026-01-15 02:56:56 -05:00

9.1 KiB