From 30f7f6eba0139d2b8ff77b4b04e698ebd84ee13a Mon Sep 17 00:00:00 2001 From: vvzvlad Date: Tue, 30 May 2023 18:07:49 +0700 Subject: [PATCH] update --- modbus_err_stats.py | 48 ++++++++++++++++++++++++++++----------------- 1 file changed, 30 insertions(+), 18 deletions(-) diff --git a/modbus_err_stats.py b/modbus_err_stats.py index 824d426..c80e336 100755 --- a/modbus_err_stats.py +++ b/modbus_err_stats.py @@ -12,46 +12,58 @@ def parse_config_file(filename): config_data = json.load(file) device_to_port = {} - device_errors = {} + device_stats = {} for port in config_data["ports"]: for device in port["devices"]: device_to_port[device["slave_id"]] = port["path"] - device_errors[device["slave_id"]] = 0 # Initialize error count as zero + device_stats[device["slave_id"]] = {"type": device.get("device_type", "Unknown type"), "errors": 0, "disconnects": 0, "write_failures": 0} # Initialize counts as zero - return device_to_port, device_errors + return device_to_port, device_stats -def parse_journal(device_to_port, device_errors): +def parse_journal(device_to_port, device_stats): p = subprocess.Popen(["journalctl", "-f", "-u", "wb-mqtt-serial"], stdout=subprocess.PIPE) last_log_line = None for line in iter(p.stdout.readline, b''): line = line.decode('utf-8') # convert bytes to string - match = re.search(r'modbus:(\d+): Serial protocol error: request timed out', line) - if match: - device_number = match.group(1) - device_errors[device_number] += 1 + match_error = re.search(r'modbus:(\d+): Serial protocol error: request timed out', line) + match_disconnect = re.search(r'INFO: \[serial device\] device modbus:(\d+) is disconnected', line) + match_write_failure = re.search(r'WARNING: \[modbus\] failed to write: