Package ZenHub :: Package services :: Module SnmpPerfConfig
[hide private]
[frames] | no frames]

Source Code for Module ZenHub.services.SnmpPerfConfig

  1  ########################################################################### 
  2  # 
  3  # This program is part of Zenoss Core, an open source monitoring platform. 
  4  # Copyright (C) 2007, 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  from PerformanceConfig import PerformanceConfig 
 15  from Products.ZenHub.PBDaemon import translateError 
 16   
 17  from sets import Set 
 18   
 19  from Products.ZenRRD.zenperfsnmp import SnmpConfig 
 20   
 21  import logging 
 22  log = logging.getLogger('zen.SnmpPerfConfig') 
 23   
24 -def getComponentConfig(comp):
25 oids = [] 26 if comp.snmpIgnore(): return None 27 basepath = comp.rrdPath() 28 perfServer = comp.device().getPerformanceServer() 29 for templ in comp.getRRDTemplates(): 30 for ds in templ.getRRDDataSources("SNMP"): 31 if not ds.enabled: continue 32 oid = ds.oid 33 if not oid: continue 34 snmpindex = getattr(comp, "ifindex", comp.snmpindex) 35 if snmpindex: oid = "%s.%s" % (oid, snmpindex) 36 for dp in ds.getRRDDataPoints(): 37 cname = comp.meta_type != "Device" \ 38 and comp.viewName() or dp.id 39 oids.append((cname, 40 oid, 41 "/".join((basepath, dp.name())), 42 dp.rrdtype, 43 dp.getRRDCreateCommand(perfServer), 44 (dp.rrdmin, dp.rrdmax))) 45 return (oids, comp.getThresholdInstances('SNMP'))
46 47
48 -def getDeviceConfig(dev):
49 dev = dev.primaryAq() 50 if not dev.snmpMonitorDevice(): 51 log.debug("skipping %s SNMP monitoring disabled", dev.id) 52 return None 53 result = SnmpConfig() 54 oids, threshs = getComponentConfig(dev) 55 for comp in dev.os.getMonitoredComponents(collector="zenperfsnmp"): 56 cfg = getComponentConfig(comp) 57 if cfg: 58 oids.extend(cfg[0]) 59 threshs.extend(cfg[1]) 60 result.lastChangeTime = float(dev.getLastChange()) 61 result.device = dev.id 62 result.connInfo = dev.getSnmpConnInfo() 63 result.thresholds = threshs 64 result.oids = oids 65 return result
66
67 -class SnmpPerfConfig(PerformanceConfig):
68 69 @translateError
70 - def remote_getDevices(self, devices=None):
71 """Return the subset of devices that should be monitored. 72 73 If devices is empty, then all the monitored devices are given. 74 """ 75 if devices: 76 if not isinstance(devices, list): 77 devices = Set([devices]) 78 else: 79 devices = Set(devices) 80 snmp = [] 81 for dev in self.config.devices(): 82 if devices and dev.id not in devices: continue 83 dev = dev.primaryAq() 84 if dev.snmpMonitorDevice(): 85 snmp.append(dev.id) 86 return snmp
87 88
89 - def getDeviceConfig(self, device):
90 "Fill in the template method to push our configs" 91 return getDeviceConfig(device)
92 93 94 @translateError
95 - def remote_getDeviceConfigs(self, devices):
96 "Fetch the configs for the given devices" 97 result = [] 98 for d in devices: 99 device = self.getPerformanceMonitor().findDevice(d) 100 if device: 101 config = self.getDeviceConfig(device) 102 if config: 103 result.append(config) 104 return result
105 106 107 @translateError
108 - def remote_getDeviceUpdates(self, devices):
109 """Return a list of devices that have changed. 110 Takes a list of known devices and the time of last known change. 111 The result is a list of devices that have changed, 112 or not in the list.""" 113 lastChanged = dict(devices) 114 new = Set() 115 all = Set() 116 for dev in self.config.devices(): 117 dev = dev.primaryAq() 118 if dev.snmpMonitorDevice(): 119 all.add(dev.id) 120 if lastChanged.get(dev.id, 0) < float(dev.getLastChange()): 121 new.add(dev.id) 122 deleted = Set(lastChanged.keys()) - all 123 return list(new | deleted)
124 125
126 - def sendDeviceConfig(self, listener, config):
127 "Template method helper for PerformanceConfig.pushConfig" 128 return listener.callRemote('updateDeviceConfig', config)
129 130
131 - def update(self, object):
132 from Products.ZenModel.RRDDataSource import RRDDataSource 133 if isinstance(object, RRDDataSource): 134 if object.sourcetype != 'SNMP': 135 return 136 PerformanceConfig.update(self, object)
137