فهرست منبع

- "startAllProcesses" work.

Chris McDonough 19 سال پیش
والد
کامیت
343261ab97
4فایلهای تغییر یافته به همراه31 افزوده شده و 18 حذف شده
  1. 10 5
      rpc.py
  2. 2 1
      src/supervisor/http_client.py
  3. 6 2
      src/supervisor/supervisorctl.py
  4. 13 10
      src/supervisor/tests.py

+ 10 - 5
rpc.py

@@ -350,7 +350,7 @@ class SupervisorNamespaceRPCInterface:
 
         def startall(done=False): # done arg is for unit testing
             if not callbacks:
-                return True
+                return results
 
             name, callback = callbacks.pop(0)
             try:
@@ -396,7 +396,7 @@ class SupervisorNamespaceRPCInterface:
             raise RPCError(Faults.BAD_NAME, name)
 
         if process.get_state() != ProcessStates.RUNNING:
-            raise RPCEror(Faults.NOT_RUNNING)
+            raise RPCError(Faults.NOT_RUNNING)
 
         def killit():
             if process.killing:
@@ -429,12 +429,17 @@ class SupervisorNamespaceRPCInterface:
         for process in processes:
             if process.get_state() == ProcessStates.RUNNING:
                 # only stop running processes
-                callbacks.append((process.config.name,
-                                  self.stopProcess(process.config.name)))
+                try:
+                    callbacks.append((process.config.name,
+                                      self.stopProcess(process.config.name)))
+                except RPCError, e:
+                    results.append({'name':name, 'status':e.code,
+                                    'description':e.text})
+                    continue
 
         def killall():
             if not callbacks:
-                return True
+                return results
 
             name, callback = callbacks.pop(0)
             try:

+ 2 - 1
src/supervisor/http_client.py

@@ -26,7 +26,8 @@ class Listener(object):
         pass
 
     def feed(self, url, data):
-        print data
+        sys.stdout.write(data)
+        sys.stdout.flush()
 
     def close(self, url):
         pass

+ 6 - 2
src/supervisor/supervisorctl.py

@@ -271,15 +271,18 @@ class Controller(cmd.Cmd):
                      "processes.")
 
     def _startresult(self, code, processname, default=None):
-        template = 'Cannot start %s (%s)'
+        template = '%s: ERROR (%s)'
         if code == rpc.Faults.BAD_NAME:
             return template % (processname,'no such process')
         elif code == rpc.Faults.ALREADY_STARTED:
             return template % (processname,'already started')
         elif code == rpc.Faults.SPAWN_ERROR:
             return template % (processname, 'spawn error')
+        elif code == rpc.Faults.ABNORMAL_TERMINATION:
+            return template % (processname, 'abornal termination')
         elif code == rpc.Faults.SUCCESS:
             return '%s: OK' % processname
+        
         return default
 
     def do_start(self, arg):
@@ -333,7 +336,7 @@ class Controller(cmd.Cmd):
         self._output("  priority order (see config file)")
 
     def _stopresult(self, code, processname, default=None):
-        template = 'Cannot stop %s (%s)'
+        template = '%s: ERROR (%s)'
         if code == rpc.Faults.BAD_NAME:
             return template % (processname, 'no such process')
         elif code == rpc.Faults.NOT_RUNNING:
@@ -405,6 +408,7 @@ class Controller(cmd.Cmd):
             return
 
         self.do_stop(arg)
+        self._output('')
         self.do_start(arg)
 
     def help_restart(self):

+ 13 - 10
src/supervisor/tests.py

@@ -498,11 +498,14 @@ class SupervisorNamespaceXMLRPCInterfaceTests(TestBase):
         value = http.NOT_DONE_YET
         while 1:
             value = callback()
-            if value is True:
+            if value is not http.NOT_DONE_YET:
                 break
 
         processes = supervisord.processes
-        self.assertEqual(value, True)
+        self.assertEqual(value, [
+            {'status': 80, 'name': 'foo2', 'description': 'OK'},
+            {'status': 80, 'name': 'foo', 'description': 'OK'}
+            ] )
         self.assertEqual(len(processes), 2)
         self.assertEqual(process.stop_called, True)
         self.assertEqual(process2.stop_called, True)
@@ -814,7 +817,7 @@ class SystemNamespaceXMLRPCInterfaceTests(TestBase):
         result = http.NOT_DONE_YET
         while result is http.NOT_DONE_YET:
             result = callback()
-        self.assertEqual(result[0], True)
+        self.assertEqual(result[0], [])
 
     def test_methodHelp(self):
         interface = self._makeOne()
@@ -1312,7 +1315,7 @@ baz            STOPPED    Jun 26 11:42 PM (OK)
         result = controller.do_start('BAD_NAME')
         self.assertEqual(result, None)
         self.assertEqual(controller.stdout.getvalue(),
-                         'Cannot start BAD_NAME (no such process)\n')
+                         'BAD_NAME: ERROR (no such process)\n')
 
     def test_start_alreadystarted(self):
         options = DummyClientOptions()
@@ -1321,7 +1324,7 @@ baz            STOPPED    Jun 26 11:42 PM (OK)
         result = controller.do_start('ALREADY_STARTED')
         self.assertEqual(result, None)
         self.assertEqual(controller.stdout.getvalue(),
-                         'Cannot start ALREADY_STARTED (already started)\n')
+                         'ALREADY_STARTED: ERROR (already started)\n')
 
     def test_start_spawnerror(self):
         options = DummyClientOptions()
@@ -1330,7 +1333,7 @@ baz            STOPPED    Jun 26 11:42 PM (OK)
         result = controller.do_start('SPAWN_ERROR')
         self.assertEqual(result, None)
         self.assertEqual(controller.stdout.getvalue(),
-                         'Cannot start SPAWN_ERROR (spawn error)\n')
+                         'SPAWN_ERROR: ERROR (spawn error)\n')
 
     def test_start_one_success(self):
         options = DummyClientOptions()
@@ -1356,7 +1359,7 @@ baz            STOPPED    Jun 26 11:42 PM (OK)
         self.assertEqual(result, None)
 
         self.assertEqual(controller.stdout.getvalue(),
-                    'foo: OK\nfoo2: OK\nCannot start failed (spawn error)\n')
+                    'foo: OK\nfoo2: OK\nfailed: ERROR (spawn error)\n')
 
 
     def test_stop_fail(self):
@@ -1375,7 +1378,7 @@ baz            STOPPED    Jun 26 11:42 PM (OK)
         result = controller.do_stop('BAD_NAME')
         self.assertEqual(result, None)
         self.assertEqual(controller.stdout.getvalue(),
-                         'Cannot stop BAD_NAME (no such process)\n')
+                         'BAD_NAME: ERROR (no such process)\n')
 
     def test_stop_notrunning(self):
         options = DummyClientOptions()
@@ -1384,7 +1387,7 @@ baz            STOPPED    Jun 26 11:42 PM (OK)
         result = controller.do_stop('NOT_RUNNING')
         self.assertEqual(result, None)
         self.assertEqual(controller.stdout.getvalue(),
-                         'Cannot stop NOT_RUNNING (not running)\n')
+                         'NOT_RUNNING: ERROR (not running)\n')
 
     def test_stop_one_success(self):
         options = DummyClientOptions()
@@ -1411,7 +1414,7 @@ baz            STOPPED    Jun 26 11:42 PM (OK)
         self.assertEqual(result, None)
 
         self.assertEqual(controller.stdout.getvalue(),
-         'foo: stopped\nfoo2: stopped\nCannot stop failed (no such process)\n')
+         'foo: stopped\nfoo2: stopped\nfailed: ERROR (no such process)\n')
         
 
 class TailFProducerTests(unittest.TestCase):