diff --git a/src/revpi_middleware/main_application.py b/src/revpi_middleware/main_application.py index ea0cd99..8df7aae 100644 --- a/src/revpi_middleware/main_application.py +++ b/src/revpi_middleware/main_application.py @@ -4,27 +4,51 @@ """Main application of revpi-middleware daemon.""" from logging import getLogger +from .daemon import MiddlewareDaemon from . import proginit as pi log = getLogger(__name__) +# Configure command line arguments for the daemon +if pi.can_be_forked(): + # Show the parameter only on systems that support fork call + pi.parser.add_argument( + "-d", + "--daemon", + action="store_true", + dest="daemon", + help="run program as a daemon in background", + ) +pi.parser.add_argument( + "-c", + "--conffile", + dest="conffile", + default="/etc/{0}/{0}.conf".format(pi.programname), + help="application configuration file", +) + def main() -> int: - """ - This is the main entry point. + import signal - We do not pack this to a 'if __name__ == "__main__"' thing to be able to - call this function from different places. The __main__ module and entry - points in the setup.py will call this function and linke to have an int - as return value for the exit code. - """ - log.debug("Enter main() function") + # Parse command line arguments + pi.init_app() - log.warning(f"This is the empty '{pi.programname}' application so far") + root = MiddlewareDaemon() - log.debug("Leave main() function") + # Set signals + signal.signal(signal.SIGHUP, lambda n, f: root.reload_config()) + signal.signal(signal.SIGUSR1, lambda n, f: root.rotate_logfile()) + signal.signal(signal.SIGINT, lambda n, f: root.stop()) + signal.signal(signal.SIGTERM, lambda n, f: root.stop()) + + return_code = root.start() # Finally, call the cleanup function of proginit to flush all log buffers. pi.cleanup() - return 0 + return return_code + + +if __name__ == "__main__": + exit(main())