def monitorProcExist(monitorObjectList): """ 判断指定的线程是否有存在。 @monitorObjectList: [{'proc_name':procName,'proc_cpu_limit':procCpuLimit}] """ warnToPersonList=[] procNameMap={} for monitorProcObject in monitorObjectList: if procNameMap.has_key(monitorProcObject['proc_name'])==False: procNameMap[monitorProcObject['proc_name']]=False pidObjectList=SystemInfo.getCPUUsedByPidName(procNameMap.keys()) if pidObjectList==None: log.info('psutil的插件没有安装,或者不支持psutil的低版本的linux。') return warnToPersonList for pidObject in pidObjectList:#如果线程已经存在,将状态设置成True procNameMap[pidObject[0]]=True warnStr='' for procName,isExist in procNameMap.iteritems(): if isExist==False and len(warnStr)==0: warnStr=MONITOR_NAME+' 线程告警:线程名称:'+procName+'不存在.' elif isExist==False: warnStr+=',线程名称:'++procName+'不存在.' if len(warnStr)>0: log.info('线程告警: %s',warnStr) warnToPersonList.append(warnStr) return warnToPersonList
def monitorProcCpu(monitorObjectList,saveDbMsgDict): """ 1.根据线程名称获取相应线程的告警信息. @monitorObjectList: [{'proc_name':procName,'proc_cpu_limit':procCpuLimit}] """ warnToPersonList=[] procNameMap={} for monitorProcObject in monitorObjectList: if procNameMap.has_key(monitorProcObject['proc_name'])==False and monitorProcObject['proc_cpu_limit'].isdigit(): procNameMap[monitorProcObject['proc_name']]=monitorProcObject['proc_cpu_limit'] pidObjectList=SystemInfo.getCPUUsedByPidName(procNameMap.keys()) if pidObjectList==None: log.info('psutil的插件没有安装,或者不支持psutil的低版本的linux。') return warnToPersonList saveDBMsgDict['procCpu']=pidObjectList for pidObject in pidObjectList: if pidObject[2]>=float(procNameMap[pidObject[0]]): log.info('线程CPU告警: pid:%s,pid_name:%s,cpu_limit:%s,real_cpu:%s',pidObject[0],pidObject[1],procNameMap[pidObject[0]],str(pidObject[2])) warnStr=MONITOR_NAME+' 线程CPU告警:线程名称:'+pidObject[0]+' 线程ID:'+pidObject[1]+' 阀值:'+procNameMap[pidObject[0]]++' 时间值:'+str(pidObject[2]) warnToPersonList.append(warnStr) return warnToPersonList