1
2
3
4
5
6
7
8
9
10
11
12
13
14 from Globals import InitializeClass
15 from AccessControl import ClassSecurityInfo
16 from AccessControl import Permissions
17 from Products.ZenModel.ZenossSecurity import *
18
19 from Commandable import Commandable
20 from Products.ZenRelations.RelSchema import *
21 from Products.ZenWidgets import messaging
22 from Acquisition import aq_chain
23
24 from OSComponent import OSComponent
25 from ZenPackable import ZenPackable
26
27
44
45
63
64
65 -class OSProcess(OSComponent, Commandable, ZenPackable):
66 """
67 OSProcess object
68 """
69 portal_type = meta_type = 'OSProcess'
70
71 procName = ""
72 parameters = ""
73 _procKey = ""
74
75 collectors = ('zenprocess','zencommand')
76
77 _properties = OSComponent._properties + (
78 {'id':'procName', 'type':'string', 'mode':'w'},
79 {'id':'parameters', 'type':'string', 'mode':'w'},
80 {'id':'zAlertOnRestarts', 'type':'boolean', 'mode':'w'},
81 {'id':'zFailSeverity', 'type':'int', 'mode':'w'},
82 )
83
84 _relations = OSComponent._relations + ZenPackable._relations + (
85 ("os", ToOne(ToManyCont, "Products.ZenModel.OperatingSystem", "processes")),
86 ("osProcessClass", ToOne(ToMany, "Products.ZenModel.OSProcessClass", "instances")),
87 ('userCommands', ToManyCont(ToOne, 'Products.ZenModel.UserCommand', 'commandable')),
88 )
89
90 factory_type_information = (
91 {
92 'immediate_view' : 'osProcessDetail',
93 'actions' :
94 (
95 { 'id' : 'status'
96 , 'name' : 'Status'
97 , 'action' : 'osProcessDetail'
98 , 'permissions' : ( Permissions.view, )
99 },
100 { 'id' : 'events'
101 , 'name' : 'Events'
102 , 'action' : 'viewEvents'
103 , 'permissions' : (ZEN_VIEW, )
104 },
105 { 'id' : 'perfConf'
106 , 'name' : 'Template'
107 , 'action' : 'objTemplates'
108 , 'permissions' : ("Change Device", )
109 },
110 { 'id' : 'manage'
111 , 'name' : 'Administration'
112 , 'action' : 'osProcessManage'
113 , 'permissions' : ("Manage DMD",)
114 },
115 )
116 },
117 )
118
119 security = ClassSecurityInfo()
120
121
123 """
124 Return information used to monitor this process.
125 """
126 ignoreParams = getattr(self.osProcessClass(), 'ignoreParameters', False)
127 return (self.id, self.name(), ignoreParams,
128 self.alertOnRestart(), self.getFailSeverity())
129
130
132 """
133 Set the OSProcessClass based on procKey which is the proc + args.
134 We set by matching regular expressions of each proces class.
135 """
136 klass = self.getDmdObj(procKey)
137 klass.instances.addRelation(self)
138
139
141 """
142 Return the current procKey.
143 """
144 pClass = self.osProcessClass()
145 if pClass:
146 return pClass.getPrimaryDmdId()
147
148
161
162
164 """
165 Return a string that is the process name and, if ignoreParamaters
166 is not True, then also the parameters.
167 """
168 ignoreParams = getattr(self.osProcessClass(), 'ignoreParameters', False)
169 if not self.parameters or ignoreParams:
170 return self.procName
171 return self.procName + " " + self.parameters
172
173 title = name
174
176 """
177 Should this service be monitored or not. Use ServiceClass aq path.
178 """
179 return self.getAqProperty("zMonitor")
180
181
183 """
184 Retrieve the zProperty zAlertOnRestart
185 """
186 return self.getAqProperty("zAlertOnRestart")
187
188
190 """
191 Return a list of tuples with the possible severities
192 """
193 return self.ZenEventManager.getSeverities()
194
195
197 """
198 Return the severity for this service when it fails.
199 """
200 return self.getAqProperty("zFailSeverity")
201
202
204 """
205 Return a string representation of zFailSeverity
206 """
207 return self.ZenEventManager.severities[self.getAqProperty("zFailSeverity")]
208
209
211 """
212 Return the ProcessClass for this proc
213 """
214 return self.osProcessClass()
215
216
217 security.declareProtected('Manage DMD', 'manage_editOSProcess')
218 - def manage_editOSProcess(self, zMonitor=False, zAlertOnRestart=False,
219 zFailSeverity=3, msg=None,REQUEST=None):
236
237
239 '''
240 Called by Commandable.doCommand() to ascertain objects on which
241 a UserCommand should be executed.
242 '''
243 return [self]
244
245
254
255
257 """
258 Setup the aq chain as appropriate for the execution of a UserCommand
259 """
260 chain = aq_chain(self.getClassObject().primaryAq())
261 chain.insert(0, self)
262 return chain
263
264
266 """
267 Return the url where UserCommands are viewed for this object
268 """
269 return self.getPrimaryUrlPath() + '/osProcessManage'
270
289
290
291 InitializeClass(OSProcess)
292