From ca69ebaffbcf8cc5294bbb1fdf6157ea3b29720a Mon Sep 17 00:00:00 2001 From: Thomas Williams Date: Sat, 29 Jun 2024 12:55:24 +0100 Subject: [PATCH] Implemented SIGINT/SIGTERM recept --- config.py | 2 +- main.py | 22 ++++++++++++++++------ 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/config.py b/config.py index 0cb6476..3fc66e9 100644 --- a/config.py +++ b/config.py @@ -1,7 +1,7 @@ #!/usr/bin/python3 hostMonitoringPeriod = 5 -urlMonitoringPeriod = 10 +urlMonitoringPeriod = 30 urls = ["https://www.bootlesshacker.com"] urlTimeout = 10 maxWorkers = 4 diff --git a/main.py b/main.py index fbc5622..96e417b 100755 --- a/main.py +++ b/main.py @@ -29,10 +29,17 @@ import time import log import requests import threading +import signal from functools import partial from concurrent.futures import ThreadPoolExecutor, as_completed from bs4 import BeautifulSoup +stop_event = threading.Event() + +def signal_handler(sig, frame): + print('SIGINT/SIGTERM aknowledged. Stopping script gracefully, please wait...') + stop_event.set() + def loadUrl(url): headers = { 'User-Agent': 'Monutil monitor' } @@ -46,9 +53,9 @@ def prepareUrl(src, baseUrl): return baseUrl.rstrip("/") + "/" + src.lstrip("/") return src -def monitorHost(): +def monitorHost(stop_event): - while True: + while not stop_event.is_set(): load1, load5, load15 = psutil.getloadavg() # this takes time to warm up if not running script on *nix loadavg = round((load1/os.cpu_count()) * 100, 2) @@ -62,9 +69,9 @@ def monitorHost(): time.sleep(config.hostMonitoringPeriod) -def monitorUrls(): +def monitorUrls(stop_event): - while True: + while not stop_event.is_set(): for url in config.urls: @@ -100,9 +107,12 @@ def monitorUrls(): time.sleep(config.urlMonitoringPeriod) def main(): + + signal.signal(signal.SIGTERM, signal_handler) + signal.signal(signal.SIGINT, signal_handler) - hostMonitorThread = threading.Thread(target=monitorHost) - urlMonitorThread = threading.Thread(target=monitorUrls) + hostMonitorThread = threading.Thread(target=monitorHost, args=(stop_event,)) + urlMonitorThread = threading.Thread(target=monitorUrls, args=(stop_event,)) hostMonitorThread.start() urlMonitorThread.start()