Beispiel #1
0
class AlarmExpManager(Manager):
    def __init__(self):
        self.exp_map = AlarmExpMap()
        self.exp_parser = ExpParser()
        #self.exp_pattern = re.compile('^([a-zA-Z0-9_\\-]+)\\((.*)\\)$')
        #self.double_pattern = re.compile('^[0-9]+(\\.[0-9]*)?$') 
        #self.var_pattern = re.compile('^[0-9a-zA-Z\\._-]+$')
    
    def judge(self, host, rule, data_set):
        
        #节省重复解析计划的时间
        if rule.exp_func == None or rule.exp_func == None :
            (func_name, func, args) = self._parse_expression(rule.expression)
            rule.exp_func_name = func_name
            rule.exp_func = func
            rule.exp_args = args
        
        #为expression的上下文准备rule
        self.exp_map.host = host
        self.exp_map.rule = rule
        self.exp_map.data_set = data_set
        
        #如果host是cluster的就进行数组过滤进行提示, 感觉无用先去掉
        #filter_result = self.exp_map.filter_cluster()
        #if filter_result != None :
        #    return filter_result

        real_args,msg = self._get_args_from_ds(data_set,rule.exp_args)
        if real_args == None :
            return (contants.ALARM_ERROR, msg)
        begin = time.time()
        exp_result = apply(rule.exp_func,real_args)
        end = time.time()
        log.info("apply rule_name %s host %s func %s with args %s using %.3lf S" % (rule.name, host, rule.exp_func, str(real_args), end-begin ))
        return exp_result

    def _parse_expression(self, expression):
        '''
        使用语法解析工具解析,解析
        '''
        func_name,exp_list = self.exp_parser.parse_exp(expression)
        #log.info("parse the %s : %s %s" % expression,func_name," ".join(exp_list))
        if func_name != None :
            if hasattr(self.exp_map, func_name) :
                return (func_name, getattr(self.exp_map, func_name), exp_list )
            else:
                raise Exception("ExpError","can't find %s in map" % func_name)
        else:
            raise Exception("ExpError", "pattern can't match %s" % expression)
        
        
    def _get_args_from_ds(self, data_set, args):
        real_args = []
        for arg in args:
            value,msg = self.exp_parser.get_exp_value(arg,data_set)
            if value == None :
                return (None,msg)    
            real_args.append(value)
        return (real_args,"")
Beispiel #2
0
class AlarmExpManager(Manager):
    def __init__(self):
        self.exp_map = AlarmExpMap()
        self.exp_parser = ExpParser()
    
    def judge(self, host, rule, data_set):
        
        #节省重复解析计划的时间
        if rule.exp_func == None or rule.exp_func == None :
            (func_name, func, args) = self._parse_expression(rule.expression)
            rule.exp_func_name = func_name
            rule.exp_func = func
            rule.exp_args = args
        
        #为expression的上下文准备rule
        self.exp_map.host = host
        self.exp_map.rule = rule
        self.exp_map.data_set = data_set
        
        #如果host是cluster的就进行数组过滤进行提示, 感觉无用先去掉
        #filter_result = self.exp_map.filter_cluster()
        #if filter_result != None :
        #    return filter_result

        real_args,msg = self._get_args_from_ds(data_set,rule.exp_args)
        if real_args == None :
            log.info("rule_name %s host %s func args not get" % (rule.name, host))
            key_word = "%s(%s)" % (host, rule.name+" args not get")
            return [{"key_word":key_word,"msg":msg}]
        begin = time.time()
        exp_result = apply(rule.exp_func,real_args)
        end = time.time()
        log.info("apply rule_name %s host %s func %s with args %s using %.3lf S" % (rule.name, host, rule.exp_func, str(real_args), end-begin ))
        return exp_result

    def _parse_expression(self, expression):
        '''
        使用语法解析工具解析,解析
        '''
        func_name,exp_list = self.exp_parser.parse_exp(expression)
        #log.info("parse the %s : %s %s" % expression,func_name," ".join(exp_list))
        if func_name != None :
            if hasattr(self.exp_map, func_name) :
                return (func_name, getattr(self.exp_map, func_name), exp_list )
            else:
                raise Exception("ExpError","can't find %s in map" % func_name)
        else:
            raise Exception("ExpError", "pattern can't match %s" % expression)
        
        
    def _get_args_from_ds(self, data_set, args):
        real_args = []
        for arg in args:
            value,msg = self.exp_parser.get_exp_value(arg,data_set)
            if value == None :
                return (None,msg)    
            real_args.append(value)
        return (real_args,"")
Beispiel #3
0
 def __init__(self):
     self.exp_map = AlarmExpMap()
     self.exp_parser = ExpParser()