From 1bf4ead343fbeade2a8260cededd9960ab51617b Mon Sep 17 00:00:00 2001 From: Justus Grunow Date: Thu, 8 May 2025 21:49:23 -0400 Subject: [PATCH] Pretty output --- colors.py | 26 ++++++++++++++++++++++++++ monimon.py | 20 ++++++++++++++++---- plugins/httpcheck.py | 5 +++-- plugins/ping.py | 6 +++--- 4 files changed, 48 insertions(+), 9 deletions(-) create mode 100644 colors.py diff --git a/colors.py b/colors.py new file mode 100644 index 0000000..5437d29 --- /dev/null +++ b/colors.py @@ -0,0 +1,26 @@ +class Colors: + """ ANSI color codes """ + BLACK = "\033[0;30m" + RED = "\033[0;31m" + GREEN = "\033[0;32m" + BROWN = "\033[0;33m" + BLUE = "\033[0;34m" + PURPLE = "\033[0;35m" + CYAN = "\033[0;36m" + LIGHT_GRAY = "\033[0;37m" + DARK_GRAY = "\033[1;30m" + LIGHT_RED = "\033[1;31m" + LIGHT_GREEN = "\033[1;32m" + YELLOW = "\033[1;33m" + LIGHT_BLUE = "\033[1;34m" + LIGHT_PURPLE = "\033[1;35m" + LIGHT_CYAN = "\033[1;36m" + LIGHT_WHITE = "\033[1;37m" + BOLD = "\033[1m" + FAINT = "\033[2m" + ITALIC = "\033[3m" + UNDERLINE = "\033[4m" + BLINK = "\033[5m" + NEGATIVE = "\033[7m" + CROSSED = "\033[9m" + END = "\033[0m" diff --git a/monimon.py b/monimon.py index 730e125..c026191 100755 --- a/monimon.py +++ b/monimon.py @@ -3,14 +3,22 @@ import yaml import pprint import json import sys -sys.path.append('plugins/plugins') +sys.path.append('plugins') import pkgutil import importlib +from colors import Colors plugins = {} -for finder, name, ispkg in pkgutil.iter_modules(path=['plugins/plugins']): +for finder, name, ispkg in pkgutil.iter_modules(path=['plugins']): plugins[name] = importlib.import_module(name) row_format = "{:<30} {:<10} {:<6}" +def translate_status(status): + if status: + return f"{Colors.GREEN}Success{Colors.END}" + else: + return f"{Colors.RED}Failure{Colors.END}" + + with open('hosts.yaml', 'r') as file: hosts = yaml.safe_load(file) @@ -33,5 +41,9 @@ for host, details in hosts['hosts'].items(): #print(arguments) result = getattr(plugins[action_name], action_name)(arguments) #print(f"{host}\t{action_name}\t{result[0]}\t{result[1]}") - print(row_format.format(host, action_name, result[0])) - print(f"{result[1]}") + if type(result) is list: + print(row_format.format(f"{Colors.BOLD}{host}{Colors.END}", action_name, translate_status(result[0]))) + print(f"{Colors.YELLOW}{result[1]}{Colors.END}") + else: + print(row_format.format(host, action_name, translate_status(result))) + diff --git a/plugins/httpcheck.py b/plugins/httpcheck.py index acd4608..b1d55fa 100644 --- a/plugins/httpcheck.py +++ b/plugins/httpcheck.py @@ -1,8 +1,9 @@ import requests +# TODO: Check return status code def httpcheck(arguments): try: r = requests.head(f"{arguments['endpoint']}") - return ["Success", f"Status code: {r.status_code}"] + return [True, f"Status code: {r.status_code}"] except requests.ConnectionError: - return ["Failure", f"Status code: {r.status_code}"] + return [False, f"Status code: {r.status_code}"] diff --git a/plugins/ping.py b/plugins/ping.py index d5551b0..9119226 100644 --- a/plugins/ping.py +++ b/plugins/ping.py @@ -6,9 +6,9 @@ def ping(arguments): response = subprocess.run(["ping","-c","1",arguments['hostname']], stdout = subprocess.DEVNULL, stderr = subprocess.PIPE) if response.returncode == 0: - return ["Success", ""] + return True elif response.stderr: - return ["Success", response.stderr.decode("UTF-8")] + return [False, response.stderr.decode("UTF-8")] else: - return ["Failure", ""] + return False