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

Source Code for Module ZenHub.services.CommandConfig

  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 ZODB.POSException import POSError 
 16  from Products.ZenRRD.zencommand import Cmd, DeviceConfig, DataPointConfig 
 17  from Products.ZenHub.PBDaemon import translateError 
 18  from Products.DataCollector.Plugins import getParserLoader 
 19  import logging 
 20  log = logging.getLogger('zen.CommandConfig') 
 21   
22 -def getComponentCommands(comp, commandCache, commandSet, dmd):
23 """Return list of command definitions. 24 """ 25 perfServer = comp.device().getPerformanceServer() 26 for templ in comp.getRRDTemplates(): 27 basepath = comp.rrdPath() 28 for ds in templ.getRRDDataSources('COMMAND'): 29 if not ds.enabled: continue 30 parserName = getattr(ds, "parser", "Auto") 31 ploader = getParserLoader(dmd, parserName) 32 if ploader is None: 33 log.error("Could not load %s plugin", parserName) 34 continue 35 parser = ploader.create() 36 points = [] 37 for dp in ds.getRRDDataPoints(): 38 dpc = DataPointConfig() 39 dpc.id = dp.id 40 dpc.component = comp.id 41 dpc.rrdPath = "/".join((basepath, dp.name())) 42 dpc.rrdType = dp.rrdtype 43 dpc.rrdCreateCommand = dp.getRRDCreateCommand(perfServer) 44 dpc.rrdMin = dp.rrdmin 45 dpc.rrdMax = dp.rrdmax 46 dpc.data = parser.dataForParser(comp, dp) 47 points.append(dpc) 48 cmd = Cmd() 49 cmd.useSsh = getattr(ds, 'usessh', False) 50 cmd.cycleTime = ds.cycletime 51 cmd.component = ds.getComponent(comp) 52 cmd.eventClass = ds.eventClass 53 cmd.eventKey = ds.eventKey or ds.id 54 cmd.severity = ds.severity 55 cmd.parser = ploader 56 cmd.command = ds.getCommand(comp) 57 cmd = commandCache.setdefault(cmd.commandKey(), cmd) 58 cmd.points.extend(points) 59 commandSet.add(cmd) 60 return comp.getThresholdInstances('COMMAND')
61 62
63 -def getDeviceCommands(dev):
64 if not dev.monitorDevice(): 65 return None 66 cache = {} 67 cmds = set() 68 threshs = getComponentCommands(dev, cache, cmds, dev.getDmd()) 69 for o in dev.getMonitoredComponents(collector="zencommand"): 70 threshs.extend(getComponentCommands(o, cache, cmds, dev.getDmd())) 71 if cmds: 72 d = DeviceConfig() 73 d.lastChange = dev.getLastChange() 74 d.device = dev.id 75 d.ipAddress = dev.getManageIp() 76 d.port = dev.zCommandPort 77 d.username = dev.zCommandUsername 78 d.password = dev.zCommandPassword 79 d.loginTimeout = dev.zCommandLoginTimeout 80 d.commandTimeout = dev.zCommandCommandTimeout 81 d.keyPath = dev.zKeyPath 82 d.maxOids = dev.zMaxOIDPerRequest 83 d.concurrentSessions = dev.zSshConcurrentSessions 84 d.commands = list(cmds) 85 d.thresholds = threshs 86 return d 87 return None
88 89
90 -class CommandConfig(PerformanceConfig):
91 92 @translateError
93 - def remote_getDataSourceCommands(self, devices = None):
94 return self.getDataSourceCommands(devices)
95 96
97 - def getDeviceConfig(self, device):
99 100
101 - def sendDeviceConfig(self, listener, config):
102 return listener.callRemote('updateConfig', config)
103 104
105 - def getDataSourceCommands(self, devices = None):
106 '''Get the command configuration for all devices. 107 ''' 108 result = [] 109 for dev in self.config.devices(): 110 if devices and dev.id not in devices: continue 111 dev = dev.primaryAq() 112 try: 113 cmdinfo = getDeviceCommands(dev) 114 if not cmdinfo: continue 115 result.append(cmdinfo) 116 except POSError: raise 117 except: 118 self.log.exception("device %s", dev.id) 119 return result
120
121 - def update(self, object):
122 from Products.ZenModel.RRDDataSource import RRDDataSource 123 if isinstance(object, RRDDataSource): 124 if object.sourcetype != 'COMMAND': 125 return 126 127 PerformanceConfig.update(self, object)
128