diff --git a/.tests/test_db1001_specific_values.py b/.tests/test_db1001_specific_values.py index 57a176d..b720940 100644 --- a/.tests/test_db1001_specific_values.py +++ b/.tests/test_db1001_specific_values.py @@ -43,43 +43,44 @@ from utils.json_manager import JSONManager import struct import ctypes + class DB1001ValueVerifier: """ Verificador específico para valores DB1001. Valida que ambos métodos lean exactamente los valores hexadecimales esperados. """ - + def __init__(self): self.json_manager = JSONManager() self.plc = None - + # Tabla de valores de referencia del PLC self.reference_values = { - 0: 0x0006, # DB1001.DBW 0 - 2: 0x3EE6, # DB1001.DBW 2 - 4: 0x6666, # DB1001.DBW 4 - 6: 0x3F4C, # DB1001.DBW 6 - 8: 0xCCCD, # DB1001.DBW 8 - 10: 0x5121, # DB1001.DBW 10 - 12: 0x0006, # DB1001.DBW 12 - 14: 0x6800, # DB1001.DBW 14 - 16: 0x0001, # DB1001.DBW 16 - 18: 0x0100, # DB1001.DBW 18 - 20: 0x0004, # DB1001.DBW 20 - 24: 0x2095, # DB1001.DBW 24 - 26: 0x0000, # DB1001.DBW 26 - 28: 0x0002, # DB1001.DBW 28 - 30: 0x8121, # DB1001.DBW 30 - 32: 0x0001, # DB1001.DBW 32 - 36: 0x0001, # DB1001.DBW 36 + 0: 0x0006, # DB1001.DBW 0 + 2: 0x3EE6, # DB1001.DBW 2 + 4: 0x6666, # DB1001.DBW 4 + 6: 0x3F4C, # DB1001.DBW 6 + 8: 0xCCCD, # DB1001.DBW 8 + 10: 0x5121, # DB1001.DBW 10 + 12: 0x0006, # DB1001.DBW 12 + 14: 0x6800, # DB1001.DBW 14 + 16: 0x0001, # DB1001.DBW 16 + 18: 0x0100, # DB1001.DBW 18 + 20: 0x0004, # DB1001.DBW 20 + 24: 0x2095, # DB1001.DBW 24 + 26: 0x0000, # DB1001.DBW 26 + 28: 0x0002, # DB1001.DBW 28 + 30: 0x8121, # DB1001.DBW 30 + 32: 0x0001, # DB1001.DBW 32 + 36: 0x0001, # DB1001.DBW 36 } - + self.test_results = { "test_info": { "start_time": datetime.now().isoformat(), "plc_ip": None, "total_words": len(self.reference_values), - "db_number": 1001 + "db_number": 1001, }, "legacy_results": {}, "optimized_results": {}, @@ -90,170 +91,186 @@ class DB1001ValueVerifier: "optimized_incorrect": [], "legacy_accuracy": 0.0, "optimized_accuracy": 0.0, - "methods_match": True - } + "methods_match": True, + }, } - + def connect_plc(self) -> bool: """Conectar al PLC.""" try: print("🔌 Conectando al PLC...") - + # Cargar configuración config_data = self.json_manager.read_json("plc") plc_config = config_data.get("plc_config", {}) - + ip = plc_config.get("ip") rack = plc_config.get("rack", 0) slot = plc_config.get("slot", 2) - + self.test_results["test_info"]["plc_ip"] = ip - + # Conectar self.plc = snap7.client.Client() self.plc.connect(ip, rack, slot) - + print(f"✅ Conectado a PLC: {ip}:{rack}.{slot}") return True - + except Exception as e: print(f"❌ Error conectando PLC: {e}") return False - + def read_db1001_legacy(self) -> Dict[int, int]: """Leer DB1001 usando método legacy (lecturas individuales).""" print("📖 Leyendo DB1001 con método LEGACY...") - + results = {} - + for offset, expected_value in self.reference_values.items(): try: # Leer WORD (2 bytes) desde DB1001 data = self.plc.db_read(1001, offset, 2) - + # Convertir a WORD (unsigned 16-bit big-endian) word_value = struct.unpack(">H", data)[0] - + results[offset] = word_value - - print(f" DBW {offset:2d}: 0x{word_value:04X} (esperado: 0x{expected_value:04X})") - + + print( + f" DBW {offset:2d}: 0x{word_value:04X} (esperado: 0x{expected_value:04X})" + ) + # Pequeña pausa entre lecturas time.sleep(0.001) - + except Exception as e: print(f" ❌ Error leyendo DBW {offset}: {e}") results[offset] = None - + successful = len([v for v in results.values() if v is not None]) - print(f" ✅ {successful}/{len(self.reference_values)} WORDs leídas exitosamente") - + print( + f" ✅ {successful}/{len(self.reference_values)} WORDs leídas exitosamente" + ) + return results - + def read_db1001_optimized(self) -> Dict[int, int]: """Leer DB1001 usando método optimizado (read_multi_vars).""" print("🚀 Leyendo DB1001 con método OPTIMIZADO...") - + results = {} CHUNK_SIZE = 19 # Límite seguro para S7 - + try: # Preparar S7DataItems para todas las WORDs all_items = [] all_offsets = [] - + for offset in self.reference_values.keys(): try: item = S7DataItem() - item.Area = 132 # DB area - item.WordLen = 4 # WORD type - item.DBNumber = 1001 # DB1001 - item.Start = offset # Byte offset - item.Amount = 1 # 1 WORD - + item.Area = 132 # DB area + item.WordLen = 4 # WORD type + item.DBNumber = 1001 # DB1001 + item.Start = offset # Byte offset + item.Amount = 1 # 1 WORD + # Allocar buffer para WORD (2 bytes) buffer = (ctypes.c_ubyte * 2)() item.pData = ctypes.cast(buffer, ctypes.POINTER(ctypes.c_ubyte)) - + all_items.append(item) all_offsets.append(offset) - + except Exception as e: print(f" ❌ Error preparando DBW {offset}: {e}") results[offset] = None - + if not all_items: return results - + print(f" 📊 Procesando {len(all_items)} WORDs en chunks de {CHUNK_SIZE}") - + # Procesar en chunks for chunk_start in range(0, len(all_items), CHUNK_SIZE): chunk_end = min(chunk_start + CHUNK_SIZE, len(all_items)) - + chunk_items = all_items[chunk_start:chunk_end] chunk_offsets = all_offsets[chunk_start:chunk_end] - - print(f" 🔄 Procesando chunk {chunk_start//CHUNK_SIZE + 1}: DBW {chunk_offsets[0]}-{chunk_offsets[-1]}") - + + print( + f" 🔄 Procesando chunk {chunk_start//CHUNK_SIZE + 1}: DBW {chunk_offsets[0]}-{chunk_offsets[-1]}" + ) + # Convertir chunk a ctypes array items_array = (S7DataItem * len(chunk_items))(*chunk_items) - + # Llamar read_multi_vars para este chunk result = self.plc.read_multi_vars(items_array) - + if isinstance(result, tuple) and len(result) == 2: ret_code, returned_items = result - + if ret_code == 0: for i, item in enumerate(returned_items): offset = chunk_offsets[i] expected_value = self.reference_values[offset] - + if item.Result == 0: try: # Extraer WORD usando snap7.util word_value = snap7.util.get_word(item.pData, 0) results[offset] = word_value - - print(f" DBW {offset:2d}: 0x{word_value:04X} (esperado: 0x{expected_value:04X})") - + + print( + f" DBW {offset:2d}: 0x{word_value:04X} (esperado: 0x{expected_value:04X})" + ) + except Exception as e: print(f" ❌ Error extrayendo DBW {offset}: {e}") results[offset] = None else: - print(f" ❌ Error leyendo DBW {offset}: código {item.Result}") + print( + f" ❌ Error leyendo DBW {offset}: código {item.Result}" + ) results[offset] = None else: print(f" ❌ Chunk falló: código {ret_code}") for offset in chunk_offsets: results[offset] = None else: - print(f" ❌ Formato de resultado inesperado para chunk: {type(result)}") + print( + f" ❌ Formato de resultado inesperado para chunk: {type(result)}" + ) for offset in chunk_offsets: results[offset] = None - + # Pequeña pausa entre chunks time.sleep(0.01) - + except Exception as e: print(f" ❌ Error en método optimizado: {e}") import traceback + traceback.print_exc() for offset in self.reference_values.keys(): if offset not in results: results[offset] = None - + successful = len([v for v in results.values() if v is not None]) - print(f" ✅ {successful}/{len(self.reference_values)} WORDs leídas exitosamente") - + print( + f" ✅ {successful}/{len(self.reference_values)} WORDs leídas exitosamente" + ) + return results - - def verify_results(self, legacy_results: Dict[int, int], - optimized_results: Dict[int, int]) -> Dict[str, Any]: + + def verify_results( + self, legacy_results: Dict[int, int], optimized_results: Dict[int, int] + ) -> Dict[str, Any]: """Verificar resultados contra valores de referencia y entre métodos.""" print("🔍 Verificando resultados contra valores de referencia...") - + verification = { "legacy_correct": [], "legacy_incorrect": [], @@ -262,111 +279,133 @@ class DB1001ValueVerifier: "methods_mismatch": [], "legacy_accuracy": 0.0, "optimized_accuracy": 0.0, - "methods_match": True + "methods_match": True, } - + for offset, expected_value in self.reference_values.items(): legacy_val = legacy_results.get(offset) optimized_val = optimized_results.get(offset) - + # Verificar método legacy if legacy_val is not None: if legacy_val == expected_value: verification["legacy_correct"].append(offset) else: - verification["legacy_incorrect"].append({ - "offset": offset, - "expected": f"0x{expected_value:04X}", - "actual": f"0x{legacy_val:04X}" - }) - + verification["legacy_incorrect"].append( + { + "offset": offset, + "expected": f"0x{expected_value:04X}", + "actual": f"0x{legacy_val:04X}", + } + ) + # Verificar método optimizado if optimized_val is not None: if optimized_val == expected_value: verification["optimized_correct"].append(offset) else: - verification["optimized_incorrect"].append({ - "offset": offset, - "expected": f"0x{expected_value:04X}", - "actual": f"0x{optimized_val:04X}" - }) - + verification["optimized_incorrect"].append( + { + "offset": offset, + "expected": f"0x{expected_value:04X}", + "actual": f"0x{optimized_val:04X}", + } + ) + # Verificar que ambos métodos coincidan if legacy_val is not None and optimized_val is not None: if legacy_val != optimized_val: - verification["methods_mismatch"].append({ - "offset": offset, - "legacy": f"0x{legacy_val:04X}", - "optimized": f"0x{optimized_val:04X}" - }) + verification["methods_mismatch"].append( + { + "offset": offset, + "legacy": f"0x{legacy_val:04X}", + "optimized": f"0x{optimized_val:04X}", + } + ) verification["methods_match"] = False - + # Calcular precisión total_values = len(self.reference_values) - verification["legacy_accuracy"] = len(verification["legacy_correct"]) / total_values * 100 - verification["optimized_accuracy"] = len(verification["optimized_correct"]) / total_values * 100 - + verification["legacy_accuracy"] = ( + len(verification["legacy_correct"]) / total_values * 100 + ) + verification["optimized_accuracy"] = ( + len(verification["optimized_correct"]) / total_values * 100 + ) + # Mostrar resultados print(f"📊 Resultados de Verificación:") - print(f" 📖 Legacy - Correctos: {len(verification['legacy_correct'])}/{total_values} ({verification['legacy_accuracy']:.1f}%)") - print(f" 🚀 Optimizado - Correctos: {len(verification['optimized_correct'])}/{total_values} ({verification['optimized_accuracy']:.1f}%)") - print(f" 🔄 Métodos coinciden: {'✅ SÍ' if verification['methods_match'] else '❌ NO'}") - + print( + f" 📖 Legacy - Correctos: {len(verification['legacy_correct'])}/{total_values} ({verification['legacy_accuracy']:.1f}%)" + ) + print( + f" 🚀 Optimizado - Correctos: {len(verification['optimized_correct'])}/{total_values} ({verification['optimized_accuracy']:.1f}%)" + ) + print( + f" 🔄 Métodos coinciden: {'✅ SÍ' if verification['methods_match'] else '❌ NO'}" + ) + # Mostrar valores incorrectos si los hay if verification["legacy_incorrect"]: print(f" ❌ Legacy - Valores incorrectos:") for item in verification["legacy_incorrect"]: - print(f" DBW {item['offset']}: {item['actual']} (esperado: {item['expected']})") - + print( + f" DBW {item['offset']}: {item['actual']} (esperado: {item['expected']})" + ) + if verification["optimized_incorrect"]: print(f" ❌ Optimizado - Valores incorrectos:") for item in verification["optimized_incorrect"]: - print(f" DBW {item['offset']}: {item['actual']} (esperado: {item['expected']})") - + print( + f" DBW {item['offset']}: {item['actual']} (esperado: {item['expected']})" + ) + if verification["methods_mismatch"]: print(f" ⚠️ Diferencias entre métodos:") for item in verification["methods_mismatch"]: - print(f" DBW {item['offset']}: Legacy={item['legacy']}, Optimizado={item['optimized']}") - + print( + f" DBW {item['offset']}: Legacy={item['legacy']}, Optimizado={item['optimized']}" + ) + return verification - + def save_detailed_report(self) -> str: """Guardar reporte detallado.""" timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") filename = f"db1001_verification_report_{timestamp}.json" - + # Completar información del test self.test_results["test_info"]["end_time"] = datetime.now().isoformat() - + # Agregar tabla de referencia al reporte self.test_results["reference_table"] = { f"DBW_{offset}": f"0x{value:04X}" for offset, value in self.reference_values.items() } - - with open(filename, 'w', encoding='utf-8') as f: + + with open(filename, "w", encoding="utf-8") as f: json.dump(self.test_results, f, indent=2, ensure_ascii=False) - + print(f"📄 Reporte detallado guardado en: {filename}") return filename - + def run_verification(self) -> bool: """Ejecutar verificación completa de DB1001.""" print("🔍 === VERIFICACIÓN ESPECÍFICA DB1001 ===") print("Validación de valores hexadecimales específicos") print("=" * 50) - + # Mostrar tabla de valores de referencia print("📋 Tabla de valores de referencia:") for offset, value in self.reference_values.items(): print(f" DB1001.DBW {offset:2d} = W#16#{value:04X}") print() - + try: # 1. Conectar PLC if not self.connect_plc(): return False - + # 2. Leer con método legacy print("🔄 FASE 1: Lectura Legacy") print("-" * 25) @@ -375,7 +414,7 @@ class DB1001ValueVerifier: f"DBW_{k}": f"0x{v:04X}" if v is not None else None for k, v in legacy_results.items() } - + # 3. Leer con método optimizado print(f"\n🔄 FASE 2: Lectura Optimizada") print("-" * 30) @@ -384,46 +423,47 @@ class DB1001ValueVerifier: f"DBW_{k}": f"0x{v:04X}" if v is not None else None for k, v in optimized_results.items() } - + # 4. Verificar resultados print(f"\n🔍 FASE 3: Verificación") print("-" * 20) verification = self.verify_results(legacy_results, optimized_results) self.test_results["verification"] = verification - + # 5. Guardar reporte report_file = self.save_detailed_report() - + # 6. Mostrar resumen final self.print_final_summary(verification) - + # 7. Cleanup self.plc.disconnect() print("✅ PLC desconectado") - + # Evaluar éxito success = ( - verification["legacy_accuracy"] >= 95.0 and - verification["optimized_accuracy"] >= 95.0 and - verification["methods_match"] + verification["legacy_accuracy"] >= 95.0 + and verification["optimized_accuracy"] >= 95.0 + and verification["methods_match"] ) - + return success - + except Exception as e: print(f"❌ Error durante verificación: {e}") import traceback + traceback.print_exc() return False - + def print_final_summary(self, verification: Dict[str, Any]): """Imprimir resumen final.""" print(f"\n🎯 === RESUMEN FINAL DB1001 ===") - + legacy_acc = verification["legacy_accuracy"] optimized_acc = verification["optimized_accuracy"] methods_match = verification["methods_match"] - + # Estado general if legacy_acc >= 99.0 and optimized_acc >= 99.0 and methods_match: status_icon = "🟢" @@ -434,18 +474,18 @@ class DB1001ValueVerifier: else: status_icon = "🔴" status_text = "REQUIERE ATENCIÓN" - + print(f"{status_icon} Estado: {status_text}") print(f"📖 Precisión Legacy: {legacy_acc:.1f}%") print(f"🚀 Precisión Optimizado: {optimized_acc:.1f}%") print(f"🔄 Métodos Coinciden: {'✅ SÍ' if methods_match else '❌ NO'}") print(f"📊 Total WORDs Verificadas: {len(self.reference_values)}") - + if legacy_acc == 100.0 and optimized_acc == 100.0 and methods_match: print(f"\n🎉 ¡VERIFICACIÓN PERFECTA!") print(f"✅ Todos los valores DB1001 son exactamente correctos") print(f"✅ Ambos métodos producen resultados idénticos") - + print(f"\n" + "=" * 50) @@ -453,17 +493,17 @@ def main(): """Función principal.""" print("🔍 DB1001 SPECIFIC VALUE VERIFICATION TEST") print("🚀 Iniciando verificación de valores específicos...") - + verifier = DB1001ValueVerifier() success = verifier.run_verification() - + if success: print("🎉 ¡Verificación DB1001 exitosa!") print("✅ Valores exactos confirmados en ambos métodos") else: print("⚠️ Verificación completada con observaciones") print("📝 Revisar reporte para detalles específicos") - + return success diff --git a/test_plotjuggler_search.py b/.tests/test_plotjuggler_search.py similarity index 100% rename from test_plotjuggler_search.py rename to .tests/test_plotjuggler_search.py diff --git a/test_system_state_paths.py b/.tests/test_system_state_paths.py similarity index 100% rename from test_system_state_paths.py rename to .tests/test_system_state_paths.py diff --git a/application_events.json b/application_events.json index c85e9e9..1c9ce6d 100644 --- a/application_events.json +++ b/application_events.json @@ -1,3984 +1,5 @@ { "events": [ - { - "timestamp": "2025-08-18T16:51:54.662657", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.032355546951294, - "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-18T16:52:04.691865", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.029208183288574, - "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-18T16:52:14.722386", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.03052020072937, - "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-18T16:52:24.752351", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.0299654006958, - "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-18T16:52:34.781310", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.028959035873413, - "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-18T16:52:44.815672", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.034361839294434, - "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-18T16:52:54.843793", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.028120994567871, - "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-18T16:53:04.872444", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.028651475906372, - "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-18T16:53:14.901406", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.028230667114258, - "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-18T16:53:24.938290", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.037614822387695, - "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-18T16:53:34.967635", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.029345273971558, - "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-18T16:53:44.995961", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.028326034545898, - "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-18T16:53:55.025189", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.029228210449219, - "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-18T16:54:05.055087", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.029897689819336, - "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-18T16:54:15.083212", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.028124809265137, - "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-18T16:54:25.110984", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.027771711349487, - "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-18T16:54:35.139009", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.028025150299072, - "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-18T16:54:45.167538", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.028528928756714, - "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-18T16:54:55.198570", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.03103256225586, - "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-18T16:55:05.226665", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.02809453010559, - "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-18T16:55:15.255895", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.029229879379272, - "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-18T16:55:25.282388", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.026493787765503, - "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-18T16:55:35.310847", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.02845811843872, - "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-18T16:55:45.338612", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.027765274047852, - "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-18T16:55:55.365097", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.026484966278076, - "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-18T16:56:05.394266", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.029168844223022, - "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-18T16:56:15.422269", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.028003454208374, - "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-18T16:56:25.448240", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.025970697402954, - "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-18T16:56:35.485246", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.03700590133667, - "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-18T16:56:45.515133", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.029887437820435, - "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-18T16:56:55.542380", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.027247190475464, - "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-18T16:57:05.570666", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.02828598022461, - "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-18T16:57:15.598504", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.027837753295898, - "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-18T16:57:25.625471", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.026967525482178, - "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-18T16:57:35.652019", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.02654767036438, - "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-18T16:57:45.677866", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.025846242904663, - "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-18T16:57:55.704587", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.026721715927124, - "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-18T16:58:05.732875", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.028287410736084, - "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-18T16:58:15.761202", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.028327226638794, - "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-18T16:58:25.789353", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.02815055847168, - "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-18T16:58:35.817273", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.027920484542847, - "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-18T16:58:45.844669", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.027396202087402, - "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-18T16:58:55.873624", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.028954982757568, - "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-18T16:59:05.903891", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.030266523361206, - "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-18T16:59:15.931600", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.027709007263184, - "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-18T16:59:25.957706", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.026106357574463, - "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-18T16:59:35.988176", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.03046989440918, - "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-18T16:59:46.017076", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.028900146484375, - "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-18T16:59:56.046464", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.029387474060059, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:00:06.075098", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.028635025024414, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:00:16.106603", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.03150486946106, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:00:26.135566", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.02896237373352, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:00:36.165756", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.030190229415894, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.3, - "cpu_max": 0.3, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:00:46.196046", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.030289888381958, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.3, - "cpu_max": 0.3, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:00:56.224689", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.028643608093262, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:01:06.252368", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.027678728103638, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:01:16.282155", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.029787063598633, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:01:26.312136", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.029980421066284, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:01:36.341072", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.02893614768982, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:01:46.369493", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.028421401977539, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:01:56.396436", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.026942729949951, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:02:06.422823", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.026386976242065, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:02:16.451012", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.028189420700073, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:02:26.481578", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.0305655002594, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:02:36.518336", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.036758184432983, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.3, - "cpu_max": 0.3, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:02:46.545527", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.027190923690796, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:02:56.574524", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.028997421264648, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:03:06.604767", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.030243158340454, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:03:16.632474", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.027706623077393, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:03:26.660300", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.027826070785522, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:03:36.690626", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.030325889587402, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:03:46.721791", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.03116488456726, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:03:56.749056", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.027265310287476, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:04:06.777168", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.028112173080444, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:04:16.804997", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.027828454971313, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:04:26.830611", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.025614023208618, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:04:36.859299", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.028687715530396, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:04:46.888179", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.02888035774231, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.3, - "cpu_max": 0.3, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:04:56.916015", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.027836322784424, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:05:06.944142", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.028126955032349, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:05:16.971881", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.027738332748413, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:05:26.999579", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.027698278427124, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:05:37.029450", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.029871463775635, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.3, - "cpu_max": 0.3, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:05:47.057890", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.02843976020813, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:05:57.091503", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.033613204956055, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:06:07.120250", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.028746843338013, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:06:17.149081", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.028830528259277, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:06:27.175205", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.026124238967896, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:06:37.204118", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.028912544250488, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:06:47.229513", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.02539587020874, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:06:57.266627", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.037113666534424, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:07:07.294299", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.027672052383423, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:07:17.322414", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.028115034103394, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:07:27.349672", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.027258157730103, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:07:37.380328", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.030655860900879, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:07:47.408291", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.027962684631348, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:07:57.434726", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.026434659957886, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:08:07.462985", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.028259515762329, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:08:17.495086", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.032100677490234, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:08:27.523465", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.028379201889038, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.3, - "cpu_max": 0.3, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:08:37.553436", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.0299711227417, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:08:47.580681", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.027244806289673, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.3, - "cpu_max": 0.3, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:08:57.609794", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.029113531112671, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:09:07.640638", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.03084397315979, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:09:17.671564", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.030925273895264, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.3, - "cpu_max": 0.3, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:09:27.696955", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.025391101837158, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.3, - "cpu_max": 0.3, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:09:37.727112", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.030157327651978, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:09:47.754142", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.027029991149902, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:09:57.786208", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.032066583633423, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:10:07.814347", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.028138637542725, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:10:17.842958", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.028610944747925, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:10:27.869421", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.02646255493164, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.3, - "cpu_max": 0.3, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:10:37.900600", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.031179428100586, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:10:47.926754", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.026153564453125, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.3, - "cpu_max": 0.3, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:10:57.962204", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.035450458526611, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:11:07.989417", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.027212858200073, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:11:18.018111", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.028693437576294, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:11:28.044932", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.026821374893188, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:11:38.073849", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.028916835784912, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.3, - "cpu_max": 0.3, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:11:48.103193", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.029344320297241, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:11:58.131486", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.027791500091553, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:12:08.160793", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.029808521270752, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.3, - "cpu_max": 0.3, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:12:18.188299", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.027506351470947, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:12:28.218062", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.029762268066406, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:12:38.247114", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.029052734375, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:12:48.274069", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.026954889297485, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:12:58.299915", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.025845766067505, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:13:08.327407", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.027491807937622, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:13:18.356208", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.02880072593689, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.3, - "cpu_max": 0.3, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:13:28.383403", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.027195692062378, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.3, - "cpu_max": 0.3, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:13:38.415574", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.03217101097107, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:13:48.441225", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.02565050125122, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:13:58.471657", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.030431747436523, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.3, - "cpu_max": 0.3, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:14:08.499361", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.027704238891602, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:14:18.527089", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.027728080749512, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:14:28.553248", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.026159524917603, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.3, - "cpu_max": 0.3, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:14:38.590169", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.036920309066772, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.3, - "cpu_max": 0.3, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:14:48.616109", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.025940656661987, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:14:58.644969", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.028859615325928, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.3, - "cpu_max": 0.3, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:15:08.671954", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.026985168457031, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:15:18.701896", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.02994155883789, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.3, - "cpu_max": 0.3, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:15:28.731914", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.03001856803894, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.3, - "cpu_max": 0.3, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:15:38.760265", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.028350353240967, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:15:48.790547", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.030282020568848, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.3, - "cpu_max": 0.3, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:15:58.818781", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.028233766555786, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.3, - "cpu_max": 0.3, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:16:08.846814", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.028033256530762, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:16:18.874603", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.02778959274292, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:16:28.905583", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.030980110168457, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:16:38.931339", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.025755167007446, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:16:48.959273", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.027934074401855, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:16:58.986694", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.027421236038208, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:17:09.013133", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.026439428329468, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:17:19.043896", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.030763149261475, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:17:29.071564", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.02766752243042, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.3, - "cpu_max": 0.3, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:17:39.101218", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.029654264450073, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:17:49.128188", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.026969909667969, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:17:59.156203", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.028014898300171, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:18:09.181570", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.02536654472351, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:18:19.208573", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.027003288269043, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:18:29.236992", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.02841854095459, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.3, - "cpu_max": 0.3, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:18:39.264847", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.027855634689331, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:18:49.291858", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.027010679244995, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:18:59.320534", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.028676271438599, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:19:09.346105", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.3% CPU", - "details": { - "duration": 10.025570631027222, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.3, - "cpu_max": 0.3, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:19:19.371864", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.025759220123291, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:19:29.409502", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.0% CPU", - "details": { - "duration": 10.037637948989868, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.0, - "cpu_max": 0.0, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:19:39.437063", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.02756118774414, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:19:49.467541", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.03047800064087, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:19:59.494377", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.026835680007935, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:20:09.523224", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.028846979141235, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:20:19.550139", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.026915073394775, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:20:29.576575", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.02643632888794, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, - { - "timestamp": "2025-08-18T17:20:39.605765", - "level": "info", - "event_type": "performance_report", - "message": "Performance report: 0 points saved, 0 lost, 0.2% CPU", - "details": { - "duration": 10.029189586639404, - "points_saved": 0, - "points_rate": 0.0, - "variables_saved": 0, - "udp_points_sent": 0, - "points_lost": 0, - "cpu_average": 0.2, - "cpu_max": 0.2, - "delay_average": 0.0, - "delay_max": 0.0, - "read_errors": 0, - "csv_errors": 0, - "udp_errors": 0, - "read_time_avg": 0.0, - "csv_write_time_avg": 0.0 - } - }, { "timestamp": "2025-08-18T17:20:49.636996", "level": "info", @@ -20574,8 +16595,3935 @@ "event_type": "plc_disconnection", "message": "Disconnected from PLC 10.1.33.11 (application shutdown (will auto-reconnect on restart))", "details": {} + }, + { + "timestamp": "2025-08-22T12:14:33.638118", + "level": "info", + "event_type": "application_started", + "message": "Application initialization completed successfully", + "details": {} + }, + { + "timestamp": "2025-08-22T12:14:33.747283", + "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-22T12:14:33.770375", + "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-22T12:14:33.791103", + "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-22T12:14:43.747455", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 11.112417221069336, + "points_saved": 40, + "points_rate": 3.5995768701124096, + "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.09494925737380981, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:14:53.770937", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.02348256111145, + "points_saved": 40, + "points_rate": 3.9906289811078013, + "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.09577364921569824, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:15:03.793328", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 1 lost, 0.0% CPU", + "details": { + "duration": 10.022390365600586, + "points_saved": 40, + "points_rate": 3.991063862099231, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 1, + "cpu_average": 0.0, + "cpu_max": 0.0, + "delay_average": 0.15465712547302246, + "delay_max": 0.15465712547302246, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.14149504899978638, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:15:13.816518", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.5% CPU", + "details": { + "duration": 10.023190975189209, + "points_saved": 40, + "points_rate": 3.9907450730025538, + "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.1041787326335907, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:15:23.105652", + "level": "info", + "event_type": "plot_session_created", + "message": "Plot session 'UR29' created and started", + "details": { + "session_id": "plot_1_1755857723105_2", + "variables": [ + "UR29_Brix", + "UR29_ma", + "AUX Blink_2.0S" + ], + "time_window": 60, + "trigger_variable": null, + "auto_started": true + } + }, + { + "timestamp": "2025-08-22T12:15:23.839289", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 39 points saved, 2 lost, 0.0% CPU", + "details": { + "duration": 10.022265434265137, + "points_saved": 39, + "points_rate": 3.8913357719166815, + "variables_saved": 117, + "udp_points_sent": 0, + "points_lost": 2, + "cpu_average": 0.0, + "cpu_max": 0.0, + "delay_average": 0.2998373508453369, + "delay_max": 0.442746639251709, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.16884919313284066, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:15:33.863876", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.5% CPU", + "details": { + "duration": 10.025091886520386, + "points_saved": 40, + "points_rate": 3.98998836646909, + "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.1265568733215332, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:15:43.902580", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 2 lost, 0.3% CPU", + "details": { + "duration": 10.03870415687561, + "points_saved": 40, + "points_rate": 3.9845780266971604, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 2, + "cpu_average": 0.3, + "cpu_max": 0.3, + "delay_average": 0.2131335735321045, + "delay_max": 0.21474337577819824, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.15595608949661255, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:15:53.928383", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.025803327560425, + "points_saved": 40, + "points_rate": 3.9897052329005924, + "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.1588752329349518, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:16:03.954659", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.026276111602783, + "points_saved": 40, + "points_rate": 3.9895171003430177, + "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.1259353756904602, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:16:13.978059", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.022894859313965, + "points_saved": 40, + "points_rate": 3.9908629753637737, + "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.12480025291442871, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:16:24.001809", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.02425503730774, + "points_saved": 40, + "points_rate": 3.990321460410786, + "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.12434449791908264, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:16:34.024830", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.023021221160889, + "points_saved": 40, + "points_rate": 3.99081266190985, + "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.12489773035049438, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:16:44.052764", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.6% CPU", + "details": { + "duration": 10.02793288230896, + "points_saved": 40, + "points_rate": 3.9888579699777456, + "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.12282043695449829, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:16:54.075677", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.022913694381714, + "points_saved": 40, + "points_rate": 3.9908554757307515, + "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.12542726397514342, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:17:04.102634", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.026956796646118, + "points_saved": 40, + "points_rate": 3.989246269952959, + "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.13097845315933226, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:17:14.126164", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.022969722747803, + "points_saved": 40, + "points_rate": 3.9908331668624433, + "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.13081911206245422, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:17:24.150325", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.5% CPU", + "details": { + "duration": 10.024721622467041, + "points_saved": 40, + "points_rate": 3.990135737071587, + "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.1223885178565979, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:17:34.173801", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.023475408554077, + "points_saved": 40, + "points_rate": 3.990631828743135, + "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.12129020690917969, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:17:44.197419", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.023618221282959, + "points_saved": 40, + "points_rate": 3.9905749717271513, + "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.12196943163871765, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:17:54.221998", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 2 lost, 0.5% CPU", + "details": { + "duration": 10.023566722869873, + "points_saved": 40, + "points_rate": 3.990595474237288, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 2, + "cpu_average": 0.5, + "cpu_max": 0.5, + "delay_average": 0.12540435791015625, + "delay_max": 0.12651801109313965, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.1631916046142578, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:18:04.248626", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.027640104293823, + "points_saved": 40, + "points_rate": 3.9889744330644703, + "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.16254809498786926, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:18:14.271953", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.023326873779297, + "points_saved": 40, + "points_rate": 3.990690965555431, + "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.1311577320098877, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:18:24.296299", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.024345874786377, + "points_saved": 40, + "points_rate": 3.9902853013690947, + "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.1388661801815033, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:18:34.320905", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.024100065231323, + "points_saved": 40, + "points_rate": 3.9903831505773115, + "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.1315012276172638, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:18:44.344604", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.024204969406128, + "points_saved": 40, + "points_rate": 3.990341390871395, + "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.12945570349693297, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:18:54.371918", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.02731442451477, + "points_saved": 40, + "points_rate": 3.9891039920128595, + "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.13380863070487975, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:19:04.396419", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 2 lost, 0.3% CPU", + "details": { + "duration": 10.023431062698364, + "points_saved": 40, + "points_rate": 3.990649484172915, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 2, + "cpu_average": 0.3, + "cpu_max": 0.3, + "delay_average": 0.18572998046875, + "delay_max": 0.1883094310760498, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.15967006087303162, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:19:14.420121", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.023989200592041, + "points_saved": 40, + "points_rate": 3.990427283943752, + "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.12911621928215028, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:19:24.442211", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.022873163223267, + "points_saved": 40, + "points_rate": 3.9908716142164926, + "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.13624014854431152, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:19:34.464970", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.02275800704956, + "points_saved": 40, + "points_rate": 3.9909174672146914, + "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.12295441627502442, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:19:44.487909", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.022939443588257, + "points_saved": 40, + "points_rate": 3.9908452231134923, + "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.13326812982559205, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:19:54.509929", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.02202033996582, + "points_saved": 40, + "points_rate": 3.991211217212159, + "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.15067850351333617, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:20:04.536830", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.026900291442871, + "points_saved": 40, + "points_rate": 3.989268750795965, + "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.14375657439231873, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:20:14.559645", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.022814989089966, + "points_saved": 40, + "points_rate": 3.9908947779182595, + "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.13730505108833313, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:20:24.583943", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 39 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.024298429489136, + "points_saved": 39, + "points_rate": 3.890546582818319, + "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.13223494627536872, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:20:34.608155", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 41 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.023706197738647, + "points_saved": 41, + "points_rate": 4.09030344577035, + "variables_saved": 123, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.0, + "cpu_max": 0.0, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.1430429772632878, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:20:44.629930", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.5% CPU", + "details": { + "duration": 10.021772146224976, + "points_saved": 40, + "points_rate": 3.9913100613714603, + "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.12433511018753052, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:20:54.655090", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.025668382644653, + "points_saved": 40, + "points_rate": 3.9897589341019546, + "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.16376638412475586, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:21:04.677179", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.02208948135376, + "points_saved": 40, + "points_rate": 3.991183682247157, + "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.13819193243980407, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:21:14.698920", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.021741151809692, + "points_saved": 40, + "points_rate": 3.9913224053663505, + "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.12504522800445556, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:21:24.721367", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.022298097610474, + "points_saved": 40, + "points_rate": 3.991100604913841, + "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.14154710173606871, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:21:34.750331", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.028505086898804, + "points_saved": 40, + "points_rate": 3.9886303744568896, + "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.13414565920829774, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:21:44.773605", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.02328896522522, + "points_saved": 40, + "points_rate": 3.9907060585378638, + "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.12760087251663207, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:21:54.796186", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.023173809051514, + "points_saved": 40, + "points_rate": 3.990751907731826, + "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.16224249005317687, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:22:04.819247", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 1 lost, 0.2% CPU", + "details": { + "duration": 10.023060321807861, + "points_saved": 40, + "points_rate": 3.9907970934754577, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 1, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.30532658100128174, + "delay_max": 0.3067007064819336, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.18022758960723878, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:22:14.847788", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.02793002128601, + "points_saved": 40, + "points_rate": 3.9888591080206086, + "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.1282654047012329, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:22:24.869734", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.022557020187378, + "points_saved": 40, + "points_rate": 3.9909974988849877, + "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.12254247665405274, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:22:34.898202", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 38 points saved, 2 lost, 0.0% CPU", + "details": { + "duration": 10.027538299560547, + "points_saved": 38, + "points_rate": 3.7895641846279795, + "variables_saved": 114, + "udp_points_sent": 0, + "points_lost": 2, + "cpu_average": 0.0, + "cpu_max": 0.0, + "delay_average": 0.1744704246520996, + "delay_max": 0.1766188144683838, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.16067327951130114, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:22:44.922016", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 41 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.024235010147095, + "points_saved": 41, + "points_rate": 4.090087668385417, + "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.12052284798971037, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:22:54.945378", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.5% CPU", + "details": { + "duration": 10.023871421813965, + "points_saved": 40, + "points_rate": 3.9904741707831506, + "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.13016989827156067, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:23:05.035462", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 39 points saved, 2 lost, 0.2% CPU", + "details": { + "duration": 10.023361921310425, + "points_saved": 39, + "points_rate": 3.890910086473387, + "variables_saved": 117, + "udp_points_sent": 0, + "points_lost": 2, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.1363050937652588, + "delay_max": 0.13847613334655762, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.18003306633386856, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:23:15.089128", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 41 points saved, 0 lost, 0.6% CPU", + "details": { + "duration": 10.120387554168701, + "points_saved": 41, + "points_rate": 4.051228253913225, + "variables_saved": 123, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.6, + "cpu_max": 0.6, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.14962895323590533, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:23:25.113034", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.023905754089355, + "points_saved": 40, + "points_rate": 3.9904605032506004, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.15249575972557067, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:23:35.137225", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 41 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.024190902709961, + "points_saved": 41, + "points_rate": 4.090105665178021, + "variables_saved": 123, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.0, + "cpu_max": 0.0, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.1277271247491604, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:23:45.159140", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 39 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.021915674209595, + "points_saved": 39, + "points_rate": 3.891471577670787, + "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.1384282417786427, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:23:55.182951", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 41 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.023303985595703, + "points_saved": 41, + "points_rate": 4.090467580243033, + "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.13826042268334365, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:24:05.208369", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.025924921035767, + "points_saved": 40, + "points_rate": 3.9896568461304263, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.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.1478900730609894, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:24:15.231233", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.022863626480103, + "points_saved": 40, + "points_rate": 3.9908754115262237, + "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.14085782766342164, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:24:25.254179", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.022945880889893, + "points_saved": 40, + "points_rate": 3.9908426599674085, + "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.17188859581947327, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:24:35.278893", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 38 points saved, 2 lost, 0.3% CPU", + "details": { + "duration": 10.02371335029602, + "points_saved": 38, + "points_rate": 3.7910102446093776, + "variables_saved": 114, + "udp_points_sent": 0, + "points_lost": 2, + "cpu_average": 0.3, + "cpu_max": 0.3, + "delay_average": 0.14665043354034424, + "delay_max": 0.14830946922302246, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.16715892992521586, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:24:45.303597", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.025198698043823, + "points_saved": 40, + "points_rate": 3.9899458559165555, + "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.13398100733757018, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:24:55.326856", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 41 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.023765325546265, + "points_saved": 41, + "points_rate": 4.090279318043155, + "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.13244600993830982, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:25:05.354476", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.6% CPU", + "details": { + "duration": 10.0276198387146, + "points_saved": 40, + "points_rate": 3.988982494686141, + "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.1371506631374359, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:25:15.387263", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 39 points saved, 0 lost, 0.8% CPU", + "details": { + "duration": 10.032787561416626, + "points_saved": 39, + "points_rate": 3.8872546399749757, + "variables_saved": 117, + "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.1437069024795141, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:25:25.414695", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 42 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.0269136428833, + "points_saved": 42, + "points_rate": 4.188726610786152, + "variables_saved": 126, + "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.1437520980834961, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:25:35.439769", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.02559208869934, + "points_saved": 40, + "points_rate": 3.9897892958449055, + "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.14039768576622008, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:25:45.465948", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.026179075241089, + "points_saved": 40, + "points_rate": 3.9895557120834853, + "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.15233646631240844, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:25:55.496594", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.025831937789917, + "points_saved": 40, + "points_rate": 3.9896938476726107, + "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.12907963395118713, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:26:05.541197", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.048905849456787, + "points_saved": 40, + "points_rate": 3.9805328658902974, + "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.14183353185653685, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:26:15.567056", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.02637004852295, + "points_saved": 40, + "points_rate": 3.9894797226133365, + "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.12702025175094606, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:26:25.589017", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 38 points saved, 2 lost, 0.2% CPU", + "details": { + "duration": 10.021961212158203, + "points_saved": 38, + "points_rate": 3.7916730264232186, + "variables_saved": 114, + "udp_points_sent": 0, + "points_lost": 2, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.20679783821105957, + "delay_max": 0.21494650840759277, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.1730745968065764, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:26:35.613007", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.5% CPU", + "details": { + "duration": 10.023477554321289, + "points_saved": 40, + "points_rate": 3.9906309744521082, + "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.11428975462913513, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:26:45.641034", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 41 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.028538703918457, + "points_saved": 41, + "points_rate": 4.088332429128488, + "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.126070045843357, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:26:55.664185", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 41 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.023151159286499, + "points_saved": 41, + "points_rate": 4.0905299489585465, + "variables_saved": 123, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.0, + "cpu_max": 0.0, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.1530682342808421, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:27:05.687170", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 39 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.022985458374023, + "points_saved": 39, + "points_rate": 3.891056228901959, + "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.13002527065766165, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:27:15.717277", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 39 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.030106782913208, + "points_saved": 39, + "points_rate": 3.888293598871596, + "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.1206966913663424, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:27:25.740119", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 41 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.022841930389404, + "points_saved": 41, + "points_rate": 4.090656151693603, + "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.15535398227412525, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:27:35.762589", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 41 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.022470474243164, + "points_saved": 41, + "points_rate": 4.090807760957367, + "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.1313539190990169, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:27:45.785495", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.022906064987183, + "points_saved": 40, + "points_rate": 3.9908585135533894, + "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.13060152530670166, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:27:55.810988", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 33 points saved, 3 lost, 0.2% CPU", + "details": { + "duration": 10.024709463119507, + "points_saved": 33, + "points_rate": 3.291865975907396, + "variables_saved": 99, + "udp_points_sent": 0, + "points_lost": 3, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.27432641983032224, + "delay_max": 0.8556101322174072, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.34670628200877796, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:28:05.833335", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 41 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.023130416870117, + "points_saved": 41, + "points_rate": 4.090538414125804, + "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.11211387704058391, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:28:15.862701", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 38 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.029365301132202, + "points_saved": 38, + "points_rate": 3.788873857821315, + "variables_saved": 114, + "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.09857476385016191, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:28:25.885531", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 42 points saved, 1 lost, 0.2% CPU", + "details": { + "duration": 10.022222995758057, + "points_saved": 42, + "points_rate": 4.190687037973178, + "variables_saved": 126, + "udp_points_sent": 0, + "points_lost": 1, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.08478021621704102, + "delay_max": 0.14391088485717773, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.1714915604818435, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:28:35.908150", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.023226499557495, + "points_saved": 40, + "points_rate": 3.9907309289843864, + "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.1600718915462494, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:28:45.932054", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.023089170455933, + "points_saved": 40, + "points_rate": 3.9907856070864898, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.3, + "cpu_max": 0.3, + "delay_average": 0.08316469192504883, + "delay_max": 0.10999512672424316, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.23569769263267518, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:28:55.953910", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 38 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.022078275680542, + "points_saved": 38, + "points_rate": 3.7916287375454205, + "variables_saved": 114, + "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.16780129231904684, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:29:05.981482", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 42 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.028164148330688, + "points_saved": 42, + "points_rate": 4.188204279343734, + "variables_saved": 126, + "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.11019082296462286, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:29:16.004370", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.022887945175171, + "points_saved": 40, + "points_rate": 3.99086572840069, + "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.09785890579223633, + "csv_write_time_avg": 3.2901763916015627e-06 + } + }, + { + "timestamp": "2025-08-22T12:29:26.027027", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.02265739440918, + "points_saved": 40, + "points_rate": 3.9909575301169853, + "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.10148312449455262, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:29:36.050337", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.023310422897339, + "points_saved": 40, + "points_rate": 3.9906975153262385, + "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.12439157366752625, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:29:46.073590", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.023252725601196, + "points_saved": 40, + "points_rate": 3.990720487156109, + "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.10195306539535523, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:29:56.097044", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.023454189300537, + "points_saved": 40, + "points_rate": 3.990640276751871, + "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.11515247821807861, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:30:06.120686", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.023133993148804, + "points_saved": 40, + "points_rate": 3.9907677605967886, + "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.1022182583808899, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:30:16.141705", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 39 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.021526575088501, + "points_saved": 39, + "points_rate": 3.8916226692394504, + "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.11855426812783265, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:30:26.165290", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 2 lost, 0.0% CPU", + "details": { + "duration": 10.023585319519043, + "points_saved": 40, + "points_rate": 3.9905880705287697, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 2, + "cpu_average": 0.0, + "cpu_max": 0.0, + "delay_average": 0.11310470104217529, + "delay_max": 0.11738443374633789, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.14795565605163574, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:30:36.188478", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 41 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.02318787574768, + "points_saved": 41, + "points_rate": 4.090514964725392, + "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.10091888613817168, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:30:46.215036", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.02655816078186, + "points_saved": 40, + "points_rate": 3.9894048743921955, + "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.09725298285484314, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:30:56.239625", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.024083852767944, + "points_saved": 40, + "points_rate": 3.990389604428022, + "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.08552573323249817, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:31:06.266369", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.027248859405518, + "points_saved": 40, + "points_rate": 3.989130075542123, + "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.08546770215034485, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:31:16.288423", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.022054195404053, + "points_saved": 40, + "points_rate": 3.991197734526654, + "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.09215689301490784, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:31:26.312329", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.5% CPU", + "details": { + "duration": 10.023905992507935, + "points_saved": 40, + "points_rate": 3.9904604083375075, + "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.09182944893836975, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:31:36.334505", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.022176265716553, + "points_saved": 40, + "points_rate": 3.991149121656376, + "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.08358757495880127, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:31:46.362776", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 1 lost, 0.0% CPU", + "details": { + "duration": 10.028270959854126, + "points_saved": 40, + "points_rate": 3.9887234958180517, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 1, + "cpu_average": 0.0, + "cpu_max": 0.0, + "delay_average": 0.1266491413116455, + "delay_max": 0.1266491413116455, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.1271433174610138, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:31:56.386343", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.023037910461426, + "points_saved": 40, + "points_rate": 3.990806016831532, + "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.09794342517852783, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:32:06.409479", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.023664474487305, + "points_saved": 40, + "points_rate": 3.990556557615217, + "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.09783440232276916, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:32:16.432017", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.022538423538208, + "points_saved": 40, + "points_rate": 3.991004904112804, + "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.10758488774299621, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:32:26.456289", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.023679733276367, + "points_saved": 40, + "points_rate": 3.9905504828939193, + "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.08465479612350464, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:32:36.479578", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.023881673812866, + "points_saved": 40, + "points_rate": 3.9904700894962652, + "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.0869896650314331, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:32:46.502103", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 1 lost, 0.2% CPU", + "details": { + "duration": 10.022006511688232, + "points_saved": 40, + "points_rate": 3.9912167242507506, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 1, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.10963010787963867, + "delay_max": 0.10963010787963867, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.13032694458961486, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:32:56.531294", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.029709339141846, + "points_saved": 40, + "points_rate": 3.9881514655560744, + "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.08487236499786377, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:33:06.555772", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.02384328842163, + "points_saved": 40, + "points_rate": 3.9904853706365615, + "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.0994707465171814, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:33:16.577513", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.022375345230103, + "points_saved": 40, + "points_rate": 3.9910698434415544, + "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.09284192323684692, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:33:26.600362", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.02284860610962, + "points_saved": 40, + "points_rate": 3.9908813923037045, + "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.08595102429389953, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:33:36.622966", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.02260446548462, + "points_saved": 40, + "points_rate": 3.9909786061846644, + "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.08361206650733947, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:33:46.646397", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.023430585861206, + "points_saved": 40, + "points_rate": 3.990649674017095, + "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.09557175636291504, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:33:56.668599", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.022202014923096, + "points_saved": 40, + "points_rate": 3.9911388675302946, + "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.0830569326877594, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:34:06.691832", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 41 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.022725105285645, + "points_saved": 41, + "points_rate": 4.09070383247147, + "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.10706129888208901, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:34:16.718967", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 39 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.027642726898193, + "points_saved": 39, + "points_rate": 3.889249055053211, + "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.08366173352950658, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:34:26.741286", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 41 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.022320032119751, + "points_saved": 41, + "points_rate": 4.090869166879754, + "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.10760393375303687, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:34:36.763925", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.02263879776001, + "points_saved": 40, + "points_rate": 3.9909649351964798, + "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.09882462620735169, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:34:46.787896", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.023462057113647, + "points_saved": 40, + "points_rate": 3.9906371443399653, + "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.09087188839912415, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:34:56.808986", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.02159833908081, + "points_saved": 40, + "points_rate": 3.991379283683089, + "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.08374909162521363, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:35:06.832042", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.023056268692017, + "points_saved": 40, + "points_rate": 3.9907987072709408, + "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.08600491285324097, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:35:16.854847", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.022805452346802, + "points_saved": 40, + "points_rate": 3.9908985752720714, + "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.09277749061584473, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:35:26.876358", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.021510124206543, + "points_saved": 40, + "points_rate": 3.99141441801088, + "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.09040724635124206, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:35:36.899489", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.023130893707275, + "points_saved": 40, + "points_rate": 3.990768994657429, + "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.08965190052986145, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:35:46.922075", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.022586584091187, + "points_saved": 40, + "points_rate": 3.9909857265281046, + "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.10706197619438171, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:35:56.951702", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.029627323150635, + "points_saved": 40, + "points_rate": 3.9881840781532336, + "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.08389943838119507, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:36:06.975611", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.023908615112305, + "points_saved": 40, + "points_rate": 3.990459364293781, + "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.09141615629196168, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:36:16.998138", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.02252745628357, + "points_saved": 40, + "points_rate": 3.9910092713113214, + "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.1077497959136963, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:36:27.021150", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.023010969161987, + "points_saved": 40, + "points_rate": 3.9908167438975033, + "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.10587339401245117, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:36:37.045007", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 41 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.023351907730103, + "points_saved": 41, + "points_rate": 4.090448023518003, + "variables_saved": 123, + "udp_points_sent": 0, + "points_lost": 0, + "cpu_average": 0.0, + "cpu_max": 0.0, + "delay_average": 0.0, + "delay_max": 0.0, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.08068192877420564, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:36:47.069611", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.025110006332397, + "points_saved": 40, + "points_rate": 3.9899811547936985, + "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.11019404530525208, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:36:57.091857", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.02224612236023, + "points_saved": 40, + "points_rate": 3.9911213027145296, + "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.09026066064834595, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:37:07.114656", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.022799015045166, + "points_saved": 40, + "points_rate": 3.9909011384899795, + "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.0904138743877411, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:37:17.136900", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.022243976593018, + "points_saved": 40, + "points_rate": 3.9911221572155027, + "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.09170855283737182, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:37:27.159206", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.022305727005005, + "points_saved": 40, + "points_rate": 3.9910975667226345, + "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.09324669241905212, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:37:37.181893", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.02268671989441, + "points_saved": 40, + "points_rate": 3.990945852932078, + "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.09814761281013488, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:37:47.204640", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.022746562957764, + "points_saved": 40, + "points_rate": 3.9909220240919465, + "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.0816578984260559, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:37:57.227814", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.02251148223877, + "points_saved": 40, + "points_rate": 3.9910156322479997, + "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.0834173858165741, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:38:07.250432", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.02328109741211, + "points_saved": 40, + "points_rate": 3.9907091910579577, + "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.10830914378166198, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:38:17.274977", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.024545192718506, + "points_saved": 40, + "points_rate": 3.990205962566228, + "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.08915646076202392, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:38:27.297746", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.02276873588562, + "points_saved": 40, + "points_rate": 3.9909131951517156, + "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.12019897103309632, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:38:37.319869", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.022122621536255, + "points_saved": 40, + "points_rate": 3.9911704845882783, + "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.08477821946144104, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:38:47.343740", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.023871183395386, + "points_saved": 40, + "points_rate": 3.990474265696898, + "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.10654208064079285, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:38:57.367154", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.022907495498657, + "points_saved": 40, + "points_rate": 3.990857943961293, + "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.09069420099258423, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:39:07.394297", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.027649641036987, + "points_saved": 40, + "points_rate": 3.9889706393714297, + "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.08964312076568604, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:39:17.417333", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.023036241531372, + "points_saved": 40, + "points_rate": 3.9908066813383676, + "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.1004810869693756, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:39:27.439936", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.022602558135986, + "points_saved": 40, + "points_rate": 3.9909793656867545, + "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.08200016021728515, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:39:37.462932", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.022486448287964, + "points_saved": 40, + "points_rate": 3.9910256009208953, + "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.08623284697532654, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:39:47.485716", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 41 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.023294448852539, + "points_saved": 41, + "points_rate": 4.090471472150921, + "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.09559361527605754, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:39:57.509595", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 39 points saved, 1 lost, 0.2% CPU", + "details": { + "duration": 10.023878335952759, + "points_saved": 39, + "points_rate": 3.890709632829267, + "variables_saved": 117, + "udp_points_sent": 0, + "points_lost": 1, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.19368886947631836, + "delay_max": 0.19368886947631836, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.1297453733590933, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:40:07.534666", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.025070905685425, + "points_saved": 40, + "points_rate": 3.9899967168626382, + "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.0914082944393158, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:40:17.561472", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.026280164718628, + "points_saved": 40, + "points_rate": 3.9895154875838776, + "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.11929037570953369, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:40:27.584761", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.023814678192139, + "points_saved": 40, + "points_rate": 3.990496760382472, + "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.09441489577293397, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:40:37.609200", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.024439334869385, + "points_saved": 40, + "points_rate": 3.9902480990495404, + "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.10543319582939148, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:40:47.635415", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.026215314865112, + "points_saved": 40, + "points_rate": 3.9895412918865825, + "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.162761127948761, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:40:57.658534", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.0% CPU", + "details": { + "duration": 10.023118495941162, + "points_saved": 40, + "points_rate": 3.9907739309076216, + "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.10836762189865112, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:41:07.680545", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.022010803222656, + "points_saved": 40, + "points_rate": 3.9912150151681822, + "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.13081995248794556, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:41:17.704581", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.024035930633545, + "points_saved": 40, + "points_rate": 3.990408681373501, + "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.1133076786994934, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:41:27.730294", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.025713682174683, + "points_saved": 40, + "points_rate": 3.9897409070357153, + "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.11487483382225036, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:41:37.753996", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 1 lost, 0.2% CPU", + "details": { + "duration": 10.023702144622803, + "points_saved": 40, + "points_rate": 3.9905415606805446, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 1, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.06891489028930664, + "delay_max": 0.06891489028930664, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.13750216364860535, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:41:47.778994", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 41 points saved, 0 lost, 0.5% CPU", + "details": { + "duration": 10.024997234344482, + "points_saved": 41, + "points_rate": 4.089776689367927, + "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.08927979120394079, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:41:57.803351", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 39 points saved, 0 lost, 0.5% CPU", + "details": { + "duration": 10.023842811584473, + "points_saved": 39, + "points_rate": 3.890723421453499, + "variables_saved": 117, + "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.09584375528188852, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:42:07.825861", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 1 lost, 0.2% CPU", + "details": { + "duration": 10.023025035858154, + "points_saved": 40, + "points_rate": 3.990811143032855, + "variables_saved": 120, + "udp_points_sent": 0, + "points_lost": 1, + "cpu_average": 0.2, + "cpu_max": 0.2, + "delay_average": 0.08512568473815918, + "delay_max": 0.14809799194335938, + "read_errors": 0, + "csv_errors": 0, + "udp_errors": 0, + "read_time_avg": 0.1189483106136322, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:42:17.850445", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.2% CPU", + "details": { + "duration": 10.024583339691162, + "points_saved": 40, + "points_rate": 3.990190778466043, + "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.12610379457473755, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:42:27.873784", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.6% CPU", + "details": { + "duration": 10.02333927154541, + "points_saved": 40, + "points_rate": 3.9906860295104782, + "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.1246598243713379, + "csv_write_time_avg": 0.0 + } + }, + { + "timestamp": "2025-08-22T12:42:37.908534", + "level": "info", + "event_type": "performance_report", + "message": "Performance report: 40 points saved, 0 lost, 0.3% CPU", + "details": { + "duration": 10.03475022315979, + "points_saved": 40, + "points_rate": 3.986148046583327, + "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.1394800901412964, + "csv_write_time_avg": 0.0 + } } ], - "last_updated": "2025-08-22T11:59:01.315486", + "last_updated": "2025-08-22T12:42:37.908534", "total_entries": 1000 } \ No newline at end of file diff --git a/help.md b/help.md new file mode 100644 index 0000000..12de323 --- /dev/null +++ b/help.md @@ -0,0 +1,60 @@ +# Frontend User Guide — Dashboard Tabs + +This short guide explains the purpose of each tab in the frontend `Dashboard.jsx` and what a typical user needs to know to use them. + +Checklist +- Describe each Dashboard tab and its main actions +- Keep explanations short and aimed at end users (operators / engineers) +- Include a couple of quick tips and common issues + +Quick start +1. Start the backend (Flask): run the Python backend as your project requires (commonly `python main.py`). +2. Start the frontend: from the `frontend` folder run `npm run dev` (Vite development server). +3. Open the UI at the configured address (usually http://localhost:5173/app or root served path). + +Tabs overview + +1) Config (🔧) +- Purpose: configure PLC connection and UDP/streaming settings. +- What you do here: edit connection parameters (IP, rack/slot, DB mappings), UDP target and sampling interval, and save the PLC configuration. +- Main actions: Save configuration, Import/Export the PLC config (JSON), Reset the form. +- Tip: If the form shows "Loading..." wait for the backend to respond or check backend logs. + +2) Datasets (📊) +- Purpose: define logical datasets and the PLC variables that belong to each dataset. +- What you do here: + - "Dataset Definitions" card: add, edit or remove datasets (name, id, metadata). + - "Dataset Variables" area: choose a dataset (combo selector) and configure its variables and streaming settings. +- Main actions: add dataset, save all datasets, import/export full dataset files or single dataset variables. +- Tip: Create datasets first, then select a dataset to add variables for streaming/recording. + +3) Plots (📈) +- Purpose: define real-time plots and map variables to visual traces. +- What you do here: configure plots (plot id, name, variables to show), manage sessions, and export plot definitions. +- Main actions: Add/modify plots, start a plotting session in the frontend or launch PlotJuggler for advanced visualization (if available). +- Tip: Use export/import to share plot templates with colleagues. + +4) Historical (📉) +- Purpose: explore recorded (CSV) historical data and play it back or export slices. +- What you do here: open historical sessions, choose time ranges or files, and replay or export subsets for analysis. +- Main actions: load CSV sessions, playback controls, export data subset. +- Tip: For large datasets, prefer server-side filtering or export to file and analyze offline. + +5) CSV Files (📁) +- Purpose: browse stored CSV recordings created by the streamer. +- What you do here: view file list, download selected CSVs, and see recording metadata (timestamp, size). +- Main actions: Download, inspect file names and timestamps. +- Tip: Check disk space and retention policy in the backend if recordings stop appearing. + +6) Logs (📋) +- Purpose: view recent application logs and events for troubleshooting. +- What you do here: read recent log lines, refresh the view and export logs to a file. +- Main actions: Refresh logs, Export logs. +- Tip: If the UI shows backend disconnected, open backend logs (`main.py` / `logs/`) to diagnose. + +Common issues & troubleshooting +- Backend disconnected: StatusBar will show a connection error. Verify `main.py` is running and there are no firewall issues. +- Import errors: Use the corresponding exported file as a template (array vs object shape matters). Single-item import expects one array element’s structure. +- Empty lists: "Add First Item" buttons appear in empty array forms — use them to create the initial configuration. + +If you want, I can: add small JSON examples for each tab (sample dataset, variables, plot definition), translate this guide to Spanish, or embed screenshots. diff --git a/main_cleanup_notes.py b/main_cleanup_notes.py deleted file mode 100644 index 2601d64..0000000 --- a/main_cleanup_notes.py +++ /dev/null @@ -1,34 +0,0 @@ -# ============================== -# LEGACY ROUTES TO REMOVE/COMMENT -# ============================== - -# Legacy templates route (replaced by React SPA) -# @app.route("/legacy") -# def serve_legacy_index(): -# """Serve legacy HTML template for backward compatibility.""" -# try: -# return render_template("index.html") -# except Exception as e: -# return f"Error loading legacy template: {str(e)}", 500 - -# These routes can be removed after full migration to React: -# All routes serving /templates/index.html -# Static file serving for legacy JS/CSS -# Any jQuery-based endpoints - -# Essential APIs to keep: -# - /api/status (SSE) -# - /api/health -# - /api/events -# - /api/config/* (schemas and CRUD) -# - /api/plc/connect, /api/plc/disconnect -# - /api/udp/streaming/* -# - /api/plots/* (for chart functionality) -# - /api/datasets/* (if still needed) -# - /api/variables/* (if still needed) - -# React SPA routes to keep: -# - / (React app) -# - /app (React app) -# - /app/ (React app routing) -# - /assets/* (Vite build assets) diff --git a/system_state.json b/system_state.json index 5da780c..6793d86 100644 --- a/system_state.json +++ b/system_state.json @@ -3,11 +3,12 @@ "should_connect": true, "should_stream": false, "active_datasets": [ - "Test", "DAR", - "Fast" + "Fast", + "Test" ] }, "auto_recovery_enabled": true, - "last_update": "2025-08-22T11:59:00.787257" + "last_update": "2025-08-22T12:14:57.462145", + "plotjuggler_path": "C:\\Program Files\\PlotJuggler\\plotjuggler.exe" } \ No newline at end of file diff --git a/test_db1001_specific_values.py b/test_db1001_specific_values.py deleted file mode 100644 index b720940..0000000 --- a/test_db1001_specific_values.py +++ /dev/null @@ -1,511 +0,0 @@ -#!/usr/bin/env python3 -""" -🔍 DB1001 SPECIFIC VALUE VERIFICATION TEST -========================================== - -Test específico para verificar que los sistemas legacy y optimizado lean -exactamente los valores hexadecimales esperados en DB1001. - -Valores de referencia del PLC: -DB1001.DBW 0 = W#16#0006 -DB1001.DBW 2 = W#16#3EE6 -DB1001.DBW 4 = W#16#6666 -DB1001.DBW 6 = W#16#3F4C -DB1001.DBW 8 = W#16#CCCD -DB1001.DBW 10 = W#16#5121 -DB1001.DBW 12 = W#16#0006 -DB1001.DBW 14 = W#16#6800 -DB1001.DBW 16 = W#16#0001 -DB1001.DBW 18 = W#16#0100 -DB1001.DBW 20 = W#16#0004 -DB1001.DBW 24 = W#16#2095 -DB1001.DBW 26 = W#16#0000 -DB1001.DBW 28 = W#16#0002 -DB1001.DBW 30 = W#16#8121 -DB1001.DBW 32 = W#16#0001 -DB1001.DBW 36 = W#16#0001 -""" - -import sys -from pathlib import Path -import time -import json -from datetime import datetime -from typing import Dict, Any, List, Tuple - -# Add project root to path -project_root = Path(__file__).parent -sys.path.insert(0, str(project_root)) - -import snap7 -from snap7.types import S7DataItem -from utils.json_manager import JSONManager -import struct -import ctypes - - -class DB1001ValueVerifier: - """ - Verificador específico para valores DB1001. - Valida que ambos métodos lean exactamente los valores hexadecimales esperados. - """ - - def __init__(self): - self.json_manager = JSONManager() - self.plc = None - - # Tabla de valores de referencia del PLC - self.reference_values = { - 0: 0x0006, # DB1001.DBW 0 - 2: 0x3EE6, # DB1001.DBW 2 - 4: 0x6666, # DB1001.DBW 4 - 6: 0x3F4C, # DB1001.DBW 6 - 8: 0xCCCD, # DB1001.DBW 8 - 10: 0x5121, # DB1001.DBW 10 - 12: 0x0006, # DB1001.DBW 12 - 14: 0x6800, # DB1001.DBW 14 - 16: 0x0001, # DB1001.DBW 16 - 18: 0x0100, # DB1001.DBW 18 - 20: 0x0004, # DB1001.DBW 20 - 24: 0x2095, # DB1001.DBW 24 - 26: 0x0000, # DB1001.DBW 26 - 28: 0x0002, # DB1001.DBW 28 - 30: 0x8121, # DB1001.DBW 30 - 32: 0x0001, # DB1001.DBW 32 - 36: 0x0001, # DB1001.DBW 36 - } - - self.test_results = { - "test_info": { - "start_time": datetime.now().isoformat(), - "plc_ip": None, - "total_words": len(self.reference_values), - "db_number": 1001, - }, - "legacy_results": {}, - "optimized_results": {}, - "verification": { - "legacy_correct": [], - "legacy_incorrect": [], - "optimized_correct": [], - "optimized_incorrect": [], - "legacy_accuracy": 0.0, - "optimized_accuracy": 0.0, - "methods_match": True, - }, - } - - def connect_plc(self) -> bool: - """Conectar al PLC.""" - try: - print("🔌 Conectando al PLC...") - - # Cargar configuración - config_data = self.json_manager.read_json("plc") - plc_config = config_data.get("plc_config", {}) - - ip = plc_config.get("ip") - rack = plc_config.get("rack", 0) - slot = plc_config.get("slot", 2) - - self.test_results["test_info"]["plc_ip"] = ip - - # Conectar - self.plc = snap7.client.Client() - self.plc.connect(ip, rack, slot) - - print(f"✅ Conectado a PLC: {ip}:{rack}.{slot}") - return True - - except Exception as e: - print(f"❌ Error conectando PLC: {e}") - return False - - def read_db1001_legacy(self) -> Dict[int, int]: - """Leer DB1001 usando método legacy (lecturas individuales).""" - print("📖 Leyendo DB1001 con método LEGACY...") - - results = {} - - for offset, expected_value in self.reference_values.items(): - try: - # Leer WORD (2 bytes) desde DB1001 - data = self.plc.db_read(1001, offset, 2) - - # Convertir a WORD (unsigned 16-bit big-endian) - word_value = struct.unpack(">H", data)[0] - - results[offset] = word_value - - print( - f" DBW {offset:2d}: 0x{word_value:04X} (esperado: 0x{expected_value:04X})" - ) - - # Pequeña pausa entre lecturas - time.sleep(0.001) - - except Exception as e: - print(f" ❌ Error leyendo DBW {offset}: {e}") - results[offset] = None - - successful = len([v for v in results.values() if v is not None]) - print( - f" ✅ {successful}/{len(self.reference_values)} WORDs leídas exitosamente" - ) - - return results - - def read_db1001_optimized(self) -> Dict[int, int]: - """Leer DB1001 usando método optimizado (read_multi_vars).""" - print("🚀 Leyendo DB1001 con método OPTIMIZADO...") - - results = {} - CHUNK_SIZE = 19 # Límite seguro para S7 - - try: - # Preparar S7DataItems para todas las WORDs - all_items = [] - all_offsets = [] - - for offset in self.reference_values.keys(): - try: - item = S7DataItem() - item.Area = 132 # DB area - item.WordLen = 4 # WORD type - item.DBNumber = 1001 # DB1001 - item.Start = offset # Byte offset - item.Amount = 1 # 1 WORD - - # Allocar buffer para WORD (2 bytes) - buffer = (ctypes.c_ubyte * 2)() - item.pData = ctypes.cast(buffer, ctypes.POINTER(ctypes.c_ubyte)) - - all_items.append(item) - all_offsets.append(offset) - - except Exception as e: - print(f" ❌ Error preparando DBW {offset}: {e}") - results[offset] = None - - if not all_items: - return results - - print(f" 📊 Procesando {len(all_items)} WORDs en chunks de {CHUNK_SIZE}") - - # Procesar en chunks - for chunk_start in range(0, len(all_items), CHUNK_SIZE): - chunk_end = min(chunk_start + CHUNK_SIZE, len(all_items)) - - chunk_items = all_items[chunk_start:chunk_end] - chunk_offsets = all_offsets[chunk_start:chunk_end] - - print( - f" 🔄 Procesando chunk {chunk_start//CHUNK_SIZE + 1}: DBW {chunk_offsets[0]}-{chunk_offsets[-1]}" - ) - - # Convertir chunk a ctypes array - items_array = (S7DataItem * len(chunk_items))(*chunk_items) - - # Llamar read_multi_vars para este chunk - result = self.plc.read_multi_vars(items_array) - - if isinstance(result, tuple) and len(result) == 2: - ret_code, returned_items = result - - if ret_code == 0: - for i, item in enumerate(returned_items): - offset = chunk_offsets[i] - expected_value = self.reference_values[offset] - - if item.Result == 0: - try: - # Extraer WORD usando snap7.util - word_value = snap7.util.get_word(item.pData, 0) - results[offset] = word_value - - print( - f" DBW {offset:2d}: 0x{word_value:04X} (esperado: 0x{expected_value:04X})" - ) - - except Exception as e: - print(f" ❌ Error extrayendo DBW {offset}: {e}") - results[offset] = None - else: - print( - f" ❌ Error leyendo DBW {offset}: código {item.Result}" - ) - results[offset] = None - else: - print(f" ❌ Chunk falló: código {ret_code}") - for offset in chunk_offsets: - results[offset] = None - else: - print( - f" ❌ Formato de resultado inesperado para chunk: {type(result)}" - ) - for offset in chunk_offsets: - results[offset] = None - - # Pequeña pausa entre chunks - time.sleep(0.01) - - except Exception as e: - print(f" ❌ Error en método optimizado: {e}") - import traceback - - traceback.print_exc() - for offset in self.reference_values.keys(): - if offset not in results: - results[offset] = None - - successful = len([v for v in results.values() if v is not None]) - print( - f" ✅ {successful}/{len(self.reference_values)} WORDs leídas exitosamente" - ) - - return results - - def verify_results( - self, legacy_results: Dict[int, int], optimized_results: Dict[int, int] - ) -> Dict[str, Any]: - """Verificar resultados contra valores de referencia y entre métodos.""" - print("🔍 Verificando resultados contra valores de referencia...") - - verification = { - "legacy_correct": [], - "legacy_incorrect": [], - "optimized_correct": [], - "optimized_incorrect": [], - "methods_mismatch": [], - "legacy_accuracy": 0.0, - "optimized_accuracy": 0.0, - "methods_match": True, - } - - for offset, expected_value in self.reference_values.items(): - legacy_val = legacy_results.get(offset) - optimized_val = optimized_results.get(offset) - - # Verificar método legacy - if legacy_val is not None: - if legacy_val == expected_value: - verification["legacy_correct"].append(offset) - else: - verification["legacy_incorrect"].append( - { - "offset": offset, - "expected": f"0x{expected_value:04X}", - "actual": f"0x{legacy_val:04X}", - } - ) - - # Verificar método optimizado - if optimized_val is not None: - if optimized_val == expected_value: - verification["optimized_correct"].append(offset) - else: - verification["optimized_incorrect"].append( - { - "offset": offset, - "expected": f"0x{expected_value:04X}", - "actual": f"0x{optimized_val:04X}", - } - ) - - # Verificar que ambos métodos coincidan - if legacy_val is not None and optimized_val is not None: - if legacy_val != optimized_val: - verification["methods_mismatch"].append( - { - "offset": offset, - "legacy": f"0x{legacy_val:04X}", - "optimized": f"0x{optimized_val:04X}", - } - ) - verification["methods_match"] = False - - # Calcular precisión - total_values = len(self.reference_values) - verification["legacy_accuracy"] = ( - len(verification["legacy_correct"]) / total_values * 100 - ) - verification["optimized_accuracy"] = ( - len(verification["optimized_correct"]) / total_values * 100 - ) - - # Mostrar resultados - print(f"📊 Resultados de Verificación:") - print( - f" 📖 Legacy - Correctos: {len(verification['legacy_correct'])}/{total_values} ({verification['legacy_accuracy']:.1f}%)" - ) - print( - f" 🚀 Optimizado - Correctos: {len(verification['optimized_correct'])}/{total_values} ({verification['optimized_accuracy']:.1f}%)" - ) - print( - f" 🔄 Métodos coinciden: {'✅ SÍ' if verification['methods_match'] else '❌ NO'}" - ) - - # Mostrar valores incorrectos si los hay - if verification["legacy_incorrect"]: - print(f" ❌ Legacy - Valores incorrectos:") - for item in verification["legacy_incorrect"]: - print( - f" DBW {item['offset']}: {item['actual']} (esperado: {item['expected']})" - ) - - if verification["optimized_incorrect"]: - print(f" ❌ Optimizado - Valores incorrectos:") - for item in verification["optimized_incorrect"]: - print( - f" DBW {item['offset']}: {item['actual']} (esperado: {item['expected']})" - ) - - if verification["methods_mismatch"]: - print(f" ⚠️ Diferencias entre métodos:") - for item in verification["methods_mismatch"]: - print( - f" DBW {item['offset']}: Legacy={item['legacy']}, Optimizado={item['optimized']}" - ) - - return verification - - def save_detailed_report(self) -> str: - """Guardar reporte detallado.""" - timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") - filename = f"db1001_verification_report_{timestamp}.json" - - # Completar información del test - self.test_results["test_info"]["end_time"] = datetime.now().isoformat() - - # Agregar tabla de referencia al reporte - self.test_results["reference_table"] = { - f"DBW_{offset}": f"0x{value:04X}" - for offset, value in self.reference_values.items() - } - - with open(filename, "w", encoding="utf-8") as f: - json.dump(self.test_results, f, indent=2, ensure_ascii=False) - - print(f"📄 Reporte detallado guardado en: {filename}") - return filename - - def run_verification(self) -> bool: - """Ejecutar verificación completa de DB1001.""" - print("🔍 === VERIFICACIÓN ESPECÍFICA DB1001 ===") - print("Validación de valores hexadecimales específicos") - print("=" * 50) - - # Mostrar tabla de valores de referencia - print("📋 Tabla de valores de referencia:") - for offset, value in self.reference_values.items(): - print(f" DB1001.DBW {offset:2d} = W#16#{value:04X}") - print() - - try: - # 1. Conectar PLC - if not self.connect_plc(): - return False - - # 2. Leer con método legacy - print("🔄 FASE 1: Lectura Legacy") - print("-" * 25) - legacy_results = self.read_db1001_legacy() - self.test_results["legacy_results"] = { - f"DBW_{k}": f"0x{v:04X}" if v is not None else None - for k, v in legacy_results.items() - } - - # 3. Leer con método optimizado - print(f"\n🔄 FASE 2: Lectura Optimizada") - print("-" * 30) - optimized_results = self.read_db1001_optimized() - self.test_results["optimized_results"] = { - f"DBW_{k}": f"0x{v:04X}" if v is not None else None - for k, v in optimized_results.items() - } - - # 4. Verificar resultados - print(f"\n🔍 FASE 3: Verificación") - print("-" * 20) - verification = self.verify_results(legacy_results, optimized_results) - self.test_results["verification"] = verification - - # 5. Guardar reporte - report_file = self.save_detailed_report() - - # 6. Mostrar resumen final - self.print_final_summary(verification) - - # 7. Cleanup - self.plc.disconnect() - print("✅ PLC desconectado") - - # Evaluar éxito - success = ( - verification["legacy_accuracy"] >= 95.0 - and verification["optimized_accuracy"] >= 95.0 - and verification["methods_match"] - ) - - return success - - except Exception as e: - print(f"❌ Error durante verificación: {e}") - import traceback - - traceback.print_exc() - return False - - def print_final_summary(self, verification: Dict[str, Any]): - """Imprimir resumen final.""" - print(f"\n🎯 === RESUMEN FINAL DB1001 ===") - - legacy_acc = verification["legacy_accuracy"] - optimized_acc = verification["optimized_accuracy"] - methods_match = verification["methods_match"] - - # Estado general - if legacy_acc >= 99.0 and optimized_acc >= 99.0 and methods_match: - status_icon = "🟢" - status_text = "PERFECTO" - elif legacy_acc >= 95.0 and optimized_acc >= 95.0 and methods_match: - status_icon = "🟡" - status_text = "BUENO" - else: - status_icon = "🔴" - status_text = "REQUIERE ATENCIÓN" - - print(f"{status_icon} Estado: {status_text}") - print(f"📖 Precisión Legacy: {legacy_acc:.1f}%") - print(f"🚀 Precisión Optimizado: {optimized_acc:.1f}%") - print(f"🔄 Métodos Coinciden: {'✅ SÍ' if methods_match else '❌ NO'}") - print(f"📊 Total WORDs Verificadas: {len(self.reference_values)}") - - if legacy_acc == 100.0 and optimized_acc == 100.0 and methods_match: - print(f"\n🎉 ¡VERIFICACIÓN PERFECTA!") - print(f"✅ Todos los valores DB1001 son exactamente correctos") - print(f"✅ Ambos métodos producen resultados idénticos") - - print(f"\n" + "=" * 50) - - -def main(): - """Función principal.""" - print("🔍 DB1001 SPECIFIC VALUE VERIFICATION TEST") - print("🚀 Iniciando verificación de valores específicos...") - - verifier = DB1001ValueVerifier() - success = verifier.run_verification() - - if success: - print("🎉 ¡Verificación DB1001 exitosa!") - print("✅ Valores exactos confirmados en ambos métodos") - else: - print("⚠️ Verificación completada con observaciones") - print("📝 Revisar reporte para detalles específicos") - - return success - - -if __name__ == "__main__": - main()