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