| 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
24
26 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
44
47 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)
63
65 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 include
78
79
81 """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 oid
92
93
95 """
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')
133
135 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 proxies
149
151 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
181
182
183 if __name__ == '__main__':
184 from Products.ZenHub.ServiceTester import ServiceTester
185 tester = ServiceTester(SnmpPerformanceConfig)
189 tester.printDeviceProxy = printer
190 tester.showDeviceInfo()
191
| Trees | Indices | Help |
|
|---|
| Generated by Epydoc 3.0.1.1812 on Mon Jul 30 17:11:26 2012 | http://epydoc.sourceforge.net |