From 0fa8b49212648d4a23f6b867977266adba125181 Mon Sep 17 00:00:00 2001 From: Anry Das Date: Mon, 17 Feb 2025 10:48:42 +0200 Subject: [PATCH 1/3] Tested YAML files processing. Updated .gitignore file. --- .gitignore | 7 +++---- config_file.py | 2 +- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index 8762eb7..a2a56f7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,8 @@ .idea .venv /data/ -/configs/config.json -/configs/config.yaml -/configs/metrics.json -/configs/metrics_win.json +/configs/config.* +/configs/metrics.* +/configs/metrics_win.* /__pycache__/ /metrics/__pycache__/ \ No newline at end of file diff --git a/config_file.py b/config_file.py index 0271383..718fb9b 100755 --- a/config_file.py +++ b/config_file.py @@ -35,7 +35,7 @@ def read_prop(filepath, sep='=', comment_char='#'): conf[key] = value return conf -def read_yaml(name): #ToDo: need to be tested! +def read_yaml(name): conf = {} with open(name, 'r') as f: y_conf = yaml.safe_load(f) -- 2.47.1 From 9de12e1b1030e68b70684ac2d315ef45bf44765d Mon Sep 17 00:00:00 2001 From: Anry Das Date: Tue, 18 Feb 2025 09:56:52 +0200 Subject: [PATCH 2/3] Corrected ICMP function --- metrics/MetricClasses.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/metrics/MetricClasses.py b/metrics/MetricClasses.py index b9ed3c7..818cf13 100755 --- a/metrics/MetricClasses.py +++ b/metrics/MetricClasses.py @@ -4,6 +4,7 @@ from abc import abstractmethod import time import platform import subprocess +from linecache import cache import requests import psutil @@ -113,8 +114,13 @@ def get_shell_value(command, args, callback=None): def is_ping(ip, count, callback=None): param = '-n' if platform.system().lower() == 'windows' else '-c' command = ['ping', param, str(count), ip] - output = subprocess.check_output(command) - result = 'unreachable' not in str(output) and 'could not find' not in str(output) and 'time out' not in str(output) + try: + output = subprocess.check_output(command) + result = ('unreachable'.upper() not in str(output).upper() and + 'could not find'.upper() not in str(output).upper() and + 'time out'.upper() not in str(output).upper()) + except: + result = False if callback is not None: callback(result) else: -- 2.47.1 From 030b8302c4b9f412e58f9dd0515d5f3b16f141d2 Mon Sep 17 00:00:00 2001 From: Anry Das Date: Tue, 18 Feb 2025 10:21:25 +0200 Subject: [PATCH 3/3] Removed unnecessary folder --- .../__pycache__/DataStructures.cpython-312.pyc | Bin 16903 -> 0 bytes .../__pycache__/MetricClasses.cpython-312.pyc | Bin 19459 -> 0 bytes metrics/__pycache__/__init__.cpython-312.pyc | Bin 164 -> 0 bytes 3 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 metrics/__pycache__/DataStructures.cpython-312.pyc delete mode 100644 metrics/__pycache__/MetricClasses.cpython-312.pyc delete mode 100644 metrics/__pycache__/__init__.cpython-312.pyc diff --git a/metrics/__pycache__/DataStructures.cpython-312.pyc b/metrics/__pycache__/DataStructures.cpython-312.pyc deleted file mode 100644 index 96440c81fc4920eb5b4edbd652a2bbd30d78d7d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16903 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 JF^yzY{{?_rzJCA! diff --git a/metrics/__pycache__/MetricClasses.cpython-312.pyc b/metrics/__pycache__/MetricClasses.cpython-312.pyc deleted file mode 100644 index 7269f498134f32591b4ac85f82ee46488d1f7530..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19459 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 lK3=b&@)w6qZhlH>PO4oIE6_|vAT9lDiZ(z -- 2.47.1