backupmgr/backupmgr/logging_handlers.py

51 lines
1.4 KiB
Python

#!/usr/bin/env python3
import logging
import smtplib
import subprocess
from email.mime.text import MIMEText
SENDMAIL_PATH = "/usr/sbin/sendmail"
class EmailHandler(logging.Handler):
def __init__(self, toaddr, fromaddr):
super(EmailHandler, self).__init__()
self.toaddr = toaddr
self.fromaddr = fromaddr
self.body = ""
def emit(self, record):
self.acquire()
try:
self.body += "{}: {}: {}\n".format(record.name, record.levelname, record.getMessage())
finally:
self.release()
def finalize(self):
m = MIMEText(self.body)
m["Subject"] = "backupmgr: backup results"
m["From"] = self.fromaddr
m["To"] = self.toaddr
argv = [SENDMAIL_PATH, self.toaddr]
proc = subprocess.Popen(argv, stdin=subprocess.PIPE)
proc.stdin.write(m.as_string().encode('utf-8'))
proc.stdin.close()
class SwitchableStreamHandler(logging.StreamHandler):
def __init__(self, *args, **kwargs):
super(SwitchableStreamHandler, self).__init__(*args, **kwargs)
self.__enabled = True
def disable(self):
self.__enabled = False
def enable(self):
self.__enabled = True
def emit(self, record):
if self.__enabled or record.levelno >= logging.WARNING:
super(SwitchableStreamHandler, self).emit(record)