Commit Graph

4 Commits

Author SHA1 Message Date
13b36dda5f feat: Implementación completa de Soft Delete para apps
- Agregados campos deleted, deleted_at, deleted_reason a MonitoredApp
- Implementado soft_delete_app() y restore_app() en ConfigManager
- Modificado get_apps() para filtrar apps eliminadas por defecto
- Agregados métodos get_all_apps() y get_deleted_apps()
- Actualizado unregister_app() para usar soft delete en lugar de hard delete
- Creados endpoints:
  * GET /api/apps/deleted - Ver historial de apps eliminadas
  * POST /api/apps/:name/restore - Restaurar app eliminada
- Agregada sección de Historial en index.html con UI completa
- Botón de restaurar para cada app eliminada
- El servicio systemd se elimina físicamente, solo el JSON mantiene historial
- Permite auditoría y recuperación de apps eliminadas accidentalmente
2026-01-19 19:40:47 -05:00
246b5c8342 feat: Mejorar logging del discovery y agregar endpoint /api/monitored
- Agregar logs detallados en discovery.rs:
  * Mostrar cuántos archivos se escanean
  * Mostrar cuántos servicios siax-app-* se encuentran
  * Mostrar cuántos se parsean exitosamente
  * Logs tanto en logger como en stdout para debugging

- Agregar endpoint GET /api/monitored:
  * Retorna el contenido completo de monitored_apps.json
  * Permite verificar qué apps están siendo monitoreadas
  * Útil para debugging y diagnóstico

- Mejorar mensajes de error con emojis para mejor visibilidad
- Logs en cada paso del proceso de sincronización
2026-01-18 03:40:19 -05:00
8822e9e6b5 feat: Mejorar estructura de monitored_apps.json con metadata completa
- Añadir campos al modelo MonitoredApp:
  * service_name: Nombre del servicio systemd
  * path: WorkingDirectory de la aplicación
  * entry_point: Archivo de entrada (server.js, app.js, etc.)
  * node_bin: Ruta completa al binario de node/python
  * mode: Modo de ejecución (production, development, test)
  * service_file_path: Ruta al archivo .service de systemd
  * registered_at: Timestamp de registro (ISO 8601)

- Actualizar discovery.rs para extraer toda la información:
  * Parsear ExecStart para obtener node_bin y entry_point
  * Extraer NODE_ENV para determinar el modo
  * Guardar ruta completa al archivo .service
  * Usar add_app_full() con información completa

- Integrar ConfigManager en AppManager:
  * Guardar automáticamente en monitored_apps.json al registrar apps
  * Eliminar del JSON al desregistrar apps
  * Extraer metadata desde ServiceConfig (puerto, entry_point, mode, etc.)

- Mantener retrocompatibilidad con JSON antiguo mediante campos deprecated
- Todos los nuevos campos usan #[serde(default)] para evitar errores de deserialización
2026-01-18 03:26:42 -05:00
ad9b46bdc5 feat: Descubrimiento automático de servicios systemd existentes
Implementa escaneo automático de servicios siax-app-*.service al iniciar
el agente, sincronizando automáticamente con monitored_apps.json.

PROBLEMA RESUELTO:
- Servicios systemd creados manualmente no eran detectados
- monitored_apps.json desincronizado con servicios reales
- app_IDEAS.service existía pero NO era monitoreada
- Requería agregar manualmente cada app al JSON

SOLUCIÓN IMPLEMENTADA:

Nuevo módulo src/discovery.rs:

1. discover_services():
   - Escanea /etc/systemd/system/
   - Busca archivos siax-app-*.service
   - Parsea configuración (User, WorkingDirectory, ExecStart, PORT)
   - Retorna lista de DiscoveredService

2. parse_service_file():
   - Lee archivo .service línea por línea
   - Extrae: WorkingDirectory, User, ExecStart
   - Extrae PORT de Environment="PORT=XXXX"
   - Maneja múltiples formatos

3. sync_discovered_services():
   - Compara con monitored_apps.json actual
   - Agrega solo servicios nuevos (evita duplicados)
   - Detecta puerto automáticamente:
     - Desde Environment=PORT=XXXX
     - Desde nombre de app (fallback)
   - Guarda en monitored_apps.json

FLUJO AL INICIAR:
1. Logger inicia
2. 🔍 Discovery escanea /etc/systemd/system/
3.  Encuentra: siax-app-IDEAS, siax-app-TAREAS, siax-app-fidelizacion
4. 📝 Sincroniza con monitored_apps.json
5. ConfigManager carga JSON actualizado
6. Monitor comienza vigilancia de TODAS las apps

LOGS GENERADOS:
📡 "Escaneando servicios systemd existentes..."
 "Encontrado: siax-app-IDEAS.service"
📊 "App: IDEAS, User: Some("user_apps"), WorkDir: Some("/path")"
 "Agregando IDEAS (puerto: 2000)"
 "IDEAS agregado exitosamente"
📊 "Resumen: 1 agregadas, 2 ya existían"

DETECCIÓN DE PUERTO:
1. Lee Environment=PORT=XXXX del .service
2. Si no existe, usa detección por nombre:
   - tareas → 3000
   - fidelizacion → 3001
   - ideas → 2000
   - otros → 8080 (default)

BENEFICIOS:
 Auto-descubre servicios existentes al iniciar
 Sincroniza monitored_apps.json automáticamente
 No requiere intervención manual
 Evita duplicados (compara antes de agregar)
 Extrae configuración del .service
 Logging detallado de proceso
 Tests unitarios incluidos

EJEMPLO DE USO:
# Crear servicio manualmente
sudo nano /etc/systemd/system/siax-app-NUEVA.service
sudo systemctl daemon-reload
sudo systemctl start siax-app-NUEVA

# Reiniciar agente → Auto-descubre la nueva app
sudo systemctl restart siax-agent

# Verificar que fue detectada
cat /opt/siax-agent/config/monitored_apps.json
# Ahora incluye: NUEVA

Archivos modificados:
- src/discovery.rs: +265 líneas (nuevo módulo)
- src/lib.rs: +2 líneas (export discovery)
- src/main.rs: +9 líneas (ejecuta discovery al inicio)
2026-01-18 03:03:22 -05:00