@@ -34,10 +34,24 @@ class Supervisor(Module):
34
34
True
35
35
>>> gunicorn.pid
36
36
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'
37
43
"""
38
44
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
+ ):
40
52
self .name = name
53
+ self .supervisorctl_path = supervisorctl_path
54
+ self .supervisorctl_conf = supervisorctl_conf
41
55
self ._attrs_cache = _attrs_cache
42
56
super ().__init__ ()
43
57
@@ -64,7 +78,17 @@ def _parse_status(line):
64
78
@property
65
79
def _attrs (self ):
66
80
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
+ )
68
92
attrs = self ._parse_status (line )
69
93
assert attrs ["name" ] == self .name
70
94
self ._attrs_cache = attrs
@@ -92,23 +116,38 @@ def pid(self):
92
116
return self ._attrs ["pid" ]
93
117
94
118
@classmethod
95
- def get_services (cls ):
119
+ def get_services (
120
+ cls ,
121
+ supervisorctl_path = "supervisorctl" ,
122
+ supervisorctl_conf = None ,
123
+ ):
96
124
"""Get a list of services running under supervisor
97
125
98
126
>>> 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")
99
133
[<Supervisor(name="gunicorn", status="RUNNING", pid=4232)>
100
134
<Supervisor(name="celery", status="FATAL", pid=None)>]
101
135
"""
102
136
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
107
140
)
108
- .splitlines ()
109
- ):
141
+ else :
142
+ out = cls .check_output ("%s status" , supervisorctl_path )
143
+ for line in out .splitlines ():
110
144
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
+ )
112
151
services .append (service )
113
152
return services
114
153
0 commit comments