Skip to content
Snippets Groups Projects
Commit 8cecbb95 authored by John Chilton's avatar John Chilton
Browse files

Improvements to pulsar/daemon.py.

Based on lessons learned doing the same thing with Galaxy.

 - Polish by providing more command-line options.
 - Don't require daemonize by default - just run it as a normal process.
 - Better handling of app_loop.
parent d6d36a87
No related branches found
No related tags found
No related merge requests found
""" daemon.py no longer makes sense as a filename for this file at all.
It really should be main.py to reflect what it is doing and sync with
Galaxy.
"""
import logging import logging
from logging.config import fileConfig from logging.config import fileConfig
...@@ -88,7 +92,7 @@ def load_pulsar_app( ...@@ -88,7 +92,7 @@ def load_pulsar_app(
return pulsar_app return pulsar_app
def app_loop(args): def app_loop(args, log):
try: try:
config_builder = PulsarConfigBuilder(args) config_builder = PulsarConfigBuilder(args)
pulsar_app = load_pulsar_app( pulsar_app = load_pulsar_app(
...@@ -99,12 +103,17 @@ def app_loop(args): ...@@ -99,12 +103,17 @@ def app_loop(args):
except BaseException: except BaseException:
log.exception("Failed to initialize Pulsar application") log.exception("Failed to initialize Pulsar application")
raise raise
try: sleep = True
# Hmmmm... not sure what to do in here this was example though... while sleep:
while True: try:
time.sleep(5) time.sleep(5)
except Exception: except KeyboardInterrupt:
pass sleep = False
except SystemExit:
sleep = False
except Exception:
pass
try: try:
pulsar_app.shutdown() pulsar_app.shutdown()
except Exception: except Exception:
...@@ -187,6 +196,10 @@ class PulsarConfigBuilder(object): ...@@ -187,6 +196,10 @@ class PulsarConfigBuilder(object):
arg_parser.add_argument("--ini_path", default=None) arg_parser.add_argument("--ini_path", default=None)
arg_parser.add_argument("--app_conf_path", default=None) arg_parser.add_argument("--app_conf_path", default=None)
arg_parser.add_argument("--app", default=DEFAULT_INI_APP) arg_parser.add_argument("--app", default=DEFAULT_INI_APP)
# daemon related options...
arg_parser.add_argument("-d", "--daemonize", default=False, help="Daemonzie process", action="store_true")
arg_parser.add_argument("--daemon-log-file", default=None, help="log file for daemon script ")
arg_parser.add_argument("--pid-file", default=DEFAULT_PID, help="pid file (default is %s)" % DEFAULT_PID)
def load(self): def load(self):
config = load_app_configuration( config = load_app_configuration(
...@@ -236,28 +249,41 @@ class PulsarManagerConfigBuilder(PulsarConfigBuilder): ...@@ -236,28 +249,41 @@ class PulsarManagerConfigBuilder(PulsarConfigBuilder):
def main(): def main():
if Daemonize is None:
raise ImportError(REQUIRES_DAEMONIZE_MESSAGE)
arg_parser = ArgumentParser(description=DESCRIPTION) arg_parser = ArgumentParser(description=DESCRIPTION)
PulsarConfigBuilder.populate_options(arg_parser) PulsarConfigBuilder.populate_options(arg_parser)
args = arg_parser.parse_args() args = arg_parser.parse_args()
pid_file = args.pid_file
log.setLevel(logging.DEBUG) log.setLevel(logging.DEBUG)
log.propagate = False log.propagate = False
fh = logging.FileHandler("daemon.log", "w")
fh.setLevel(logging.DEBUG) if args.daemonize:
log.addHandler(fh) if Daemonize is None:
keep_fds = [fh.stream.fileno()] raise ImportError(REQUIRES_DAEMONIZE_MESSAGE)
daemon = Daemonize( keep_fds = []
app="pulsar", if args.daemon_log_file:
pid=DEFAULT_PID, fh = logging.FileHandler(args.daemon_log_file, "w")
action=functools.partial(app_loop, args), fh.setLevel(logging.DEBUG)
verbose=DEFAULT_VERBOSE, log.addHandler(fh)
keep_fds=keep_fds, keep_fds.append(fh.stream.fileno())
) else:
daemon.start() fh = logging.StreamHandler(sys.stderr)
fh.setLevel(logging.DEBUG)
log.addHandler(fh)
daemon = Daemonize(
app="pulsar",
pid=pid_file,
action=functools.partial(app_loop, args, log),
verbose=DEFAULT_VERBOSE,
logger=log,
keep_fds=keep_fds,
)
daemon.start()
else:
app_loop(args, log)
if __name__ == "__main__": if __name__ == "__main__":
main() main()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment