From 3a0567ef0cb2805c8e731056871cf6ff7e21dea0 Mon Sep 17 00:00:00 2001 From: Justus Grunow Date: Thu, 8 May 2025 13:01:51 -0400 Subject: [PATCH] Started implementing Plugin class, doesn't do anyhting yet --- __init__.py | 0 hosts.yaml | 5 ++++- monimon.py | 6 +++--- plugins/__init__.py | 0 plugins/plugin.py | 9 +++++++++ plugins/plugins/__init__.py | 0 plugins/plugins/cert_expiration.py | 23 +++++++++++++++++++++++ plugins/{ => plugins}/httpcheck.py | 0 plugins/{ => plugins}/ping.py | 2 ++ plugins/plugins/ssl_expiration.py | 22 ++++++++++++++++++++++ 10 files changed, 63 insertions(+), 4 deletions(-) create mode 100644 __init__.py create mode 100644 plugins/__init__.py create mode 100644 plugins/plugin.py create mode 100644 plugins/plugins/__init__.py create mode 100644 plugins/plugins/cert_expiration.py rename plugins/{ => plugins}/httpcheck.py (100%) rename plugins/{ => plugins}/ping.py (87%) create mode 100644 plugins/plugins/ssl_expiration.py diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/hosts.yaml b/hosts.yaml index 332678d..5b57b9b 100644 --- a/hosts.yaml +++ b/hosts.yaml @@ -6,15 +6,18 @@ hosts: - ping - httpcheck: endpoint: https://webassets.confederationcollege.ca + - cert_expiration: + endpoint: webassets.confederationcollege.ca secureassets: hostname: secureassets.confederationcollege.ca actions: - ping cognos-test: hostname: cc-cognotest-01.confederationc.on.ca - port: 9300 actions: - ping + - cert_expiration: + endpoint: cc-cognotest-01.confederationc.on.ca:9300 Solarwinds Service Desk: hostname: itsupport.confederationcollege.ca actions: diff --git a/monimon.py b/monimon.py index 46d6fc6..ccb6dea 100755 --- a/monimon.py +++ b/monimon.py @@ -3,11 +3,11 @@ import yaml import pprint import json import sys -sys.path.append('plugins') +sys.path.append('plugins/plugins') import pkgutil import importlib plugins = {} -for finder, name, ispkg in pkgutil.iter_modules(path=['plugins']): +for finder, name, ispkg in pkgutil.iter_modules(path=['plugins/plugins']): plugins[name] = importlib.import_module(name) row_format = "{:<30}{:<10}{:<6}{:<20}" @@ -31,7 +31,7 @@ for host, details in hosts['hosts'].items(): arguments[argument] = value - print(arguments) + #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], result[1])) diff --git a/plugins/__init__.py b/plugins/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/plugins/plugin.py b/plugins/plugin.py new file mode 100644 index 0000000..624ad86 --- /dev/null +++ b/plugins/plugin.py @@ -0,0 +1,9 @@ +from enum import Enum +class Plugin: + class Status(Enum): + SUCCESS = "Succ + i = 12345 + + def f(self): + return 'hello world' + diff --git a/plugins/plugins/__init__.py b/plugins/plugins/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/plugins/plugins/cert_expiration.py b/plugins/plugins/cert_expiration.py new file mode 100644 index 0000000..eef927d --- /dev/null +++ b/plugins/plugins/cert_expiration.py @@ -0,0 +1,23 @@ +import socket +import ssl + +def cert_expiration(args): + hostname = args['endpoint'].split(":")[0] + + try: + port = args['endpoint'].split(":")[1] + except IndexError: + port = 443 + + context = ssl.create_default_context() + + with context.wrap_socket(socket.socket(socket.AF_INET), + server_hostname = hostname) as conn: + conn.connect((hostname, int(port))) + + cert = conn.getpeercert() + + return [True, f"Expiration: {cert['notAfter']}"] + + + diff --git a/plugins/httpcheck.py b/plugins/plugins/httpcheck.py similarity index 100% rename from plugins/httpcheck.py rename to plugins/plugins/httpcheck.py diff --git a/plugins/ping.py b/plugins/plugins/ping.py similarity index 87% rename from plugins/ping.py rename to plugins/plugins/ping.py index 8a62456..3d4fd5e 100644 --- a/plugins/ping.py +++ b/plugins/plugins/ping.py @@ -1,7 +1,9 @@ import os import subprocess +from plugins import plugin def ping(arguments): + print(plugin.Plugin.i) response = subprocess.run(["ping","-c","1",arguments['hostname']], stdout = subprocess.DEVNULL, stderr = subprocess.PIPE) if response.returncode == 0: diff --git a/plugins/plugins/ssl_expiration.py b/plugins/plugins/ssl_expiration.py new file mode 100644 index 0000000..8d966ea --- /dev/null +++ b/plugins/plugins/ssl_expiration.py @@ -0,0 +1,22 @@ +import ssl +import socket + +def ssl_expiration(url): + context = ssl.create_default_context() + + #context = ssl.SSLContext(ssl.PROTOCOL_TLS) + + #context.check_hostname = False + #context.verify_mode = ssl.CERT_NONE + #context.options &= ~ssl.OP_NO_TLSv1 + #context.options &= ~ssl.OP_NO_SSLv3 + port = 443 if not "port" in details else details['port'] + with context.wrap_socket(socket.socket(socket.AF_INET), + server_hostname=details['hostname']) as conn: + conn.connect((details['hostname'], port)) + cert = conn.getpeercert() + print() + print(host) + print(cert['serialNumber']) + print(cert['subject'][4][0][1]) + print(cert['notAfter'])