From 3d638f1a975a76317c16111c73c20e653a9f9c5e Mon Sep 17 00:00:00 2001 From: Son NK <> Date: Sat, 15 Aug 2020 19:55:56 +0200 Subject: [PATCH] extract monitoring to its own file --- cron.py | 37 ------------------------------------- crontab.yml | 5 ----- monitoring.py | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 48 insertions(+), 42 deletions(-) create mode 100644 monitoring.py diff --git a/cron.py b/cron.py index ed181053..3aa4205b 100644 --- a/cron.py +++ b/cron.py @@ -1,5 +1,4 @@ import argparse -import os from dataclasses import dataclass from time import sleep @@ -13,7 +12,6 @@ from app.config import ( ADMIN_EMAIL, MACAPP_APPLE_API_SECRET, APPLE_API_SECRET, - HOST, ) from app.email_utils import ( send_email, @@ -34,7 +32,6 @@ from app.models import ( RefusedEmail, AppleSubscription, Mailbox, - Monitoring, ) from server import create_app @@ -315,36 +312,6 @@ def sanity_check(): LOG.d("Finish sanity check") -def monitoring(): - """Look at different metrics and alert appropriately""" - incoming_queue = nb_files("/var/spool/postfix/incoming") - active_queue = nb_files("/var/spool/postfix/active") - deferred_queue = nb_files("/var/spool/postfix/deferred") - LOG.d("postfix queue sizes %s %s %s", incoming_queue, active_queue, deferred_queue) - - Monitoring.create( - host=HOST, - incoming_queue=incoming_queue, - active_queue=active_queue, - deferred_queue=deferred_queue, - ) - db.session.commit() - - # alert when too many emails in incoming + active queue - # 20 is an arbitrary number here - if incoming_queue + active_queue > 20: - LOG.exception( - "Too many emails in incoming & active queue %s %s", - incoming_queue, - active_queue, - ) - - -def nb_files(directory) -> int: - """return the number of files in directory and its sub-directories""" - return sum(len(files) for _, _, files in os.walk(directory)) - - if __name__ == "__main__": LOG.d("Start running cronjob") parser = argparse.ArgumentParser() @@ -361,7 +328,6 @@ if __name__ == "__main__": "delete_refused_emails", "poll_apple_subscription", "sanity_check", - "monitoring", ], ) args = parser.parse_args() @@ -390,6 +356,3 @@ if __name__ == "__main__": elif args.job == "sanity_check": LOG.d("Check data consistency") sanity_check() - elif args.job == "monitoring": - LOG.d("Collect and monitor system heath") - monitoring() diff --git a/crontab.yml b/crontab.yml index dc55bf0e..c85d5db4 100644 --- a/crontab.yml +++ b/crontab.yml @@ -41,8 +41,3 @@ jobs: schedule: "0 2 * * *" captureStderr: true - - name: SimpleLogin System Monitoring - command: python /code/cron.py -j monitoring - shell: /bin/bash - schedule: "*/5 * * * *" - captureStderr: true diff --git a/monitoring.py b/monitoring.py new file mode 100644 index 00000000..a41a6cb6 --- /dev/null +++ b/monitoring.py @@ -0,0 +1,48 @@ +import os +from time import sleep + +from app.config import HOST +from app.extensions import db +from app.log import LOG +from app.models import Monitoring +from server import create_app + + +def get_stats(): + """Look at different metrics and alert appropriately""" + incoming_queue = nb_files("/var/spool/postfix/incoming") + active_queue = nb_files("/var/spool/postfix/active") + deferred_queue = nb_files("/var/spool/postfix/deferred") + LOG.d("postfix queue sizes %s %s %s", incoming_queue, active_queue, deferred_queue) + + Monitoring.create( + host=HOST, + incoming_queue=incoming_queue, + active_queue=active_queue, + deferred_queue=deferred_queue, + ) + db.session.commit() + + # alert when too many emails in incoming + active queue + # 20 is an arbitrary number here + if incoming_queue + active_queue > 20: + LOG.exception( + "Too many emails in incoming & active queue %s %s", + incoming_queue, + active_queue, + ) + + +def nb_files(directory) -> int: + """return the number of files in directory and its sub-directories""" + return sum(len(files) for _, _, files in os.walk(directory)) + + +if __name__ == "__main__": + while True: + app = create_app() + with app.app_context(): + get_stats() + + # 5 min + sleep(300)