diff --git a/openxcap b/openxcap index 0e66e95..e5b8736 100755 --- a/openxcap +++ b/openxcap @@ -1,83 +1,76 @@ -#!/usr/bin/python2 +#!/usr/bin/env python3 -if __name__ == '__main__': - import sys - import xcap - from application import log - from application.process import process, ProcessError - from argparse import ArgumentParser +import os +import sys +from argparse import ArgumentParser - name = 'openxcap' - fullname = 'OpenXCAP' - description = 'An open source XCAP Server' +from application import log +from application.process import ProcessError, process + +from xcap import __fullname__, __project__, __version__ + +if __name__ == "__main__": + name = __project__ + fullname = __fullname__ process.configuration.user_directory = None process.configuration.subdirectory = 'openxcap' parser = ArgumentParser(usage='%(prog)s [options]') - parser.add_argument('--version', action='version', version='%(prog)s {}'.format(xcap.__version__)) + parser.add_argument('--version', action='version', version='%(prog)s {}'.format(__version__)) parser.add_argument('--systemd', action='store_true', help='run as a systemd simple service and log to journal') parser.add_argument('--no-fork', action='store_false', dest='fork', help='run in the foreground and log to the terminal') parser.add_argument('--config-dir', dest='config_directory', default=None, help='the configuration directory ({})'.format(process.configuration.system_directory), metavar='PATH') parser.add_argument('--runtime-dir', dest='runtime_directory', default=None, help='the runtime directory ({})'.format(process.runtime.directory), metavar='PATH') parser.add_argument('--debug', action='store_true', help='enable verbose logging') - parser.add_argument('--debug-memory', action='store_true', help='enable memory debugging') options = parser.parse_args() - try: - from xcap.logutil import web_logger - except Exception as e: - log.critical('Cannot start %s: %s' % (fullname, e)) - if not isinstance(e, (RuntimeError, OSError, IOError)): - log.exception() - sys.exit(1) - - if web_logger.filename is None: # access log is reported along with the rest of the applications's logging - log.Formatter.prefix_format = '{record.levelname:<8s} [{record.name}] ' + if not options.debug == "production": + os.environ["ENV"] = "production" else: - log.Formatter.prefix_format = '{record.levelname:<8s} ' + os.environ["ENV"] = "development" if options.config_directory is not None: process.configuration.local_directory = options.config_directory + if options.runtime_directory is not None: process.runtime.directory = options.runtime_directory + root_logger = log.get_logger() + root_logger.name = __project__ + log.Formatter.prefix_format = '{record.levelname:<8s} ' + if options.systemd: from systemd.journal import JournalHandler log.set_handler(JournalHandler(SYSLOG_IDENTIFIER=name)) log.capture_output() elif options.fork: try: process.daemonize(pidfile='{}.pid'.format(name)) except ProcessError as e: log.critical('Cannot start %s: %s' % (fullname, e)) sys.exit(1) - log.use_syslog(name) - - log.info('Starting %s %s' % (fullname, xcap.__version__)) + log.use_syslog(name) + log.info('Starting %s %s' % (fullname, __version__)) try: process.wait_for_network(wait_time=10, wait_message='Waiting for network to become available...') except KeyboardInterrupt: sys.exit(0) except RuntimeError as e: log.critical('Cannot start %s: %s' % (fullname, e)) sys.exit(1) try: - from xcap.server import XCAPServer if options.debug: log.level.current = log.level.DEBUG - if options.debug_memory: - from application.debug.memory import memory_dump + + from xcap.server import XCAPServer server = XCAPServer() - server.start() + server.run(debug=options.debug) except Exception as e: log.critical('Failed to create %s: %s' % (fullname, e)) if type(e) is not RuntimeError: log.exception() sys.exit(1) - - if options.debug_memory: - memory_dump()