2 minute read

Continuando con las mejoras en la infraestructura de monitorización de Unibotics, esta semana el foco se ha desplazado hacia el backend, abordando concretamente la fragmentación de los eventos de uso en la base de datos. Hasta ahora, la telemetría —como las entradas y salidas de la plataforma, los tiempos de los ejercicios y las puntuaciones— se encontraba dispersa en múltiples tablas independientes. Esta arquitectura fragmentada dificultaba el análisis de datos y complicaba la inminente integración de las nuevas sondas de ejecución y escritura de código.

Para solucionar este acoplamiento estructural, el primer paso ha sido diseñar un esquema unificado capaz de albergar cualquier tipo de evento bajo un mismo estándar. Se ha definido una nueva tabla centralizada compuesta por doce columnas clave: id como Primary Key, evento y subevento para clasificar la naturaleza del registro, username y ejercicio para mantener la trazabilidad de la acción, tres marcas temporales (tiempo1, tiempo2, tiempo3) para capturar duraciones o instantes precisos del ciclo de vida, y finalmente navegador, ip, pais y score para preservar el contexto de la sesión y la eficacia del alumno.

Con el modelo de datos establecido, el siguiente reto era consolidar la información histórica sin perder los registros de las sondas antiguas. En lugar de procesar la migración fila por fila a través del ORM, hemos optado por una estrategia de inyección directa en SQL para maximizar la eficiencia. Empleando la sentencia INSERT INTO … SELECT, podemos extraer masivamente los datos de las tablas antiguas y volcarlos en la nueva estructura unificada. Este comando nos permite mapear las columnas existentes e inyectar estáticamente el nombre del evento sobre la marcha, asegurando que toda la telemetría antigua y las nuevas sondas de escritura convivan de forma limpia y ordenada en un único repositorio de eventos de uso.

Estructura de la Nueva Tabla Unificada

Campo Descripción
id Clave primaria. Identificador único de cada evento registrado.
evento Tipo de acción principal (ej. sonda_escritura, entrada_ejercicio).
subevento Etiqueta adicional para categorizar detalladamente la acción.
username Identificador del usuario o alumno que ha generado el evento.
ejercicio Nombre o ID del ejercicio sobre el que recae la acción.
tiempo1 Timestamp inicial (ej. hora de entrada o comienzo de acción).
tiempo2 Timestamp secundario (ej. hora de salida o finalización).
tiempo3 Métrica de tiempo adicional (ej. duración total calculada).
navegador Agente de usuario o navegador empleado durante la sesión.
ip Dirección IP de conexión del cliente.
pais Procedencia geográfica de la conexión detectada.
score Puntuación del ejercicio o métrica de eficacia asociada.

Migración de Datos Antiguos

Para transferir y unificar los datos de las tablas fragmentadas a la nueva estructura directamente desde la consola del contenedor (dentro de academy_db=#), aplicamos el siguiente script SQL:

INSERT INTO eventos_uso_unificados (evento, username, ejercicio)
SELECT
    'sonda_escritura',
    username,
    exercise
FROM log_exercises;

Por último, se han mejorado las herramientas de visualización de la telemetría para facilitar el análisis de la actividad de los usuarios. El panel de sondas permite consultar la evolución temporal de la actividad de ejecución y escritura, agrupando los resultados por días, semanas o meses y aplicando filtros por usuario, ejercicio y rango de fechas. También se ha trabajado en la presentación visual de las gráficas, incorporando una paleta de colores clara, mejor contraste entre los elementos y un marco fino para delimitar el área de representación.

HELSINKI