diff --git a/monimon.py b/monimon.py deleted file mode 100755 index c026191..0000000 --- a/monimon.py +++ /dev/null @@ -1,49 +0,0 @@ -#!/usr/bin/env python -import yaml -import pprint -import json -import sys -sys.path.append('plugins') -import pkgutil -import importlib -from colors import Colors -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) - -for host, details in hosts['hosts'].items(): - for action in details['actions']: - # Start building the arguments dict that will get passed to the plugin. - # By default, the only item is the hostname. - arguments = {'hostname': details['hostname']} - - # Check if the action has any parameters defined in the YAML file, by - # checking if it's a string or a dict - if type(action) is str: - action_name = action - # If it's a dict, add each parameter to the arguments dict - elif type(action) is dict: - action_name = list(action)[0] - for argument, value in action[action_name].items(): - arguments[argument] = value - - #print(arguments) - result = getattr(plugins[action_name], action_name)(arguments) - #print(f"{host}\t{action_name}\t{result[0]}\t{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/__init__.py b/monimon/__init__.py similarity index 100% rename from __init__.py rename to monimon/__init__.py diff --git a/monimon/app.py b/monimon/app.py new file mode 100755 index 0000000..1663893 --- /dev/null +++ b/monimon/app.py @@ -0,0 +1,81 @@ +#!/usr/bin/env python +import yaml +import pprint +import json +import sys +sys.path.append('monimon/plugins') +import pkgutil +import importlib +from monimon.colors import Colors +plugins = {} +for finder, name, ispkg in pkgutil.iter_modules(path=['monimon/plugins']): + plugins[name] = importlib.import_module(name) +row_format = "{:<30} {:<10} {:<6}" + +def format_status(status): + if status: + return f"{Colors.GREEN}Success{Colors.END}" + else: + return f"{Colors.RED}Failure{Colors.END}" + +def monitor(): + with open('monimon/hosts.yaml', 'r') as file: + hosts = yaml.safe_load(file) + + return_list = [] + for host, details in hosts['hosts'].items(): + for action in details['actions']: + # Start building the arguments dict that will get passed to the plugin. + # By default, the only item is the hostname. + arguments = {'hostname': details['hostname']} + + # Check if the action has any parameters defined in the YAML file, by + # checking if it's a string or a dict + if type(action) is str: + action_name = action + # If it's a dict, add each parameter to the arguments dict + elif type(action) is dict: + action_name = list(action)[0] + for argument, value in action[action_name].items(): + arguments[argument] = value + + #print(arguments) + result = getattr(plugins[action_name], action_name)(arguments) + #print(f"{host}\t{action_name}\t{result[0]}\t{result[1]}") + + return_dict = {'host': host, 'action_name': action_name} + if type(result) is list: + return_dict['result'] = result[0] + if len(result) > 1: + return_dict['details'] = result[1] + else: + return_dict['result'] = result + + return_list.append(return_dict) + return return_list + +if __name__ == 'app': + from flask import Flask + app = Flask(__name__) + + @app.route("/") + def print_monitor(): + return "Hello" + +elif __name__ == '__main__': + for result in monitor(): + print(row_format.format(f"{Colors.BOLD}{result['host']}{Colors.END}", + result['action_name'], + format_status(result['result']))) + if 'details' in result: + print(f"{Colors.YELLOW}{result['details']}{Colors.END}") + + + +#print(monitor()) +#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/colors.py b/monimon/colors.py similarity index 100% rename from colors.py rename to monimon/colors.py diff --git a/hosts.yaml b/monimon/hosts.yaml similarity index 100% rename from hosts.yaml rename to monimon/hosts.yaml diff --git a/plugin.py b/monimon/plugin.py similarity index 100% rename from plugin.py rename to monimon/plugin.py diff --git a/plugins/__init__.py b/monimon/plugins/__init__.py similarity index 100% rename from plugins/__init__.py rename to monimon/plugins/__init__.py diff --git a/plugins/certexp.py b/monimon/plugins/certexp.py similarity index 100% rename from plugins/certexp.py rename to monimon/plugins/certexp.py diff --git a/plugins/httpcheck.py b/monimon/plugins/httpcheck.py similarity index 100% rename from plugins/httpcheck.py rename to monimon/plugins/httpcheck.py diff --git a/plugins/ping.py b/monimon/plugins/ping.py similarity index 92% rename from plugins/ping.py rename to monimon/plugins/ping.py index 9119226..c04ea39 100644 --- a/plugins/ping.py +++ b/monimon/plugins/ping.py @@ -1,6 +1,6 @@ import os import subprocess -import plugin +import monimon.plugin as plugin x = plugin.Plugin() def ping(arguments): response = subprocess.run(["ping","-c","1",arguments['hostname']], diff --git a/plugins/ssl_expiration.py b/monimon/plugins/ssl_expiration.py similarity index 100% rename from plugins/ssl_expiration.py rename to monimon/plugins/ssl_expiration.py diff --git a/monimon/test.py b/monimon/test.py new file mode 100755 index 0000000..5ba5a10 --- /dev/null +++ b/monimon/test.py @@ -0,0 +1,16 @@ +#!/usr/bin/env python +import OpenSSL +import ssl +from datetime import datetime,timedelta +now = datetime.now() +cert = ssl.get_server_certificate(('secureassets.confederationcollege.ca', 443)) +x509 = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM, cert) +expiration_date = datetime.strptime(f"{x509.get_notAfter().decode("UTF-8")[0:-1]}UTC", "%Y%m%d%H%M%S%Z") +warning_date = expiration_date - timedelta(days = 30) +print(expiration_date) +print(warning_date) + +if (expiration_date - timedelta(days = 30)) > now: + print("WARNING") +else: + print("All good") diff --git a/requirements.txt b/requirements.txt index 8392d54..80a3edb 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1 +1,2 @@ PyYAML==6.0.2 +Flask==3.1.0