Explorar o código

Merge branch '3.0' of github.com:celery/celery into 3.0

Ask Solem %!s(int64=12) %!d(string=hai) anos
pai
achega
08576ac1d3
Modificáronse 3 ficheiros con 44 adicións e 1 borrados
  1. 2 0
      celery/app/control.py
  2. 31 0
      celery/utils/__init__.py
  3. 11 1
      celery/worker/control.py

+ 2 - 0
celery/app/control.py

@@ -83,6 +83,8 @@ class Inspect(object):
     def active_queues(self):
         return self._request('active_queues')
 
+    def conf(self):
+        return self._request('dump_conf')
 
 class Control(object):
     Mailbox = Mailbox

+ 31 - 0
celery/utils/__init__.py

@@ -14,6 +14,8 @@ import os
 import sys
 import traceback
 import warnings
+import types
+import datetime
 
 from functools import partial, wraps
 from inspect import getargspec
@@ -199,6 +201,35 @@ def strtobool(term, table={'false': False, 'no': False, '0': False,
     return term
 
 
+def jsonify(obj):
+    "Transforms object making it suitable for json serialization"
+    if isinstance(obj, (int, float, basestring, types.NoneType)):
+        return obj
+    elif isinstance(obj, (tuple, list)):
+        return map(jsonify, obj)
+    elif isinstance(obj, dict):
+        return dict([(k,jsonify(v)) for k,v in obj.iteritems()])
+    # See "Date Time String Format" in the ECMA-262 specification.
+    elif isinstance(obj, datetime.datetime):
+        r = obj.isoformat()
+        if obj.microsecond:
+            r = r[:23] + r[26:]
+        if r.endswith('+00:00'):
+            r = r[:-6] + 'Z'
+        return r
+    elif isinstance(obj, datetime.date):
+        return obj.isoformat()
+    elif isinstance(obj, datetime.time):
+        r = obj.isoformat()
+        if obj.microsecond:
+            r = r[:12]
+        return r
+    elif isinstance(obj, datetime.timedelta):
+        return str(obj)
+    else:
+        raise ValueError("Unsupported type: %s" % type(obj))
+
+
 def gen_task_name(app, name, module_name):
     try:
         module = sys.modules[module_name]

+ 11 - 1
celery/worker/control.py

@@ -8,7 +8,10 @@
 """
 from __future__ import absolute_import
 
+import os
+
 from datetime import datetime
+from future_builtins import map
 
 from kombu.utils.encoding import safe_repr
 
@@ -16,6 +19,7 @@ from celery.platforms import signals as _signals
 from celery.utils import timeutils
 from celery.utils.compat import UserDict
 from celery.utils.log import get_logger
+from celery.utils import jsonify
 
 from . import state
 from .state import revoked
@@ -192,7 +196,8 @@ def stats(panel, **kwargs):
     return {'total': state.total_count,
             'consumer': panel.consumer.info,
             'pool': panel.consumer.pool.info,
-            'autoscaler': asinfo}
+            'autoscaler': asinfo,
+            'pid': os.getpid()}
 
 
 @Panel.register
@@ -287,3 +292,8 @@ def active_queues(panel):
     """Returns the queues associated with each worker."""
     return [dict(queue.as_dict(recurse=True))
             for queue in panel.consumer.task_consumer.queues]
+
+
+@Panel.register
+def dump_conf(panel, **kwargs):
+    return jsonify(dict(panel.app.conf))