@@ -34,10 +34,24 @@ class Supervisor(Module):
3434 True
3535 >>> gunicorn.pid
3636 4242
37+
38+ The path where supervisorctl and its configuration file reside can be specified.
39+
40+ >>> gunicorn = host.supervisor("gunicorn", "/usr/bin/supervisorctl", "/etc/supervisor/supervisord.conf")
41+ >>> gunicorn.status
42+ 'RUNNING'
3743 """
3844
39- def __init__ (self , name , _attrs_cache = None ):
45+ def __init__ (
46+ self ,
47+ name ,
48+ supervisorctl_path = "supervisorctl" ,
49+ supervisorctl_conf = None ,
50+ _attrs_cache = None ,
51+ ):
4052 self .name = name
53+ self .supervisorctl_path = supervisorctl_path
54+ self .supervisorctl_conf = supervisorctl_conf
4155 self ._attrs_cache = _attrs_cache
4256 super ().__init__ ()
4357
@@ -64,7 +78,17 @@ def _parse_status(line):
6478 @property
6579 def _attrs (self ):
6680 if self ._attrs_cache is None :
67- line = self .check_output ("supervisorctl status %s" , self .name )
81+ if self .supervisorctl_conf :
82+ line = self .check_output (
83+ "%s -c %s status %s" ,
84+ self .supervisorctl_path ,
85+ self .supervisorctl_conf ,
86+ self .name ,
87+ )
88+ else :
89+ line = self .check_output (
90+ "%s status %s" , self .supervisorctl_path , self .name
91+ )
6892 attrs = self ._parse_status (line )
6993 assert attrs ["name" ] == self .name
7094 self ._attrs_cache = attrs
@@ -92,23 +116,38 @@ def pid(self):
92116 return self ._attrs ["pid" ]
93117
94118 @classmethod
95- def get_services (cls ):
119+ def get_services (
120+ cls ,
121+ supervisorctl_path = "supervisorctl" ,
122+ supervisorctl_conf = None ,
123+ ):
96124 """Get a list of services running under supervisor
97125
98126 >>> host.supervisor.get_services()
127+ [<Supervisor(name="gunicorn", status="RUNNING", pid=4232)>
128+ <Supervisor(name="celery", status="FATAL", pid=None)>]
129+
130+ The path where supervisorctl and its configuration file reside can be specified.
131+
132+ >>> host.supervisor.get_services("/usr/bin/supervisorctl", "/etc/supervisor/supervisord.conf")
99133 [<Supervisor(name="gunicorn", status="RUNNING", pid=4232)>
100134 <Supervisor(name="celery", status="FATAL", pid=None)>]
101135 """
102136 services = []
103- for line in (
104- cls (None )
105- .check_output (
106- "supervisorctl status" ,
137+ if supervisorctl_conf :
138+ out = cls .check_output (
139+ "%s -c %s status" , supervisorctl_path , supervisorctl_conf
107140 )
108- .splitlines ()
109- ):
141+ else :
142+ out = cls .check_output ("%s status" , supervisorctl_path )
143+ for line in out .splitlines ():
110144 attrs = cls ._parse_status (line )
111- service = cls (attrs ["name" ], attrs )
145+ service = cls (
146+ attrs ["name" ],
147+ supervisorctl_path = supervisorctl_path ,
148+ supervisorctl_conf = supervisorctl_conf ,
149+ _attrs_cache = attrs ,
150+ )
112151 services .append (service )
113152 return services
114153
0 commit comments