Trees | Indices | Help |
|
---|
|
1 ############################################################################## 2 # 3 # Copyright (C) Zenoss, Inc. 2007, 2010, all rights reserved. 4 # 5 # This content is made available according to terms specified in 6 # License.zenoss under the directory where your Zenoss product is installed. 7 # 8 ############################################################################## 9 10 11 __doc__ = '''SnmpPerformanceConfig 12 13 Provides configuration to zenperfsnmp clients. 14 ''' 15 16 import re 17 from pprint import pformat 18 import logging 19 log = logging.getLogger('zen.HubService.SnmpPerformanceConfig') 20 21 import Globals 22 from twisted.spread import pb 23 from Products.ZenCollector.services.config import DeviceProxy, CollectorConfigService 2426 get_manage_ip = getattr(component, "getManageIp", None) 27 if get_manage_ip is None: 28 return default 29 return get_manage_ip()30 41 42 pb.setUnjellyableForClass(SnmpDeviceProxy, SnmpDeviceProxy) 43 44181 182 183 if __name__ == '__main__': 184 from Products.ZenHub.ServiceTester import ServiceTester 185 tester = ServiceTester(SnmpPerformanceConfig) 189 tester.printDeviceProxy = printer 190 tester.showDeviceInfo() 19147 deviceProxyAttributes = ('zMaxOIDPerRequest', 48 'zSnmpMonitorIgnore', 49 'zSnmpAuthPassword', 50 'zSnmpAuthType', 51 'zSnmpCommunity', 52 'zSnmpPort', 53 'zSnmpPrivPassword', 54 'zSnmpPrivType', 55 'zSnmpSecurityName', 56 'zSnmpTimeout', 57 'zSnmpTries', 58 'zSnmpVer', 59 'zSnmpCollectionInterval', 60 ) 61 CollectorConfigService.__init__(self, dmd, instance, 62 deviceProxyAttributes)6365 include = CollectorConfigService._filterDevice(self, device) 66 67 if getattr(device, 'zSnmpMonitorIgnore', False): 68 self.log.debug("Device %s skipped because zSnmpMonitorIgnore is True", 69 device.id) 70 include = False 71 72 if not device.getManageIp(): 73 self.log.debug("Device %s skipped because its management IP address is blank.", 74 device.id) 75 include = False 76 77 return include78 7981 """lookup the index""" 82 index = None 83 snmpindex_dct = getattr(comp, "snmpindex_dct", None) 84 if snmpindex_dct is not None: 85 for prefix, index_ in snmpindex_dct.iteritems(): 86 if oid.startswith(prefix): 87 index = index_ 88 break 89 if index is None: 90 index = getattr(comp, "ifindex", comp.snmpindex) 91 return "{0}.{1}".format(oid, index) if index else oid92 9395 """ 96 SNMP components can build up the actual OID based on a base OID and 97 the snmpindex of the component. 98 """ 99 if comp.snmpIgnore(): 100 return None 101 102 validOID = re.compile(r'(?:\.?\d+)+$') 103 basepath = comp.rrdPath() 104 for templ in comp.getRRDTemplates(): 105 for ds in templ.getRRDDataSources("SNMP"): 106 if not ds.enabled or not ds.oid: 107 continue 108 109 oid = self._transform_oid(ds.oid.strip("."), comp) 110 if not oid: 111 log.warn("The data source %s OID is blank -- ignoring", ds.id) 112 continue 113 elif not validOID.match(oid): 114 msg = "The OID %s is invalid -- ignoring" % oid 115 self.sendEvent(dict( 116 device=comp.device().id, component=ds.getPrimaryUrlPath(), 117 eventClass='/Status/Snmp', severity=Warning, summary=msg, 118 )) 119 120 for dp in ds.getRRDDataPoints(): 121 # Everything under ZenModel *should* use titleOrId but it doesn't 122 cname = comp.viewName() if comp.meta_type != "Device" else dp.id 123 oidData = (cname, 124 "/".join((basepath, dp.name())), 125 dp.rrdtype, 126 dp.getRRDCreateCommand(perfServer).strip(), 127 dp.rrdmin, dp.rrdmax) 128 129 # An OID can appear in multiple data sources/data points 130 oids.setdefault(oid, []).append(oidData) 131 132 return comp.getThresholdInstances('SNMP')133135 manage_ips = {device.manageIp: ([], False)} 136 components = device.os.getMonitoredComponents(collector="zenperfsnmp") 137 for component in components: 138 manage_ip = get_component_manage_ip(component, device.manageIp) 139 if manage_ip not in manage_ips: 140 log.debug("Adding manage IP %s from %r" % (manage_ip, component)) 141 manage_ips[manage_ip] = ([], True) 142 manage_ips[manage_ip][0].append(component) 143 proxies = [] 144 for manage_ip, (components, components_only) in manage_ips.items(): 145 proxy = self._createDeviceProxy(device, manage_ip, components, components_only) 146 if proxy is not None: 147 proxies.append(proxy) 148 return proxies149151 proxy = SnmpDeviceProxy() 152 proxy = CollectorConfigService._createDeviceProxy(self, device, proxy) 153 proxy.snmpConnInfo = device.getSnmpConnInfo() 154 if manage_ip is not None and manage_ip != device.manageIp: 155 proxy._config_id = device.id + "_" + manage_ip 156 proxy.snmpConnInfo.manageIp = manage_ip 157 proxy.configCycleInterval = self._prefs.perfsnmpCycleInterval 158 proxy.cycleInterval = getattr(device, 'zSnmpCollectionInterval', 300) 159 proxy.name = device.id 160 proxy.device = device.id 161 proxy.lastmodeltime = device.getLastChangeString() 162 proxy.lastChangeTime = float(device.getLastChange()) 163 164 # Gather the datapoints to retrieve 165 perfServer = device.getPerformanceServer() 166 proxy.oids = {} 167 proxy.thresholds = [] 168 if not components_only: 169 # First for the device.... 170 threshs = self._getComponentConfig(device, perfServer, proxy.oids) 171 if threshs: 172 proxy.thresholds.extend(threshs) 173 # And now for its components 174 for comp in components: 175 threshs = self._getComponentConfig(comp, perfServer, proxy.oids) 176 if threshs: 177 proxy.thresholds.extend(threshs) 178 179 if proxy.oids: 180 return proxy
Trees | Indices | Help |
|
---|
Generated by Epydoc 3.0.1.1812 on Mon Jul 30 17:11:26 2012 | http://epydoc.sourceforge.net |