Feat: Añadir panel de métricas con estadísticas por idioma, plataforma y servidor

- Crear página dedicada /metrics con gráficos usando Chart.js
- Implementar función get_translation_stats() en database.py
- Añadir endpoint /api/stats en panel/main.py
- Mostrar métricas de traducciones por idioma, plataforma y servidor Discord
- Agregar tarjeta de acceso rápido a Métricas en el Dashboard
- Actualizar action_plan_pro.md con el progreso completado
This commit is contained in:
2026-03-21 15:15:38 -06:00
parent 6ff79f5d69
commit 77024d443f
5 changed files with 408 additions and 15 deletions

View File

@@ -2,24 +2,32 @@
## 🎯 Progreso de Mejoras
- [ ] **1. Panel de Métricas (Analytics & Estadísticas)**
- Agregar gráficos en el Dashboard (FastAPI/Jinja).
- Contabilizar traducciones totales, por idioma y por plataforma.
- [x] **1. Panel de Métricas (Analytics & Estadísticas)**
- ✅ Página dedicada `/metrics` con gráficos usando Chart.js.
- ✅ Métricas de traducciones totales, por idioma y por plataforma.
- ✅ Métricas por servidor de Discord.
- ✅ Función `get_translation_stats()` en `botdiscord/database.py`.
- ✅ Endpoint `/api/stats` en `panel/main.py`.
- ✅ Tarjeta de acceso rápido a Métricas en el Dashboard.
- [ ] **2. Rate Limiting (Prevención de Spam y Abusos)**
- Limitar botones de Discord/Telegram a X usos por minuto por usuario.
- Implementar mensajes efímeros de advertencia por spam.
- [x] **2. Rate Limiting (Prevención de Spam y Abusos)**
- ✅ Implementado en `botdiscord/ui.py`: máximo 1 clic por usuario/idioma cada 3 segundos.
- ✅ Aviso efímero automático si el usuario excede el límite.
- [ ] **3. Sistema de Logging Real y Monitoreo (Observabilidad)**
- Reemplazar `print()` por la librería estandar `logging` con guardado en disco rotatorio (archivos diarios).
- Enmascarar errores y alertas.
- [x] **3. Sistema de Logging Real y Monitoreo (Observabilidad)**
- ✅ Módulo `utils/logger.py` con rotación de archivos diaria (14 días de historial).
- ✅ Reemplazados todos los `print()` por `log.info()`, `log.warning()`, `log.error()`.
- [ ] **4. Reemplazo de Caché en RAM por Redis**
- Configurar contenedor oficial de Redis en OMV (`docker-compose-redis.yaml`).
- Adaptar `botdiscord/database.py` y `panel/main.py` para usar Redis si está disponible.
- [x] **4. Reemplazo de Caché en RAM por Redis**
- `utils/cache.py` creado con fallback a RAM si Redis no está disponible.
- ✅ Caché en cascada en `panel/main.py` y `translate.py`: Redis → RAM → DB → LibreTranslate.
-`docker-compose-redis.yaml` creado y Redis instalado en OMV.
- ✅ Variables de entorno configuradas en `docker-compose.yml` y `.env.example`.
- [ ] **5. Sistema de "Health Check" de LibreTranslate**
- Comprobar que el endpoint de traducción está vivo antes de lanzar errores, devolviendo mensaje de mantenimiento.
- [x] **5. Sistema de "Health Check" de LibreTranslate**
- ✅ Verificación de disponibilidad del endpoint `/languages` de LibreTranslate.
- ✅ Resultado cacheado 30s para no sobrecargar el servidor.
- ✅ Mensaje amigable `⚠️ Servicio de traducción en mantenimiento` cuando está caído.
---
*Este documento guiará la transformación del ecosistema de bots a un entorno de producción masiva.*