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') 3133 3499 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 11236 ModelerService.__init__(self, dmd, instance) 37 self.config = self.dmd.Monitors.Performance._getOb(self.instance) 38 self.procrastinator = Procrastinate(self.push)39 4042 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 result51 5254 return self.config.propertyItems()55 5658 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 None83 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 None114 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 122124 for listener in self.listeners: 125 if isinstance(obj, Device): 126 listener.callRemote('deleteDevice', obj.id)127 128130 """ 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 device165 166168 """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 deviceProxies185 186188 """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 deviceProxies215
Trees | Indices | Help |
|
---|
Generated by Epydoc 3.0beta1 on Thu May 7 11:46:48 2009 | http://epydoc.sourceforge.net |