# Sistema de Monitoreo de Rendimiento ## 🔍 Objetivo Monitorear en **tiempo real** el rendimiento del sistema de recording, detectando automáticamente: - **Puntos perdidos** por retrasos o errores de lectura - **Estadísticas cada 10 segundos** con métricas detalladas - **Tiempos de respuesta** de PLC, CSV y UDP - **Uso de CPU** promedio - **Errores** de lectura/escritura ## 📊 Métricas Monitoreadas ### 1. Estadísticas de Puntos - **Points Saved**: Puntos guardados exitosamente en CSV - **Points Lost**: Puntos perdidos por retrasos en el loop - **Variables Saved**: Total de variables guardadas - **UDP Points Sent**: Puntos enviados vía UDP streaming ### 2. Timing y Performance - **Read Time**: Tiempo de lectura del PLC por dataset - **CSV Write Time**: Tiempo de escritura a archivo CSV - **Loop Delay**: Retraso del loop vs. intervalo esperado - **CPU Usage**: Uso promedio de CPU del proceso ### 3. Errores y Fallos - **Read Errors**: Errores de lectura del PLC - **CSV Errors**: Errores de escritura CSV - **UDP Errors**: Errores de transmisión UDP - **Consecutive Errors**: Errores consecutivos por dataset ## 🔥 Logs de Rendimiento ### Log Principal (cada 10 segundos) ``` 📊 PERFORMANCE [2025-08-16 15:30:25] | Points: 120/10s (12.0/s) | Variables: 1800 | UDP: 80/10s | CPU: 15.3% | Delay: 0.002s±0.001s | Lost: 0 | Errors: R:0 C:0 U:0 ``` **Explicación**: - `Points: 120/10s (12.0/s)`: 120 puntos guardados en 10s (12 puntos/segundo) - `Variables: 1800`: Total de variables guardadas (120 puntos × 15 variables) - `UDP: 80/10s`: 80 puntos enviados vía UDP - `CPU: 15.3%`: Uso promedio de CPU del proceso - `Delay: 0.002s±0.001s`: Retraso promedio ± desviación estándar - `Lost: 0`: Puntos perdidos - `Errors: R:0 C:0 U:0`: Errores de Read/CSV/UDP ### Logs de Advertencia #### Puntos Perdidos ``` ⚠️ DATA LOSS: 3 points lost in last 10s (avg delay: 0.150s) ⚠️ POINTS LOST: Dataset 'Fast' - 2 points lost (expected: 0.100s, actual: 0.350s, delay: 0.150s) ``` #### Alto Uso de CPU ``` ⚠️ HIGH CPU: 85.5% average CPU usage ``` #### Errores de Lectura ``` ⚠️ READ ERRORS: 5 read errors in last 10s ``` #### Timing Overrun ``` ⏰ TIMING WARNING: Dataset 'Fast' loop overrun by 0.050s (read: 0.025s, csv: 0.020s, total: 0.150s) ``` ## 🚨 Detección de Puntos Perdidos ### Algoritmo de Detección ```python # Detecta puntos perdidos cuando: actual_interval = current_time - last_read_time expected_interval = dataset_sampling_interval if actual_interval > expected_interval * 1.5: # 50% tolerancia lost_points = int((actual_interval - expected_interval) / expected_interval) # Log warning con detalles ``` ### Ejemplo de Detección ``` Dataset configurado: intervalo = 0.1s (10 puntos/segundo) Lectura anterior: 15:30:25.000 Lectura actual: 15:30:25.350 (retraso de 0.350s) Puntos perdidos = (0.350 - 0.100) / 0.100 = 2.5 → 2 puntos perdidos ``` ## 📈 APIs de Monitoreo ### `/api/performance/current` Métricas actuales (ventana de 10s activa): ```json { "success": true, "current_performance": { "points_saved": 45, "points_rate": 12.5, "variables_saved": 675, "udp_points": 30, "points_lost": 0, "cpu_avg": 15.2, "delay_avg": 0.002, "read_errors": 0, "csv_errors": 0, "udp_errors": 0 } } ``` ### `/api/performance/historical?windows=6` Métricas históricas (últimos N×10s): ```json { "success": true, "historical_performance": { "windows": 6, "duration_minutes": 1.0, "total_points_saved": 720, "total_variables_saved": 10800, "total_udp_sent": 480, "total_points_lost": 0, "total_errors": 0, "points_per_second": 12.0, "loss_rate_percent": 0.0, "average_cpu_percent": 14.8, "average_delay_seconds": 0.002 } } ``` ### `/api/priority/status` Incluye estadísticas de rendimiento completas: ```json { "priority_protection": { "performance_current": { ... }, "performance_historical": { ... } } } ``` ## 🔧 Configuración y Uso ### Inicio Automático El monitoreo se inicia automáticamente cuando: ```python # Al iniciar CSV recording: streamer.start_csv_recording() # - Inicia PerformanceMonitor # - Configura intervalos de datasets # - Comienza logs cada 10s ``` ### Configuración de Intervalos ```python # Se configura automáticamente por dataset: self.performance_monitor.set_dataset_interval(dataset_id, interval) # Usado para detectar puntos perdidos ``` ### Parada Automática ```python # Al parar CSV recording: streamer.stop_csv_recording() # - Para PerformanceMonitor # - Guarda estadísticas finales ``` ## 📋 Interpretación de Métricas ### ✅ Rendimiento Óptimo - **Points Lost: 0** - Sin puntos perdidos - **CPU < 50%** - Uso moderado de CPU - **Delay < 10ms** - Timing dentro de tolerancia - **Errors: 0** - Sin errores de lectura/escritura ### ⚠️ Rendimiento Degradado - **Points Lost > 0** - Revisar carga del sistema - **CPU > 80%** - Optimizar configuración - **Delay > 50ms** - Reducir frecuencia de muestreo - **Errors > 0** - Verificar conexión PLC/archivos ### 🚨 Problemas Críticos - **Points Lost > 10% rate** - Sistema sobrecargado - **CPU > 95%** - Recursos insuficientes - **Consecutive Errors > 5** - Fallo de comunicación - **Read Time > interval** - PLC sobrecargado ## 🛠️ Troubleshooting ### Alto Rate de Puntos Perdidos 1. **Reducir frecuencia** de muestreo de datasets 2. **Optimizar variables** - eliminar variables innecesarias 3. **Verificar carga** del sistema operativo 4. **Revisar conexión** PLC - latencia de red ### CPU Elevado 1. **Verificar threads** activos en `/api/priority/status` 2. **Reducir datasets** simultáneos 3. **Optimizar hardware** - SSD, más RAM 4. **Cerrar aplicaciones** innecesarias ### Errores de Lectura 1. **Verificar estado** PLC en `/api/status` 2. **Comprobar variables** - direcciones correctas 3. **Revisar red** - ping al PLC 4. **Verificar snap7.dll** disponible ### Retrasos de CSV 1. **Verificar espacio** en disco 2. **Comprobar permisos** de escritura 3. **Optimizar directorio** records (SSD) 4. **Reducir tamaño** de archivos CSV ## 📊 Métricas de Referencia ### Sistema Típico (Fast=0.1s, DAR=1.0s) - **Points/second**: 11-13 (Fast: 10/s + DAR: 1/s) - **CPU Usage**: 10-25% (depende del hardware) - **Read Time**: 5-15ms por dataset - **CSV Write**: 1-5ms por punto - **Delay**: < 10ms normalmente ### Sistema Optimizado - **Loss Rate**: < 0.1% - **CPU Usage**: < 20% - **Average Delay**: < 5ms - **Error Rate**: 0 errors/10s La clave es mantener **Points Lost = 0** y **CPU < 50%** para garantizar recording continuo y confiable.