Browse Source

Worker: Pidfile, logfile and statedb arguments now supports %n/%h formats

Ask Solem 11 years ago
parent
commit
cd5f80dfe1
4 changed files with 24 additions and 12 deletions
  1. 11 2
      celery/bin/base.py
  2. 8 4
      celery/bin/worker.py
  3. 4 0
      celery/utils/__init__.py
  4. 1 6
      celery/worker/__init__.py

+ 11 - 2
celery/bin/base.py

@@ -85,6 +85,7 @@ from celery.five import items, string, string_t
 from celery.platforms import EX_FAILURE, EX_OK, EX_USAGE
 from celery.utils import term
 from celery.utils import text
+from celery.utils import NODENAME_DEFAULT, nodesplit
 from celery.utils.imports import symbol_by_name, import_from_cwd
 
 # always enable DeprecationWarnings, so our users can see them.
@@ -522,9 +523,17 @@ class Command(object):
         """
         pass
 
-    def simple_format(self, s, match=find_sformat, expand=r'\1', **keys):
+    def node_format(self, s, nodename, **extra):
+        name, host = nodesplit(nodename)
+        return self._simple_format(
+            s, host, n=name or NODENAME_DEFAULT, **extra)
+
+    def simple_format(self, s, **extra):
+        return self._simple_format(s, socket.gethostname(), **extra)
+
+    def _simple_format(self, s, host,
+                       match=find_sformat, expand=r'\1', **keys):
         if s:
-            host = socket.gethostname()
             name, _, domain = host.partition('.')
             keys = dict({'%': '%', 'h': host, 'n': name, 'd': domain}, **keys)
             return match.sub(lambda m: keys[m.expand(expand)], s)

+ 8 - 4
celery/bin/worker.py

@@ -139,6 +139,7 @@ from celery.bin.base import Command, Option, daemon_options
 from celery.bin.celeryd_detach import detached_celeryd
 from celery.five import string_t
 from celery.platforms import maybe_drop_privileges
+from celery.utils import default_nodename
 from celery.utils.log import LOG_LEVELS, mlevel
 
 __all__ = ['worker', 'main']
@@ -180,8 +181,8 @@ class worker(Command):
             detached_celeryd(self.app).execute_from_commandline(argv)
             raise SystemExit(0)
 
-    def run(self, hostname=None, pool_cls=None, loglevel=None,
-            app=None, uid=None, gid=None, **kwargs):
+    def run(self, hostname=None, pool_cls=None, app=None, uid=None, gid=None,
+            loglevel=None, logfile=None, pidfile=None, state_db=None, **kwargs):
         maybe_drop_privileges(uid=uid, gid=gid)
         # Pools like eventlet/gevent needs to patch libs as early
         # as possible.
@@ -190,7 +191,7 @@ class worker(Command):
         if self.app.IS_WINDOWS and kwargs.get('beat'):
             self.die('-B option does not work on Windows.  '
                      'Please run celery beat as a separate service.')
-        hostname = self.simple_format(hostname)
+        hostname = self.simple_format(default_nodename(hostname))
         if loglevel:
             try:
                 loglevel = mlevel(loglevel)
@@ -200,7 +201,10 @@ class worker(Command):
                         l for l in LOG_LEVELS if isinstance(l, string_t))))
 
         return self.app.Worker(
-            hostname=hostname, pool_cls=pool_cls, loglevel=loglevel, **kwargs
+            hostname=hostname, pool_cls=pool_cls, loglevel=loglevel,
+            logfile=self.node_format(logfile, hostname),
+            pidfile=self.node_format(pidfile, hostname),
+            state_db=self.node_format(state_db, hostname), **kwargs
         ).start()
 
     def with_pool_option(self, argv):

+ 4 - 0
celery/utils/__init__.py

@@ -335,6 +335,10 @@ def nodesplit(nodename):
     return parts
 
 
+def default_nodename(hostname):
+    name, host = nodesplit(hostname or '')
+    return nodename(name or 'celery', host or socket.gethostname())
+
 # ------------------------------------------------------------------------ #
 # > XXX Compat
 from .log import LOG_LEVELS     # noqa

+ 1 - 6
celery/worker/__init__.py

@@ -33,7 +33,7 @@ from celery.exceptions import (
     ImproperlyConfigured, SystemTerminate, TaskRevokedError,
 )
 from celery.five import string_t, values
-from celery.utils import nodename, nodesplit, worker_direct
+from celery.utils import default_nodename, worker_direct
 from celery.utils.imports import reload_from_cwd
 from celery.utils.log import mlevel, worker_logger as logger
 from celery.utils.threads import default_socket_timeout
@@ -65,11 +65,6 @@ def str_to_list(s):
     return s
 
 
-def default_nodename(hostname):
-    name, host = nodesplit(hostname or '')
-    return nodename(name or 'celery', host or socket.gethostname())
-
-
 class WorkController(object):
     """Unmanaged worker instance."""
     app = None