浏览代码

[Worker] Fixes stats command if worker not fully started. Closes #1659

Ask Solem 11 年之前
父节点
当前提交
c8f6d1902d
共有 3 个文件被更改,包括 13 次插入9 次删除
  1. 1 1
      celery/worker/components.py
  2. 6 5
      celery/worker/consumer.py
  3. 6 3
      celery/worker/control.py

+ 1 - 1
celery/worker/components.py

@@ -179,7 +179,7 @@ class Pool(bootsteps.StartStopStep):
         return pool
 
     def info(self, w):
-        return {'pool': w.pool.info}
+        return {'pool': w.pool.info if w.pool else 'N/A'}
 
     def register_with_event_loop(self, w, hub):
         w.pool.register_with_event_loop(hub)

+ 6 - 5
celery/worker/consumer.py

@@ -474,10 +474,11 @@ class Connection(bootsteps.StartStopStep):
         if connection:
             ignore_errors(connection, connection.close)
 
-    def info(self, c):
-        info = c.connection.info()
-        info.pop('password', None)  # don't send password.
-        return {'broker': info}
+    def info(self, c, params='N/A'):
+        if c.connection:
+            params = c.connection.info()
+            params.pop('password', None)  # don't send password.
+        return {'broker': params}
 
 
 class Events(bootsteps.StartStopStep):
@@ -569,7 +570,7 @@ class Tasks(bootsteps.StartStopStep):
             c.task_consumer = None
 
     def info(self, c):
-        return {'prefetch_count': c.qos.value}
+        return {'prefetch_count': c.qos.value if c.qos else 'N/A'}
 
 
 class Agent(bootsteps.StartStopStep):

+ 6 - 3
celery/worker/control.py

@@ -355,8 +355,10 @@ def cancel_consumer(state, queue=None, **_):
 @Panel.register
 def active_queues(state):
     """Return information about the queues a worker consumes from."""
-    return [dict(queue.as_dict(recurse=True))
-            for queue in state.consumer.task_consumer.queues]
+    if state.consumer.task_consumer:
+        return [dict(queue.as_dict(recurse=True))
+                for queue in state.consumer.task_consumer.queues]
+    return []
 
 
 def _wanted_config_key(key):
@@ -372,4 +374,5 @@ def dump_conf(state, with_defaults=False, **kwargs):
 
 @Panel.register
 def election(state, id, topic, action=None, **kwargs):
-    state.consumer.gossip.election(id, topic, action)
+    if state.consumer.gossip:
+        state.consumer.gossip.election(id, topic, action)