From e46cc62a0d90a6cd50f6db3a57c6bf749f60d15e Mon Sep 17 00:00:00 2001 From: Miguel Date: Sat, 16 Aug 2025 21:12:19 +0200 Subject: [PATCH] Refactor PlotHistoricalManager: Remove TimeRangeSelector and manage time range directly in session creation; update PlotHistoricalSession for improved performance with simple plot mode toggle; enhance TimePointSelector with time picker styles for better UI consistency. --- application_events.json | 3501 +++++++++-------- .../src/components/PlotHistoricalManager.jsx | 200 +- .../src/components/PlotHistoricalSession.jsx | 63 +- frontend/src/components/TimePointSelector.jsx | 28 + 4 files changed, 2043 insertions(+), 1749 deletions(-) diff --git a/application_events.json b/application_events.json index 6ca682d..94f9f03 100644 --- a/application_events.json +++ b/application_events.json @@ -1,1549 +1,5 @@ { "events": [ - { - "timestamp": "2025-08-16T18:21:18.315253", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 36 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.015853881835938, - "points_saved": 36, - "points_rate": 3.594301636656972, - "variables_saved": 72, - "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.044117622905307345, - "csv_write_time_avg": 8.092986212836371e-06 - } - }, - { - "timestamp": "2025-08-16T18:21:28.354564", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 35 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.03831148147583, - "points_saved": 35, - "points_rate": 3.486642157357555, - "variables_saved": 70, - "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.11122162682669504, - "csv_write_time_avg": 2.044950212751116e-05 - } - }, - { - "timestamp": "2025-08-16T18:21:38.413553", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 36 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.059988737106323, - "points_saved": 36, - "points_rate": 3.578532833462706, - "variables_saved": 72, - "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.10544510682423909, - "csv_write_time_avg": 3.349781036376953e-05 - } - }, - { - "timestamp": "2025-08-16T18:21:48.447880", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 36 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.034327268600464, - "points_saved": 36, - "points_rate": 3.587684459191562, - "variables_saved": 72, - "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.11204698350694445, - "csv_write_time_avg": 3.973642985026042e-06 - } - }, - { - "timestamp": "2025-08-16T18:21:58.480942", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 35 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.033062219619751, - "points_saved": 35, - "points_rate": 3.4884663559204445, - "variables_saved": 70, - "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.11097707067217145, - "csv_write_time_avg": 1.735687255859375e-05 - } - }, - { - "timestamp": "2025-08-16T18:22:08.508297", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 36 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.027354955673218, - "points_saved": 36, - "points_rate": 3.5901790810379293, - "variables_saved": 72, - "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.11127992471059163, - "csv_write_time_avg": 1.777542961968316e-05 - } - }, - { - "timestamp": "2025-08-16T18:22:18.537710", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 35 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.028420448303223, - "points_saved": 35, - "points_rate": 3.4900810332420686, - "variables_saved": 70, - "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.1092137200491769, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-16T18:22:28.580719", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 36 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.044001340866089, - "points_saved": 36, - "points_rate": 3.5842289121892668, - "variables_saved": 72, - "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.10911467340257433, - "csv_write_time_avg": 1.1616282992892795e-05 - } - }, - { - "timestamp": "2025-08-16T18:22:38.611725", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 36 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.031005620956421, - "points_saved": 36, - "points_rate": 3.5888724780285317, - "variables_saved": 72, - "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.11374937825732762, - "csv_write_time_avg": 8.463859558105469e-06 - } - }, - { - "timestamp": "2025-08-16T18:22:48.652697", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 35 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.040971755981445, - "points_saved": 35, - "points_rate": 3.485718399631028, - "variables_saved": 70, - "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.10770289557320731, - "csv_write_time_avg": 4.7547476632254465e-06 - } - }, - { - "timestamp": "2025-08-16T18:22:58.687697", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 36 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.035000324249268, - "points_saved": 36, - "points_rate": 3.5874438302714466, - "variables_saved": 72, - "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.111513356367747, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-16T18:23:08.720628", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 36 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.032164812088013, - "points_saved": 36, - "points_rate": 3.5884577929404307, - "variables_saved": 72, - "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.10894164111879137, - "csv_write_time_avg": 3.7749608357747397e-06 - } - }, - { - "timestamp": "2025-08-16T18:23:18.759764", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 35 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.039902210235596, - "points_saved": 35, - "points_rate": 3.4860897314634993, - "variables_saved": 70, - "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.10567408970424107, - "csv_write_time_avg": 6.278582981654576e-05 - } - }, - { - "timestamp": "2025-08-16T18:23:28.787986", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 37 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.028222560882568, - "points_saved": 37, - "points_rate": 3.6895870405117623, - "variables_saved": 74, - "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.10496509397352063, - "csv_write_time_avg": 1.5207239099451013e-06 - } - }, - { - "timestamp": "2025-08-16T18:23:32.205391", - "level": "info", - "event_type": "udp_streaming_stopped", - "message": "UDP streaming to PlotJuggler stopped (CSV recording continues)", - "details": {} - }, - { - "timestamp": "2025-08-16T18:23:34.234104", - "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-16T18:23:34.251601", - "level": "info", - "event_type": "udp_streaming_stopped", - "message": "UDP streaming to PlotJuggler stopped (CSV recording continues)", - "details": {} - }, - { - "timestamp": "2025-08-16T18:23:34.339727", - "level": "info", - "event_type": "dataset_deactivated", - "message": "Dataset deactivated: Fast", - "details": { - "dataset_id": "Fast" - } - }, - { - "timestamp": "2025-08-16T18:23:34.372354", - "level": "info", - "event_type": "dataset_deactivated", - "message": "Dataset deactivated: test", - "details": { - "dataset_id": "Test" - } - }, - { - "timestamp": "2025-08-16T18:23:34.620272", - "level": "info", - "event_type": "dataset_deactivated", - "message": "Dataset deactivated: DAR", - "details": { - "dataset_id": "DAR" - } - }, - { - "timestamp": "2025-08-16T18:23:34.638294", - "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-16T18:23:41.492942", - "level": "info", - "event_type": "application_started", - "message": "Application initialization completed successfully", - "details": {} - }, - { - "timestamp": "2025-08-16T18:23:41.576182", - "level": "info", - "event_type": "dataset_activated", - "message": "Dataset activated: DAR", - "details": { - "dataset_id": "DAR", - "variables_count": 2, - "streaming_count": 2, - "prefix": "gateway_phoenix" - } - }, - { - "timestamp": "2025-08-16T18:23:41.594185", - "level": "info", - "event_type": "dataset_activated", - "message": "Dataset activated: Fast", - "details": { - "dataset_id": "Fast", - "variables_count": 2, - "streaming_count": 2, - "prefix": "fast" - } - }, - { - "timestamp": "2025-08-16T18:23:41.612184", - "level": "info", - "event_type": "csv_recording_started", - "message": "🔥 CRITICAL PRIORITY: CSV recording started with MAXIMUM PRIORITY and performance monitoring: 2 datasets activated", - "details": { - "activated_datasets": 2, - "total_datasets": 3, - "priority": "CRITICAL", - "recording_protection": true, - "performance_monitoring": true - } - }, - { - "timestamp": "2025-08-16T18:23:51.576314", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 36 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 11.088732242584229, - "points_saved": 36, - "points_rate": 3.2465388479441004, - "variables_saved": 72, - "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.04650178220536974, - "csv_write_time_avg": 0.0003892713122897678 - } - }, - { - "timestamp": "2025-08-16T18:24:01.594658", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 37 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.018344640731812, - "points_saved": 37, - "points_rate": 3.693224911585519, - "variables_saved": 74, - "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.044695138931274414, - "csv_write_time_avg": 2.9254604030299833e-05 - } - }, - { - "timestamp": "2025-08-16T18:24:11.614425", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 36 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.019767045974731, - "points_saved": 36, - "points_rate": 3.5928979021984726, - "variables_saved": 72, - "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.04488941695955065, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-16T18:24:21.630648", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 36 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.016222715377808, - "points_saved": 36, - "points_rate": 3.594169281472701, - "variables_saved": 72, - "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.0362715654902988, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-16T18:24:31.647847", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 36 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.01719856262207, - "points_saved": 36, - "points_rate": 3.5938191476337025, - "variables_saved": 72, - "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.03559539715449015, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-16T18:24:41.664429", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 36 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.016581773757935, - "points_saved": 36, - "points_rate": 3.594040443448986, - "variables_saved": 72, - "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.033702042367723256, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-16T18:24:51.681860", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 36 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.017431497573853, - "points_saved": 36, - "points_rate": 3.5937355806944056, - "variables_saved": 72, - "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.03262894683414035, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-16T18:25:01.699151", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 36 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.01729130744934, - "points_saved": 36, - "points_rate": 3.593785874353945, - "variables_saved": 72, - "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.04057797458436754, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-16T18:25:11.716164", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 37 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.01701283454895, - "points_saved": 37, - "points_rate": 3.693715942180486, - "variables_saved": 74, - "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.03774530178791768, - "csv_write_time_avg": 1.7526987436655406e-06 - } - }, - { - "timestamp": "2025-08-16T18:25:21.733241", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 36 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.01707649230957, - "points_saved": 36, - "points_rate": 3.5938629427097166, - "variables_saved": 72, - "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.0388162997033861, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-16T18:25:31.750935", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 36 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.01769471168518, - "points_saved": 36, - "points_rate": 3.593641155585192, - "variables_saved": 72, - "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.0382196307182312, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-16T18:25:41.768076", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 36 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.017140865325928, - "points_saved": 36, - "points_rate": 3.5938398475170756, - "variables_saved": 72, - "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.03385060363345676, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-16T18:25:51.784697", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 36 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.016620635986328, - "points_saved": 36, - "points_rate": 3.594026499382854, - "variables_saved": 72, - "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.03625632656945123, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-16T18:26:01.802073", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 36 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.01737642288208, - "points_saved": 36, - "points_rate": 3.593755338749915, - "variables_saved": 72, - "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.039837261041005455, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-16T18:26:11.818652", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 36 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.016578435897827, - "points_saved": 36, - "points_rate": 3.5940416411038836, - "variables_saved": 72, - "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.0869104266166687, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-16T18:26:21.927237", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 34 points saved, 0 lost, 0.6% CPU", - "details": { - "duration": 10.06232213973999, - "points_saved": 34, - "points_rate": 3.378941712243627, - "variables_saved": 68, - "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.18056527306051814, - "csv_write_time_avg": 0.011022399453555836 - } - }, - { - "timestamp": "2025-08-16T18:26:32.828534", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 38 points saved, 0 lost, 33.1% CPU", - "details": { - "duration": 10.90151834487915, - "points_saved": 38, - "points_rate": 3.4857529747542015, - "variables_saved": 76, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 33.1, - "cpu_max": 33.1, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.19401655699077405, - "csv_write_time_avg": 0.01511844835783306 - } - }, - { - "timestamp": "2025-08-16T18:26:43.680506", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 39 points saved, 0 lost, 33.1% CPU", - "details": { - "duration": 10.898014307022095, - "points_saved": 39, - "points_rate": 3.5786335841815236, - "variables_saved": 78, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 33.1, - "cpu_max": 33.1, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.14690295243874574, - "csv_write_time_avg": 0.003972077981019631 - } - }, - { - "timestamp": "2025-08-16T18:26:53.718088", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 36 points saved, 0 lost, 9.6% CPU", - "details": { - "duration": 10.037581205368042, - "points_saved": 36, - "points_rate": 3.586521420195077, - "variables_saved": 72, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 9.6, - "cpu_max": 9.6, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.10698958900239733, - "csv_write_time_avg": 5.351172553168402e-06 - } - }, - { - "timestamp": "2025-08-16T18:27:03.766412", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 35 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.048324584960938, - "points_saved": 35, - "points_rate": 3.4831677364785345, - "variables_saved": 70, - "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.10907115255083356, - "csv_write_time_avg": 7.459095546177455e-06 - } - }, - { - "timestamp": "2025-08-16T18:27:13.799743", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 36 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.033330202102661, - "points_saved": 36, - "points_rate": 3.588040986875481, - "variables_saved": 72, - "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.11147182517581516, - "csv_write_time_avg": 1.020563973320855e-05 - } - }, - { - "timestamp": "2025-08-16T18:27:23.898255", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 35 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.067713260650635, - "points_saved": 35, - "points_rate": 3.4764597574303675, - "variables_saved": 70, - "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.17638461249215262, - "csv_write_time_avg": 0.011402770451136997 - } - }, - { - "timestamp": "2025-08-16T18:27:34.835158", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 39 points saved, 0 lost, 26.0% CPU", - "details": { - "duration": 10.967023134231567, - "points_saved": 39, - "points_rate": 3.5561154127840395, - "variables_saved": 78, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 26.0, - "cpu_max": 26.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.1639550037873097, - "csv_write_time_avg": 0.011529690180069361 - } - }, - { - "timestamp": "2025-08-16T18:27:44.887333", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 35 points saved, 0 lost, 20.8% CPU", - "details": { - "duration": 10.05285382270813, - "points_saved": 35, - "points_rate": 3.481598421429287, - "variables_saved": 70, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 20.8, - "cpu_max": 20.8, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.10730040413992746, - "csv_write_time_avg": 6.621224539620536e-06 - } - }, - { - "timestamp": "2025-08-16T18:27:54.932299", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 36 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.044966459274292, - "points_saved": 36, - "points_rate": 3.583884540178032, - "variables_saved": 72, - "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.10931764708624946, - "csv_write_time_avg": 2.3769007788764106e-05 - } - }, - { - "timestamp": "2025-08-16T18:28:04.973331", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 36 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.041032075881958, - "points_saved": 36, - "points_rate": 3.5852888157254417, - "variables_saved": 72, - "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.10538231664233738, - "csv_write_time_avg": 3.6491288079155816e-06 - } - }, - { - "timestamp": "2025-08-16T18:28:14.996801", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 35 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.023469686508179, - "points_saved": 35, - "points_rate": 3.4918048434975373, - "variables_saved": 70, - "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.10980193274361746, - "csv_write_time_avg": 1.4087132045200894e-05 - } - }, - { - "timestamp": "2025-08-16T18:28:22.596080", - "level": "info", - "event_type": "config_reload", - "message": "Dataset configuration reloaded from files with CSV header validation", - "details": { - "datasets_count": 3, - "active_datasets_count": 3, - "csv_recording_active": true - } - }, - { - "timestamp": "2025-08-16T18:28:25.026671", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 36 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.02987003326416, - "points_saved": 36, - "points_rate": 3.5892788122483794, - "variables_saved": 72, - "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.10965166489283244, - "csv_write_time_avg": 4.861752192179362e-05 - } - }, - { - "timestamp": "2025-08-16T18:28:35.067107", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 36 points saved, 0 lost, 0.6% CPU", - "details": { - "duration": 10.03954553604126, - "points_saved": 36, - "points_rate": 3.5858196838455028, - "variables_saved": 72, - "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.08615738153457642, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-16T18:28:45.083203", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 36 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.016986846923828, - "points_saved": 36, - "points_rate": 3.5938951053984303, - "variables_saved": 72, - "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.037027094099256724, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-16T18:28:55.099939", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 36 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.016735553741455, - "points_saved": 36, - "points_rate": 3.593985266642411, - "variables_saved": 72, - "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.04507075415717231, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-16T18:29:05.116074", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 36 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.016135454177856, - "points_saved": 36, - "points_rate": 3.594200594100786, - "variables_saved": 72, - "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.037626167138417564, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-16T18:29:15.134319", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 36 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.018244981765747, - "points_saved": 36, - "points_rate": 3.593443768396936, - "variables_saved": 72, - "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.03699025180604723, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-16T18:29:22.380379", - "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-16T18:29:22.396260", - "level": "info", - "event_type": "udp_streaming_stopped", - "message": "UDP streaming to PlotJuggler stopped (CSV recording continues)", - "details": {} - }, - { - "timestamp": "2025-08-16T18:29:22.906030", - "level": "info", - "event_type": "dataset_deactivated", - "message": "Dataset deactivated: DAR", - "details": { - "dataset_id": "DAR" - } - }, - { - "timestamp": "2025-08-16T18:29:22.922598", - "level": "info", - "event_type": "dataset_deactivated", - "message": "Dataset deactivated: test", - "details": { - "dataset_id": "Test" - } - }, - { - "timestamp": "2025-08-16T18:29:23.152861", - "level": "info", - "event_type": "dataset_deactivated", - "message": "Dataset deactivated: Fast", - "details": { - "dataset_id": "Fast" - } - }, - { - "timestamp": "2025-08-16T18:29:23.169976", - "level": "info", - "event_type": "plc_disconnection", - "message": "Disconnected from PLC 10.1.33.11 (manually disconnected)", - "details": {} - }, - { - "timestamp": "2025-08-16T18:31:59.337677", - "level": "info", - "event_type": "udp_streaming_stopped", - "message": "UDP streaming to PlotJuggler stopped (CSV recording continues)", - "details": {} - }, - { - "timestamp": "2025-08-16T18:31:59.354198", - "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-16T18:31:59.372382", - "level": "info", - "event_type": "udp_streaming_stopped", - "message": "UDP streaming to PlotJuggler stopped (CSV recording continues)", - "details": {} - }, - { - "timestamp": "2025-08-16T18:31:59.388374", - "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-16T18:32:06.856060", - "level": "info", - "event_type": "application_started", - "message": "Application initialization completed successfully", - "details": {} - }, - { - "timestamp": "2025-08-16T18:32:30.238313", - "level": "info", - "event_type": "dataset_activated", - "message": "Dataset activated: DAR", - "details": { - "dataset_id": "DAR", - "variables_count": 2, - "streaming_count": 2, - "prefix": "gateway_phoenix" - } - }, - { - "timestamp": "2025-08-16T18:32:30.269189", - "level": "info", - "event_type": "dataset_activated", - "message": "Dataset activated: Fast", - "details": { - "dataset_id": "Fast", - "variables_count": 2, - "streaming_count": 2, - "prefix": "fast" - } - }, - { - "timestamp": "2025-08-16T18:32:30.302524", - "level": "info", - "event_type": "csv_recording_started", - "message": "🔥 CRITICAL PRIORITY: CSV recording started with MAXIMUM PRIORITY and performance monitoring: 2 datasets activated", - "details": { - "activated_datasets": 2, - "total_datasets": 3, - "priority": "CRITICAL", - "recording_protection": true, - "performance_monitoring": true - } - }, - { - "timestamp": "2025-08-16T18:32:30.339062", - "level": "info", - "event_type": "plc_connection", - "message": "Successfully connected to PLC 10.1.33.11 and auto-started CSV recording for 3 datasets", - "details": { - "ip": "10.1.33.11", - "rack": 0, - "slot": 2, - "symbols_path": "C:/Users/migue/Downloads/symSAE452.asc", - "auto_started_recording": true, - "recording_datasets": 3, - "dataset_names": [ - "DAR", - "test", - "Fast" - ] - } - }, - { - "timestamp": "2025-08-16T18:32:40.238147", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 30 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 34.394169330596924, - "points_saved": 30, - "points_rate": 0.872240864770998, - "variables_saved": 60, - "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.08476141293843588, - "csv_write_time_avg": 0.0003764793790619949 - } - }, - { - "timestamp": "2025-08-16T18:32:43.053315", - "level": "info", - "event_type": "plot_session_created", - "message": "Plot session 'UR29' created and started", - "details": { - "session_id": "plot_1_1755361963053_2", - "variables": [ - "UR29_Brix", - "UR29_ma", - "AUX Blink_1.0S", - "AUX Blink_1.6S" - ], - "time_window": 36, - "trigger_variable": null, - "auto_started": true - } - }, - { - "timestamp": "2025-08-16T18:32:50.281813", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 30 points saved, 0 lost, 0.9% CPU", - "details": { - "duration": 10.043666124343872, - "points_saved": 30, - "points_rate": 2.986957115916657, - "variables_saved": 60, - "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.10776501496632894, - "csv_write_time_avg": 5.62588373819987e-05 - } - }, - { - "timestamp": "2025-08-16T18:33:00.331566", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 29 points saved, 0 lost, 0.5% CPU", - "details": { - "duration": 10.049752235412598, - "points_saved": 29, - "points_rate": 2.885643279623539, - "variables_saved": 58, - "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.1179089381777007, - "csv_write_time_avg": 0.001501214915308459 - } - }, - { - "timestamp": "2025-08-16T18:33:10.363911", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 30 points saved, 0 lost, 15.2% CPU", - "details": { - "duration": 10.032345533370972, - "points_saved": 30, - "points_rate": 2.990327625798958, - "variables_saved": 60, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 15.2, - "cpu_max": 15.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.11747097174326579, - "csv_write_time_avg": 0.0005184332529703776 - } - }, - { - "timestamp": "2025-08-16T18:33:20.398475", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 29 points saved, 0 lost, 7.5% CPU", - "details": { - "duration": 10.034563302993774, - "points_saved": 29, - "points_rate": 2.8900111668385167, - "variables_saved": 58, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 7.5, - "cpu_max": 7.5, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.14085213891391096, - "csv_write_time_avg": 0.0021928918772730335 - } - }, - { - "timestamp": "2025-08-16T18:33:30.434769", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 30 points saved, 0 lost, 10.1% CPU", - "details": { - "duration": 10.036294221878052, - "points_saved": 30, - "points_rate": 2.9891511086435867, - "variables_saved": 60, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 10.1, - "cpu_max": 10.1, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.11473293304443359, - "csv_write_time_avg": 0.0026844898859659833 - } - }, - { - "timestamp": "2025-08-16T18:33:40.481282", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 30 points saved, 0 lost, 11.5% CPU", - "details": { - "duration": 10.045766592025757, - "points_saved": 30, - "points_rate": 2.986332573545332, - "variables_saved": 60, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 11.5, - "cpu_max": 11.5, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.1166374127070109, - "csv_write_time_avg": 0.0025274038314819338 - } - }, - { - "timestamp": "2025-08-16T18:33:50.514989", - "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-16T18:33:50.549123", - "level": "info", - "event_type": "udp_streaming_stopped", - "message": "UDP streaming to PlotJuggler stopped (CSV recording continues)", - "details": {} - }, - { - "timestamp": "2025-08-16T18:33:50.625004", - "level": "info", - "event_type": "dataset_deactivated", - "message": "Dataset deactivated: DAR", - "details": { - "dataset_id": "DAR" - } - }, { "timestamp": "2025-08-16T18:33:50.659332", "level": "info", @@ -21766,8 +20222,1963 @@ "read_time_avg": 0.048909878730773924, "csv_write_time_avg": 3.5127003987630206e-06 } + }, + { + "timestamp": "2025-08-16T20:58:10.227847", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.029785394668579, + "points_saved": 30, + "points_rate": 2.991090917652811, + "variables_saved": 60, + "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.04086577892303467, + "csv_write_time_avg": 1.8358230590820313e-06 + } + }, + { + "timestamp": "2025-08-16T20:58:20.258709", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.030862092971802, + "points_saved": 30, + "points_rate": 2.990769858257719, + "variables_saved": 60, + "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.0432463010152181, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-16T20:58:30.291492", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.032277584075928, + "points_saved": 30, + "points_rate": 2.990347879490348, + "variables_saved": 60, + "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.03464295069376628, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-16T20:58:40.323823", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.032836675643921, + "points_saved": 30, + "points_rate": 2.9901812388543205, + "variables_saved": 60, + "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.05765830675760905, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-16T20:58:50.383251", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 0.5% CPU", + "details": { + "duration": 10.059427976608276, + "points_saved": 30, + "points_rate": 2.9822769316267883, + "variables_saved": 60, + "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.10168923536936442, + "csv_write_time_avg": 2.4620691935221354e-05 + } + }, + { + "timestamp": "2025-08-16T20:59:00.448485", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 0.5% CPU", + "details": { + "duration": 10.065234184265137, + "points_saved": 30, + "points_rate": 2.9805565822699536, + "variables_saved": 60, + "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.0731366237004598, + "csv_write_time_avg": 2.3015340169270833e-05 + } + }, + { + "timestamp": "2025-08-16T20:59:10.481759", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.033273458480835, + "points_saved": 30, + "points_rate": 2.9900510659999875, + "variables_saved": 60, + "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.03701192537943522, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-16T20:59:20.510861", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.029102087020874, + "points_saved": 30, + "points_rate": 2.9912947081099506, + "variables_saved": 60, + "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.04303884506225586, + "csv_write_time_avg": 0.00041495164235432944 + } + }, + { + "timestamp": "2025-08-16T20:59:30.540421", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 6.9% CPU", + "details": { + "duration": 10.029560565948486, + "points_saved": 30, + "points_rate": 2.9911579677631597, + "variables_saved": 60, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 6.9, + "cpu_max": 6.9, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.03464994430541992, + "csv_write_time_avg": 0.0008058627446492513 + } + }, + { + "timestamp": "2025-08-16T20:59:40.571145", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 8.9% CPU", + "details": { + "duration": 10.030724048614502, + "points_saved": 30, + "points_rate": 2.990811017689572, + "variables_saved": 60, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 8.9, + "cpu_max": 8.9, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.05179858207702637, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-16T20:59:50.632606", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 29 points saved, 0 lost, 4.7% CPU", + "details": { + "duration": 10.061460733413696, + "points_saved": 29, + "points_rate": 2.8822852633805143, + "variables_saved": 58, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 4.7, + "cpu_max": 4.7, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.10567300895164752, + "csv_write_time_avg": 9.923145688813308e-06 + } + }, + { + "timestamp": "2025-08-16T21:00:00.703314", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 5.6% CPU", + "details": { + "duration": 10.070707082748413, + "points_saved": 30, + "points_rate": 2.978936806869439, + "variables_saved": 60, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 5.6, + "cpu_max": 5.6, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.049492661158243814, + "csv_write_time_avg": 6.16153081258138e-05 + } + }, + { + "timestamp": "2025-08-16T21:00:10.734328", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 3.0% CPU", + "details": { + "duration": 10.031014680862427, + "points_saved": 30, + "points_rate": 2.99072436383083, + "variables_saved": 60, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 3.0, + "cpu_max": 3.0, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.035256361961364745, + "csv_write_time_avg": 6.663004557291666e-05 + } + }, + { + "timestamp": "2025-08-16T21:00:20.764278", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.02994990348816, + "points_saved": 30, + "points_rate": 2.9910418585008856, + "variables_saved": 60, + "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.03840560913085937, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-16T21:00:30.794483", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.03020453453064, + "points_saved": 30, + "points_rate": 2.990965926638887, + "variables_saved": 60, + "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.04851470788319905, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-16T21:00:40.831230", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 31 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.036747694015503, + "points_saved": 31, + "points_rate": 3.0886499237680365, + "variables_saved": 62, + "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.04975556558178317, + "csv_write_time_avg": 3.220958094443044e-05 + } + }, + { + "timestamp": "2025-08-16T21:00:50.862266", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.031035661697388, + "points_saved": 30, + "points_rate": 2.990718108455373, + "variables_saved": 60, + "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.04460055033365885, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-16T21:01:00.898584", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 31 points saved, 0 lost, 0.6% CPU", + "details": { + "duration": 10.036318302154541, + "points_saved": 31, + "points_rate": 3.0887820679566422, + "variables_saved": 62, + "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.03556685293874433, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-16T21:01:10.928288", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.029704332351685, + "points_saved": 30, + "points_rate": 2.99111509231956, + "variables_saved": 60, + "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.032610265413920085, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-16T21:01:20.961143", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.032854795455933, + "points_saved": 30, + "points_rate": 2.9901758384450616, + "variables_saved": 60, + "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.034676305452982586, + "csv_write_time_avg": 4.57763671875e-06 + } + }, + { + "timestamp": "2025-08-16T21:01:30.993162", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 29 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.031019926071167, + "points_saved": 29, + "points_rate": 2.891032039985029, + "variables_saved": 58, + "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.06415742841260187, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-16T21:01:41.055776", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 29 points saved, 0 lost, 0.6% CPU", + "details": { + "duration": 10.062596559524536, + "points_saved": 29, + "points_rate": 2.88195992241691, + "variables_saved": 58, + "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.10049709780462857, + "csv_write_time_avg": 1.1123459914634968e-05 + } + }, + { + "timestamp": "2025-08-16T21:01:51.119697", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.064937353134155, + "points_saved": 30, + "points_rate": 2.9806444836597215, + "variables_saved": 60, + "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.1067502498626709, + "csv_write_time_avg": 1.6983350118001302e-05 + } + }, + { + "timestamp": "2025-08-16T21:02:01.166414", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 29 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.046205997467041, + "points_saved": 29, + "points_rate": 2.886661890798556, + "variables_saved": 58, + "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.10892577829032109, + "csv_write_time_avg": 3.5458597643622035e-05 + } + }, + { + "timestamp": "2025-08-16T21:02:11.231260", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.065356492996216, + "points_saved": 30, + "points_rate": 2.9805203641694082, + "variables_saved": 60, + "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.12599786917368572, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-16T21:02:21.280203", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.048943519592285, + "points_saved": 30, + "points_rate": 2.9853884581507915, + "variables_saved": 60, + "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.10493502616882325, + "csv_write_time_avg": 3.886222839355469e-06 + } + }, + { + "timestamp": "2025-08-16T21:02:31.356646", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 0.6% CPU", + "details": { + "duration": 10.075573682785034, + "points_saved": 30, + "points_rate": 2.977497951432535, + "variables_saved": 60, + "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.10974334875742595, + "csv_write_time_avg": 4.678567250569661e-05 + } + }, + { + "timestamp": "2025-08-16T21:02:41.434864", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 29 points saved, 0 lost, 0.6% CPU", + "details": { + "duration": 10.079087018966675, + "points_saved": 29, + "points_rate": 2.877244729153368, + "variables_saved": 58, + "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.12031308535871835, + "csv_write_time_avg": 7.267655997440733e-06 + } + }, + { + "timestamp": "2025-08-16T21:02:51.514835", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.079971313476562, + "points_saved": 30, + "points_rate": 2.9761989461111926, + "variables_saved": 60, + "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.12821188767751057, + "csv_write_time_avg": 1.4050801595052083e-05 + } + }, + { + "timestamp": "2025-08-16T21:03:01.590584", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 0.5% CPU", + "details": { + "duration": 10.07439374923706, + "points_saved": 30, + "points_rate": 2.977846682066791, + "variables_saved": 60, + "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.13280317783355713, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-16T21:03:11.664137", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 29 points saved, 0 lost, 0.5% CPU", + "details": { + "duration": 10.074907779693604, + "points_saved": 29, + "points_rate": 2.878438258109986, + "variables_saved": 58, + "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.10888855210665999, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-16T21:03:21.729733", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 0.5% CPU", + "details": { + "duration": 10.06559681892395, + "points_saved": 30, + "points_rate": 2.980449201342749, + "variables_saved": 60, + "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.1158106803894043, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-16T21:03:31.797006", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.065967798233032, + "points_saved": 30, + "points_rate": 2.9803393574601107, + "variables_saved": 60, + "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.13099360466003418, + "csv_write_time_avg": 3.147125244140625e-05 + } + }, + { + "timestamp": "2025-08-16T21:03:41.864065", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 29 points saved, 0 lost, 0.6% CPU", + "details": { + "duration": 10.068363904953003, + "points_saved": 29, + "points_rate": 2.8803090823657875, + "variables_saved": 58, + "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.11925562496843009, + "csv_write_time_avg": 2.7771653800175107e-05 + } + }, + { + "timestamp": "2025-08-16T21:03:51.924057", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.059991359710693, + "points_saved": 30, + "points_rate": 2.982109917126484, + "variables_saved": 60, + "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.10814343293507894, + "csv_write_time_avg": 0.00011624495188395182 + } + }, + { + "timestamp": "2025-08-16T21:04:01.964007", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 4.2% CPU", + "details": { + "duration": 10.039950609207153, + "points_saved": 30, + "points_rate": 2.9880625082446572, + "variables_saved": 60, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 4.2, + "cpu_max": 4.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.07931725978851319, + "csv_write_time_avg": 0.003016050656636556 + } + }, + { + "timestamp": "2025-08-16T21:04:12.001799", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 8.7% CPU", + "details": { + "duration": 10.037791728973389, + "points_saved": 30, + "points_rate": 2.988705166436865, + "variables_saved": 60, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 8.7, + "cpu_max": 8.7, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.12447572549184163, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-16T21:04:22.075130", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 1.1% CPU", + "details": { + "duration": 10.073331356048584, + "points_saved": 30, + "points_rate": 2.9781607434154687, + "variables_saved": 60, + "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.07363708019256592, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-16T21:04:32.104273", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 29 points saved, 0 lost, 0.5% CPU", + "details": { + "duration": 10.029143333435059, + "points_saved": 29, + "points_rate": 2.8915729924130296, + "variables_saved": 58, + "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.07177314265020962, + "csv_write_time_avg": 0.0021543173954404636 + } + }, + { + "timestamp": "2025-08-16T21:04:42.168294", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 12.1% CPU", + "details": { + "duration": 10.063512086868286, + "points_saved": 30, + "points_rate": 2.981066623763141, + "variables_saved": 60, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 12.1, + "cpu_max": 12.1, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09925882021586101, + "csv_write_time_avg": 1.6069412231445314e-05 + } + }, + { + "timestamp": "2025-08-16T21:04:52.214850", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.047064542770386, + "points_saved": 30, + "points_rate": 2.985946778015599, + "variables_saved": 60, + "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.10752104123433431, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-16T21:05:02.285436", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 29 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.070586204528809, + "points_saved": 29, + "points_rate": 2.8796734778913375, + "variables_saved": 58, + "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.1336237151047279, + "csv_write_time_avg": 5.47540598902209e-06 + } + }, + { + "timestamp": "2025-08-16T21:05:12.373320", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 4.0% CPU", + "details": { + "duration": 10.087883949279785, + "points_saved": 30, + "points_rate": 2.973864504274142, + "variables_saved": 60, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 4.0, + "cpu_max": 4.0, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.11697720686594645, + "csv_write_time_avg": 0.002504730224609375 + } + }, + { + "timestamp": "2025-08-16T21:05:22.419899", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 9.8% CPU", + "details": { + "duration": 10.045931577682495, + "points_saved": 30, + "points_rate": 2.9862835286123586, + "variables_saved": 60, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 9.8, + "cpu_max": 9.8, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.03407781918843587, + "csv_write_time_avg": 6.660620371500651e-05 + } + }, + { + "timestamp": "2025-08-16T21:05:32.450674", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 3.9% CPU", + "details": { + "duration": 10.03142237663269, + "points_saved": 30, + "points_rate": 2.990602815198206, + "variables_saved": 60, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 3.9, + "cpu_max": 3.9, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.039195919036865236, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-16T21:05:42.486439", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 1.2% CPU", + "details": { + "duration": 10.035764694213867, + "points_saved": 30, + "points_rate": 2.9893088283842024, + "variables_saved": 60, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 1.2, + "cpu_max": 1.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.03542471726735433, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-16T21:05:52.518557", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.032118320465088, + "points_saved": 30, + "points_rate": 2.9903953523755096, + "variables_saved": 60, + "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.06971513430277507, + "csv_write_time_avg": 0.00163878599802653 + } + }, + { + "timestamp": "2025-08-16T21:06:02.580615", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 8.4% CPU", + "details": { + "duration": 10.06105661392212, + "points_saved": 30, + "points_rate": 2.9817941744296625, + "variables_saved": 60, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 8.4, + "cpu_max": 8.4, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.1075384537378947, + "csv_write_time_avg": 0.0037407239278157553 + } + }, + { + "timestamp": "2025-08-16T21:06:12.646709", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 29 points saved, 0 lost, 10.1% CPU", + "details": { + "duration": 10.067095279693604, + "points_saved": 29, + "points_rate": 2.8806720503079046, + "variables_saved": 58, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 10.1, + "cpu_max": 10.1, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.1194514406138453, + "csv_write_time_avg": 0.0007159956570329337 + } + }, + { + "timestamp": "2025-08-16T21:06:22.700388", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 10.4% CPU", + "details": { + "duration": 10.053678750991821, + "points_saved": 30, + "points_rate": 2.983982355417953, + "variables_saved": 60, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 10.4, + "cpu_max": 10.4, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.13290343284606934, + "csv_write_time_avg": 0.0011782566706339517 + } + }, + { + "timestamp": "2025-08-16T21:06:32.751642", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 8.6% CPU", + "details": { + "duration": 10.051254510879517, + "points_saved": 30, + "points_rate": 2.9847020556019035, + "variables_saved": 60, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 8.6, + "cpu_max": 8.6, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.06834772427876791, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-16T21:06:42.781420", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 0.6% CPU", + "details": { + "duration": 10.02977728843689, + "points_saved": 30, + "points_rate": 2.991093335101901, + "variables_saved": 60, + "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.03210315704345703, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-16T21:06:52.813943", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.032523393630981, + "points_saved": 30, + "points_rate": 2.990274612172359, + "variables_saved": 60, + "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.047539130846659346, + "csv_write_time_avg": 0.00024136702219645182 + } + }, + { + "timestamp": "2025-08-16T21:07:02.866672", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 29 points saved, 0 lost, 8.2% CPU", + "details": { + "duration": 10.052728652954102, + "points_saved": 29, + "points_rate": 2.8847888967417856, + "variables_saved": 58, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 8.2, + "cpu_max": 8.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09650977726640372, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-16T21:07:12.920133", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 0.6% CPU", + "details": { + "duration": 10.05346155166626, + "points_saved": 30, + "points_rate": 2.984046822661574, + "variables_saved": 60, + "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.11041448116302491, + "csv_write_time_avg": 3.325144449869792e-05 + } + }, + { + "timestamp": "2025-08-16T21:07:22.984963", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 0.5% CPU", + "details": { + "duration": 10.064829587936401, + "points_saved": 30, + "points_rate": 2.9806763977362998, + "variables_saved": 60, + "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.13236002127329508, + "csv_write_time_avg": 1.728534698486328e-05 + } + }, + { + "timestamp": "2025-08-16T21:07:33.051485", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.066522598266602, + "points_saved": 30, + "points_rate": 2.9801751008998707, + "variables_saved": 60, + "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.09970244566599527, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-16T21:07:43.120939", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 29 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.068278789520264, + "points_saved": 29, + "points_rate": 2.880333431984932, + "variables_saved": 58, + "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.100341089840593, + "csv_write_time_avg": 8.00757572568696e-06 + } + }, + { + "timestamp": "2025-08-16T21:07:53.182324", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.062559366226196, + "points_saved": 30, + "points_rate": 2.9813488704167543, + "variables_saved": 60, + "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.11200049718221029, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-16T21:08:03.248668", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.066344738006592, + "points_saved": 30, + "points_rate": 2.9802277570260136, + "variables_saved": 60, + "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.11709380944569905, + "csv_write_time_avg": 9.147326151529948e-06 + } + }, + { + "timestamp": "2025-08-16T21:08:13.284417", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 29 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.035748958587646, + "points_saved": 29, + "points_rate": 2.8896697316431514, + "variables_saved": 58, + "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.10250608674411116, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-16T21:08:23.345197", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.060779333114624, + "points_saved": 30, + "points_rate": 2.9818763543750815, + "variables_saved": 60, + "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.10127473672231038, + "csv_write_time_avg": 6.071726481119791e-06 + } + }, + { + "timestamp": "2025-08-16T21:08:33.393740", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 29 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.048542737960815, + "points_saved": 29, + "points_rate": 2.8859906113993468, + "variables_saved": 58, + "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.10355253055177886, + "csv_write_time_avg": 1.8687083803374192e-05 + } + }, + { + "timestamp": "2025-08-16T21:08:43.444212", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 29 points saved, 0 lost, 0.5% CPU", + "details": { + "duration": 10.050472497940063, + "points_saved": 29, + "points_rate": 2.8854364813140694, + "variables_saved": 58, + "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.124221448240609, + "csv_write_time_avg": 8.270658295730065e-06 + } + }, + { + "timestamp": "2025-08-16T21:08:53.512428", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.06821584701538, + "points_saved": 30, + "points_rate": 2.979673902093904, + "variables_saved": 60, + "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.10421998500823974, + "csv_write_time_avg": 6.167093912760417e-06 + } + }, + { + "timestamp": "2025-08-16T21:09:03.581941", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.068513631820679, + "points_saved": 30, + "points_rate": 2.9795857757184296, + "variables_saved": 60, + "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.10213418006896972, + "csv_write_time_avg": 2.773602803548177e-06 + } + }, + { + "timestamp": "2025-08-16T21:09:13.634389", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 29 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.053447008132935, + "points_saved": 29, + "points_rate": 2.8845827681331464, + "variables_saved": 58, + "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.09918859087187669, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-16T21:09:23.709649", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.075260877609253, + "points_saved": 30, + "points_rate": 2.977590393383309, + "variables_saved": 60, + "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.10045295556386312, + "csv_write_time_avg": 5.0942103068033855e-06 + } + }, + { + "timestamp": "2025-08-16T21:09:33.787822", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.07817268371582, + "points_saved": 30, + "points_rate": 2.976730101923497, + "variables_saved": 60, + "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.11741201082865398, + "csv_write_time_avg": 5.602836608886719e-06 + } + }, + { + "timestamp": "2025-08-16T21:09:43.859536", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.071713924407959, + "points_saved": 30, + "points_rate": 2.978639010714701, + "variables_saved": 60, + "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.09971142609914144, + "csv_write_time_avg": 2.9921531677246094e-05 + } + }, + { + "timestamp": "2025-08-16T21:09:53.920726", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 29 points saved, 0 lost, 0.5% CPU", + "details": { + "duration": 10.061189889907837, + "points_saved": 29, + "points_rate": 2.882362853432403, + "variables_saved": 58, + "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.09876858777013318, + "csv_write_time_avg": 1.4247565433896822e-05 + } + }, + { + "timestamp": "2025-08-16T21:10:03.965291", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.044565200805664, + "points_saved": 30, + "points_rate": 2.9866897571229596, + "variables_saved": 60, + "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.049120855331420896, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-16T21:10:13.994418", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.02912712097168, + "points_saved": 30, + "points_rate": 2.991287241465679, + "variables_saved": 60, + "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.03253419399261474, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-16T21:10:24.025284", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 0.5% CPU", + "details": { + "duration": 10.030865907669067, + "points_saved": 30, + "points_rate": 2.990768720880178, + "variables_saved": 60, + "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.03693994681040446, + "csv_write_time_avg": 7.6214472452799475e-06 + } + }, + { + "timestamp": "2025-08-16T21:10:34.056594", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.031309366226196, + "points_saved": 30, + "points_rate": 2.9906365066364287, + "variables_saved": 60, + "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.03688843250274658, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-16T21:10:44.087566", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 31 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.030972242355347, + "points_saved": 31, + "points_rate": 3.0904282507236776, + "variables_saved": 62, + "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.03543023140199723, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-16T21:10:54.126966", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 29 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.039400577545166, + "points_saved": 29, + "points_rate": 2.88861867558741, + "variables_saved": 58, + "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.08817623401510305, + "csv_write_time_avg": 1.2110019552296606e-05 + } + }, + { + "timestamp": "2025-08-16T21:11:04.180019", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 0.5% CPU", + "details": { + "duration": 10.0530526638031, + "points_saved": 30, + "points_rate": 2.9841681928134762, + "variables_saved": 60, + "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.06117257277170817, + "csv_write_time_avg": 1.8358230590820313e-06 + } + }, + { + "timestamp": "2025-08-16T21:11:14.210427", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.030407905578613, + "points_saved": 30, + "points_rate": 2.9909052834546137, + "variables_saved": 60, + "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.03783682187398275, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-16T21:11:24.240279", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 0.5% CPU", + "details": { + "duration": 10.029852628707886, + "points_saved": 30, + "points_rate": 2.9910708671962616, + "variables_saved": 60, + "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.06331098874409993, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-16T21:11:34.300299", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.06001901626587, + "points_saved": 30, + "points_rate": 2.9821017188430283, + "variables_saved": 60, + "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.11557511488596599, + "csv_write_time_avg": 4.855791727701823e-06 + } + }, + { + "timestamp": "2025-08-16T21:11:44.353903", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 29 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.053604364395142, + "points_saved": 29, + "points_rate": 2.8845376194336385, + "variables_saved": 58, + "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.1047433409197577, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-16T21:11:54.419062", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.0641610622406, + "points_saved": 30, + "points_rate": 2.9808743932523125, + "variables_saved": 60, + "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.10392646789550782, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-16T21:12:04.462920", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 30 points saved, 0 lost, 0.8% CPU", + "details": { + "duration": 10.044856309890747, + "points_saved": 30, + "points_rate": 2.9866032001334117, + "variables_saved": 60, + "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.12994245688120523, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-16T21:12:14.514830", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 29 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.051910161972046, + "points_saved": 29, + "points_rate": 2.885023794752121, + "variables_saved": 58, + "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.09582604210952232, + "csv_write_time_avg": 4.039139583193023e-05 + } } ], - "last_updated": "2025-08-16T20:58:00.198061", + "last_updated": "2025-08-16T21:12:14.514830", "total_entries": 1000 } \ No newline at end of file diff --git a/frontend/src/components/PlotHistoricalManager.jsx b/frontend/src/components/PlotHistoricalManager.jsx index 90a290c..930ec10 100644 --- a/frontend/src/components/PlotHistoricalManager.jsx +++ b/frontend/src/components/PlotHistoricalManager.jsx @@ -94,145 +94,6 @@ function ConfirmationDialog({ isOpen, onClose, onConfirm, title, message, itemNa ) } -// Time Range Selector Component -function TimeRangeSelector({ startTime, endTime, onTimeRangeChange, isLoading }) { - const [localStartTime, setLocalStartTime] = useState('') - const [localEndTime, setLocalEndTime] = useState('') - const toast = useToast() - - useEffect(() => { - // Initialize with current values with safe date handling - if (startTime) { - const startDate = new Date(startTime) - if (!isNaN(startDate.getTime())) { - setLocalStartTime(startDate.toISOString().slice(0, 16)) - } - } - if (endTime) { - const endDate = new Date(endTime) - if (!isNaN(endDate.getTime())) { - setLocalEndTime(endDate.toISOString().slice(0, 16)) - } - } - }, [startTime, endTime]) - - const handleApplyTimeRange = () => { - if (localStartTime && localEndTime) { - const start = new Date(localStartTime) - const end = new Date(localEndTime) - - // Validate the time range - if (start >= end) { - toast({ - title: "Invalid Time Range", - description: "Start time must be before end time", - status: "error", - duration: 3000, - isClosable: true - }) - return - } - - if (isNaN(start.getTime()) || isNaN(end.getTime())) { - toast({ - title: "Invalid Date", - description: "Please enter valid dates", - status: "error", - duration: 3000, - isClosable: true - }) - return - } - - onTimeRangeChange(start, end) - } - } - - const handleQuickRange = (hours) => { - const end = new Date() - const start = new Date(end.getTime() - hours * 60 * 60 * 1000) - - // Update local state - setLocalStartTime(start.toISOString().slice(0, 16)) - setLocalEndTime(end.toISOString().slice(0, 16)) - - // Immediately apply the time range - onTimeRangeChange(start, end) - - toast({ - title: "Time Range Updated", - description: `Set to last ${hours} hour${hours !== 1 ? 's' : ''}`, - status: "info", - duration: 2000, - isClosable: true - }) - } - - return ( - - - 📅 Time Range Selection - - - - - - Start Time - setLocalStartTime(e.target.value)} - size="sm" - /> - - - End Time - setLocalEndTime(e.target.value)} - size="sm" - /> - - - - - - - - Quick Ranges: - - - - - - - - - - - - ) -} - // Collapsible Plot Items Form - Each item in the array is individually collapsible function CollapsiblePlotItemsForm({ data, schema, uiSchema, onSave, title, icon, getItemLabel, isExpanded, onToggleExpansion }) { const [formData, setFormData] = useState(data) @@ -431,14 +292,6 @@ export default function PlotHistoricalManager() { const [booleanVariables, setBooleanVariables] = useState([]) const [selectedPlotId, setSelectedPlotId] = useState('') - const [customTimeRange, setCustomTimeRange] = useState(() => { - const now = new Date() - const twentyFourHoursAgo = new Date(now.getTime() - 24 * 60 * 60 * 1000) - return { - start: twentyFourHoursAgo, - end: now - } - }) const [isLoading, setIsLoading] = useState(false) const [isLoadingHistoricalData, setIsLoadingHistoricalData] = useState(false) @@ -641,16 +494,22 @@ export default function PlotHistoricalManager() { // Create historical session const sessionId = `historical_${Date.now()}_${Math.random().toString(36).substr(2, 9)}` + // Default time range - individual charts will manage their own time ranges + const defaultTimeRange = { + start: new Date(Date.now() - 24 * 60 * 60 * 1000), // 24 hours ago + end: new Date() + } + const newSession = { id: sessionId, plotId: selectedPlotId, name: plotDef.name, variables: variableNames, - timeRange: { ...customTimeRange }, + timeRange: defaultTimeRange, config: { ...plotDef, variables: variableNames, - time_window: Math.floor((customTimeRange.end - customTimeRange.start) / 1000), + time_window: 86400, // 24 hours in seconds y_min: plotDef.y_min, y_max: plotDef.y_max, trigger_variable: plotDef.trigger_variable, @@ -696,11 +555,6 @@ export default function PlotHistoricalManager() { }) } - const handleTimeRangeChange = (start, end) => { - console.log('📅 Time range changed:', { start, end }) - setCustomTimeRange({ start, end }) - } - const bgColor = useColorModeValue('gray.50', 'gray.900') const cardBgColor = useColorModeValue('white', 'gray.800') @@ -758,14 +612,6 @@ export default function PlotHistoricalManager() { - {/* Time Range Selector */} - - {/* Plot Creation */} @@ -852,36 +698,6 @@ export default function PlotHistoricalManager() { - {/* Plot Definitions Configuration */} - {plotDefinitionsSchema && ( - savePlotDefinitions({ plots: newPlots })} - title="Plot Definitions" - icon="📊" - getItemLabel={(item) => item.name || 'Unnamed Plot'} - isExpanded={isDefinitionsExpanded} - onToggleExpansion={() => setIsDefinitionsExpanded(!isDefinitionsExpanded)} - /> - )} - - {/* Plot Variables Configuration */} - {plotVariablesSchema && ( - savePlotVariables({ variables: newVariables })} - title="Plot Variables" - icon="🔢" - getItemLabel={(item) => `${item.plot_id}: ${item.variable_name}` || 'Unnamed Variable'} - isExpanded={isVariablesExpanded} - onToggleExpansion={() => setIsVariablesExpanded(!isVariablesExpanded)} - /> - )} - {isLoading && ( diff --git a/frontend/src/components/PlotHistoricalSession.jsx b/frontend/src/components/PlotHistoricalSession.jsx index c9523e6..1a7d4fe 100644 --- a/frontend/src/components/PlotHistoricalSession.jsx +++ b/frontend/src/components/PlotHistoricalSession.jsx @@ -46,7 +46,7 @@ import { Progress, Tooltip } from '@chakra-ui/react' -import { SettingsIcon, RepeatIcon, ViewIcon, DeleteIcon, TimeIcon, CalendarIcon, ViewOffIcon } from '@chakra-ui/icons' +import { SettingsIcon, RepeatIcon, ViewIcon, DeleteIcon, TimeIcon, CalendarIcon, ViewOffIcon, StarIcon, ExternalLinkIcon, ChevronUpIcon, ChevronDownIcon } from '@chakra-ui/icons' import ChartjsHistoricalPlot from './ChartjsHistoricalPlot.jsx' import TimePointSelector from './TimePointSelector.jsx' import DataAvailabilityBar from './DataAvailabilityBar.jsx' @@ -171,8 +171,8 @@ export default function PlotHistoricalSession({ const { isOpen: isConfigModalOpen, onOpen: onConfigModalOpen, onClose: onConfigModalClose } = useDisclosure() const { isOpen: isFullscreen, onOpen: openFullscreen, onClose: closeFullscreen } = useDisclosure() - // NEW: Simple plot mode toggle - const [isSimplePlot, setIsSimplePlot] = useState(false) + // NEW: Simple plot mode toggle (default to true for better performance) + const [isSimplePlot, setIsSimplePlot] = useState(true) // Keep track of the last loaded data range for optimization const [loadedDataRange, setLoadedDataRange] = useState(null) @@ -438,6 +438,17 @@ export default function PlotHistoricalSession({ const infoBgColor = useColorModeValue('gray.50', 'gray.700') const subtleTextColor = useColorModeValue('gray.500', 'gray.400') const smallTextColor = useColorModeValue('gray.400', 'gray.500') + + // Additional color mode values for conditional elements + const whiteAlphaBg = useColorModeValue('whiteAlpha.800', 'blackAlpha.800') + const inputBg = useColorModeValue('white', 'gray.700') + const inputHoverBg = useColorModeValue('gray.50', 'gray.600') + const editFieldColor = useColorModeValue('gray.900', 'gray.100') + const editFieldBg = useColorModeValue('gray.50', 'gray.600') + const calendarFilter = useColorModeValue('none', 'invert(1)') + const modalBg = useColorModeValue('white', 'gray.700') + const modalTextColor = useColorModeValue('gray.600', 'gray.300') + const highlightBg = useColorModeValue('blue.50', 'blue.900') // Format time range for display const formatTimeRange = (timeRange) => { @@ -552,20 +563,20 @@ export default function PlotHistoricalSession({ colorScheme={showDataPreview ? 'blue' : 'gray'} /> - + } + icon={isSimplePlot ? : } size="sm" variant="ghost" onClick={() => setIsSimplePlot(!isSimplePlot)} - colorScheme={isSimplePlot ? 'blue' : 'gray'} + colorScheme={isSimplePlot ? 'orange' : 'gray'} /> {/* Time range info */} - + Range: {timeRangeSeconds}s From: {formatCentralTimeInfo().start} diff --git a/frontend/src/components/TimePointSelector.jsx b/frontend/src/components/TimePointSelector.jsx index cd9544e..d0bc679 100644 --- a/frontend/src/components/TimePointSelector.jsx +++ b/frontend/src/components/TimePointSelector.jsx @@ -203,6 +203,34 @@ export default function TimePointSelector({ '& .react-datepicker__day--selected': { backgroundColor: 'blue.500', color: 'white' + }, + // Time picker specific styles + '& .react-datepicker__time-container': { + backgroundColor: useColorModeValue('white', 'gray.800'), + borderLeft: '1px solid', + borderColor: borderColor + }, + '& .react-datepicker__time-box': { + backgroundColor: useColorModeValue('white', 'gray.800') + }, + '& .react-datepicker__time-list': { + backgroundColor: useColorModeValue('white', 'gray.800'), + '& .react-datepicker__time-list-item': { + color: textColor, + backgroundColor: useColorModeValue('white', 'gray.800'), + '&:hover': { + backgroundColor: useColorModeValue('gray.100', 'gray.700') + }, + '&--selected': { + backgroundColor: 'blue.500', + color: 'white', + fontWeight: 'bold' + } + } + }, + '& .react-datepicker__time-name': { + color: textColor, + backgroundColor: useColorModeValue('gray.50', 'gray.700') } }} >