From 4a591ba00fabe4179cadd07aa381a65f8687c7b1 Mon Sep 17 00:00:00 2001 From: Carlos Tello Date: Thu, 13 Aug 2026 23:10:01 -0300 Subject: [PATCH] docs: agregar changelog de la sesion y enlazar desde el README --- CHANGELOG_SESSION.md | 43 +++++++++++++++++++++++++++++++++++++++++++ README.md | 6 ++++++ 2 files changed, 49 insertions(+) create mode 100644 CHANGELOG_SESSION.md diff --git a/CHANGELOG_SESSION.md b/CHANGELOG_SESSION.md new file mode 100644 index 0000000..a57cef2 --- /dev/null +++ b/CHANGELOG_SESSION.md @@ -0,0 +1,43 @@ +# 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. diff --git a/README.md b/README.md index 0d63188..480edca 100644 --- a/README.md +++ b/README.md @@ -114,3 +114,9 @@ python windows-agent/build_exe.py - **Aislamiento por Dispositivo**: Cada máquina Windows tiene un `device_id` y `device_token` único generado criptográficamente. - **Validación SHA-256**: Cada bloque de 4MB y el archivo final ensamblado se verifican mediante streaming de hash SHA-256. - **Protección SQL Server**: Detección de archivos en uso para evitar transferencias incompletas de volcados `.bak`. + +--- + +## 📝 Cambios Recientes + +Para ver la lista completa de mejoras implementadas en la última sesión de desarrollo (sincronización bidireccional, planificación tipo Proxmox Backup Server y re-vinculación de agentes), consulta el [Changelog de la Sesión](CHANGELOG_SESSION.md).