diff --git a/sendxmpp_handler.py b/sendxmpp_handler.py new file mode 100644 index 0000000..80245f4 --- /dev/null +++ b/sendxmpp_handler.py @@ -0,0 +1,51 @@ +#!/usr/bin/env python3 +# app/sendxmpp_handler.py + +from logging import Handler +from os import popen + + +class SENDXMPPHandler(Handler): + def __init__( + self, + logging_xmpp_server, + logging_xmpp_sender, + logging_xmpp_password, + logging_xmpp_recipient, + logging_xmpp_command, + logging_xmpp_use_tls + ): + Handler.__init__(self) + self.logging_xmpp_server = logging_xmpp_server + self.logging_xmpp_sender = logging_xmpp_sender + self.logging_xmpp_password = logging_xmpp_password + self.logging_xmpp_recipient = logging_xmpp_recipient + self.logging_xmpp_command = logging_xmpp_command + self.logging_xmpp_use_tls = logging_xmpp_use_tls + + ''' + This works on Debian 10 with flask running under gunicorn3 as a systemd service, hack as necessary + echo '' | /usr/bin/sendxmpp -t -u -j -p + ''' + def emit(self, record): + try: + message = self.format(record) + + shell_command = "echo '{}' | {} -u {} -j {} -p {} {}".format( + message, + self.logging_xmpp_command, + self.logging_xmpp_sender, + self.logging_xmpp_server, + self.logging_xmpp_password, + self.logging_xmpp_recipient + ) + if self.logging_xmpp_use_tls == '1': + shell_command += ' -t' + + p = popen(shell_command, "w") + status = p.close() + if status: + print("sendxmpp_handler exit status", status) + + except Exception: + self.handleError(record)