Semana 4. Implementación de la Sonda de Ejecución (Execution Probe)
En esta semana el objetivo ha sido consolidar la primera de las métricas automáticas en Unibotics: la sonda de ejecución. La idea general es registrar con precisión en qué momento exacto el alumno pone a prueba su algoritmo enviándolo al contenedor RADI, y cuándo detiene dicha ejecución.
Para lograrlo, el flujo de la comunicación es el siguiente:
- Acción del Usuario: El estudiante pulsa el botón de “Play” o “Stop” en la interfaz.
- Captura en React: El componente
PlayPause.tsxintercepta el evento del clic. - Emisión de la Sonda: Se invoca una función dentro de
api.ts, que empaqueta los datos (ID del proyecto y tipo de evento) y los envía mediante una petición HTTP POST autenticada. - Recepción y Validación: Las rutas y vistas de Django (
urls.pyyviews.py) reciben la petición y validan la sesión. - Persistencia: Django guarda el registro del evento en la base de datos a través de
models_probe.py.
Archivos involucrados
- Frontend:
PlayPause.tsx,api.ts. - Backend:
urls.py,views.py,models_probe.py.
Funcionamiento y resolución de errores
El núcleo de esta implementación reside en cómo nos comunicamos con el backend. Durante las primeras pruebas nos encontramos con que Django bloqueaba las peticiones por motivos de seguridad, devolviendo un error 403 Forbidden.
El problema radicaba en que las peticiones estándar no incluían el token CSRF ni la sesión del usuario. La solución clave fue abstraer la llamada dentro del archivo api.ts, creando la función sendExecutionProbe e implementando la librería Axios junto con el helper interno axiosExtra(). Este helper se encarga de inyectar automáticamente todas las credenciales y cabeceras de sesión válidas que exige Django, permitiendo que el endpoint /academy/register_execution_probe/ valide la identidad del alumno y registre el evento correctamente con un código HTTP 201 (Created).