feat: Add daemon mode and signal handling to main application
Introduced command line arguments for daemon mode and configuration file support. Enhanced the application with signal handling for reload, log rotation, and termination. Updated the main function for improved structure and robustness.
This commit is contained in:
@@ -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())
|
||||
|
||||
Reference in New Issue
Block a user