diff --git a/GAP_FIX_SOLUTION.md b/GAP_FIX_SOLUTION.md new file mode 100644 index 0000000..33cb7bc --- /dev/null +++ b/GAP_FIX_SOLUTION.md @@ -0,0 +1,82 @@ +# Gap Fix Solution - Historical to Real-time Data Continuity + +## Problem Description + +There was a gap of 1-n points between historical data and real-time streaming data in the Plot Definitions dashboard. The gap was typically 2+ seconds and became larger with more data points in the chart. + +## Root Cause Analysis + +1. **Historical Data Loading**: When loading historical data, the backend uses `end_time = datetime.now()` to calculate the time window for CSV data retrieval. + +2. **LastPushedX Setting**: The frontend sets `lastPushedX` to the timestamp of the last historical data point loaded. + +3. **Streaming Delay**: There's a delay between when historical data is calculated and when real-time streaming begins: + - Backend processing time + - HTTP transfer time + - Frontend processing time + - Streaming initialization delay + +4. **Data Filtering**: New streaming data points are only added if `timestamp > lastPushedX`, causing data points in the delay interval to be discarded. + +## Solution Implemented + +### Frontend Fix (ChartjsPlot.jsx) + +**File**: `frontend/src/components/ChartjsPlot.jsx` + +**Location**: Lines 656-675 (approximate) + +**Change**: Modified the historical data loading logic to compensate for frontend delay: + +```javascript +// Before: +sessionDataRef.current.lastPushedXByDataset.set(index, lastPoint.x); + +// After: +const compensatedTimestamp = lastPoint.x - 3000; // 3 seconds compensation +sessionDataRef.current.lastPushedXByDataset.set(index, compensatedTimestamp); +``` + +**Compensation Logic**: +- Subtracts 3000ms (3 seconds) from the last historical point timestamp +- This allows streaming data in the delay interval to be captured +- Accounts for typical delays in the processing pipeline + +### Enhanced Logging + +Added detailed logging to help diagnose gap issues: + +1. **Historical Data Continuity**: Logs the last historical point and compensated timestamp +2. **Streaming Filtering**: Logs when points are filtered out due to timestamp constraints +3. **Streaming Ingestion**: Logs successful data ingestion with timestamp ranges + +## Benefits + +1. **Seamless Continuity**: Eliminates the visual gap between historical and real-time data +2. **Robust Handling**: Works regardless of varying delay times (up to 3 seconds) +3. **Debug Visibility**: Enhanced logging helps identify and troubleshoot future issues +4. **Backward Compatible**: Doesn't affect existing functionality + +## Testing + +To verify the fix: + +1. Start a plot session with historical data loading +2. Begin real-time streaming +3. Check browser console for continuity logs +4. Verify no visual gap in the chart between historical and streaming data + +## Configuration + +The compensation delay (currently 3000ms) can be adjusted if needed: + +```javascript +const COMPENSATION_DELAY_MS = 3000; // Adjust as needed +const compensatedTimestamp = lastPoint.x - COMPENSATION_DELAY_MS; +``` + +## Notes + +- The 3-second compensation is conservative to handle most delay scenarios +- The solution maintains data accuracy while improving visual continuity +- Future optimization could make the delay dynamic based on actual measurements diff --git a/application_events.json b/application_events.json index 03d1f78..aafd6d1 100644 --- a/application_events.json +++ b/application_events.json @@ -1,2067 +1,5 @@ { "events": [ - { - "timestamp": "2025-08-18T18:40:34.245836", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.03429889678955, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.3, - "cpu_max": 0.3, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:40:44.276322", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.030485391616821, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:40:54.305958", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.029636859893799, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:41:04.332020", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.026061534881592, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.3, - "cpu_max": 0.3, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:41:14.357496", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.02547574043274, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:41:24.384207", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.026710748672485, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:41:34.411774", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.027567148208618, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:41:44.438635", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.026861667633057, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:41:54.482807", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.044172048568726, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:42:04.510443", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.027635335922241, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:42:14.536966", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.026523113250732, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.3, - "cpu_max": 0.3, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:42:24.564151", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.027185440063477, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:42:34.595153", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.031002044677734, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:42:44.623709", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.028556108474731, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.3, - "cpu_max": 0.3, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:42:54.650325", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.026615619659424, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:43:04.677149", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.026823997497559, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:43:14.716776", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.039627075195312, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.3, - "cpu_max": 0.3, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:43:24.757627", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.04085111618042, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.3, - "cpu_max": 0.3, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:43:34.785397", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.027770280838013, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:43:44.813799", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.028401374816895, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:43:54.840564", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.026764631271362, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:44:04.874931", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.03436803817749, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.3, - "cpu_max": 0.3, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:44:14.903357", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.028425216674805, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:44:24.929171", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.025813579559326, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:44:34.959888", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.030717611312866, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:44:44.987951", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.02806282043457, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:44:55.016396", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.028445482254028, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:45:05.049471", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.033074617385864, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.3, - "cpu_max": 0.3, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:45:15.076762", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.027291536331177, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:45:25.102960", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.026197671890259, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:45:35.131809", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.028849124908447, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:45:45.158578", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.026768684387207, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:45:55.188757", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.030179262161255, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:46:05.216728", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.027971029281616, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:46:15.250860", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.034131526947021, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:46:25.279404", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.028544187545776, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:46:35.311333", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.031929016113281, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.3, - "cpu_max": 0.3, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:46:45.338793", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.027460098266602, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:46:55.367554", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.028761386871338, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:47:05.394425", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.026235103607178, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:47:15.421924", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.028134822845459, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:47:25.451590", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.029665470123291, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.3, - "cpu_max": 0.3, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:47:35.478196", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.026605606079102, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.3, - "cpu_max": 0.3, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:47:45.503570", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.025374412536621, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.3, - "cpu_max": 0.3, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:47:55.529463", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.025893449783325, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:48:05.555858", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.026394367218018, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:48:15.583338", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.027480125427246, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:48:25.610900", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.027562379837036, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:48:35.642208", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.0313081741333, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:48:45.669966", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.027757406234741, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:48:55.695339", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.025372743606567, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:49:05.722601", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.027261972427368, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:49:15.751988", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.02938723564148, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.3, - "cpu_max": 0.3, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:49:25.780986", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.028997898101807, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:49:35.816751", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.035765886306763, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:49:45.845672", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.028920412063599, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:49:55.871491", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.025818586349487, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:50:05.905525", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.034034490585327, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:50:15.935540", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.030015230178833, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:50:25.965993", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.030453205108643, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:50:36.004141", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.038147449493408, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:50:46.036661", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.032520771026611, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:50:56.067509", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.030847072601318, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T18:50:59.025632", - "level": "info", - "event_type": "udp_streaming_stopped", - "message": "UDP streaming to PlotJuggler stopped (CSV recording continues)", - "details": {} - }, - { - "timestamp": "2025-08-18T18:51:02.637346", - "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-18T18:51:02.665774", - "level": "info", - "event_type": "udp_streaming_stopped", - "message": "UDP streaming to PlotJuggler stopped (CSV recording continues)", - "details": {} - }, - { - "timestamp": "2025-08-18T18:51:02.693713", - "level": "info", - "event_type": "dataset_deactivated", - "message": "Dataset deactivated: test", - "details": { - "dataset_id": "Test" - } - }, - { - "timestamp": "2025-08-18T18:51:02.721129", - "level": "info", - "event_type": "dataset_deactivated", - "message": "Dataset deactivated: Fast", - "details": { - "dataset_id": "Fast" - } - }, - { - "timestamp": "2025-08-18T18:51:02.752046", - "level": "info", - "event_type": "dataset_deactivated", - "message": "Dataset deactivated: DAR", - "details": { - "dataset_id": "DAR" - } - }, - { - "timestamp": "2025-08-18T18:51:04.787873", - "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-18T18:59:02.247712", - "level": "info", - "event_type": "application_started", - "message": "Application initialization completed successfully", - "details": {} - }, - { - "timestamp": "2025-08-19T09:06:03.942911", - "level": "info", - "event_type": "udp_streaming_stopped", - "message": "UDP streaming to PlotJuggler stopped (CSV recording continues)", - "details": {} - }, - { - "timestamp": "2025-08-19T09:06:03.966526", - "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-19T09:06:03.990978", - "level": "info", - "event_type": "udp_streaming_stopped", - "message": "UDP streaming to PlotJuggler stopped (CSV recording continues)", - "details": {} - }, - { - "timestamp": "2025-08-19T09:06:04.016351", - "level": "info", - "event_type": "dataset_deactivated", - "message": "Dataset deactivated: DAR", - "details": { - "dataset_id": "DAR" - } - }, - { - "timestamp": "2025-08-19T09:06:04.039826", - "level": "info", - "event_type": "dataset_deactivated", - "message": "Dataset deactivated: Fast", - "details": { - "dataset_id": "Fast" - } - }, - { - "timestamp": "2025-08-19T09:06:04.064197", - "level": "info", - "event_type": "dataset_deactivated", - "message": "Dataset deactivated: test", - "details": { - "dataset_id": "Test" - } - }, - { - "timestamp": "2025-08-19T09:06:04.087206", - "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-19T09:09:33.637054", - "level": "info", - "event_type": "application_started", - "message": "Application initialization completed successfully", - "details": {} - }, - { - "timestamp": "2025-08-19T10:09:16.368457", - "level": "info", - "event_type": "application_started", - "message": "Application initialization completed successfully", - "details": {} - }, - { - "timestamp": "2025-08-19T10:09:27.527388", - "level": "info", - "event_type": "udp_streaming_stopped", - "message": "UDP streaming to PlotJuggler stopped (CSV recording continues)", - "details": {} - }, - { - "timestamp": "2025-08-19T10:09:27.551348", - "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-19T10:09:27.576187", - "level": "info", - "event_type": "udp_streaming_stopped", - "message": "UDP streaming to PlotJuggler stopped (CSV recording continues)", - "details": {} - }, - { - "timestamp": "2025-08-19T10:09:27.600169", - "level": "info", - "event_type": "dataset_deactivated", - "message": "Dataset deactivated: test", - "details": { - "dataset_id": "Test" - } - }, - { - "timestamp": "2025-08-19T10:09:27.624228", - "level": "info", - "event_type": "dataset_deactivated", - "message": "Dataset deactivated: DAR", - "details": { - "dataset_id": "DAR" - } - }, - { - "timestamp": "2025-08-19T10:09:27.648972", - "level": "info", - "event_type": "dataset_deactivated", - "message": "Dataset deactivated: Fast", - "details": { - "dataset_id": "Fast" - } - }, - { - "timestamp": "2025-08-19T10:09:27.672973", - "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-19T10:14:17.522319", - "level": "info", - "event_type": "application_started", - "message": "Application initialization completed successfully", - "details": {} - }, - { - "timestamp": "2025-08-19T10:14:23.139022", - "level": "info", - "event_type": "udp_streaming_stopped", - "message": "UDP streaming to PlotJuggler stopped (CSV recording continues)", - "details": {} - }, - { - "timestamp": "2025-08-19T10:14:23.169023", - "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-19T10:14:23.197214", - "level": "info", - "event_type": "udp_streaming_stopped", - "message": "UDP streaming to PlotJuggler stopped (CSV recording continues)", - "details": {} - }, - { - "timestamp": "2025-08-19T10:14:23.221542", - "level": "info", - "event_type": "dataset_deactivated", - "message": "Dataset deactivated: DAR", - "details": { - "dataset_id": "DAR" - } - }, - { - "timestamp": "2025-08-19T10:14:23.245090", - "level": "info", - "event_type": "dataset_deactivated", - "message": "Dataset deactivated: Fast", - "details": { - "dataset_id": "Fast" - } - }, - { - "timestamp": "2025-08-19T10:14:23.269212", - "level": "info", - "event_type": "dataset_deactivated", - "message": "Dataset deactivated: test", - "details": { - "dataset_id": "Test" - } - }, - { - "timestamp": "2025-08-19T10:14:23.294079", - "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-19T10:14:28.867187", - "level": "info", - "event_type": "application_started", - "message": "Application initialization completed successfully", - "details": {} - }, - { - "timestamp": "2025-08-19T10:14:31.966178", - "level": "info", - "event_type": "udp_streaming_stopped", - "message": "UDP streaming to PlotJuggler stopped (CSV recording continues)", - "details": {} - }, - { - "timestamp": "2025-08-19T10:14:31.989178", - "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-19T10:14:32.013820", - "level": "info", - "event_type": "udp_streaming_stopped", - "message": "UDP streaming to PlotJuggler stopped (CSV recording continues)", - "details": {} - }, - { - "timestamp": "2025-08-19T10:14:32.036830", - "level": "info", - "event_type": "dataset_deactivated", - "message": "Dataset deactivated: test", - "details": { - "dataset_id": "Test" - } - }, - { - "timestamp": "2025-08-19T10:14:32.062829", - "level": "info", - "event_type": "dataset_deactivated", - "message": "Dataset deactivated: Fast", - "details": { - "dataset_id": "Fast" - } - }, - { - "timestamp": "2025-08-19T10:14:32.086819", - "level": "info", - "event_type": "dataset_deactivated", - "message": "Dataset deactivated: DAR", - "details": { - "dataset_id": "DAR" - } - }, - { - "timestamp": "2025-08-19T10:14:32.110524", - "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-19T10:15:56.729549", - "level": "info", - "event_type": "application_started", - "message": "Application initialization completed successfully", - "details": {} - }, - { - "timestamp": "2025-08-19T10:17:17.731789", - "level": "info", - "event_type": "udp_streaming_stopped", - "message": "UDP streaming to PlotJuggler stopped (CSV recording continues)", - "details": {} - }, - { - "timestamp": "2025-08-19T10:17:17.764216", - "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-19T10:17:17.787402", - "level": "info", - "event_type": "udp_streaming_stopped", - "message": "UDP streaming to PlotJuggler stopped (CSV recording continues)", - "details": {} - }, - { - "timestamp": "2025-08-19T10:17:17.811548", - "level": "info", - "event_type": "dataset_deactivated", - "message": "Dataset deactivated: Fast", - "details": { - "dataset_id": "Fast" - } - }, - { - "timestamp": "2025-08-19T10:17:17.837458", - "level": "info", - "event_type": "dataset_deactivated", - "message": "Dataset deactivated: test", - "details": { - "dataset_id": "Test" - } - }, - { - "timestamp": "2025-08-19T10:17:17.861435", - "level": "info", - "event_type": "dataset_deactivated", - "message": "Dataset deactivated: DAR", - "details": { - "dataset_id": "DAR" - } - }, - { - "timestamp": "2025-08-19T10:17:17.885441", - "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-19T10:21:41.953206", - "level": "info", - "event_type": "application_started", - "message": "Application initialization completed successfully", - "details": {} - }, - { - "timestamp": "2025-08-19T10:28:32.722413", - "level": "info", - "event_type": "udp_streaming_stopped", - "message": "UDP streaming to PlotJuggler stopped (CSV recording continues)", - "details": {} - }, - { - "timestamp": "2025-08-19T10:28:32.759411", - "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-19T10:28:32.783022", - "level": "info", - "event_type": "udp_streaming_stopped", - "message": "UDP streaming to PlotJuggler stopped (CSV recording continues)", - "details": {} - }, - { - "timestamp": "2025-08-19T10:28:32.806021", - "level": "info", - "event_type": "dataset_deactivated", - "message": "Dataset deactivated: test", - "details": { - "dataset_id": "Test" - } - }, - { - "timestamp": "2025-08-19T10:28:32.833259", - "level": "info", - "event_type": "dataset_deactivated", - "message": "Dataset deactivated: Fast", - "details": { - "dataset_id": "Fast" - } - }, - { - "timestamp": "2025-08-19T10:28:32.863728", - "level": "info", - "event_type": "dataset_deactivated", - "message": "Dataset deactivated: DAR", - "details": { - "dataset_id": "DAR" - } - }, - { - "timestamp": "2025-08-19T10:28:32.887509", - "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-19T10:44:50.260006", - "level": "info", - "event_type": "application_started", - "message": "Application initialization completed successfully", - "details": {} - }, - { - "timestamp": "2025-08-19T10:45:56.210310", - "level": "info", - "event_type": "application_started", - "message": "Application initialization completed successfully", - "details": {} - }, - { - "timestamp": "2025-08-19T10:46:39.487258", - "level": "info", - "event_type": "application_started", - "message": "Application initialization completed successfully", - "details": {} - }, - { - "timestamp": "2025-08-19T10:47:01.056877", - "level": "info", - "event_type": "udp_streaming_stopped", - "message": "UDP streaming to PlotJuggler stopped (CSV recording continues)", - "details": {} - }, - { - "timestamp": "2025-08-19T10:47:01.080952", - "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-19T10:47:01.108504", - "level": "info", - "event_type": "udp_streaming_stopped", - "message": "UDP streaming to PlotJuggler stopped (CSV recording continues)", - "details": {} - }, - { - "timestamp": "2025-08-19T10:47:01.132514", - "level": "info", - "event_type": "dataset_deactivated", - "message": "Dataset deactivated: test", - "details": { - "dataset_id": "Test" - } - }, - { - "timestamp": "2025-08-19T10:47:01.156512", - "level": "info", - "event_type": "dataset_deactivated", - "message": "Dataset deactivated: DAR", - "details": { - "dataset_id": "DAR" - } - }, - { - "timestamp": "2025-08-19T10:47:01.181251", - "level": "info", - "event_type": "dataset_deactivated", - "message": "Dataset deactivated: Fast", - "details": { - "dataset_id": "Fast" - } - }, - { - "timestamp": "2025-08-19T10:47:01.214033", - "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-19T10:49:08.422001", - "level": "info", - "event_type": "application_started", - "message": "Application initialization completed successfully", - "details": {} - }, - { - "timestamp": "2025-08-19T10:50:40.652295", - "level": "info", - "event_type": "application_started", - "message": "Application initialization completed successfully", - "details": {} - }, - { - "timestamp": "2025-08-19T17:03:35.853016", - "level": "info", - "event_type": "application_started", - "message": "Application initialization completed successfully", - "details": {} - }, - { - "timestamp": "2025-08-19T17:04:01.227130", - "level": "info", - "event_type": "dataset_activated", - "message": "Dataset activated: DAR", - "details": { - "dataset_id": "DAR", - "variables_count": 3, - "streaming_count": 3, - "prefix": "gateway_phoenix" - } - }, - { - "timestamp": "2025-08-19T17:04:01.259332", - "level": "info", - "event_type": "dataset_activated", - "message": "Dataset activated: Fast", - "details": { - "dataset_id": "Fast", - "variables_count": 3, - "streaming_count": 1, - "prefix": "fast" - } - }, - { - "timestamp": "2025-08-19T17:04:01.290779", - "level": "info", - "event_type": "csv_recording_started", - "message": "🔥 CRITICAL PRIORITY: CSV recording started with MAXIMUM PRIORITY, async buffering, and performance monitoring: 2 datasets activated", - "details": { - "activated_datasets": 2, - "total_datasets": 3, - "priority": "CRITICAL", - "recording_protection": true, - "performance_monitoring": true, - "async_csv_buffering": true, - "csv_flush_interval": 5.0 - } - }, - { - "timestamp": "2025-08-19T17:04:01.325949", - "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": [ - "test", - "DAR", - "Fast" - ] - } - }, { "timestamp": "2025-08-19T17:04:11.225703", "level": "info", @@ -17843,8 +15781,2897 @@ "read_time_avg": 0.0945316195487976, "csv_write_time_avg": 0.0 } + }, + { + "timestamp": "2025-08-22T16:04:41.069834", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 41 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.021031141281128, + "points_saved": 41, + "points_rate": 4.091395328680557, + "variables_saved": 123, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08894198115279035, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:04:51.091755", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.021921634674072, + "points_saved": 40, + "points_rate": 3.9912505264067413, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.0, + "cpu_max": 0.0, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08944739699363709, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:05:01.116392", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.02463674545288, + "points_saved": 40, + "points_rate": 3.9901695209199253, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09368504285812378, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:05:11.152950", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.03655743598938, + "points_saved": 40, + "points_rate": 3.985430288732951, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09044277071952819, + "csv_write_time_avg": 3.063678741455078e-06 + } + }, + { + "timestamp": "2025-08-22T16:05:21.174309", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.02135968208313, + "points_saved": 40, + "points_rate": 3.9914743377103536, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.3, + "cpu_max": 0.3, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09090877175331116, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:05:31.195959", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.021142482757568, + "points_saved": 40, + "points_rate": 3.991560849356669, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09196889996528626, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:05:41.221208", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.9% CPU", + "details": { + "duration": 10.025245904922485, + "points_saved": 40, + "points_rate": 3.9899270680592127, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.9, + "cpu_max": 0.9, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09284980893135071, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:05:51.242941", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.02224349975586, + "points_saved": 40, + "points_rate": 3.9911223471046573, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.3, + "cpu_max": 0.3, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09530907869338989, + "csv_write_time_avg": 1.8775463104248047e-06 + } + }, + { + "timestamp": "2025-08-22T16:06:01.263939", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 41 points saved, 0 lost, 0.8% CPU", + "details": { + "duration": 10.02048921585083, + "points_saved": 41, + "points_rate": 4.0916165984335855, + "variables_saved": 123, + "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.09602280360896413, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:06:11.286032", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.6% CPU", + "details": { + "duration": 10.022095918655396, + "points_saved": 40, + "points_rate": 3.9911811186663, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.6, + "cpu_max": 0.6, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09413193464279175, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:06:16.575116", + "level": "info", + "event_type": "plot_session_created", + "message": "Plot session 'UR29' created and started", + "details": { + "session_id": "plot_1_1755871576575_4", + "variables": [ + "UR29_Brix", + "UR29_ma", + "AUX Blink_2.0S" + ], + "time_window": 60, + "trigger_variable": null, + "auto_started": true + } + }, + { + "timestamp": "2025-08-22T16:06:21.308936", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.022901058197021, + "points_saved": 40, + "points_rate": 3.990860507127009, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.3, + "cpu_max": 0.3, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09081571102142334, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:06:31.333231", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 1.2% CPU", + "details": { + "duration": 10.024803876876831, + "points_saved": 40, + "points_rate": 3.9901029976520364, + "variables_saved": 120, + "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.09202193617820739, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:06:32.141136", + "level": "info", + "event_type": "plot_session_created", + "message": "Plot session 'UR29' created and started", + "details": { + "session_id": "plot_1_1755871592140_5", + "variables": [ + "UR29_Brix", + "UR29_ma", + "AUX Blink_2.0S" + ], + "time_window": 60, + "trigger_variable": null, + "auto_started": true + } + }, + { + "timestamp": "2025-08-22T16:06:39.235923", + "level": "info", + "event_type": "plot_session_created", + "message": "Plot session 'UR29' created and started", + "details": { + "session_id": "plot_1_1755871599235_6", + "variables": [ + "UR29_Brix", + "UR29_ma", + "AUX Blink_2.0S" + ], + "time_window": 10, + "trigger_variable": null, + "auto_started": true + } + }, + { + "timestamp": "2025-08-22T16:06:41.354777", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.02154541015625, + "points_saved": 40, + "points_rate": 3.9914003642055387, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.0, + "cpu_max": 0.0, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09487736821174622, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:06:41.614917", + "level": "info", + "event_type": "plot_session_created", + "message": "Plot session 'UR29' created and started", + "details": { + "session_id": "plot_1_1755871601614_7", + "variables": [ + "UR29_Brix", + "UR29_ma", + "AUX Blink_2.0S" + ], + "time_window": 10, + "trigger_variable": null, + "auto_started": true + } + }, + { + "timestamp": "2025-08-22T16:06:51.376328", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.02155089378357, + "points_saved": 40, + "points_rate": 3.9913981801771072, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09132779240608216, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:06:55.296175", + "level": "info", + "event_type": "plot_session_created", + "message": "Plot session 'UR29' created and started", + "details": { + "session_id": "plot_1_1755871615296_8", + "variables": [ + "UR29_Brix", + "UR29_ma", + "AUX Blink_2.0S" + ], + "time_window": 10, + "trigger_variable": null, + "auto_started": true + } + }, + { + "timestamp": "2025-08-22T16:07:01.399918", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 1.2% CPU", + "details": { + "duration": 10.023590803146362, + "points_saved": 40, + "points_rate": 3.990585887389195, + "variables_saved": 120, + "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.09772156476974488, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:07:04.359593", + "level": "info", + "event_type": "plot_session_created", + "message": "Plot session 'UR29' created and started", + "details": { + "session_id": "plot_1_1755871624359_9", + "variables": [ + "UR29_Brix", + "UR29_ma", + "AUX Blink_2.0S" + ], + "time_window": 10, + "trigger_variable": null, + "auto_started": true + } + }, + { + "timestamp": "2025-08-22T16:07:11.421264", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.8% CPU", + "details": { + "duration": 10.020839214324951, + "points_saved": 40, + "points_rate": 3.9916816490598266, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.8, + "cpu_max": 0.8, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.092295902967453, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:07:21.443437", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.022679328918457, + "points_saved": 40, + "points_rate": 3.9909487959559793, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09860517382621765, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:07:31.466568", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.5% CPU", + "details": { + "duration": 10.023131132125854, + "points_saved": 40, + "points_rate": 3.99076889972966, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.5, + "cpu_max": 0.5, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.11520848274230958, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:07:41.492422", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.025853872299194, + "points_saved": 40, + "points_rate": 3.98968511904183, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09152127504348755, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:07:51.513684", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 39 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.021261930465698, + "points_saved": 39, + "points_rate": 3.8917254404294, + "variables_saved": 117, + "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.09584422600574982, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:07:58.022709", + "level": "info", + "event_type": "plot_session_created", + "message": "Plot session 'UR29' created and started", + "details": { + "session_id": "plot_1_1755871678021_10", + "variables": [ + "UR29_Brix", + "UR29_ma", + "AUX Blink_2.0S" + ], + "time_window": 100, + "trigger_variable": null, + "auto_started": true + } + }, + { + "timestamp": "2025-08-22T16:07:59.565063", + "level": "info", + "event_type": "plot_session_created", + "message": "Plot session 'UR29' created and started", + "details": { + "session_id": "plot_1_1755871679564_11", + "variables": [ + "UR29_Brix", + "UR29_ma", + "AUX Blink_2.0S" + ], + "time_window": 100, + "trigger_variable": null, + "auto_started": true + } + }, + { + "timestamp": "2025-08-22T16:08:01.535196", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 41 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.021512508392334, + "points_saved": 41, + "points_rate": 4.091198805136979, + "variables_saved": 123, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.3, + "cpu_max": 0.3, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.11516477422016423, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:08:11.558963", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.9% CPU", + "details": { + "duration": 10.023766279220581, + "points_saved": 40, + "points_rate": 3.9905160281839973, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.9, + "cpu_max": 0.9, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09439380764961243, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:08:21.580535", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.021572828292847, + "points_saved": 40, + "points_rate": 3.9913894440872824, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09704984426498413, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:08:31.601944", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.021408081054688, + "points_saved": 40, + "points_rate": 3.991455060653539, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09385349154472351, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:08:41.622735", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.020791292190552, + "points_saved": 40, + "points_rate": 3.9917007383611494, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09583795666694642, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:08:51.653062", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.029751539230347, + "points_saved": 40, + "points_rate": 3.9881346854450075, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.3, + "cpu_max": 0.3, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09099966287612915, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:08:54.944771", + "level": "info", + "event_type": "plot_session_created", + "message": "Plot session 'UR29' created and started", + "details": { + "session_id": "plot_1_1755871734944_12", + "variables": [ + "UR29_Brix", + "UR29_ma", + "AUX Blink_2.0S" + ], + "time_window": 3600, + "trigger_variable": null, + "auto_started": true + } + }, + { + "timestamp": "2025-08-22T16:08:57.415699", + "level": "info", + "event_type": "plot_session_created", + "message": "Plot session 'UR29' created and started", + "details": { + "session_id": "plot_1_1755871737415_13", + "variables": [ + "UR29_Brix", + "UR29_ma", + "AUX Blink_2.0S" + ], + "time_window": 3600, + "trigger_variable": null, + "auto_started": true + } + }, + { + "timestamp": "2025-08-22T16:09:01.675551", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.023064374923706, + "points_saved": 40, + "points_rate": 3.99079547968128, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.3, + "cpu_max": 0.3, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.11029438972473145, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:09:11.701410", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 3.0% CPU", + "details": { + "duration": 10.025858879089355, + "points_saved": 40, + "points_rate": 3.9896831266423316, + "variables_saved": 120, + "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.1411336064338684, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:09:13.049011", + "level": "info", + "event_type": "plot_session_created", + "message": "Plot session 'UR29' created and started", + "details": { + "session_id": "plot_1_1755871753049_14", + "variables": [ + "UR29_Brix", + "UR29_ma", + "AUX Blink_2.0S" + ], + "time_window": 360, + "trigger_variable": null, + "auto_started": true + } + }, + { + "timestamp": "2025-08-22T16:09:14.452210", + "level": "info", + "event_type": "plot_session_created", + "message": "Plot session 'UR29' created and started", + "details": { + "session_id": "plot_1_1755871754452_15", + "variables": [ + "UR29_Brix", + "UR29_ma", + "AUX Blink_2.0S" + ], + "time_window": 360, + "trigger_variable": null, + "auto_started": true + } + }, + { + "timestamp": "2025-08-22T16:09:21.724674", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.5% CPU", + "details": { + "duration": 10.02271556854248, + "points_saved": 40, + "points_rate": 3.99093436568677, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.5, + "cpu_max": 0.5, + "delay_average": 0.14875459671020508, + "delay_max": 0.14875459671020508, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.15695172548294067, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:09:31.746544", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.5% CPU", + "details": { + "duration": 10.021891117095947, + "points_saved": 40, + "points_rate": 3.9912626801308573, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.5, + "cpu_max": 0.5, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08277904391288757, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:09:41.768492", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.022475957870483, + "points_saved": 40, + "points_rate": 3.991029778284344, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08087011575698852, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:09:51.788105", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.8% CPU", + "details": { + "duration": 10.019612789154053, + "points_saved": 40, + "points_rate": 3.9921702406802453, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.8, + "cpu_max": 0.8, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08503056168556214, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:10:01.814231", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.5% CPU", + "details": { + "duration": 10.02612590789795, + "points_saved": 40, + "points_rate": 3.9895768682189123, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.5, + "cpu_max": 0.5, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08544575572013854, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:10:11.834793", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.020562648773193, + "points_saved": 40, + "points_rate": 3.991791818685666, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.3, + "cpu_max": 0.3, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08231931328773498, + "csv_write_time_avg": 3.5583972930908205e-06 + } + }, + { + "timestamp": "2025-08-22T16:10:21.855645", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.020850896835327, + "points_saved": 40, + "points_rate": 3.9916769954767366, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.3, + "cpu_max": 0.3, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08140975832939149, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:10:31.876426", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.020781755447388, + "points_saved": 40, + "points_rate": 3.9917045372488666, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.3, + "cpu_max": 0.3, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08388580679893494, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:10:41.906252", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.5% CPU", + "details": { + "duration": 10.029825448989868, + "points_saved": 40, + "points_rate": 3.988105296890138, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.5, + "cpu_max": 0.5, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08541460633277893, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:10:51.928863", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.022611618041992, + "points_saved": 40, + "points_rate": 3.9909757580544025, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.3, + "cpu_max": 0.3, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.0907166838645935, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:11:01.948813", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.5% CPU", + "details": { + "duration": 10.019949436187744, + "points_saved": 40, + "points_rate": 3.992036113030393, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.5, + "cpu_max": 0.5, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08433883786201476, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:11:11.970409", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.6% CPU", + "details": { + "duration": 10.02159595489502, + "points_saved": 40, + "points_rate": 3.991380233251383, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.6, + "cpu_max": 0.6, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08106328845024109, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:11:21.994228", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 2 lost, 0.5% CPU", + "details": { + "duration": 10.0229172706604, + "points_saved": 40, + "points_rate": 3.990854051752982, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 2, + "cpu_average": 0.5, + "cpu_max": 0.5, + "delay_average": 0.1504286527633667, + "delay_max": 0.2082200050354004, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.15015846490859985, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:11:32.016536", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.5% CPU", + "details": { + "duration": 10.023209810256958, + "points_saved": 40, + "points_rate": 3.9907375738126496, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.5, + "cpu_max": 0.5, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.12866865396499633, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:11:42.037012", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.020475625991821, + "points_saved": 40, + "points_rate": 3.991826485386099, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.137687349319458, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:11:52.056890", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.019878149032593, + "points_saved": 40, + "points_rate": 3.9920645146629803, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.3, + "cpu_max": 0.3, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.12392076849937439, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:12:02.077208", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.020318746566772, + "points_saved": 40, + "points_rate": 3.991888981945316, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.0, + "cpu_max": 0.0, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.12485349774360657, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:12:12.102868", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.025659561157227, + "points_saved": 40, + "points_rate": 3.989762444654857, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.1327773630619049, + "csv_write_time_avg": 1.6570091247558594e-06 + } + }, + { + "timestamp": "2025-08-22T16:12:22.122992", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.020124673843384, + "points_saved": 40, + "points_rate": 3.991966298025845, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.0, + "cpu_max": 0.0, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.12721346020698548, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:12:32.149118", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.02612590789795, + "points_saved": 40, + "points_rate": 3.9895768682189123, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.1269347310066223, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:12:42.172557", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.6% CPU", + "details": { + "duration": 10.02302622795105, + "points_saved": 40, + "points_rate": 3.990810668384031, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.6, + "cpu_max": 0.6, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.13767212629318237, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:12:52.193887", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.021742105484009, + "points_saved": 40, + "points_rate": 3.9913220255499846, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.3, + "cpu_max": 0.3, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.12456979751586914, + "csv_write_time_avg": 1.4841556549072265e-06 + } + }, + { + "timestamp": "2025-08-22T16:13:02.220261", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.026374578475952, + "points_saved": 40, + "points_rate": 3.989477920151688, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.3, + "cpu_max": 0.3, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.13085644841194152, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:13:12.242923", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.022661685943604, + "points_saved": 40, + "points_rate": 3.990955821256389, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.12190751433372497, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:13:22.265825", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.022902250289917, + "points_saved": 40, + "points_rate": 3.990860032466443, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.12290917038917541, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:13:32.286384", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.5% CPU", + "details": { + "duration": 10.020558595657349, + "points_saved": 40, + "points_rate": 3.991793433285742, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.5, + "cpu_max": 0.5, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.12434619665145874, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:13:42.308942", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.022558450698853, + "points_saved": 40, + "points_rate": 3.990996929253217, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.3, + "cpu_max": 0.3, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.13673730492591857, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:13:52.344415", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.03547215461731, + "points_saved": 40, + "points_rate": 3.985861291199542, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.0, + "cpu_max": 0.0, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.12766797542572023, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:14:02.390590", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 1.6% CPU", + "details": { + "duration": 10.046175241470337, + "points_saved": 40, + "points_rate": 3.9816147975282266, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 1.6, + "cpu_max": 1.6, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.12452002167701721, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:14:12.411255", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.5% CPU", + "details": { + "duration": 10.020665168762207, + "points_saved": 40, + "points_rate": 3.991750979235739, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.5, + "cpu_max": 0.5, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.14077257513999938, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:14:22.434109", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.022854089736938, + "points_saved": 40, + "points_rate": 3.9908792088431815, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.3, + "cpu_max": 0.3, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.1268133044242859, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:14:32.459394", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.6% CPU", + "details": { + "duration": 10.0252845287323, + "points_saved": 40, + "points_rate": 3.989911696307537, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.6, + "cpu_max": 0.6, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.1277225136756897, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:14:42.480034", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.5% CPU", + "details": { + "duration": 10.02064037322998, + "points_saved": 40, + "points_rate": 3.9917608566074794, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.5, + "cpu_max": 0.5, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.12626924514770507, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:14:52.500855", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.5% CPU", + "details": { + "duration": 10.02082085609436, + "points_saved": 40, + "points_rate": 3.9916889618551767, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.5, + "cpu_max": 0.5, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.12411080598831177, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:15:02.531971", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.031116485595703, + "points_saved": 40, + "points_rate": 3.987592015050215, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.12082891464233399, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:15:12.556237", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 41 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.024265766143799, + "points_saved": 41, + "points_rate": 4.090075119364293, + "variables_saved": 123, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.3, + "cpu_max": 0.3, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.12360845542535549, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:15:22.577688", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.5% CPU", + "details": { + "duration": 10.021450757980347, + "points_saved": 40, + "points_rate": 3.9914380628121076, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.5, + "cpu_max": 0.5, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.13059582710266113, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:15:32.599134", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 41 points saved, 0 lost, 0.5% CPU", + "details": { + "duration": 10.021445751190186, + "points_saved": 41, + "points_rate": 4.091226058388899, + "variables_saved": 123, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.5, + "cpu_max": 0.5, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.12074694400880395, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:15:42.619634", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.020500659942627, + "points_saved": 40, + "points_rate": 3.991816512711953, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.3, + "cpu_max": 0.3, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.13222858905792237, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:15:52.640448", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.6% CPU", + "details": { + "duration": 10.020813941955566, + "points_saved": 40, + "points_rate": 3.9916917160318, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.6, + "cpu_max": 0.6, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.1180242657661438, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:16:02.662962", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.02251410484314, + "points_saved": 40, + "points_rate": 3.991014587913721, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.3, + "cpu_max": 0.3, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.118756502866745, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:16:12.683311", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.020349025726318, + "points_saved": 40, + "points_rate": 3.9918769193871095, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.142854505777359, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:16:22.705655", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.6% CPU", + "details": { + "duration": 10.021744012832642, + "points_saved": 40, + "points_rate": 3.9913212659174695, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.6, + "cpu_max": 0.6, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.12469332814216613, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:16:32.725497", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.020441770553589, + "points_saved": 40, + "points_rate": 3.9918399723199194, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.3, + "cpu_max": 0.3, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.12600362300872803, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:16:42.746467", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.6% CPU", + "details": { + "duration": 10.02096962928772, + "points_saved": 40, + "points_rate": 3.9916297004926817, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.6, + "cpu_max": 0.6, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.12089340090751648, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:16:52.766637", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.020169973373413, + "points_saved": 40, + "points_rate": 3.9919482510069146, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.12314814329147339, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:16:59.644380", + "level": "info", + "event_type": "udp_streaming_stopped", + "message": "UDP streaming to PlotJuggler stopped (CSV recording continues)", + "details": {} + }, + { + "timestamp": "2025-08-22T16:17:02.789220", + "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-22T16:17:02.810138", + "level": "info", + "event_type": "udp_streaming_stopped", + "message": "UDP streaming to PlotJuggler stopped (CSV recording continues)", + "details": {} + }, + { + "timestamp": "2025-08-22T16:17:03.016698", + "level": "info", + "event_type": "dataset_deactivated", + "message": "Dataset deactivated: Fast", + "details": { + "dataset_id": "Fast" + } + }, + { + "timestamp": "2025-08-22T16:17:03.057810", + "level": "info", + "event_type": "dataset_deactivated", + "message": "Dataset deactivated: DAR", + "details": { + "dataset_id": "DAR" + } + }, + { + "timestamp": "2025-08-22T16:17:03.084369", + "level": "info", + "event_type": "dataset_deactivated", + "message": "Dataset deactivated: test", + "details": { + "dataset_id": "Test" + } + }, + { + "timestamp": "2025-08-22T16:17:03.109115", + "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-22T16:17:23.648671", + "level": "info", + "event_type": "application_started", + "message": "Application initialization completed successfully", + "details": {} + }, + { + "timestamp": "2025-08-22T16:17:23.759391", + "level": "info", + "event_type": "dataset_activated", + "message": "Dataset activated: DAR", + "details": { + "dataset_id": "DAR", + "variables_count": 3, + "streaming_count": 3, + "prefix": "gateway_phoenix" + } + }, + { + "timestamp": "2025-08-22T16:17:23.781187", + "level": "info", + "event_type": "dataset_activated", + "message": "Dataset activated: Fast", + "details": { + "dataset_id": "Fast", + "variables_count": 3, + "streaming_count": 1, + "prefix": "fast" + } + }, + { + "timestamp": "2025-08-22T16:17:23.804825", + "level": "info", + "event_type": "csv_recording_started", + "message": "🔥 CRITICAL PRIORITY: CSV recording started with MAXIMUM PRIORITY, async buffering, and performance monitoring: 2 datasets activated", + "details": { + "activated_datasets": 2, + "total_datasets": 3, + "priority": "CRITICAL", + "recording_protection": true, + "performance_monitoring": true, + "async_csv_buffering": true, + "csv_flush_interval": 5.0 + } + }, + { + "timestamp": "2025-08-22T16:17:31.403138", + "level": "info", + "event_type": "plot_session_created", + "message": "Plot session 'UR29' created and started", + "details": { + "session_id": "plot_1_1755872251402_2", + "variables": [ + "UR29_Brix", + "UR29_ma", + "AUX Blink_2.0S" + ], + "time_window": 360, + "trigger_variable": null, + "auto_started": true + } + }, + { + "timestamp": "2025-08-22T16:17:33.758691", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 11.117362976074219, + "points_saved": 40, + "points_rate": 3.597975534853398, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.0, + "cpu_max": 0.0, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09272882342338562, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:17:43.785485", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 1.6% CPU", + "details": { + "duration": 10.026793479919434, + "points_saved": 40, + "points_rate": 3.989311246921324, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 1.6, + "cpu_max": 1.6, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09463205337524414, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:17:53.814823", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.029337644577026, + "points_saved": 40, + "points_rate": 3.9882992693568795, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.3, + "cpu_max": 0.3, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09291386008262634, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:18:03.837344", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.02252197265625, + "points_saved": 40, + "points_rate": 3.9910114549141644, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.0, + "cpu_max": 0.0, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.10531670451164246, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:18:13.863649", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 41 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.026304483413696, + "points_saved": 41, + "points_rate": 4.089243456332833, + "variables_saved": 123, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08984538403952994, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:18:23.900009", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.036359548568726, + "points_saved": 40, + "points_rate": 3.9855088696682213, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09196295738220214, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:18:33.925525", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.6% CPU", + "details": { + "duration": 10.024535417556763, + "points_saved": 40, + "points_rate": 3.990209853510501, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.6, + "cpu_max": 0.6, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09381498694419861, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:18:43.954225", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.6% CPU", + "details": { + "duration": 10.029680490493774, + "points_saved": 40, + "points_rate": 3.9881629367867077, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.6, + "cpu_max": 0.6, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09407094120979309, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:18:53.978250", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.023449659347534, + "points_saved": 40, + "points_rate": 3.9906420802639873, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09007964134216309, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:19:04.001830", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.02339768409729, + "points_saved": 40, + "points_rate": 3.9906627733091296, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.3, + "cpu_max": 0.3, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09411538243293763, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:19:05.059263", + "level": "info", + "event_type": "plot_session_created", + "message": "Plot session 'UR29' created and started", + "details": { + "session_id": "plot_1_1755872345059_3", + "variables": [ + "UR29_Brix", + "UR29_ma", + "AUX Blink_2.0S" + ], + "time_window": 37, + "trigger_variable": null, + "auto_started": true + } + }, + { + "timestamp": "2025-08-22T16:19:07.275570", + "level": "info", + "event_type": "plot_session_created", + "message": "Plot session 'UR29' created and started", + "details": { + "session_id": "plot_1_1755872347275_4", + "variables": [ + "UR29_Brix", + "UR29_ma", + "AUX Blink_2.0S" + ], + "time_window": 37, + "trigger_variable": null, + "auto_started": true + } + }, + { + "timestamp": "2025-08-22T16:19:14.025251", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.024178981781006, + "points_saved": 40, + "points_rate": 3.990351735808009, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.0967745840549469, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:19:24.048160", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.9% CPU", + "details": { + "duration": 10.02290940284729, + "points_saved": 40, + "points_rate": 3.9908571845054164, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.9, + "cpu_max": 0.9, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09753435850143433, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:19:34.069974", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 41 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.021813869476318, + "points_saved": 41, + "points_rate": 4.09107578069023, + "variables_saved": 123, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.3, + "cpu_max": 0.3, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.0970779744590201, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:19:44.096164", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.026190519332886, + "points_saved": 40, + "points_rate": 3.989551158325833, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09425384998321533, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:19:54.121062", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.024897575378418, + "points_saved": 40, + "points_rate": 3.990065703837387, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09104174375534058, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:20:04.155220", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.034157991409302, + "points_saved": 40, + "points_rate": 3.9863833152961927, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.3, + "cpu_max": 0.3, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09260987639427185, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:20:14.179669", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.024449586868286, + "points_saved": 40, + "points_rate": 3.990244018225075, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.3, + "cpu_max": 0.3, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09156538844108582, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:20:24.204954", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.02428674697876, + "points_saved": 40, + "points_rate": 3.990308837888709, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09264734387397766, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:20:34.240324", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.035125732421875, + "points_saved": 40, + "points_rate": 3.9859988869662533, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.0, + "cpu_max": 0.0, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.10321825742721558, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:20:44.274213", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.034167766571045, + "points_saved": 40, + "points_rate": 3.986379431811027, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09465987086296082, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:20:54.341846", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.6% CPU", + "details": { + "duration": 10.068596124649048, + "points_saved": 40, + "points_rate": 3.9727484849725507, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.6, + "cpu_max": 0.6, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09433556199073792, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:21:04.387217", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.045371055603027, + "points_saved": 40, + "points_rate": 3.9819335471624133, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09806296825408936, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:21:14.418134", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.6% CPU", + "details": { + "duration": 10.030916929244995, + "points_saved": 40, + "points_rate": 3.9876713447183048, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.6, + "cpu_max": 0.6, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09353882670402527, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:21:24.458380", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.03935718536377, + "points_saved": 40, + "points_rate": 3.984318842476828, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.3, + "cpu_max": 0.3, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09345003366470336, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:21:34.501382", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.5% CPU", + "details": { + "duration": 10.042083740234375, + "points_saved": 40, + "points_rate": 3.9832370486751616, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.5, + "cpu_max": 0.5, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09276611208915711, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:21:44.543266", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 1.7% CPU", + "details": { + "duration": 10.043691158294678, + "points_saved": 40, + "points_rate": 3.9825995612146654, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 1.7, + "cpu_max": 1.7, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.093732351064682, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:21:54.565262", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.021996021270752, + "points_saved": 40, + "points_rate": 3.9912209020143026, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.0, + "cpu_max": 0.0, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09085734486579895, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:22:04.588376", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.02311372756958, + "points_saved": 40, + "points_rate": 3.9907758294686397, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.3, + "cpu_max": 0.3, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09042171239852906, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:22:14.612782", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 41 points saved, 0 lost, 0.5% CPU", + "details": { + "duration": 10.02440595626831, + "points_saved": 41, + "points_rate": 4.09001792015042, + "variables_saved": 123, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.5, + "cpu_max": 0.5, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08790693631986292, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:22:24.635519", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.5% CPU", + "details": { + "duration": 10.022212982177734, + "points_saved": 40, + "points_rate": 3.991134500048149, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.5, + "cpu_max": 0.5, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.0921785831451416, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:22:34.667297", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.032302618026733, + "points_saved": 40, + "points_rate": 3.9871205567628354, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09024924635887147, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:22:44.693027", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.025729417800903, + "points_saved": 40, + "points_rate": 3.989734645040302, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.3, + "cpu_max": 0.3, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08780970573425292, + "csv_write_time_avg": 5.048513412475586e-06 + } + }, + { + "timestamp": "2025-08-22T16:22:54.717936", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.024402141571045, + "points_saved": 40, + "points_rate": 3.9902629039711606, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.1016793429851532, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:23:04.750416", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.031927585601807, + "points_saved": 40, + "points_rate": 3.9872696108183114, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.3, + "cpu_max": 0.3, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.0910542368888855, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T16:23:14.775092", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.025735139846802, + "points_saved": 40, + "points_rate": 3.9897323679559342, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08809224963188171, + "csv_write_time_avg": 1.2761354446411132e-05 + } + }, + { + "timestamp": "2025-08-22T16:23:24.804715", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 41 points saved, 0 lost, 0.5% CPU", + "details": { + "duration": 10.029623746871948, + "points_saved": 41, + "points_rate": 4.087890137731949, + "variables_saved": 123, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.5, + "cpu_max": 0.5, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.09133223207985483, + "csv_write_time_avg": 0.0 + } } ], - "last_updated": "2025-08-22T16:04:31.048803", + "last_updated": "2025-08-22T16:23:24.804715", "total_entries": 1000 } \ No newline at end of file diff --git a/config/data/plot_definitions.json b/config/data/plot_definitions.json index 7f281ce..ded7b82 100644 --- a/config/data/plot_definitions.json +++ b/config/data/plot_definitions.json @@ -8,7 +8,7 @@ "point_radius": 2.5, "stacked": true, "stepped": true, - "time_window": 60, + "time_window": 37, "trigger_enabled": false, "trigger_on_true": true, "trigger_variable": null, diff --git a/frontend/src/components/ChartjsPlot.jsx b/frontend/src/components/ChartjsPlot.jsx index af6b780..e3ec7cd 100644 --- a/frontend/src/components/ChartjsPlot.jsx +++ b/frontend/src/components/ChartjsPlot.jsx @@ -663,7 +663,16 @@ const ChartjsPlot = ({ session, height = '400px' }) => { // Update lastPushedX tracking for streaming continuity const lastPoint = historicalPoints[historicalPoints.length - 1]; if (lastPoint && typeof lastPoint.x === 'number') { - sessionDataRef.current.lastPushedXByDataset.set(index, lastPoint.x); + // Compensate for frontend processing delay to prevent gaps + // Subtract 3 seconds (3000ms) to account for: + // - Backend processing time + // - HTTP transfer time + // - Frontend processing time + // - Streaming initialization delay + const compensatedTimestamp = lastPoint.x - 3000; + sessionDataRef.current.lastPushedXByDataset.set(index, compensatedTimestamp); + + console.log(`📊 Historical data continuity: variable ${variableInfo.name}, last point: ${new Date(lastPoint.x).toISOString()}, compensated lastPushedX: ${new Date(compensatedTimestamp).toISOString()}`); } } }); @@ -1114,7 +1123,17 @@ const ChartjsPlot = ({ session, height = '400px' }) => { if (xNum > lastPushedX) newPoints.push({ x: xNum, y: yNum }); } - if (newPoints.length === 0) return; + if (newPoints.length === 0) { + // Log when no new points are found for debugging gap issues + if (backendDataset.data.length > 0) { + const firstBackendPoint = backendDataset.data[0]; + const firstXNum = getXValueMs(firstBackendPoint); + if (firstXNum !== null && firstXNum <= lastPushedX) { + console.log(`📊 Streaming continuity: Dataset ${datasetIndex} - ${backendDataset.data.length} points filtered out (oldest: ${new Date(firstXNum).toISOString()}, lastPushedX: ${new Date(lastPushedX).toISOString()})`); + } + } + return; + } // Sort by x and ensure monotonicity newPoints.sort((a, b) => a.x - b.x); @@ -1138,6 +1157,13 @@ const ChartjsPlot = ({ session, height = '400px' }) => { pointsAdded++; } sessionData.lastPushedXByDataset.set(datasetIndex, lastX); + + // Log successful streaming data ingestion for gap debugging + if (newPoints.length > 0) { + const firstNewPoint = newPoints[0]; + const lastNewPoint = newPoints[newPoints.length - 1]; + console.log(`📊 Streaming ingested: Dataset ${datasetIndex} - ${newPoints.length} points from ${new Date(firstNewPoint.x).toISOString()} to ${new Date(lastNewPoint.x).toISOString()}`); + } }); // Update chart diff --git a/system_state.json b/system_state.json index 772a977..6cf8e6c 100644 --- a/system_state.json +++ b/system_state.json @@ -3,12 +3,12 @@ "should_connect": true, "should_stream": false, "active_datasets": [ - "Fast", "DAR", + "Fast", "Test" ] }, "auto_recovery_enabled": true, - "last_update": "2025-08-22T16:03:42.919215", + "last_update": "2025-08-22T16:17:26.680235", "plotjuggler_path": "C:\\Program Files\\PlotJuggler\\plotjuggler.exe" } \ No newline at end of file