From 174a2bc955324a757d4a1fe62a222c586b3aac7c Mon Sep 17 00:00:00 2001 From: Eskil Olsen Date: Wed, 2 Jan 2013 13:54:52 -0800 Subject: [PATCH] Adds name and versions on the commandline. The name and version are used to display proctitles. If name is omitted, the module name is used to be backwards compatible. If version is omitted, the last part of basepath is used to be backwards compatible. --- ChangeLog | 5 ++++- setup.py | 2 +- zygote/main.py | 2 ++ zygote/master.py | 12 ++++++++++-- zygote/worker.py | 17 ++++++++++++----- 5 files changed, 29 insertions(+), 9 deletions(-) diff --git a/ChangeLog b/ChangeLog index fc07aa5..fdab7e5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,2 +1,5 @@ +0.2 Wed Jan 2 10:38:23 PST 2013 + * Add a --name/-n option to set proctitle name (eskil@eskil.org). + 0.1 Wed Nov 14 11:50:44 PST 2012 - * Starting a ChangeLog file (eskil@yelp.com) + * Starting a ChangeLog file (eskil@yelp.com) diff --git a/setup.py b/setup.py index 90d6f02..80fa09a 100755 --- a/setup.py +++ b/setup.py @@ -4,7 +4,7 @@ setup( name = 'zygote', - version = '0.1', + version = '0.2', author = 'Evan Klitzke', author_email = 'evan@eklitzke.org', description = 'A tornado HTTP worker management tool', diff --git a/zygote/main.py b/zygote/main.py index 991bf40..dca88a6 100755 --- a/zygote/main.py +++ b/zygote/main.py @@ -27,6 +27,8 @@ def main(): parser.add_option('-b', '--basepath', default=os.environ.get('BASEPATH', ''), help='The basepath to use') parser.add_option('--control-port', type='int', default=5100, help='The control port to listen on') parser.add_option('-d', '--debug', default=False, action='store_true', help='Enable debugging') + parser.add_option('-n', '--name', default=None, help='The name of the application to set in proctitle, otherwise use the app module.') + parser.add_option('--version', default=None, help='The version of the application to set in proctitle.') parser.add_option('-m', '--module', default=None, help='The name of the module holding get_application()') parser.add_option('-p', '--port', type='int', default=0, help='The port to bind on') parser.add_option('-i', '--interface', default='', help='The interface to bind on') diff --git a/zygote/master.py b/zygote/master.py index df79bd1..6736a54 100644 --- a/zygote/master.py +++ b/zygote/master.py @@ -50,6 +50,8 @@ def __init__( sock, basepath, module, + name, + version, num_workers, control_port, control_socket_path, @@ -68,6 +70,8 @@ def __init__( self.sock = sock self.basepath = basepath self.module = module + self.name = name + self.version = version self.num_workers = num_workers self.control_port = control_port self.control_socket_path = control_socket_path @@ -419,6 +423,8 @@ def create_zygote(self, canary=False): sock=self.sock, basepath=realbase, module=self.module, + name=self.name, + version=self.version, args=self.application_args, ssl_options=self.ssl_options, canary=canary, @@ -433,9 +439,9 @@ def start(self): self.io_loop.start() def main(opts, extra_args): - setproctitle('zygote master %s' % (opts.module,)) + setproctitle('zygote master %s' % (opts.name or opts.module,)) zygote_logger = get_logger('zygote', opts.debug) - + if not logging.root.handlers: # XXX: WARNING # @@ -486,6 +492,8 @@ def main(opts, extra_args): sock, basepath=opts.basepath, module=opts.module, + name=opts.name or opts.module, + version=opts.version, num_workers=opts.num_workers, control_port=opts.control_port, control_socket_path=opts.control_socket_path, diff --git a/zygote/worker.py b/zygote/worker.py index f47422f..ac4a1e6 100644 --- a/zygote/worker.py +++ b/zygote/worker.py @@ -70,7 +70,11 @@ class ZygoteWorker(object): # how many seconds to wait before sending SIGKILL to children WAIT_FOR_KILL_TIME = 10.0 - def __init__(self, sock, basepath, module, args, ssl_options=None, canary=False, debug=False): + def __init__(self, sock, basepath, module, name, version, args, ssl_options=None, canary=False, debug=False): + self.module = module + self.name = name + self.version = version + self.basepath = basepath self.args = args self.ssl_options = ssl_options self.ppid = os.getppid() @@ -91,16 +95,19 @@ def __init__(self, sock, basepath, module, args, ssl_options=None, canary=False, sys.exit(INIT_FAILURE_EXIT_CODE) try: - self._real_init(sock, basepath, module, args) + self._real_init(sock, self.basepath, self.module, args) except Exception: self.logger.exception("Error performing initialization of %s", self) sys.exit(INIT_FAILURE_EXIT_CODE) + def _version(self): + """Get the actual version as specified or from the basepath.""" + return self.version or self.basepath.split('/')[-1] + def _real_init(self, sock, basepath, module, args): """Actual initialization function. Broken out for error handling""" - self.version = basepath.split('/')[-1] - setproctitle('zygote version=%s' % (self.version,)) + setproctitle('zygote name=%s version=%s' % (self.name, self._version(),)) # Create a pipe(2) pair. This will be used so workers can detect when # the intermediate zygote exits -- when this happens, a read event will @@ -259,7 +266,7 @@ def on_close(disconnected=False): notify(sock, message.MessageHTTPEnd) notify(sock, message.MessageWorkerStart, '%d %d' % (int(time_created * 1e6), os.getppid())) - setproctitle('zygote-worker version=%s' % self.version) + setproctitle('zygote-worker name=%s version=%s' % (self.name, self._version(),)) try: # io_loop is passed into get_application for program to add handler # or schedule task on the main io_loop. Program that uses this