add quiet mode

This commit is contained in:
Conor Hughes 2014-03-18 19:07:31 -07:00
parent af4a09d959
commit 14bc9b8fef
3 changed files with 34 additions and 7 deletions

View File

@ -8,9 +8,7 @@ from . import configuration
from . import package_logger
from . import error
from . import backend_types
from . import email_handler
LOGGER_NAME = "backupmgr.application.main"
from . import logging_handlers
class Application(object):
@property
@ -20,9 +18,13 @@ class Application(object):
def configure_logging(self):
logging.basicConfig()
l = package_logger()
l.propagate=False
l.setLevel(logging.DEBUG)
self.handler = email_handler.EmailHandler("root", "root")
l.addHandler(self.handler)
self.email_handler = logging_handlers.EmailHandler("root", "root")
self.stderr_handler = logging_handlers.SwitchableStreamHandler()
self.stderr_handler.formatter = logging.Formatter('%(levelname)s: %(name)s: %(message)s')
l.addHandler(self.email_handler)
l.addHandler(self.stderr_handler)
def bootstrap(self):
self.configure_logging()
@ -30,7 +32,9 @@ class Application(object):
def load_config(self):
self.config = configuration.read_config()
self.handler.toaddr = self.config.notification_address
self.email_handler.toaddr = self.config.notification_address
if self.config.quiet:
self.stderr_handler.disable()
def prepare_backups(self):
backups = self.config.backups_due()
@ -41,7 +45,7 @@ class Application(object):
self.config.log_run(backups)
def finalize(self):
self.handler.finalize()
self.email_handler.finalize()
def run(self):
try:

View File

@ -10,6 +10,7 @@ import datetime
import collections
import itertools
import socket
import argparse
from . import package_logger
from . import error
@ -147,6 +148,11 @@ class Config(object):
return {}
def __init__(self):
parser = argparse.ArgumentParser()
parser.add_argument("-q", "--quiet", action="store_true")
ns = parser.parse_args()
self.quiet = ns.quiet
self.configfile = CONFIG_LOCATION
try:
with open(CONFIG_LOCATION) as f:
@ -221,6 +227,7 @@ class Config(object):
if count > 1:
raise InvalidConfigError("Duplicate backup \"{}\"".format(name))
def log_run(self, backups):
for backup in backups:
self.state[backup.name] = time.time()

View File

@ -32,3 +32,19 @@ class EmailHandler(logging.Handler):
proc.stdin.write(m.as_string())
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)