Files
onever_drive/CHANGELOG_SESSION.md
T

3.9 KiB

Changelog: Novedades y Mejoras de la Sesión

Este documento detalla todos los cambios y nuevas características de sincronización y administración implementadas en esta sesión de desarrollo para OnEver Drive.


🔄 1. Sincronización Bidireccional de Trabajos (Jobs)

Se ha implementado una sincronización bidireccional en tiempo real entre el Panel de Control Web y los clientes de Windows:

  • Local ➔ Servidor: Cuando el usuario añade una carpeta local en la app PyQt6 del agente, esta se registra automáticamente en el servidor (a través del endpoint POST /api/jobs/agent/register) y obtiene un ID de base de datos (JOB-XXX).
  • Servidor ➔ Local: Si un administrador añade un trabajo en el panel web, el Agente descarga la configuración y la agrega a su archivo config.json para iniciar su monitoreo.
  • Edición Remota: Si se cambian filtros, rutas o nombres en el panel web, el Agente sobrescribe sus propiedades locales en el siguiente ciclo de escaneo (10 segundos).
  • Eliminación Sincronizada: Al presionar Eliminar Carpeta en el Agente de Windows, se realiza una llamada DELETE /api/jobs/agent/{id} que destruye el trabajo tanto localmente como en el servidor. Si el trabajo se elimina en la web, el agente lo borra de su lista local.

📅 2. Planificación tipo Proxmox Backup Server (PBS)

Se ha sustituido la frecuencia numérica en minutos por una planificación basada en cadenas de texto estándar (hourly, daily, weekly, monthly):

  • Menú de Planificación: La interfaz del cliente PyQt6 cuenta ahora con un QComboBox para elegir entre estas cuatro periodicidades.
  • Lógica de Ejecución (is_job_due): El servicio del agente (agent/service.py) compara la fecha del último backup exitoso guardada en la base de datos contra el tiempo transcurrido de la regla seleccionada:
    • hourly: Mínimo 1 hora.
    • daily: Mínimo 24 horas.
    • weekly: Mínimo 7 días.
    • monthly: Mínimo 30 días.
  • Sincronización Manual: Al presionar "▶ Iniciar Sincronización Manual Ahora", el Agente corre inmediatamente los respaldos ignorando el bloqueo de tiempo de las planificaciones.

🔑 3. Re-vinculación de Agente y Regeneración de Token

Anteriormente, si un cliente perdía su archivo de configuración config.json (por formateo o reinstalación), el administrador debía eliminar el cliente en la web y crearlo de nuevo (perdiendo su historial de backups).

  • Código de Re-vinculación: Se añadió la columna client_id (migración de base de datos en registration_codes) para asociar códigos de registro temporales a un cliente existente.
  • Nueva Acción "Re-vincular": Se agregó la opción en la tabla de clientes del frontend web. Al hacer clic, genera un código temporal de 24 horas y muestra el comando PowerShell/CLI de vinculación.
  • Actualización de Credenciales: Al usar el código de re-vinculación en el agente, el backend asocia el nuevo par device_id / device_token al cliente correspondiente sin alterar su identificador (CLIENT-XXXX) ni su almacenamiento histórico.

🐞 4. Corrección de Bugs Críticos

  • TypeError en el Tray Icon: Se resolvió un error de casteo en PyQt6 (TypeError: unable to convert a C++ 'QSystemTrayIcon::ActivationReason') al reabrir el panel del agente desde el área de notificaciones de Windows.
  • Colisiones en Cliente ID: Se corrigió el algoritmo de generación del código de cliente (CLIENT-XXXX). En lugar de usar un recuento dinámico de la tabla (que colisionaba si se borraban clientes intermedios), ahora se calcula usando el ID máximo de la base de datos más uno (max(id) + 1).
  • Historial en Caliente: Ahora el backend actualiza de forma automática el estado (SUCCESS / FAILED) y la fecha (last_run_at) de los trabajos en la base de datos al finalizar exitosamente la subida de todos sus bloques.