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

Source Code for Module ZenHub.services.ProcessConfig

  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   
 17  from Products.ZenRRD.zenprocess import Device, Process 
 18  from Products.ZenHub.PBDaemon import translateError 
 19   
20 -def getOSProcessConf(dev):
21 """ 22 Returns process monitoring configuration 23 24 @rtype: tuple (lastChangeTimeInSecs, (devname, (ip, port), 25 (community, version, timeout, tries), zMaxOIDPerRequest), 26 list of configs, list of thresholds) 27 """ 28 if not dev.snmpMonitorDevice(): 29 return None 30 procs = dev.getMonitoredComponents(collector='zenprocess') 31 if not procs: 32 return None 33 d = Device() 34 d.name = dev.id 35 d.lastChange = dev.getLastChange() 36 d.thresholds = [t for p in procs for t in p.getThresholdInstances('SNMP')] 37 d.snmpConnInfo = dev.getSnmpConnInfo() 38 for p in procs: 39 proc = Process() 40 proc.name = p.id 41 proc.originalName = p.name() 42 proc.ignoreParameters = ( 43 getattr(p.osProcessClass(), 'ignoreParameters', False)) 44 proc.restart = p.alertOnRestart() 45 proc.severity = p.getFailSeverity() 46 d.processes[p.id] = proc 47 return d
48 49
50 -class ProcessConfig(PerformanceConfig):
51
52 - def getProcessStatus(self, device=None):
53 "Get the known process status from the Event Manager" 54 from Products.ZenEvents.ZenEventClasses import Status_OSProcess 55 down = {} 56 conn = self.zem.connect() 57 try: 58 curs = conn.cursor() 59 query = ("SELECT device, component, count" 60 " FROM status" 61 " WHERE eventClass = '%s'" % Status_OSProcess) 62 if device: 63 query += " AND device = '%s'" % device 64 curs.execute(query) 65 for device, component, count in curs.fetchall(): 66 down[device] = (component, count) 67 finally: 68 self.zem.close(conn) 69 result = [] 70 for dev in self.config.devices(): 71 try: 72 component, count = down[dev.id] 73 result.append( (dev.id, component, count) ) 74 except KeyError: 75 pass 76 return result
77 78
79 - def getOSProcessConf(self, devices = None):
80 'Get the OS Process configuration for all devices.' 81 result = [] 82 for dev in self.config.devices(): 83 if devices and dev.id not in devices: 84 continue 85 dev = dev.primaryAq() 86 try: 87 procinfo = getOSProcessConf(dev) 88 if procinfo: 89 result.append(procinfo) 90 except POSError: raise 91 except: 92 self.log.exception("device %s", dev.id) 93 return result
94 95 96 @translateError
97 - def remote_getOSProcessConf(self, devices=None):
98 return self.getOSProcessConf(devices)
99 100 101 @translateError
102 - def remote_getProcessStatus(self, devices=None):
103 return self.getProcessStatus(devices)
104 105
106 - def getDeviceConfig(self, device):
108 109
110 - def sendDeviceConfig(self, listener, config):
111 return listener.callRemote('updateDevice', config)
112 113 114 @translateError
117