Selaa lähdekoodia

*** empty log message ***

Chris McDonough 19 vuotta sitten
vanhempi
commit
c9729b097c
3 muutettua tiedostoa jossa 45 lisäystä ja 2 poistoa
  1. 3 0
      CHANGES.txt
  2. 8 2
      src/supervisor/supervisorctl.py
  3. 34 0
      src/supervisor/tests.py

+ 3 - 0
CHANGES.txt

@@ -1,5 +1,8 @@
 Next
 
+  - supervisorctl: tail (non -f) did not pass through proper error
+    messages when supplied by the server.
+
   - Log signal name used to kill processes at debug level.
 
   - supervisorctl "tail -f" didn't work with supervisorctl sections

+ 8 - 2
src/supervisor/supervisorctl.py

@@ -207,8 +207,14 @@ class Controller(cmd.Cmd):
         try:
             output = supervisor.readProcessLog(processname, -bytes, 0)
         except xmlrpclib.Fault, e:
-            if e.faultCode == xmlrpc.Faults.FAILED:
-                self._output("Error: Log file doesn't yet exist on server")
+            template = '%s: ERROR (%s)'
+            if e.faultCode == xmlrpc.Faults.NO_FILE:
+                self._output(template % (processname, 'no log file'))
+            elif e.faultCode == xmlrpc.Faults.FAILED:
+                self._output(template % (processname,
+                                         'unknown error reading log'))
+            elif e.faultCode == xmlrpc.Faults.BAD_NAME:
+                self._output(template % (processname, 'no such process name'))
         else:
             self._output(output)
 

+ 34 - 0
src/supervisor/tests.py

@@ -1815,6 +1815,33 @@ class ControllerTests(unittest.TestCase):
         self.assertEqual(len(lines), 12)
         self.assertEqual(lines[0], 'output line')
 
+    def test_tail_no_file(self):
+        options = DummyClientOptions()
+        controller = self._makeOne(options)
+        controller.stdout = StringIO()
+        result = controller.do_tail('NO_FILE')
+        lines = controller.stdout.getvalue().split('\n')
+        self.assertEqual(len(lines), 2)
+        self.assertEqual(lines[0], 'NO_FILE: ERROR (no log file)')
+
+    def test_tail_failed(self):
+        options = DummyClientOptions()
+        controller = self._makeOne(options)
+        controller.stdout = StringIO()
+        result = controller.do_tail('FAILED')
+        lines = controller.stdout.getvalue().split('\n')
+        self.assertEqual(len(lines), 2)
+        self.assertEqual(lines[0], 'FAILED: ERROR (unknown error reading log)')
+
+    def test_tail_bad_name(self):
+        options = DummyClientOptions()
+        controller = self._makeOne(options)
+        controller.stdout = StringIO()
+        result = controller.do_tail('BAD_NAME')
+        lines = controller.stdout.getvalue().split('\n')
+        self.assertEqual(len(lines), 2)
+        self.assertEqual(lines[0], 'BAD_NAME: ERROR (no such process name)')
+
     def test_tail_twoargs(self):
         options = DummyClientOptions()
         controller = self._makeOne(options)
@@ -2449,6 +2476,13 @@ class DummySupervisorRPCNamespace:
         return '1.0'
 
     def readProcessLog(self, name, offset, length):
+        import xmlrpclib
+        if name == 'BAD_NAME':
+            raise xmlrpclib.Fault(xmlrpc.Faults.BAD_NAME, 'BAD_NAME')
+        elif name == 'FAILED':
+            raise xmlrpclib.Fault(xmlrpc.Faults.FAILED, 'FAILED')
+        elif name == 'NO_FILE':
+            raise xmlrpclib.Fault(xmlrpc.Faults.NO_FILE, 'NO_FILE')
         a = 'output line\n' * 10
         return a[offset:]