def handleWarningFiles(self, trapdata): """ ' 处理所有告警文件并汇总,告警状态为最高值,告警信息逐行叠加 ' params: ' trapdata: 当前trap数据实例 ' return tuple: 由该类所有告警中的最高级别和所有告警信息叠加组成的元组 ' raise PluginException: 当操作文件异常或其他数据异常时抛出 """ logger.info("begin handle warnning files") statuslst = [] info = EsdkKeyDefines.ALARM_TABLE_HEAD_FORMAT try: warningfiles = os.listdir(self._filecachepath) if warningfiles is None or len(warningfiles) < 1: return (EsdkKeyDefines.STATUS_OK_INT, EsdkKeyDefines.STATUS_OK_STR) file = None for filename in warningfiles: agentip = filename.split(EsdkKeyDefines.CMD_FILE_NAME_SEP)[0] if not re.match(EsdkKeyDefines.IP_ADDRESS_FORMAT, agentip) is None and agentip == trapdata.AgentIp: file = open(self._constructFullFilename(filename), "r") firstRead = True for fileline in file.readlines(): fileline = fileline.strip(EsdkKeyDefines.NEWLINE_CHARACTER) if firstRead: firstRead = False statuslst.append(fileline.split(EsdkKeyDefines.CMD_FILE_CONTENT_SEP)[0]) info = info + fileline.split(EsdkKeyDefines.CMD_FILE_CONTENT_SEP)[1] else: info = info + fileline file.close() info = info + "</table>" if statuslst: statuslst.sort() logger.info("alarm level [%s],alarm info [%s]" % (statuslst[0], info)) return (EsdkUtils.covertStatus(statuslst[0]), info) else: logger.info("has no warnning") return (EsdkKeyDefines.NAGIOS_OK, EsdkKeyDefines.STATUS_OK_STR) except IOError, err: raise PluginException("Read warning file error. Cause: \n" + str(err)) if not file is None: file.close()
def _checkWarningCacheFiles(self, hostip, warningfiles): ''' ' 检查告警缓存文件 ' params: ' hostip: 受管主机IP ' warningfiles: 告警缓存文件 ' return: ' (status, info): 指定主机的状态和信息 ''' cachefile = None statuslst = [] info = EsdkKeyDefines.ALARM_TABLE_HEAD_FORMAT try: for filename in warningfiles: filenameseq = filename.split(EsdkKeyDefines.CMD_FILE_NAME_SEP) if len(filenameseq) < 2: continue agentip = filenameseq[0] if agentip == hostip: cachefile = open(self._configdata.Cachepath + os.path.sep + filename, 'r') firstRead = True for fileline in cachefile.readlines(): fileline = fileline.strip(EsdkKeyDefines.NEWLINE_CHARACTER) if firstRead: firstRead = False statuslst.append(int(fileline.split(EsdkKeyDefines.CMD_FILE_CONTENT_SEP)[0])) info += fileline.split(EsdkKeyDefines.CMD_FILE_CONTENT_SEP)[1] else: info += fileline info += '</table>' if statuslst: statuslst.sort() logger.info('alarm level [%s],alarm info [%s]' % (statuslst[0], info)) return (EsdkUtils.covertStatus(statuslst[0]), info) else: logger.info('has no warnning') return (EsdkKeyDefines.NAGIOS_OK, EsdkKeyDefines.STATUS_OK_STR) except Exception, err: print str(err) if not cachefile is None: cachefile.close()