diff --git a/logs/mesh_network_analyzer.py b/logs/mesh_network_analyzer.py index 1997130..73d8cd4 100644 --- a/logs/mesh_network_analyzer.py +++ b/logs/mesh_network_analyzer.py @@ -47,6 +47,12 @@ def parse_log_file(file_path): 'message_timestamps': [], 'firmware1_version': "N/A", 'firmware2_version': "N/A", + 'node1_uptime': "N/A", + 'node2_uptime': "N/A", + 'node1_name': "N/A", + 'node2_name': "N/A", + 'node1_ID': "N/A", + 'node2_ID': "N/A" } for line in lines: @@ -88,6 +94,7 @@ def parse_log_file(file_path): gps_match = re.search(r'location data for (\d+) is ([-\d.]+),([-\d.]+)', line) if gps_match: + node_id = None node_id, lat, lon = gps_match.groups() log_data['gps_coordinates'][node_id].append((float(lat), float(lon))) @@ -103,6 +110,34 @@ def parse_log_file(file_path): firmware2_version = firmware2_match.group(1) log_data['firmware2_version'] = firmware2_version + # get uptime for nodes + if 'Uptime:' in line: + node_id = None + uptime_match = re.search(r'Device:(\d+).*?(SNR:.*?)(?= To:)', line) + if uptime_match: + node_id = uptime_match.group(1) + snr_and_more = uptime_match.group(2) + if node_id == '1': + log_data['node1_uptime'] = snr_and_more + elif node_id == '2': + log_data['node2_uptime'] = snr_and_more + + # get name and nodeID for devices + if 'Autoresponder Started for Device' in line: + device_match = re.search(r'Autoresponder Started for Device(\d+)\s+([^\s,]+).*?NodeID: (\d+)', line) + if device_match: + device_id = device_match.group(1) + device_name = device_match.group(2) + node_id = device_match.group(3) + if device_id == '1': + log_data['node1_name'] = device_name + log_data['node1_ID'] = node_id + elif device_id == '2': + log_data['node2_name'] = device_name + log_data['node2_ID'] = node_id + + + log_data['unique_users'] = list(log_data['unique_users']) return log_data @@ -113,10 +148,15 @@ def get_system_info(): except subprocess.CalledProcessError: return "N/A" - # Capture some system information from log_data firmware1_version, firmware2_version + # Capture some system information from log_data firmware1_version = log_data['firmware1_version'] firmware2_version = log_data['firmware2_version'] - + node1_uptime = log_data['node1_uptime'] + node2_uptime = log_data['node2_uptime'] + node1_name = log_data['node1_name'] + node2_name = log_data['node2_name'] + node1_ID = log_data['node1_ID'] + node2_ID = log_data['node2_ID'] if platform.system() == "Linux": uptime = get_command_output("uptime -p") @@ -139,6 +179,12 @@ def get_system_info(): 'disk_free': "N/A", 'interface1_version': "N/A", 'interface2_version': "N/A", + 'node1_uptime': "N/A", + 'node2_uptime': "N/A", + 'node1_name': "N/A", + 'node2_name': "N/A", + 'node1_ID': "N/A", + 'node2_ID': "N/A" } return { @@ -149,6 +195,12 @@ def get_system_info(): 'disk_free': disk_free, 'interface1_version': firmware1_version, 'interface2_version': firmware2_version, + 'node1_uptime': node1_uptime, + 'node2_uptime': node2_uptime, + 'node1_name': node1_name, + 'node2_name': node2_name, + 'node1_ID': node1_ID, + 'node2_ID': node2_ID } def generate_main_html(log_data, system_info): @@ -551,11 +603,12 @@ def generate_sys_hosts_html(system_info): Meshtastic CLI/APIValue CLI Version${cli_version} Latest Version${latest_version} - Meshbot Node ID${node_id} - Meshbot Name${node_name} + Int1 Name ID${node1_name} (${node1_ID}) + Int1 Stat${node1_uptime} Int1 FW Version${interface1_version} + Int2 Name ID${node2_name} (${node2_ID}) + Int2 Stat${node2_uptime} Int2 FW Version${interface2_version} - Meshbot Up Time${node_uptime}