diff --git a/application_events.json b/application_events.json index 223f7e9..1d69c4b 100644 --- a/application_events.json +++ b/application_events.json @@ -1,3133 +1,5 @@ { "events": [ - { - "timestamp": "2025-08-18T17:41:43.270104", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.029329061508179, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:41:53.297881", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.027777194976807, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:42:03.327563", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.02968144416809, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:42:13.357703", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.030140161514282, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:42:23.390284", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.032581090927124, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:42:33.418155", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.027871131896973, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:42:43.453240", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.035085201263428, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:42:53.483787", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.030546426773071, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:43:03.516166", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.032379388809204, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:43:13.546567", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.03040099143982, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:43:23.579291", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.032724142074585, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:43:33.611361", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.032069444656372, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:43:43.638334", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.026973485946655, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:43:53.666146", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.027811765670776, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.3, - "cpu_max": 0.3, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:44:03.695573", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.029427289962769, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:44:13.725576", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.030003070831299, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:44:23.758446", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.032869815826416, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:44:33.792587", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.034140586853027, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:44:43.828967", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.036380529403687, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:44:53.855561", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.026593923568726, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:45:03.895852", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.04029130935669, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:45:13.951503", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.05565094947815, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:45:23.981376", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.029873132705688, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:45:34.011504", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.03012728691101, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:45:44.041354", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.029850006103516, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:45:54.072468", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.031114101409912, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:46:04.100842", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.028374195098877, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:46:14.127925", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.027082920074463, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:46:24.155811", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.027886390686035, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:46:34.185197", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.029385805130005, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:46:44.215082", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.029884815216064, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:46:54.245895", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.02981686592102, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:47:04.300453", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.055554151535034, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:47:14.329527", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.02907395362854, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:47:24.358535", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.029008150100708, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:47:34.406827", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.048291444778442, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:47:44.436402", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.029575109481812, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:47:54.466766", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.030364274978638, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.3, - "cpu_max": 0.3, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:48:04.496001", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.029234647750854, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:48:14.525478", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.029477834701538, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:48:24.555890", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.030411958694458, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:48:34.587251", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.031360864639282, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:48:44.636498", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.049247026443481, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:48:54.668686", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.032187461853027, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:49:04.707801", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.03911566734314, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:49:14.741027", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.033225774765015, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:49:24.776725", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.03569769859314, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:49:34.804618", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.02789306640625, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:49:44.833714", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.029095888137817, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:49:54.862062", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.028347730636597, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:50:04.905519", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.043457269668579, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.3, - "cpu_max": 0.3, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:50:14.935827", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.030308485031128, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:50:24.965711", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.02988338470459, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:50:34.992123", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.026412725448608, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:50:45.024705", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.032581329345703, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:50:55.068275", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.042572021484375, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:51:05.129938", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.062661170959473, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:51:15.158602", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.028664588928223, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:51:25.187412", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.028809309005737, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:51:35.213669", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.026257514953613, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:51:45.246548", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.032878637313843, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:51:55.275514", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.028966426849365, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.3, - "cpu_max": 0.3, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:52:05.302606", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.027091264724731, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:52:15.331499", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.028892993927002, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:52:25.361941", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.030441999435425, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:52:35.389849", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.027908563613892, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:52:45.422339", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.032490253448486, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:52:55.458070", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.035730600357056, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:53:05.489093", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.031022787094116, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:53:15.519384", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.030291080474854, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:53:25.553002", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.033618450164795, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.3, - "cpu_max": 0.3, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:53:35.579795", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.026792287826538, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:53:45.607879", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.02808403968811, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:53:55.635265", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.027386665344238, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:54:05.662182", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.026916265487671, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:54:15.691388", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.02920651435852, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:54:25.719421", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.028033018112183, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:54:35.757809", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.038387537002563, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.3, - "cpu_max": 0.3, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:54:45.790546", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.032737016677856, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:54:55.819148", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.028602123260498, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:55:05.852801", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.033653259277344, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:55:15.886925", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.034123420715332, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:55:25.914354", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.027429342269897, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:55:35.948002", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.033648490905762, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:55:45.976782", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.02877926826477, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:55:56.006927", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.03014588356018, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:56:06.034110", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.02718210220337, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:56:16.062269", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.028159856796265, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:56:26.091099", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.028829097747803, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.3, - "cpu_max": 0.3, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:56:36.119757", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.028657913208008, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.3, - "cpu_max": 0.3, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:56:46.149278", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.029521703720093, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:56:56.187078", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.037799835205078, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:57:06.213550", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.026472091674805, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:57:16.239930", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.026380062103271, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:57:26.273555", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.033624410629272, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:57:36.317800", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.04424524307251, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:57:46.346432", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.028631925582886, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:57:56.383582", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.037150621414185, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:58:06.412092", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.028510093688965, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.3, - "cpu_max": 0.3, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:58:16.439288", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.027195930480957, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:58:26.488315", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.049026250839233, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:58:36.520337", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.03202223777771, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:58:46.549402", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.029065608978271, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:58:56.581323", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.031920194625854, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:59:06.608784", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.027461051940918, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:59:16.645339", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.036555767059326, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:59:26.679775", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.034435510635376, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:59:36.721079", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.041303873062134, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.3, - "cpu_max": 0.3, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:59:46.748589", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.027510404586792, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:59:56.777379", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.028789758682251, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.3, - "cpu_max": 0.3, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:00:06.808700", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.031321048736572, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:00:16.842861", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.034160852432251, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:00:26.874874", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.032012701034546, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:00:36.908937", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.034063339233398, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:00:46.938368", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.029430866241455, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:00:56.967655", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.029286623001099, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:01:06.995877", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.02822208404541, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:01:17.027052", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.031175374984741, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:01:27.053868", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.026816129684448, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:01:37.086129", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.031170845031738, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:01:47.128333", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.043293714523315, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.3, - "cpu_max": 0.3, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:01:57.158736", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.03040337562561, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:02:07.190399", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.031662940979004, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:02:17.218914", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.028515338897705, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:02:27.246920", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.028005361557007, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:02:37.281839", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.034919738769531, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:02:47.311354", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.02951431274414, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.3, - "cpu_max": 0.3, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:02:57.345864", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.034510612487793, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.3, - "cpu_max": 0.3, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:03:07.373842", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.027977466583252, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:03:17.408150", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.034307718276978, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:03:27.437896", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.029746294021606, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:03:37.471513", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.0336172580719, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:03:47.500464", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.028951406478882, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:03:57.529972", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.029507398605347, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:04:07.560092", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.030120611190796, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:04:17.589271", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.029178857803345, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, { "timestamp": "2025-08-18T18:04:27.624922", "level": "info", @@ -19880,8 +16752,2774 @@ "read_time_avg": 0.08634228110313416, "csv_write_time_avg": 0.0 } + }, + { + "timestamp": "2025-08-22T14:13:13.859620", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.8% CPU", + "details": { + "duration": 10.024610042572021, + "points_saved": 40, + "points_rate": 3.990180149664672, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.8, + "cpu_max": 0.8, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08893722295761108, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:13:23.884676", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.9% CPU", + "details": { + "duration": 10.024547338485718, + "points_saved": 40, + "points_rate": 3.990205108457525, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.9, + "cpu_max": 0.9, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08915888071060181, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:13:30.217487", + "level": "info", + "event_type": "plot_session_created", + "message": "Plot session 'UR29' created and started", + "details": { + "session_id": "plot_1_1755864810217_2", + "variables": [ + "UR29_Brix", + "UR29_ma", + "AUX Blink_2.0S" + ], + "time_window": 60, + "trigger_variable": null, + "auto_started": true + } + }, + { + "timestamp": "2025-08-22T14:13:33.907495", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.5% CPU", + "details": { + "duration": 10.023328065872192, + "points_saved": 40, + "points_rate": 3.9906904909351932, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.5, + "cpu_max": 0.5, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08396093249320984, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:13:43.930132", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 1.4% CPU", + "details": { + "duration": 10.022636651992798, + "points_saved": 40, + "points_rate": 3.990965789630497, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 1.4, + "cpu_max": 1.4, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08517158031463623, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:13:53.954690", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.024558544158936, + "points_saved": 40, + "points_rate": 3.990200648118018, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.0, + "cpu_max": 0.0, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08430202603340149, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:14:03.980896", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.025700092315674, + "points_saved": 40, + "points_rate": 3.989746315138482, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.0, + "cpu_max": 0.0, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.085971599817276, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:14:14.006263", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.025476455688477, + "points_saved": 40, + "points_rate": 3.989835313742512, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.111434805393219, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:14:14.026144", + "level": "info", + "event_type": "plot_session_created", + "message": "Plot session 'UR29' created and started", + "details": { + "session_id": "plot_1_1755864854025_3", + "variables": [ + "UR29_Brix", + "UR29_ma", + "AUX Blink_2.0S" + ], + "time_window": 60, + "trigger_variable": null, + "auto_started": true + } + }, + { + "timestamp": "2025-08-22T14:14:15.710237", + "level": "info", + "event_type": "plot_session_created", + "message": "Plot session 'UR29' created and started", + "details": { + "session_id": "plot_1_1755864855709_4", + "variables": [ + "UR29_Brix", + "UR29_ma", + "AUX Blink_2.0S" + ], + "time_window": 60, + "trigger_variable": null, + "auto_started": true + } + }, + { + "timestamp": "2025-08-22T14:14:24.053142", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 41 points saved, 0 lost, 0.5% CPU", + "details": { + "duration": 10.046767950057983, + "points_saved": 41, + "points_rate": 4.080914399915385, + "variables_saved": 123, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.5, + "cpu_max": 0.5, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08624805473699802, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:14:34.078870", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 1.4% CPU", + "details": { + "duration": 10.02623462677002, + "points_saved": 40, + "points_rate": 3.9895336074821257, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 1.4, + "cpu_max": 1.4, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08262878060340881, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:14:44.103666", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.024796485900879, + "points_saved": 40, + "points_rate": 3.9901059394329836, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08318198919296264, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:14:54.126720", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.023053884506226, + "points_saved": 40, + "points_rate": 3.990799656563011, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.3, + "cpu_max": 0.3, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08482997417449951, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:15:04.152645", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.9% CPU", + "details": { + "duration": 10.025925397872925, + "points_saved": 40, + "points_rate": 3.9896566563806966, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.9, + "cpu_max": 0.9, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08376719355583191, + "csv_write_time_avg": 3.2365322113037108e-06 + } + }, + { + "timestamp": "2025-08-22T14:15:14.183242", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.8% CPU", + "details": { + "duration": 10.03007984161377, + "points_saved": 40, + "points_rate": 3.9880041466912473, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.8, + "cpu_max": 0.8, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08169389367103577, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:15:24.217874", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.9% CPU", + "details": { + "duration": 10.035148620605469, + "points_saved": 40, + "points_rate": 3.9859897956933903, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.9, + "cpu_max": 0.9, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09131672382354736, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:15:34.242107", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.6% CPU", + "details": { + "duration": 10.02372694015503, + "points_saved": 40, + "points_rate": 3.9905316893420233, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.6, + "cpu_max": 0.6, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08291630148887634, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:15:44.266713", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.8% CPU", + "details": { + "duration": 10.02511191368103, + "points_saved": 40, + "points_rate": 3.9899803956714894, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.8, + "cpu_max": 0.8, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.0884218156337738, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:15:54.292282", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.025568962097168, + "points_saved": 40, + "points_rate": 3.9897984993395053, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08292478322982788, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:16:04.327335", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.9% CPU", + "details": { + "duration": 10.034542083740234, + "points_saved": 40, + "points_rate": 3.986230728437043, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.9, + "cpu_max": 0.9, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08327032327651977, + "csv_write_time_avg": 4.631280899047852e-06 + } + }, + { + "timestamp": "2025-08-22T14:16:14.350950", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.6% CPU", + "details": { + "duration": 10.024126052856445, + "points_saved": 40, + "points_rate": 3.990372805477812, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.6, + "cpu_max": 0.6, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08415099382400512, + "csv_write_time_avg": 2.574920654296875e-05 + } + }, + { + "timestamp": "2025-08-22T14:16:24.375659", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 41 points saved, 0 lost, 0.6% CPU", + "details": { + "duration": 10.024709224700928, + "points_saved": 41, + "points_rate": 4.089894188549212, + "variables_saved": 123, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.6, + "cpu_max": 0.6, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08438339466001929, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:16:34.401584", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.025924921035767, + "points_saved": 40, + "points_rate": 3.9896568461304263, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08150695562362671, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:16:44.427168", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.8% CPU", + "details": { + "duration": 10.02558422088623, + "points_saved": 40, + "points_rate": 3.989792426925932, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.8, + "cpu_max": 0.8, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.088424152135849, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:16:54.460778", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.5% CPU", + "details": { + "duration": 10.033609390258789, + "points_saved": 40, + "points_rate": 3.9866012761902336, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.5, + "cpu_max": 0.5, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.0842351496219635, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:17:04.483562", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.02278470993042, + "points_saved": 40, + "points_rate": 3.990906834541564, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.3, + "cpu_max": 0.3, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08409026265144348, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:17:14.520893", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.037330389022827, + "points_saved": 40, + "points_rate": 3.9851233793943246, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.3, + "cpu_max": 0.3, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08215930461883544, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:17:24.545961", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.5% CPU", + "details": { + "duration": 10.025068283081055, + "points_saved": 40, + "points_rate": 3.989997760664289, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.5, + "cpu_max": 0.5, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08145748376846314, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:17:34.577116", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.031154870986938, + "points_saved": 40, + "points_rate": 3.987576756061439, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08178762793540954, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:17:44.600997", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.5% CPU", + "details": { + "duration": 10.023359537124634, + "points_saved": 40, + "points_rate": 3.990677961001752, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.5, + "cpu_max": 0.5, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08293105959892273, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:17:54.627169", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.026694059371948, + "points_saved": 40, + "points_rate": 3.9893508032801708, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08157334327697754, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:18:04.669613", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.04244327545166, + "points_saved": 40, + "points_rate": 3.983094442542519, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.3, + "cpu_max": 0.3, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.0855492115020752, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:18:14.692229", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.022616147994995, + "points_saved": 40, + "points_rate": 3.990973954240672, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.0, + "cpu_max": 0.0, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08331791162490845, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:18:24.729449", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.037220478057861, + "points_saved": 40, + "points_rate": 3.9851670178455367, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.0900505006313324, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:18:34.753720", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 41 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.024270296096802, + "points_saved": 41, + "points_rate": 4.090073271065363, + "variables_saved": 123, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.0, + "cpu_max": 0.0, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08062087035760647, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:18:44.782488", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.02876877784729, + "points_saved": 40, + "points_rate": 3.988525499596386, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08996735811233521, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:18:54.807853", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.025364637374878, + "points_saved": 40, + "points_rate": 3.9898798145335013, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08953257203102112, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:19:04.832892", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.025039196014404, + "points_saved": 40, + "points_rate": 3.9900093374101284, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08225044012069702, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:19:14.856368", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.023476123809814, + "points_saved": 40, + "points_rate": 3.990631543979419, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08273004293441773, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:19:24.880471", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.5% CPU", + "details": { + "duration": 10.024102926254272, + "points_saved": 40, + "points_rate": 3.9903820116646473, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.5, + "cpu_max": 0.5, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.0830298662185669, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:19:34.904382", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.023910999298096, + "points_saved": 40, + "points_rate": 3.9904584151635945, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.0826106309890747, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:19:44.928816", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.024434089660645, + "points_saved": 40, + "points_rate": 3.990250186916448, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.0842197835445404, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:19:54.952875", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.023014068603516, + "points_saved": 40, + "points_rate": 3.990815509807332, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.0, + "cpu_max": 0.0, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08850891590118408, + "csv_write_time_avg": 1.4483928680419922e-06 + } + }, + { + "timestamp": "2025-08-22T14:20:04.981777", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.029946565628052, + "points_saved": 40, + "points_rate": 3.988057138517297, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.0, + "cpu_max": 0.0, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08526470065116883, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:20:15.023089", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.041311740875244, + "points_saved": 40, + "points_rate": 3.9835432891871783, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.0, + "cpu_max": 0.0, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08272110223770142, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:20:25.047373", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.02385425567627, + "points_saved": 40, + "points_rate": 3.9904810045845345, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08135253190994263, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:20:35.071160", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 41 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.024217367172241, + "points_saved": 41, + "points_rate": 4.0900948670834545, + "variables_saved": 123, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09491173232473978, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:20:45.094078", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.022917985916138, + "points_saved": 40, + "points_rate": 3.9908537669575503, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08208525776863099, + "csv_write_time_avg": 4.827976226806641e-06 + } + }, + { + "timestamp": "2025-08-22T14:20:55.116477", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.5% CPU", + "details": { + "duration": 10.022398948669434, + "points_saved": 40, + "points_rate": 3.9910604441973816, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.5, + "cpu_max": 0.5, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08405861258506775, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:21:05.140154", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.02367639541626, + "points_saved": 40, + "points_rate": 3.990551811737623, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.0, + "cpu_max": 0.0, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08407991528511047, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:21:15.165059", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.02490520477295, + "points_saved": 40, + "points_rate": 3.9900626672215944, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.3, + "cpu_max": 0.3, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09482198357582092, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:21:25.190854", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.025794744491577, + "points_saved": 40, + "points_rate": 3.989708648481658, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.0, + "cpu_max": 0.0, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08874783515930176, + "csv_write_time_avg": 1.2797117233276367e-05 + } + }, + { + "timestamp": "2025-08-22T14:21:35.215410", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 39 points saved, 1 lost, 0.2% CPU", + "details": { + "duration": 10.024556636810303, + "points_saved": 39, + "points_rate": 3.8904463721409375, + "variables_saved": 117, + "udp_points_sent": 0, + "points_lost": 1, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.13673877716064453, + "delay_max": 0.13673877716064453, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.11398547734969701, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:21:45.239558", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.023640394210815, + "points_saved": 40, + "points_rate": 3.9905661443223885, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.0, + "cpu_max": 0.0, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09200046062469483, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:21:55.263739", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 41 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.024687767028809, + "points_saved": 41, + "points_rate": 4.089902942897531, + "variables_saved": 123, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.0, + "cpu_max": 0.0, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08177973584430974, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:22:05.287644", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.023905754089355, + "points_saved": 40, + "points_rate": 3.9904605032506004, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09155207872390747, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:22:15.313582", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.025937557220459, + "points_saved": 40, + "points_rate": 3.9896518177686917, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08588256239891053, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:22:25.336442", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.022859811782837, + "points_saved": 40, + "points_rate": 3.99087693045214, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.3, + "cpu_max": 0.3, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08384903669357299, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:22:35.359899", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.023457288742065, + "points_saved": 40, + "points_rate": 3.9906390427708365, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.3, + "cpu_max": 0.3, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08300438523292542, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:22:45.383948", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.024049520492554, + "points_saved": 40, + "points_rate": 3.990403271474911, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.3, + "cpu_max": 0.3, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08302927017211914, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:22:55.412941", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.028992176055908, + "points_saved": 40, + "points_rate": 3.988436654233263, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.0, + "cpu_max": 0.0, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08246257305145263, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:23:05.438474", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.025532960891724, + "points_saved": 40, + "points_rate": 3.9898128265135333, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.0, + "cpu_max": 0.0, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.11691144108772278, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:42:24.433868", + "level": "info", + "event_type": "application_started", + "message": "Application initialization completed successfully", + "details": {} + }, + { + "timestamp": "2025-08-22T14:42:24.562807", + "level": "info", + "event_type": "dataset_activated", + "message": "Dataset activated: DAR", + "details": { + "dataset_id": "DAR", + "variables_count": 3, + "streaming_count": 3, + "prefix": "gateway_phoenix" + } + }, + { + "timestamp": "2025-08-22T14:42:24.589248", + "level": "info", + "event_type": "dataset_activated", + "message": "Dataset activated: Fast", + "details": { + "dataset_id": "Fast", + "variables_count": 3, + "streaming_count": 1, + "prefix": "fast" + } + }, + { + "timestamp": "2025-08-22T14:42:24.614158", + "level": "info", + "event_type": "csv_recording_started", + "message": "🔥 CRITICAL PRIORITY: CSV recording started with MAXIMUM PRIORITY, async buffering, and performance monitoring: 2 datasets activated", + "details": { + "activated_datasets": 2, + "total_datasets": 3, + "priority": "CRITICAL", + "recording_protection": true, + "performance_monitoring": true, + "async_csv_buffering": true, + "csv_flush_interval": 5.0 + } + }, + { + "timestamp": "2025-08-22T14:42:34.562900", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 11.131950855255127, + "points_saved": 40, + "points_rate": 3.593260563229756, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.0, + "cpu_max": 0.0, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09338110089302062, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:42:44.585881", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.5% CPU", + "details": { + "duration": 10.022475242614746, + "points_saved": 40, + "points_rate": 3.991030063104897, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.5, + "cpu_max": 0.5, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09058573246002197, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:42:54.605964", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.020587921142578, + "points_saved": 40, + "points_rate": 3.991781751208773, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.0, + "cpu_max": 0.0, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.10047814846038819, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:43:04.628193", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 1.7% CPU", + "details": { + "duration": 10.02222990989685, + "points_saved": 40, + "points_rate": 3.9911277589531653, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 1.7, + "cpu_max": 1.7, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09056404232978821, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:43:14.650613", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 41 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.022419214248657, + "points_saved": 41, + "points_rate": 4.090828683528941, + "variables_saved": 123, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.3, + "cpu_max": 0.3, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09060566018267376, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:43:24.673973", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.02336049079895, + "points_saved": 40, + "points_rate": 3.9906775813080277, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.3, + "cpu_max": 0.3, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08906743526458741, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:43:34.695528", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.021554946899414, + "points_saved": 40, + "points_rate": 3.991396565896759, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.3, + "cpu_max": 0.3, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09098451733589172, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:43:44.717528", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.021901607513428, + "points_saved": 40, + "points_rate": 3.9912585022798437, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08847866654396057, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:43:54.740339", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.02240252494812, + "points_saved": 40, + "points_rate": 3.991059020073339, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.3, + "cpu_max": 0.3, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.090243661403656, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:44:04.762674", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.5% CPU", + "details": { + "duration": 10.022842407226562, + "points_saved": 40, + "points_rate": 3.990883860566303, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.5, + "cpu_max": 0.5, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.0872778832912445, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:44:14.784313", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.6% CPU", + "details": { + "duration": 10.0216383934021, + "points_saved": 40, + "points_rate": 3.9913633310033036, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.6, + "cpu_max": 0.6, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09396944642066955, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:44:24.811286", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.026972532272339, + "points_saved": 40, + "points_rate": 3.989240009510138, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.0882100522518158, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:44:34.834226", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.022940635681152, + "points_saved": 40, + "points_rate": 3.9908447484565617, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.3, + "cpu_max": 0.3, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09052180051803589, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:44:44.855052", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 41 points saved, 0 lost, 0.5% CPU", + "details": { + "duration": 10.020825862884521, + "points_saved": 41, + "points_rate": 4.091479141640132, + "variables_saved": 123, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.5, + "cpu_max": 0.5, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08844705325801198, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:44:54.876842", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.021241903305054, + "points_saved": 40, + "points_rate": 3.991521249158531, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08709185123443604, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:45:04.903799", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.8% CPU", + "details": { + "duration": 10.027504920959473, + "points_saved": 40, + "points_rate": 3.989028209439426, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.8, + "cpu_max": 0.8, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09046682715415955, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:45:14.932113", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.6% CPU", + "details": { + "duration": 10.028314590454102, + "points_saved": 40, + "points_rate": 3.988706141914992, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.6, + "cpu_max": 0.6, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.0954080045223236, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:45:24.959867", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.027753353118896, + "points_saved": 40, + "points_rate": 3.988929383425545, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.3, + "cpu_max": 0.3, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08715866208076477, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:45:34.981153", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.021286487579346, + "points_saved": 40, + "points_rate": 3.991503491051482, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.3, + "cpu_max": 0.3, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08802828788757325, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:45:36.915216", + "level": "info", + "event_type": "udp_streaming_stopped", + "message": "UDP streaming to PlotJuggler stopped (CSV recording continues)", + "details": {} + }, + { + "timestamp": "2025-08-22T14:45:41.593083", + "level": "info", + "event_type": "csv_recording_stopped", + "message": "🔥 CRITICAL: CSV recording stopped (dataset threads continue for UDP streaming)", + "details": { + "recording_protection": false, + "performance_monitoring": false + } + }, + { + "timestamp": "2025-08-22T14:45:41.618638", + "level": "info", + "event_type": "udp_streaming_stopped", + "message": "UDP streaming to PlotJuggler stopped (CSV recording continues)", + "details": {} + }, + { + "timestamp": "2025-08-22T14:45:41.728036", + "level": "info", + "event_type": "dataset_deactivated", + "message": "Dataset deactivated: DAR", + "details": { + "dataset_id": "DAR" + } + }, + { + "timestamp": "2025-08-22T14:45:41.758843", + "level": "info", + "event_type": "dataset_deactivated", + "message": "Dataset deactivated: Fast", + "details": { + "dataset_id": "Fast" + } + }, + { + "timestamp": "2025-08-22T14:45:41.779685", + "level": "info", + "event_type": "dataset_deactivated", + "message": "Dataset deactivated: test", + "details": { + "dataset_id": "Test" + } + }, + { + "timestamp": "2025-08-22T14:45:41.802288", + "level": "info", + "event_type": "plc_disconnection", + "message": "Disconnected from PLC 10.1.33.11 (application shutdown (will auto-reconnect on restart))", + "details": {} + }, + { + "timestamp": "2025-08-22T14:49:37.890361", + "level": "info", + "event_type": "application_started", + "message": "Application initialization completed successfully", + "details": {} + }, + { + "timestamp": "2025-08-22T14:49:37.997932", + "level": "info", + "event_type": "dataset_activated", + "message": "Dataset activated: DAR", + "details": { + "dataset_id": "DAR", + "variables_count": 3, + "streaming_count": 3, + "prefix": "gateway_phoenix" + } + }, + { + "timestamp": "2025-08-22T14:49:38.020957", + "level": "info", + "event_type": "dataset_activated", + "message": "Dataset activated: Fast", + "details": { + "dataset_id": "Fast", + "variables_count": 3, + "streaming_count": 1, + "prefix": "fast" + } + }, + { + "timestamp": "2025-08-22T14:49:38.045897", + "level": "info", + "event_type": "csv_recording_started", + "message": "🔥 CRITICAL PRIORITY: CSV recording started with MAXIMUM PRIORITY, async buffering, and performance monitoring: 2 datasets activated", + "details": { + "activated_datasets": 2, + "total_datasets": 3, + "priority": "CRITICAL", + "recording_protection": true, + "performance_monitoring": true, + "async_csv_buffering": true, + "csv_flush_interval": 5.0 + } + }, + { + "timestamp": "2025-08-22T14:49:47.998212", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 11.111982107162476, + "points_saved": 40, + "points_rate": 3.599717819399395, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.0, + "cpu_max": 0.0, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09301040172576905, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:49:58.020583", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 1.1% CPU", + "details": { + "duration": 10.022371053695679, + "points_saved": 40, + "points_rate": 3.991071552399797, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 1.1, + "cpu_max": 1.1, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.0950902283191681, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:50:08.046359", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 2.0% CPU", + "details": { + "duration": 10.02577519416809, + "points_saved": 40, + "points_rate": 3.9897164284381383, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 2.0, + "cpu_max": 2.0, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.0973472237586975, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:50:18.071400", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.025041818618774, + "points_saved": 40, + "points_rate": 3.99000829360242, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.3, + "cpu_max": 0.3, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09203721880912781, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:50:28.092884", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 41 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.021483182907104, + "points_saved": 41, + "points_rate": 4.091210777056498, + "variables_saved": 123, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08999341290171553, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:50:38.116211", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.023327350616455, + "points_saved": 40, + "points_rate": 3.9906907757073222, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.0, + "cpu_max": 0.0, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09310348033905029, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:50:48.140007", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.023220777511597, + "points_saved": 40, + "points_rate": 3.9907332072087267, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.3, + "cpu_max": 0.3, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09678917527198791, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:50:58.163922", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.024490594863892, + "points_saved": 40, + "points_rate": 3.9902276950106814, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09412208795547486, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:51:08.187146", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 39 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.023224115371704, + "points_saved": 39, + "points_rate": 3.8909635812881067, + "variables_saved": 117, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.0, + "cpu_max": 0.0, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09285361950214092, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:51:18.210514", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 41 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.023368120193481, + "points_saved": 41, + "points_rate": 4.090441407354854, + "variables_saved": 123, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09450871188466142, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:51:28.233471", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.022956609725952, + "points_saved": 40, + "points_rate": 3.9908383880645855, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09262270331382752, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:51:38.258523", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 41 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.025051832199097, + "points_saved": 41, + "points_rate": 4.089754415863826, + "variables_saved": 123, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.0, + "cpu_max": 0.0, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09436964407199766, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:51:48.282503", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 39 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.023470878601074, + "points_saved": 39, + "points_rate": 3.890867791441425, + "variables_saved": 117, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.0, + "cpu_max": 0.0, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09564633247179863, + "csv_write_time_avg": 1.3088568662985777e-05 + } + }, + { + "timestamp": "2025-08-22T14:51:58.328273", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 41 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.045107126235962, + "points_saved": 41, + "points_rate": 4.081589124412181, + "variables_saved": 123, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.0, + "cpu_max": 0.0, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.10384784675225979, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:52:08.372500", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.044890880584717, + "points_saved": 40, + "points_rate": 3.982123895174816, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09374428391456605, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:52:18.395085", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.02251672744751, + "points_saved": 40, + "points_rate": 3.9910135435799887, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.0, + "cpu_max": 0.0, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09268818497657776, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:52:28.422478", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.027969598770142, + "points_saved": 40, + "points_rate": 3.988843365151976, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09240041971206665, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:52:38.448537", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.026058673858643, + "points_saved": 40, + "points_rate": 3.9896036220388034, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.0, + "cpu_max": 0.0, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09310429096221924, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:52:48.476531", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.02799391746521, + "points_saved": 40, + "points_rate": 3.988833691884693, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.3, + "cpu_max": 0.3, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.0945288360118866, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:52:58.498740", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.02220892906189, + "points_saved": 40, + "points_rate": 3.991136114116524, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.0, + "cpu_max": 0.0, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09066132307052613, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:53:08.523630", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.024384021759033, + "points_saved": 40, + "points_rate": 3.990270116665082, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.0, + "cpu_max": 0.0, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09063748717308044, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:53:18.550150", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.026518821716309, + "points_saved": 40, + "points_rate": 3.989420526829762, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09302912950515747, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:53:28.573841", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.024198770523071, + "points_saved": 40, + "points_rate": 3.9903438584660833, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.1001862645149231, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:53:32.658807", + "level": "info", + "event_type": "udp_streaming_stopped", + "message": "UDP streaming to PlotJuggler stopped (CSV recording continues)", + "details": {} + }, + { + "timestamp": "2025-08-22T14:53:35.043136", + "level": "info", + "event_type": "csv_recording_stopped", + "message": "🔥 CRITICAL: CSV recording stopped (dataset threads continue for UDP streaming)", + "details": { + "recording_protection": false, + "performance_monitoring": false + } + }, + { + "timestamp": "2025-08-22T14:53:35.065971", + "level": "info", + "event_type": "udp_streaming_stopped", + "message": "UDP streaming to PlotJuggler stopped (CSV recording continues)", + "details": {} + }, + { + "timestamp": "2025-08-22T14:53:35.089349", + "level": "info", + "event_type": "dataset_deactivated", + "message": "Dataset deactivated: test", + "details": { + "dataset_id": "Test" + } + }, + { + "timestamp": "2025-08-22T14:53:35.198706", + "level": "info", + "event_type": "dataset_deactivated", + "message": "Dataset deactivated: DAR", + "details": { + "dataset_id": "DAR" + } + }, + { + "timestamp": "2025-08-22T14:53:35.720152", + "level": "info", + "event_type": "dataset_deactivated", + "message": "Dataset deactivated: Fast", + "details": { + "dataset_id": "Fast" + } + }, + { + "timestamp": "2025-08-22T14:53:35.743818", + "level": "info", + "event_type": "plc_disconnection", + "message": "Disconnected from PLC 10.1.33.11 (application shutdown (will auto-reconnect on restart))", + "details": {} + }, + { + "timestamp": "2025-08-22T14:54:15.294101", + "level": "info", + "event_type": "application_started", + "message": "Application initialization completed successfully", + "details": {} + }, + { + "timestamp": "2025-08-22T14:54:15.408309", + "level": "info", + "event_type": "dataset_activated", + "message": "Dataset activated: DAR", + "details": { + "dataset_id": "DAR", + "variables_count": 3, + "streaming_count": 3, + "prefix": "gateway_phoenix" + } + }, + { + "timestamp": "2025-08-22T14:54:15.431456", + "level": "info", + "event_type": "dataset_activated", + "message": "Dataset activated: Fast", + "details": { + "dataset_id": "Fast", + "variables_count": 3, + "streaming_count": 1, + "prefix": "fast" + } + }, + { + "timestamp": "2025-08-22T14:54:15.453401", + "level": "info", + "event_type": "csv_recording_started", + "message": "🔥 CRITICAL PRIORITY: CSV recording started with MAXIMUM PRIORITY, async buffering, and performance monitoring: 2 datasets activated", + "details": { + "activated_datasets": 2, + "total_datasets": 3, + "priority": "CRITICAL", + "recording_protection": true, + "performance_monitoring": true, + "async_csv_buffering": true, + "csv_flush_interval": 5.0 + } + }, + { + "timestamp": "2025-08-22T14:54:25.408540", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 11.117401361465454, + "points_saved": 40, + "points_rate": 3.597963112013377, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.0, + "cpu_max": 0.0, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09363451600074768, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:54:35.432071", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.6% CPU", + "details": { + "duration": 10.023530721664429, + "points_saved": 40, + "points_rate": 3.9906098071356952, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.6, + "cpu_max": 0.6, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09469097256660461, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:54:45.454196", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.021613597869873, + "points_saved": 40, + "points_rate": 3.991373206456706, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.0, + "cpu_max": 0.0, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09321072101593017, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:54:55.488037", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.033844232559204, + "points_saved": 40, + "points_rate": 3.9865079697173766, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.0, + "cpu_max": 0.0, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09273492693901061, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T14:55:05.510552", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 41 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.022478342056274, + "points_saved": 41, + "points_rate": 4.0908045496048615, + "variables_saved": 123, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.0, + "cpu_max": 0.0, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.0936047391193669, + "csv_write_time_avg": 1.2368690676805449e-05 + } } ], - "last_updated": "2025-08-22T14:13:03.835010", + "last_updated": "2025-08-22T14:55:05.510552", "total_entries": 1000 } \ No newline at end of file diff --git a/backend_manager.status b/backend_manager.status new file mode 100644 index 0000000..01ad11c --- /dev/null +++ b/backend_manager.status @@ -0,0 +1,9 @@ +{ + "timestamp": "2025-08-22T14:55:09.660532", + "status": "healthy", + "restart_count": 0, + "last_restart": 0, + "backend_pid": 33120, + "manager_pid": 1488, + "details": {} +} \ No newline at end of file diff --git a/backmanager.py b/backmanager.py new file mode 100644 index 0000000..cef8712 --- /dev/null +++ b/backmanager.py @@ -0,0 +1,380 @@ +""" +Backend Manager - PLC S7-315 Streamer Watchdog Service + +This script monitors the backend health and automatically restarts it when needed. +It runs as a separate process and ensures the backend is always available. + +Key features: +- Health monitoring every 30 seconds +- Automatic restart of failed backends +- Support for both development (main.py) and production (exe) environments +- Robust process management and cleanup +- Logging and status reporting +""" + +import os +import sys +import time +import json +import psutil +import requests +import subprocess +import threading +import logging +from datetime import datetime +from typing import Optional, Dict, Any + + +class BackendManager: + """Manages backend lifecycle and health monitoring""" + + def __init__(self, + check_interval: int = 30, + health_timeout: float = 5.0, + restart_delay: int = 10, + max_restart_attempts: int = 3, + restart_cooldown: int = 300): + """ + Initialize the backend manager + + Args: + check_interval: Health check interval in seconds (default: 30) + health_timeout: HTTP request timeout in seconds (default: 5.0) + restart_delay: Delay before restart attempt in seconds (default: 10) + max_restart_attempts: Maximum consecutive restart attempts (default: 3) + restart_cooldown: Cooldown period after max attempts in seconds (default: 300) + """ + self.check_interval = check_interval + self.health_timeout = health_timeout + self.restart_delay = restart_delay + self.max_restart_attempts = max_restart_attempts + self.restart_cooldown = restart_cooldown + + # Configuration + self.backend_port = 5050 + self.health_endpoint = "/api/health" + self.base_url = f"http://localhost:{self.backend_port}" + self.lock_file = "plc_streamer.lock" + self.status_file = "backend_manager.status" + + # State tracking + self.restart_count = 0 + self.last_restart_time = 0 + self.backend_process = None + self.running = True + + # Setup logging + self.setup_logging() + + # Detect environment + self.is_packaged = getattr(sys, 'frozen', False) + + self.log(f"[MAIN] Backend Manager initialized") + self.log(f"[CONFIG] Check interval: {check_interval}s") + self.log(f"[CONFIG] Environment: {'Packaged' if self.is_packaged else 'Development'}") + self.log(f"[CONFIG] Process separation: Independent cmd windows") + + def setup_logging(self): + """Setup logging configuration""" + log_format = '%(asctime)s [%(levelname)s] %(message)s' + + # Configure file handler with UTF-8 encoding + file_handler = logging.FileHandler('backend_manager.log', encoding='utf-8') + file_handler.setFormatter(logging.Formatter(log_format)) + + # Configure console handler with UTF-8 encoding + console_handler = logging.StreamHandler(sys.stdout) + console_handler.setFormatter(logging.Formatter(log_format)) + + logging.basicConfig( + level=logging.INFO, + format=log_format, + handlers=[file_handler, console_handler] + ) + self.logger = logging.getLogger(__name__) + + def log(self, message: str, level: str = "INFO"): + """Log message with appropriate level""" + if level == "ERROR": + self.logger.error(message) + elif level == "WARN": + self.logger.warning(message) + else: + self.logger.info(message) + + def get_backend_command(self) -> list: + """Get the appropriate backend command for current environment (legacy - kept for compatibility)""" + if self.is_packaged: + # In packaged environment, look for the exe + exe_path = os.path.join(os.path.dirname(sys.executable), "S7_Streamer_Logger.exe") + if os.path.exists(exe_path): + return [exe_path] + else: + # Fallback to exe in current directory + exe_path = "S7_Streamer_Logger.exe" + return [exe_path] + else: + # In development environment, use conda environment + # Try to detect if we're in snap7v12 environment + conda_env_python = r"C:\Users\migue\miniconda3\envs\snap7v12\python.exe" + if os.path.exists(conda_env_python): + main_script = os.path.join(os.path.dirname(__file__), "main.py") + return [conda_env_python, main_script] + else: + # Fallback to current python + python_exe = sys.executable + main_script = os.path.join(os.path.dirname(__file__), "main.py") + return [python_exe, main_script] + + def is_backend_alive(self) -> bool: + """Check if backend is responding to health checks""" + try: + response = requests.get( + f"{self.base_url}{self.health_endpoint}", + timeout=self.health_timeout + ) + return 200 <= response.status_code < 300 + except (requests.RequestException, requests.ConnectionError, + requests.Timeout, requests.ConnectTimeout): + return False + except Exception as e: + self.log(f"[ERROR] Unexpected error during health check: {e}", "ERROR") + return False + + def get_backend_pid(self) -> Optional[int]: + """Get backend PID from lock file""" + try: + if os.path.exists(self.lock_file): + with open(self.lock_file, 'r') as f: + return int(f.read().strip()) + except (ValueError, FileNotFoundError, IOError): + pass + return None + + def is_backend_process_running(self, pid: int) -> bool: + """Check if backend process is actually running""" + try: + if not psutil.pid_exists(pid): + return False + + proc = psutil.Process(pid) + cmdline = " ".join(proc.cmdline()).lower() + + # Check for backend signatures + signatures = ["main.py", "s7_streamer_logger", "plc_streamer"] + return any(sig in cmdline for sig in signatures) + except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess): + return False + + def cleanup_zombie_process(self, pid: int) -> bool: + """Terminate zombie backend process""" + try: + if not psutil.pid_exists(pid): + return True + + proc = psutil.Process(pid) + self.log(f"[STOP] Terminating zombie process {pid} ({proc.name()})") + + # Try graceful termination + proc.terminate() + try: + proc.wait(timeout=10) + self.log(f"[OK] Process {pid} terminated gracefully") + return True + except psutil.TimeoutExpired: + # Force kill + self.log(f"[FORCE] Force killing process {pid}") + proc.kill() + proc.wait(timeout=5) + self.log(f"[KILL] Process {pid} force killed") + return True + + except (psutil.NoSuchProcess, psutil.AccessDenied): + return True + except Exception as e: + self.log(f"[ERROR] Error terminating process {pid}: {e}", "ERROR") + return False + + def cleanup_lock_file(self): + """Remove stale lock file""" + try: + if os.path.exists(self.lock_file): + os.remove(self.lock_file) + self.log(f"[OK] Removed lock file: {self.lock_file}") + except Exception as e: + self.log(f"[ERROR] Error removing lock file: {e}", "ERROR") + + def get_cmd_command(self) -> str: + """Get Windows cmd command to launch backend in separate console window""" + if self.is_packaged: + # In packaged environment, launch exe in new cmd window + exe_path = os.path.join(os.path.dirname(sys.executable), "S7_Streamer_Logger.exe") + if os.path.exists(exe_path): + return f'start "S7_Streamer_Logger" "{exe_path}"' + else: + # Fallback to exe in current directory + return 'start "S7_Streamer_Logger" "S7_Streamer_Logger.exe"' + else: + # In development environment, launch python script in new cmd window + conda_env_python = r"C:\Users\migue\miniconda3\envs\snap7v12\python.exe" + if os.path.exists(conda_env_python): + main_script = os.path.join(os.path.dirname(__file__), "main.py") + return f'start "PLC_Backend" "{conda_env_python}" "{main_script}"' + else: + # Fallback to current python + python_exe = sys.executable + main_script = os.path.join(os.path.dirname(__file__), "main.py") + return f'start "PLC_Backend" "{python_exe}" "{main_script}"' + + def start_backend(self) -> bool: + """Start the backend process in a separate Windows cmd console""" + try: + cmd_command = self.get_cmd_command() + self.log(f"[START] Starting backend in separate cmd window: {cmd_command}") + + # Launch backend in completely separate cmd window using shell command + self.backend_process = subprocess.Popen( + cmd_command, + cwd=os.path.dirname(__file__) if not self.is_packaged else None, + shell=True # Use shell to properly handle the start command + ) + + self.log(f"[START] Backend launch command executed with PID: {self.backend_process.pid}") + + # Wait a moment for the actual backend to start in its new window + self.log(f"[WAIT] Waiting 10 seconds for backend to initialize in separate window...") + time.sleep(10) + + # The subprocess.Popen PID is just the cmd launcher, not the actual backend + # We'll verify health via HTTP instead of process tracking + self.log(f"[OK] Backend launch completed, will verify via health check") + return True + + except Exception as e: + self.log(f"[ERROR] Error starting backend: {e}", "ERROR") + return False + + def handle_backend_failure(self) -> bool: + """Handle backend failure and attempt restart""" + current_time = time.time() + + # Check if we're in cooldown period + if (current_time - self.last_restart_time) < self.restart_cooldown: + time_left = self.restart_cooldown - (current_time - self.last_restart_time) + self.log(f"[WAIT] In cooldown period, {int(time_left)}s remaining") + return False + + # Check restart attempt limit + if self.restart_count >= self.max_restart_attempts: + self.log(f"[FAIL] Maximum restart attempts ({self.max_restart_attempts}) reached") + self.restart_count = 0 + self.last_restart_time = current_time + return False + + # Cleanup existing processes + backend_pid = self.get_backend_pid() + if backend_pid and self.is_backend_process_running(backend_pid): + self.log(f"[STOP] Cleaning up zombie backend process: {backend_pid}") + self.cleanup_zombie_process(backend_pid) + + self.cleanup_lock_file() + + # Wait before restart + self.log(f"[WAIT] Waiting {self.restart_delay}s before restart attempt {self.restart_count + 1}") + time.sleep(self.restart_delay) + + # Attempt restart + self.restart_count += 1 + if self.start_backend(): + self.log(f"[OK] Backend restarted successfully (attempt {self.restart_count})") + self.restart_count = 0 # Reset counter on success + return True + else: + self.log(f"[FAIL] Backend restart failed (attempt {self.restart_count})", "ERROR") + return False + + def update_status(self, status: str, details: Dict[str, Any] = None): + """Update status file with current state""" + try: + status_data = { + "timestamp": datetime.now().isoformat(), + "status": status, + "restart_count": self.restart_count, + "last_restart": self.last_restart_time, + "backend_pid": self.get_backend_pid(), + "manager_pid": os.getpid(), + "details": details or {} + } + + with open(self.status_file, 'w') as f: + json.dump(status_data, f, indent=2) + + except Exception as e: + self.log(f"[ERROR] Error updating status file: {e}", "ERROR") + + def run(self): + """Main monitoring loop""" + self.log(f"[START] Backend Manager started (PID: {os.getpid()})") + self.update_status("starting") + + while self.running: + try: + # Check backend health + if self.is_backend_alive(): + self.log(f"[OK] Backend is healthy") + self.update_status("healthy") + self.restart_count = 0 # Reset restart counter on successful health check + else: + self.log(f"[WARN] Backend health check failed", "WARN") + self.update_status("unhealthy") + + # Attempt to handle the failure + if self.handle_backend_failure(): + self.update_status("restarted") + else: + self.update_status("failed") + + # Wait for next check + time.sleep(self.check_interval) + + except KeyboardInterrupt: + self.log(f"[SHUTDOWN] Received interrupt signal") + self.running = False + break + except Exception as e: + self.log(f"[ERROR] Unexpected error in main loop: {e}", "ERROR") + self.update_status("error", {"error": str(e)}) + time.sleep(self.check_interval) + + self.shutdown() + + def shutdown(self): + """Cleanup and shutdown""" + self.log(f"[SHUTDOWN] Backend Manager shutting down") + self.update_status("shutting_down") + + # Don't terminate any backend processes - they run independently in their own cmd windows + # The manager only monitors health, doesn't control the backend lifecycle directly + self.log(f"[OK] Backend Manager stopped - backend continues running independently") + self.update_status("stopped") + + +def main(): + """Main entry point""" + print("Backend Manager - PLC S7-315 Streamer Watchdog") + print("=" * 50) + + try: + manager = BackendManager() + manager.run() + except KeyboardInterrupt: + print("\n[SHUTDOWN] Backend Manager interrupted by user") + except Exception as e: + print(f"[ERROR] Critical error: {e}") + return 1 + + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/backmanager.spec b/backmanager.spec new file mode 100644 index 0000000..e69de29 diff --git a/backmanager_config.json b/backmanager_config.json new file mode 100644 index 0000000..e69de29 diff --git a/build_all.bat b/build_all.bat new file mode 100644 index 0000000..e69de29 diff --git a/core/rotating_logger.py b/core/rotating_logger.py index 92db157..a659da9 100644 --- a/core/rotating_logger.py +++ b/core/rotating_logger.py @@ -76,9 +76,9 @@ class RotatingFileHandler(logging.Handler): oldest_file = log_files.pop(0) try: os.remove(oldest_file) - print(f"🗑️ Removed old log file: {os.path.basename(oldest_file)}") + print(f"[CLEANUP] Removed old log file: {os.path.basename(oldest_file)}") except OSError as e: - print(f"⚠️ Could not remove {oldest_file}: {e}") + print(f"[WARNING] Could not remove {oldest_file}: {e}") def emit(self, record): """Emitir un registro de log""" diff --git a/main.spec b/main.spec index ee31589..94142a7 100644 --- a/main.spec +++ b/main.spec @@ -4,7 +4,8 @@ import sys block_cipher = None -a = Analysis( +# Analysis for main application (backend) +a_main = Analysis( ['main.py'], pathex=[], binaries=[ @@ -80,6 +81,7 @@ a = Analysis( 'utils.json_manager', 'utils.symbol_loader', 'utils.symbol_processor', + 'utils.instance_manager', ], hookspath=[], hooksconfig={}, @@ -102,11 +104,57 @@ a = Analysis( noarchive=False, ) -pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) +# Analysis for backend manager (watchdog) +a_manager = Analysis( + ['backmanager.py'], + pathex=[], + binaries=[], + datas=[ + # Include utils for instance management + ('utils', 'utils'), + ], + hiddenimports=[ + # System and monitoring dependencies + 'psutil', + 'psutil._pswindows', + 'psutil._psutil_windows', + 'requests', + 'subprocess', + 'logging', + 'json', + + # Utils modules needed by manager + 'utils.instance_manager', + ], + hookspath=[], + hooksconfig={}, + runtime_hooks=[], + excludes=[ + # Exclude heavy packages not needed by manager + 'matplotlib', + 'scipy', + 'IPython', + 'notebook', + 'jupyter', + 'flask', + 'snap7', + 'pandas', + 'numpy', + ], + win_no_prefer_redirects=False, + win_private_assemblies=False, + cipher=block_cipher, + noarchive=False, +) -exe = EXE( - pyz, - a.scripts, +# Build PYZ files +pyz_main = PYZ(a_main.pure, a_main.zipped_data, cipher=block_cipher) +pyz_manager = PYZ(a_manager.pure, a_manager.zipped_data, cipher=block_cipher) + +# Build main backend executable +exe_main = EXE( + pyz_main, + a_main.scripts, [], exclude_binaries=True, name='S7_Streamer_Logger', @@ -121,7 +169,35 @@ exe = EXE( codesign_identity=None, entitlements_file=None, ) -coll = COLLECT(exe, a.binaries, a.zipfiles, a.datas, strip=False, upx=True, upx_exclude=[], name='main') + +# Build backend manager executable +exe_manager = EXE( + pyz_manager, + a_manager.scripts, + [], + exclude_binaries=True, + name='Backend_Manager', + debug=False, + bootloader_ignore_signals=False, + strip=False, + upx=True, + console=True, + disable_windowed_traceback=False, + argv_emulation=False, + target_arch=None, + codesign_identity=None, + entitlements_file=None, +) + +# Collect all files together +coll = COLLECT( + exe_main, a_main.binaries, a_main.zipfiles, a_main.datas, + exe_manager, a_manager.binaries, a_manager.zipfiles, a_manager.datas, + strip=False, + upx=True, + upx_exclude=[], + name='main' +) # Post-build: Copy config directory to the same level as the executable import shutil diff --git a/system_state.json b/system_state.json index 13f99a8..0011fb9 100644 --- a/system_state.json +++ b/system_state.json @@ -4,11 +4,10 @@ "should_stream": false, "active_datasets": [ "DAR", - "Test", - "Fast" + "Fast", + "Test" ] }, "auto_recovery_enabled": true, - "last_update": "2025-08-22T14:03:25.041057", - "plotjuggler_path": "C:\\Program Files\\PlotJuggler\\plotjuggler.exe" + "last_update": "2025-08-22T14:54:15.476402" } \ No newline at end of file