1
2
3
4
5
6
7
8
9
10
11 import re
12 import sre_constants
13 import logging
14 log = logging.getLogger('zen.HubService.ProcessConfig')
15
16 import Globals
17
18 from Products.ZenCollector.services.config import CollectorConfigService
19 from Products.ZenUtils.Utils import unused
20 from Products.ZenCollector.services.config import DeviceProxy
21 from Products.ZenEvents import Event
22 from Products.ZenModel.OSProcessClass import OSProcessClass
23 from Products.ZenModel.OSProcessOrganizer import OSProcessOrganizer
24 from Products.ZenHub.zodb import onUpdate
25 from Products.Zuul.interfaces import ICatalogTool
26 unused(DeviceProxy)
27
28 from twisted.spread import pb
52
53
54 pb.setUnjellyableForClass(ProcessProxy, ProcessProxy)
58
60 deviceProxyAttributes = ('zMaxOIDPerRequest',)
61 CollectorConfigService.__init__(self, dmd, instance, deviceProxyAttributes)
62
68
70 procs = device.getMonitoredComponents(collector='zenprocess')
71 if not procs:
72 log.debug("Device %s has no monitored processes -- ignoring",
73 device.titleOrId())
74 return None
75
76 proxy = CollectorConfigService._createDeviceProxy(self, device)
77 proxy.configCycleInterval = self._prefs.processCycleInterval
78
79 proxy.name = device.id
80 proxy.lastmodeltime = device.getLastChangeString()
81 proxy.thresholds = []
82 proxy.processes = {}
83 proxy.snmpConnInfo = device.getSnmpConnInfo()
84 for p in procs:
85
86 if not p.monitored():
87 log.debug("Skipping process %r - zMonitor disabled", p)
88 continue
89 regex = getattr(p.osProcessClass(), 'regex', False)
90 if regex:
91 try:
92 re.compile(regex)
93 except sre_constants.error, ex:
94 log.warn("OS process class %s has an invalid regex (%s): %s",
95 p.getOSProcessClass(), regex, ex)
96 continue
97 else:
98 log.warn("OS process class %s has no defined regex, this process not being monitored",
99 p.getOSProcessClass())
100 continue
101
102 proc = ProcessProxy()
103 proc.regex = regex
104 proc.name = p.id
105 proc.originalName = p.name()
106 proc.ignoreParameters = (
107 getattr(p.osProcessClass(), 'ignoreParameters', False))
108 proc.restart = p.alertOnRestart()
109 proc.severity = p.getFailSeverity()
110 proc.processClass = p.getOSProcessClass()
111 proxy.processes[p.id] = proc
112 proxy.thresholds.extend(p.getThresholdInstances('SNMP'))
113
114 if proxy.processes:
115 return proxy
116
117 @onUpdate(OSProcessClass)
129
130 @onUpdate(OSProcessOrganizer)
149
150
151 if __name__ == '__main__':
152 from Products.ZenHub.ServiceTester import ServiceTester
153 tester = ServiceTester(ProcessConfig)
157 tester.printDeviceProxy = printer
158 tester.showDeviceInfo()
159