Browse Source

- Allow get_server_proxy() to return a proxy with no namespace.
- Reinstall get_supervisor() helper because it is very convenient.

Mike Naberezny 16 years ago
parent
commit
6eb70d73f8
2 changed files with 62 additions and 27 deletions
  1. 26 21
      src/supervisor/supervisorctl.py
  2. 36 6
      src/supervisor/tests/test_supervisorctl.py

+ 26 - 21
src/supervisor/supervisorctl.py

@@ -116,7 +116,7 @@ class Controller(cmd.Cmd):
                       'restart','start','stop','version','clear',
                       'fg','open','quit','remove','shutdown','status',
                       'tail','help']
-        self.info=self.get_server_proxy().getAllProcessInfo()
+        self.info=self.get_supervisor().getAllProcessInfo()
         cmd.Cmd.__init__(self, completekey, stdin, stdout)
         for name, factory, kwargs in self.options.plugin_factories:
             plugin = factory(self, **kwargs)
@@ -191,15 +191,20 @@ class Controller(cmd.Cmd):
     def output(self, stuff):
         if stuff is not None:
             self.stdout.write(stuff + '\n')
+    
+    def get_supervisor(self):
+        return self.get_server_proxy('supervisor')
 
-    def get_server_proxy(self, namespace='supervisor'):
+    def get_server_proxy(self, namespace=None):
         proxy = self.options.getServerProxy()
-        proxy_for_namespace = getattr(proxy, namespace)
-        return proxy_for_namespace
+        if namespace is None:
+            return proxy
+        else:
+            return getattr(proxy, namespace)
 
     def upcheck(self):
         try:
-            supervisor = self.get_server_proxy()
+            supervisor = self.get_supervisor()
             api = supervisor.getVersion() # deprecated
             from supervisor import rpcinterface
             if api != rpcinterface.API_VERSION:
@@ -451,7 +456,7 @@ class DefaultControllerPlugin(ControllerPluginBase):
                     self.ctl.output('Error: bad argument %s' % modifier)
                     return
 
-        supervisor = self.ctl.get_server_proxy()
+        supervisor = self.ctl.get_supervisor()
 
         if bytes is None:
             return self._tailf('/logtail/%s/%s' % (name, channel))
@@ -518,7 +523,7 @@ class DefaultControllerPlugin(ControllerPluginBase):
         else:
             bytes = 1600
 
-        supervisor = self.ctl.get_server_proxy()
+        supervisor = self.ctl.get_supervisor()
 
         try:
             output = supervisor.readLog(-bytes, 0)
@@ -565,7 +570,7 @@ class DefaultControllerPlugin(ControllerPluginBase):
         if not self.ctl.upcheck():
             return
         
-        supervisor = self.ctl.get_server_proxy()
+        supervisor = self.ctl.get_supervisor()
 
         names = arg.strip().split()
 
@@ -592,7 +597,7 @@ class DefaultControllerPlugin(ControllerPluginBase):
                      "processes.")
 
     def do_pid(self, arg):
-        supervisor = self.ctl.get_server_proxy()
+        supervisor = self.ctl.get_supervisor()
         pid = supervisor.getPID()
         self.ctl.output(str(pid))
 
@@ -621,7 +626,7 @@ class DefaultControllerPlugin(ControllerPluginBase):
             return
 
         names = arg.strip().split()
-        supervisor = self.ctl.get_server_proxy()
+        supervisor = self.ctl.get_supervisor()
 
         if not names:
             self.ctl.output("Error: start requires a process name")
@@ -681,7 +686,7 @@ class DefaultControllerPlugin(ControllerPluginBase):
             return
 
         names = arg.strip().split()
-        supervisor = self.ctl.get_server_proxy()
+        supervisor = self.ctl.get_supervisor()
 
         if not names:
             self.ctl.output('Error: stop requires a process name')
@@ -748,7 +753,7 @@ class DefaultControllerPlugin(ControllerPluginBase):
         else:
             really = 1
         if really:
-            supervisor = self.ctl.get_server_proxy()
+            supervisor = self.ctl.get_supervisor()
             try:
                 supervisor.shutdown()
             except xmlrpclib.Fault, e:
@@ -768,7 +773,7 @@ class DefaultControllerPlugin(ControllerPluginBase):
         else:
             really = 1
         if really:
-            supervisor = self.ctl.get_server_proxy()
+            supervisor = self.ctl.get_supervisor()
             try:
                 supervisor.restart()
             except xmlrpclib.Fault, e:
@@ -814,7 +819,7 @@ class DefaultControllerPlugin(ControllerPluginBase):
         return template % formatted
 
     def do_avail(self, arg):
-        supervisor = self.ctl.get_server_proxy()
+        supervisor = self.ctl.get_supervisor()
         try:
             configinfo = supervisor.getAllConfigInfo()
         except xmlrpclib.Fault, e:
@@ -828,7 +833,7 @@ class DefaultControllerPlugin(ControllerPluginBase):
         self.ctl.output("avail\t\t\tDisplay all configured processes")
 
     def do_reread(self, arg):
-        supervisor = self.ctl.get_server_proxy()
+        supervisor = self.ctl.get_supervisor()
         try:
             result = supervisor.reloadConfig()
         except xmlrpclib.Fault, e:
@@ -847,7 +852,7 @@ class DefaultControllerPlugin(ControllerPluginBase):
     def do_add(self, arg):
         names = arg.strip().split()
 
-        supervisor = self.ctl.get_server_proxy()
+        supervisor = self.ctl.get_supervisor()
         for name in names:
             try:
                 supervisor.addProcessGroup(name)
@@ -871,7 +876,7 @@ class DefaultControllerPlugin(ControllerPluginBase):
     def do_remove(self, arg):
         names = arg.strip().split()
 
-        supervisor = self.ctl.get_server_proxy()
+        supervisor = self.ctl.get_supervisor()
         for name in names:
             try:
                 result = supervisor.removeProcessGroup(name)
@@ -895,7 +900,7 @@ class DefaultControllerPlugin(ControllerPluginBase):
         def log(name, message):
             self.ctl.output("%s: %s" % (name, message))
 
-        supervisor = self.ctl.get_server_proxy()
+        supervisor = self.ctl.get_supervisor()
         try:
             result = supervisor.reloadConfig()
         except xmlrpclib.Fault, e:
@@ -957,7 +962,7 @@ class DefaultControllerPlugin(ControllerPluginBase):
             self.help_clear()
             return
 
-        supervisor = self.ctl.get_server_proxy()
+        supervisor = self.ctl.get_supervisor()
 
         if 'all' in names:
             results = supervisor.clearAllProcessLogs()
@@ -1000,7 +1005,7 @@ class DefaultControllerPlugin(ControllerPluginBase):
     def do_version(self, arg):
         if not self.ctl.upcheck():
             return
-        supervisor = self.ctl.get_server_proxy()
+        supervisor = self.ctl.get_supervisor()
         self.ctl.output(supervisor.getSupervisorVersion())
 
     def help_version(self):
@@ -1020,7 +1025,7 @@ class DefaultControllerPlugin(ControllerPluginBase):
             self.ctl.output('Error: too many process names supplied')
             return
         program = args[0]
-        supervisor = self.ctl.get_server_proxy()
+        supervisor = self.ctl.get_supervisor()
         try:
             info = supervisor.getProcessInfo(program)
         except xmlrpclib.Fault, msg:

+ 36 - 6
src/supervisor/tests/test_supervisorctl.py

@@ -100,6 +100,31 @@ class ControllerTests(unittest.TestCase):
         self.assertEqual(results, None)
         self.assertEqual(helpval, 'foo helped')
 
+    def test_get_supervisor_returns_serverproxy_supervisor_namespace(self):
+        options = DummyClientOptions()
+        controller = self._makeOne(options)
+
+        proxy = controller.get_supervisor()
+        expected = options.getServerProxy().supervisor
+        self.assertEqual(proxy, expected)
+
+    def test_get_server_proxy_with_no_args_returns_serverproxy(self):
+        options = DummyClientOptions()
+        controller = self._makeOne(options)
+
+        proxy = controller.get_server_proxy()
+        expected = options.getServerProxy()
+        self.assertEqual(proxy, expected)
+
+    def test_get_server_proxy_with_namespace_returns_that_namespace(self):
+        options = DummyClientOptions()
+        controller = self._makeOne(options)
+
+        proxy = controller.get_server_proxy('system')
+        expected = options.getServerProxy().system
+        self.assertEqual(proxy, expected)
+
+
 class TestControllerPluginBase(unittest.TestCase):
     def _getTargetClass(self):
         from supervisor.supervisorctl import ControllerPluginBase
@@ -526,7 +551,7 @@ class TestDefaultControllerPlugin(unittest.TestCase):
                           'inuse': False, 'autostart': False,
                           'process_prio': 999, 'group_prio': 999 }]
 
-        plugin.ctl.get_server_proxy = lambda : FakeSupervisor()
+        plugin.ctl.get_supervisor = lambda : FakeSupervisor()
         plugin.ctl.output = calls.append
         result = plugin.do_avail('')
         self.assertEqual(result, None)
@@ -752,7 +777,7 @@ class TestDefaultControllerPlugin(unittest.TestCase):
 
     def test_maintail_readlog_error_nofile(self):
         plugin = self._makeOne()
-        supervisor_rpc = plugin.ctl.get_server_proxy()
+        supervisor_rpc = plugin.ctl.get_supervisor()
         from supervisor import xmlrpc
         supervisor_rpc._readlog_error = xmlrpc.Faults.NO_FILE
         result = plugin.do_maintail('-100')
@@ -761,7 +786,7 @@ class TestDefaultControllerPlugin(unittest.TestCase):
 
     def test_maintail_readlog_error_failed(self):
         plugin = self._makeOne()
-        supervisor_rpc = plugin.ctl.get_server_proxy()
+        supervisor_rpc = plugin.ctl.get_supervisor()
         from supervisor import xmlrpc
         supervisor_rpc._readlog_error = xmlrpc.Faults.FAILED
         result = plugin.do_maintail('-100')
@@ -840,10 +865,15 @@ class DummyController:
     def upcheck(self):
         return True
 
-    def get_server_proxy(self, namespace="supervisor"):
+    def get_supervisor(self):
+        return self.get_server_proxy('supervisor')
+
+    def get_server_proxy(self, namespace=None):
         proxy = self.options.getServerProxy()
-        proxy_for_namespace = getattr(proxy, namespace)
-        return proxy_for_namespace  
+        if namespace is None:
+            return proxy
+        else:
+            return getattr(proxy, namespace)
 
     def output(self, data):
         self.stdout.write(data + '\n')