| Trees | Indices | Help |
|
|---|
|
|
1 ###########################################################################
2 #
3 # This program is part of Zenoss Core, an open source monitoring platform.
4 # Copyright (C) 2007-2009, Zenoss Inc.
5 #
6 # This program is free software; you can redistribute it and/or modify it
7 # under the terms of the GNU General Public License version 2 as published by
8 # the Free Software Foundation.
9 #
10 # For complete information please visit: http://www.zenoss.com/oss/
11 #
12 ###########################################################################
13
14 __doc__='''WmiService
15
16 Provides Wmi config to zenwin clients.
17 '''
18
19 from Products.ZenHub.services.ModelerService import ModelerService
20 from Products.ZenModel.Device import Device
21 from Products.ZenModel.DeviceClass import DeviceClass
22 from Products.ZenModel.WinService import WinService
23 from Products.ZenModel.ServiceClass import ServiceClass
24 from Products.ZenModel.ServiceOrganizer import ServiceOrganizer
25
26 from Products.ZenHub.services.Procrastinator import Procrastinate
27 from Products.ZenHub.services.ThresholdMixin import ThresholdMixin
28
29 import logging
30 log = logging.getLogger('zen.ModelerService.WmiConfig')
31
33
34
36 ModelerService.__init__(self, dmd, instance)
37 self.config = self.dmd.Monitors.Performance._getOb(self.instance)
38 self.procrastinator = Procrastinate(self.push)
39
40
42 result = ModelerService.createDeviceProxy(self, dev)
43 for prop in (
44 'zWmiMonitorIgnore',
45 'zWinUser',
46 'zWinPassword',
47 'zWinEventlogMinSeverity'):
48 if hasattr(dev, prop):
49 setattr(result, prop, getattr(dev, prop))
50 return result
51
52
54 return self.config.propertyItems()
55
56
58 objects = []
59 if isinstance(object, DeviceClass):
60 objects = object.getSubDevices()
61 elif isinstance(object, WinService):
62 objects = [object.device()]
63 elif isinstance(object, ServiceClass):
64 objects = [ i.device() for i in object.instances() \
65 if isinstance(i, WinService) ]
66 elif isinstance(object, ServiceOrganizer):
67
68 #only need to find one device with a WinService to determine if a
69 #config change notification needs to be sent. This is because
70 #config changes are not sent for each device, if any device has
71 #changed the notifyConfigChanged method is called on the collector
72 #which tells the collector to re-read the entire configuration
73 def scanHeirarchyForDevice( organizer ):
74
75 #find device with a winserivce in an organizers service classes
76 def getWinServiceDevice( organizer ):
77 for sc in organizer.serviceclasses():
78 for inst in sc.instances():
79 if isinstance(inst,WinService):
80 return inst.device()
81
82 return None
83
84 organizers = [organizer]
85 #iterate through all the organizers and children 'till a device
86 #is found
87 while organizers:
88 for org in organizers:
89 device = getWinServiceDevice(org)
90 if device:
91 return device
92
93 oldOrgs = organizers
94 organizers = []
95 for org in oldOrgs:
96 organizers.extend(org.children())
97
98 return None
99
100 device = scanHeirarchyForDevice( object )
101
102 if device:
103 objects = [device]
104
105 else:
106 objects = [object]
107 for object in objects:
108 if not isinstance(object, Device):
109 continue
110 self.procrastinator.doLater(object)
111
112
114 if (not object.monitorDevice() or
115 getattr(object, 'zWmiMonitorIgnore', False)):
116 self.deleted(object)
117 else:
118 for listener in self.listeners:
119 listener.callRemote('notifyConfigChanged')
120 self.procrastinator.clear()
121
122
124 for listener in self.listeners:
125 if isinstance(obj, Device):
126 listener.callRemote('deleteDevice', obj.id)
127
128
130 """
131 A generator method that provides a list of devices that are set to be
132 monitored via WMI.
133 """
134 deviceMap = {}
135
136 for name in names:
137 # try and load the device from the provided list of names, but
138 # exclude the device if a) we can't find it! or b) we've already
139 # found it and created a proxy. The latter is a guard against
140 # two different proxies for the same device being provided which
141 # will cause great grief with the native code DCOM implementation
142 # we use.
143 device = self.dmd.Devices.findDeviceExact(name)
144 if not device:
145 continue
146 elif deviceMap.has_key(device.id):
147 continue
148
149 device = device.primaryAq()
150
151 # make sure the device itself is being monitored
152 if not device.monitorDevice():
153 log.debug("Device %s skipped because monitoring is disabled",
154 device.id)
155 continue
156
157 # now make sure the WMI specific monitoring flag is enabled
158 if getattr(device, 'zWmiMonitorIgnore', False):
159 log.debug("Device %s skipped because zWmiMonitorIgnore is set",
160 device.id)
161 continue
162
163 # return the monitored device to the generator caller
164 yield device
165
166
168 """Return a list of (devname, user, password)
169 """
170 deviceProxies = []
171
172 for device in self._monitoredDevices(names):
173 if not getattr(device, 'zWinEventlog', True):
174 log.debug("Device %s skipped because zWinEventlog is cleared",
175 device.id)
176 continue
177
178 proxy = self.createDeviceProxy(device)
179 proxy.id = device.getId()
180
181 deviceProxies.append(proxy)
182 log.debug("Device %s added to proxy list", proxy.id)
183
184 return deviceProxies
185
186
188 """Return a list of (devname, user, passwd, {'EvtSys':0,'Exchange':0})
189 """
190 deviceProxies = []
191 for device in self._monitoredDevices(names):
192
193 proxy = self.createDeviceProxy(device)
194 proxy.id = device.getId()
195
196 proxy.services = {}
197 for s in device.getMonitoredComponents(type='WinService'):
198 name = s.name()
199 if type(name) == type(u''):
200 name = name.encode(s.zCollectorDecoding)
201 proxy.services[name] = (s.getStatus(),
202 s.getAqProperty('zFailSeverity'))
203
204 # don't bother adding this device proxy if there aren't any services
205 # to monitor
206 if not proxy.services:
207 log.debug("Device %s skipped because there are no services",
208 proxy.id)
209 continue
210
211 deviceProxies.append(proxy)
212 log.debug("Device %s added to proxy list", proxy.id)
213
214 return deviceProxies
215
| Trees | Indices | Help |
|
|---|
| Generated by Epydoc 3.0beta1 on Thu May 7 11:46:48 2009 | http://epydoc.sourceforge.net |