Ejemplo n.º 1
0
    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()
Ejemplo n.º 2
0
 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()