diff options
author | Rob Austein <sra@hactrn.net> | 2016-04-26 20:07:45 +0000 |
---|---|---|
committer | Rob Austein <sra@hactrn.net> | 2016-04-26 20:07:45 +0000 |
commit | 2e0f5147b3099b6b584ec302be7f0818aad969f0 (patch) | |
tree | 13f05cf4be5d024abe2358ce2da024b3c7e42ea7 | |
parent | 01697787912f143ab2b9a938e33c73c9a8a9ae0b (diff) |
Convert rpki-rtr to use common config/argparse/logging setup.
svn path=/branches/tk705/; revision=6391
-rw-r--r-- | ca/tests/rcynic.conf | 17 | ||||
-rw-r--r-- | rpki/config.py | 32 | ||||
-rwxr-xr-x | rpki/rtr/bgpdump.py | 6 | ||||
-rw-r--r-- | rpki/rtr/client.py | 2 | ||||
-rw-r--r-- | rpki/rtr/generator.py | 4 | ||||
-rw-r--r-- | rpki/rtr/main.py | 49 | ||||
-rw-r--r-- | rpki/rtr/server.py | 4 |
7 files changed, 44 insertions, 70 deletions
diff --git a/ca/tests/rcynic.conf b/ca/tests/rcynic.conf index ea31fe58..4d5fd619 100644 --- a/ca/tests/rcynic.conf +++ b/ca/tests/rcynic.conf @@ -3,12 +3,15 @@ # rcynic configuration for looking at yamltest results. [rcynic] -xml-summary = rcynic.xml +sql-engine = sqlite3 +sql-database = rcynic.db +xml-file = rcynic.xml +trust-anchor-locators = yamltest.dir +log-destination = stderr +log-level = debug jitter = 0 -use-links = yes -use-syslog = no -use-stderr = yes -log-level = log_debug -max-parallel-fetches = 32 +workers = 20 -trust-anchor-locator = yamltest.dir/root.tal +[rpki-rtr] +log-destination = stderr +log-level = debug diff --git a/rpki/config.py b/rpki/config.py index f1c43938..2f507f90 100644 --- a/rpki/config.py +++ b/rpki/config.py @@ -221,11 +221,11 @@ class parser(object): if self.has_option(option = name, section = section): default = self.get(option = name, section = section, default = default) - if "type" in kwargs: - default = kwargs["type"](default) + if "type" in kwargs: + default = kwargs["type"](default) - if "choices" in kwargs and default not in kwargs["choices"]: - raise ValueError + if "choices" in kwargs and default not in kwargs["choices"]: + raise ValueError kwargs["default"] = default @@ -310,7 +310,12 @@ class parser(object): the format that the logging setup code expects to see. """ - self.logging_defaults = argparse.Namespace() + self.logging_defaults = argparse.Namespace( + default_log_destination = None) + + if self.argparser is not None: + self.argparser.set_defaults( + default_log_destination = None) class non_negative_integer(int): def __init__(self, value): @@ -335,7 +340,6 @@ class parser(object): self._add_logging_argument( "--log-destination", - default = "stderr", choices = ("syslog", "stdout", "stderr", "file"), help = "logging mechanism to use") @@ -386,32 +390,34 @@ class parser(object): log_level = getattr(logging, args.log_level.upper()) - if args.log_destination == "stderr": + log_destination = args.log_destination or args.default_log_destination or "stderr" + + if log_destination == "stderr": log_handler = logging.StreamHandler( stream = sys.stderr) - elif args.log_destination == "stdout": + elif log_destination == "stdout": log_handler = logging.StreamHandler( stream = sys.stdout) - elif args.log_destination == "syslog": + elif log_destination == "syslog": log_handler = logging.handlers.SysLogHandler( address = ("/dev/log" if os.path.exists("/dev/log") else ("localhost", logging.handlers.SYSLOG_UDP_PORT)), facility = logging.handlers.SysLogHandler.facility_names[args.log_facility]) - elif args.log_destination == "file" and (args.log_size_limit == 0 and - args.log_time_limit == 0): + elif log_destination == "file" and (args.log_size_limit == 0 and + args.log_time_limit == 0): log_handler = logging.handlers.WatchedFileHandler( filename = args.log_filename) - elif args.log_destination == "file" and args.log_time_limit == 0: + elif log_destination == "file" and args.log_time_limit == 0: log_handler = logging.handlers.RotatingFileHandler( filename = args.log_filename, maxBytes = args.log_size_limit * 1024, backupCount = args.log_count) - elif args.log_destination == "file" and args.log_size_limit == 0: + elif log_destination == "file" and args.log_size_limit == 0: log_handler = logging.handlers.TimedRotatingFileHandler( filename = args.log_filename, interval = args.log_time_limit, diff --git a/rpki/rtr/bgpdump.py b/rpki/rtr/bgpdump.py index 3ed2376a..22ac0d83 100755 --- a/rpki/rtr/bgpdump.py +++ b/rpki/rtr/bgpdump.py @@ -319,15 +319,15 @@ def argparse_setup(subparsers): subparser = subparsers.add_parser("bgpdump-convert", description = bgpdump_convert_main.__doc__, help = "Convert bgpdump to fake ROAs") - subparser.set_defaults(func = bgpdump_convert_main, default_log_to = "syslog") + subparser.set_defaults(func = bgpdump_convert_main, default_log_destination = "syslog") subparser.add_argument("files", nargs = "+", help = "input files") subparser = subparsers.add_parser("bgpdump-select", description = bgpdump_select_main.__doc__, help = "Set current serial number for fake ROA data") - subparser.set_defaults(func = bgpdump_select_main, default_log_to = "syslog") + subparser.set_defaults(func = bgpdump_select_main, default_log_destination = "syslog") subparser.add_argument("ax_file", help = "name of the .ax to select") subparser = subparsers.add_parser("bgpdump-server", description = bgpdump_server_main.__doc__, help = "Replay fake ROAs generated from historical data") - subparser.set_defaults(func = bgpdump_server_main, default_log_to = "syslog") + subparser.set_defaults(func = bgpdump_server_main, default_log_destination = "syslog") subparser.add_argument("rpki_rtr_dir", nargs = "?", help = "directory containing RPKI-RTR database") diff --git a/rpki/rtr/client.py b/rpki/rtr/client.py index 9c7a00d6..a8348087 100644 --- a/rpki/rtr/client.py +++ b/rpki/rtr/client.py @@ -522,7 +522,7 @@ def argparse_setup(subparsers): subparser = subparsers.add_parser("client", description = client_main.__doc__, help = "Test client for RPKI-RTR protocol") - subparser.set_defaults(func = client_main, default_log_to = "stderr") + subparser.set_defaults(func = client_main, default_log_destination = "stderr") subparser.add_argument("--sql-database", help = "filename for sqlite3 database of client state") subparser.add_argument("--force-version", type = int, choices = PDU.version_map, help = "force specific protocol version") subparser.add_argument("--reset-session", action = "store_true", help = "reset any existing session found in sqlite3 database") diff --git a/rpki/rtr/generator.py b/rpki/rtr/generator.py index a52b5de4..4536de30 100644 --- a/rpki/rtr/generator.py +++ b/rpki/rtr/generator.py @@ -575,7 +575,7 @@ def argparse_setup(subparsers): subparser = subparsers.add_parser("cronjob", description = cronjob_main.__doc__, help = "Generate RPKI-RTR database from rcynic output") - subparser.set_defaults(func = cronjob_main, default_log_to = "syslog") + subparser.set_defaults(func = cronjob_main, default_log_destination = "syslog") subparser.add_argument("--scan-roas", help = "specify an external scan_roas program") subparser.add_argument("--scan-routercerts", help = "specify an external scan_routercerts program") subparser.add_argument("--force_zero_nonce", action = "store_true", help = "force nonce value of zero") @@ -584,5 +584,5 @@ def argparse_setup(subparsers): subparser = subparsers.add_parser("show", description = show_main.__doc__, help = "Display content of RPKI-RTR database") - subparser.set_defaults(func = show_main, default_log_to = "stderr") + subparser.set_defaults(func = show_main, default_log_destination = "stderr") subparser.add_argument("rpki_rtr_dir", nargs = "?", help = "directory containing RPKI-RTR database") diff --git a/rpki/rtr/main.py b/rpki/rtr/main.py index 34f5598d..b915f809 100644 --- a/rpki/rtr/main.py +++ b/rpki/rtr/main.py @@ -25,28 +25,9 @@ import os import sys import time import logging -import logging.handlers -import argparse +import rpki.config -class Formatter(logging.Formatter): - - converter = time.gmtime - - def __init__(self, debug, fmt, datefmt): - self.debug = debug - super(Formatter, self).__init__(fmt, datefmt) - - def format(self, record): - if getattr(record, "connection", None) is None: - record.connection = "" - return super(Formatter, self).format(record) - - def formatException(self, ei): - if self.debug: - return super(Formatter, self).formatException(ei) - else: - return str(ei[1]) def main(): @@ -63,32 +44,16 @@ def main(): def argparse_setup_bgpdump(ignored): pass - argparser = argparse.ArgumentParser(description = __doc__) - argparser.add_argument("--debug", action = "store_true", help = "debugging mode") - argparser.add_argument("--log-level", default = "debug", - choices = ("debug", "info", "warning", "error", "critical"), - type = lambda s: s.lower()) - argparser.add_argument("--log-to", - choices = ("syslog", "stderr")) - subparsers = argparser.add_subparsers(title = "Commands", metavar = "", dest = "mode") + cfg = rpki.config.argparser(section = "rpki-rtr", doc = __doc__) + cfg.argparser.add_argument("--debug", action = "store_true", help = "debugging mode") + cfg.add_logging_arguments() + subparsers = cfg.argparser.add_subparsers(title = "Commands", metavar = "", dest = "mode") argparse_setup_server(subparsers) argparse_setup_client(subparsers) argparse_setup_generator(subparsers) argparse_setup_bgpdump(subparsers) - args = argparser.parse_args() - - fmt = "rpki-rtr/" + args.mode + "%(connection)s[%(process)d] %(message)s" - - if (args.log_to or args.default_log_to) == "stderr": - handler = logging.StreamHandler() - fmt = "%(asctime)s " + fmt - elif os.path.exists("/dev/log"): - handler = logging.handlers.SysLogHandler("/dev/log") - else: - handler = logging.handlers.SysLogHandler() + args = cfg.argparser.parse_args() - handler.setFormatter(Formatter(args.debug, fmt, "%Y-%m-%dT%H:%M:%SZ")) - logging.root.addHandler(handler) - logging.root.setLevel(int(getattr(logging, args.log_level.upper()))) + cfg.configure_logging(args = args, ident = "rpki-rtr/" + args.mode) return args.func(args) diff --git a/rpki/rtr/server.py b/rpki/rtr/server.py index afaf0e9c..c08320fc 100644 --- a/rpki/rtr/server.py +++ b/rpki/rtr/server.py @@ -578,7 +578,7 @@ def argparse_setup(subparsers): subparser = subparsers.add_parser("server", description = server_main.__doc__, help = "RPKI-RTR protocol server") - subparser.set_defaults(func = server_main, default_log_to = "syslog") + subparser.set_defaults(func = server_main, default_log_destination = "syslog") subparser.add_argument("--refresh", type = refresh, help = "override default refresh timer") subparser.add_argument("--retry", type = retry, help = "override default retry timer") subparser.add_argument("--expire", type = expire, help = "override default expire timer") @@ -586,7 +586,7 @@ def argparse_setup(subparsers): subparser = subparsers.add_parser("listener", description = listener_main.__doc__, help = "TCP listener for RPKI-RTR protocol server") - subparser.set_defaults(func = listener_main, default_log_to = "syslog") + subparser.set_defaults(func = listener_main, default_log_destination = "syslog") subparser.add_argument("--refresh", type = refresh, help = "override default refresh timer") subparser.add_argument("--retry", type = retry, help = "override default retry timer") subparser.add_argument("--expire", type = expire, help = "override default expire timer") |