From d43e6174a24fc55f707abe6cac6a1c92011ae8b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9ophile=20Bastian?= Date: Tue, 31 Jul 2018 16:25:33 +0200 Subject: [PATCH] Add weechat session monitoring --- flask-monit/.gitignore | 1 + flask-monit/monitor.py | 40 ++++++++++++++++++++++++++++++++++++ flask-monit/requirements.txt | 6 ++++++ flask-monit/settings.py | 4 ++++ flask-monit/wsgi.py | 5 +++++ 5 files changed, 56 insertions(+) create mode 100644 flask-monit/.gitignore create mode 100644 flask-monit/monitor.py create mode 100644 flask-monit/requirements.txt create mode 100644 flask-monit/settings.py create mode 100644 flask-monit/wsgi.py diff --git a/flask-monit/.gitignore b/flask-monit/.gitignore new file mode 100644 index 0000000..5ceb386 --- /dev/null +++ b/flask-monit/.gitignore @@ -0,0 +1 @@ +venv diff --git a/flask-monit/monitor.py b/flask-monit/monitor.py new file mode 100644 index 0000000..c936aa6 --- /dev/null +++ b/flask-monit/monitor.py @@ -0,0 +1,40 @@ +""" monitor + +Monitor weechat sessions running and their relay availability """ + +import re +import subprocess +from flask import Flask, request +import settings + +LOGGER_NAME = __name__ + +app = Flask(__name__) + + +@app.route('/', methods=['GET']) +def home_view(): + # We check whether weechat is running + url_regex = re.compile( + r'(?:https?://)?([^/:]*){}(?::[0-9]+)?/?'.format( + settings.URL_SUFFIX)) + find_res = url_regex.match(request.base_url) + if find_res is None: + return 'Badly formed url\n', 400 + user = find_res.group(1) + + try: + output = subprocess.check_output( + ['ps', '-u', user, '--format=cmd']).decode('utf-8') + lines = output.strip().split('\n')[1:] + for line in lines: + if line.strip() == settings.PS_COMMAND: + return 'OK\n', 200 + except subprocess.CalledProcessError as exn: + return 'Internal error: {}\n'.format(exn), 500 + return 'Weechat not running\n', 406 + + +@app.before_first_request # FIXME this should be run on startup... +def startup_actions(): + pass # Nothing needed for now diff --git a/flask-monit/requirements.txt b/flask-monit/requirements.txt new file mode 100644 index 0000000..34ffbb7 --- /dev/null +++ b/flask-monit/requirements.txt @@ -0,0 +1,6 @@ +click==6.7 +Flask==1.0.2 +itsdangerous==0.24 +Jinja2==2.10 +MarkupSafe==1.0 +Werkzeug==0.14.1 diff --git a/flask-monit/settings.py b/flask-monit/settings.py new file mode 100644 index 0000000..26bceb7 --- /dev/null +++ b/flask-monit/settings.py @@ -0,0 +1,4 @@ +""" General-purpose settings """ + +PS_COMMAND = "weechat" +URL_SUFFIX = ".weechat.tobast.fr" diff --git a/flask-monit/wsgi.py b/flask-monit/wsgi.py new file mode 100644 index 0000000..71ab253 --- /dev/null +++ b/flask-monit/wsgi.py @@ -0,0 +1,5 @@ +import sys +import os +sys.path.append(os.path.dirname(os.path.abspath(__file__))) + +from monitor import app as application