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,"")
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,"")
def __init__(self): self.exp_map = AlarmExpMap() self.exp_parser = ExpParser()