---
panlei
2019-11-05 d69768180b26730ee88d978608031ed6386f3580
labelFilter/ruleForLabel.go
@@ -3,14 +3,21 @@
import (
   "basic.com/dbapi.git"
   "basic.com/pubsub/protomsg.git"
   "basic.com/valib/logger.git"
   "github.com/golang/protobuf/proto"
   "github.com/knetic/govaluate"
   "ruleprocess/logger"
   "ruleprocess/ruleserver"
   "ruleprocess/structure"
   "strconv"
   "time"
)
func Judge(msg ruleserver.ResultMsg) {
func PushSomthing(msg structure.ResultMsg) {
   defer func() {
      if err := recover(); err != nil {
         logger.Error("事件推送模块儿的异常捕获:",err)
      }
   }()
   start := time.Now()
   // 装配成自己可以识别的数据
   label := new(Label)
   label.DataFormatToLabel(msg)
@@ -33,7 +40,7 @@
         timeFlag := timeJudge(label, ruleGroup)
         if !timeFlag {
            logger.Info("不在规则的时间范围内,不推送!")
            return
            continue
         }
         result := ""
         var Connector string
@@ -45,19 +52,19 @@
         for _, rule := range ruleGroup.Rules {
            // 过每一个小规则
            if rule.TopicType == "camera" {
               result = Connector + cameraJudge(label, rule)
               result += Connector + cameraJudge(label, rule)
            }
            if rule.TopicType == "dbtable" {
               result = Connector + baseJudge(label, rule)
               result += Connector + baseJudge(label, rule)
            }
            if rule.TopicType == "task" {
               result = Connector + taskJudge(label, rule)
               result += Connector + taskJudge(label, rule)
            }
            if rule.TopicType == "person" {
               result = Connector + taskJudge(label, rule)
               result += Connector + taskJudge(label, rule)
            }
            if rule.TopicType == "alarmLevel" {
               result = Connector + defenceJudge(label, rule)
               result += Connector + defenceJudge(label, rule)
            }
         }
         // 得出总的判断结果
@@ -67,6 +74,7 @@
            expression, err := govaluate.NewEvaluableExpression(result);
            if err != nil {
               logger.Error("表达式有误,请检查!")
               return
            }
            result, err1 := expression.Evaluate(nil)
            if err1 != nil {
@@ -76,6 +84,7 @@
               logger.Info("通过规则,表达式为:", result)
               // 推送服务器
               pushData(ruleGroup.Urls, msg)
               logger.Info("时间推送所用时间:",time.Since(start))
               //os.Exit(1)
            } else {
               logger.Info("没通过规则,表达式为:", result)
@@ -107,6 +116,7 @@
   expression, err := govaluate.NewEvaluableExpression("t1 < t2");
   if err != nil {
      logger.Error("表达式有误,请检查!")
      return false
   }
   parameters := make(map[string]interface{}, 8)
   parameters["t1"] = time1
@@ -167,7 +177,7 @@
               logger.Info("-------打印底库规则公式:",formula)
               if err != nil {
                  logger.Error("表达式有误,请检查!", formula)
                  //return "false"
                  return "false"
               }
               result, err1 := expression.Evaluate(nil)
               if err1 != nil {
@@ -208,7 +218,7 @@
         expression, err := govaluate.NewEvaluableExpression(formula);
         if err != nil {
            logger.Error("表达式有误,请检查!", formula)
            //return "false"
            return "false"
         }
         result, err1 := expression.Evaluate(nil)
         if err1 != nil {
@@ -232,7 +242,7 @@
            expression, err := govaluate.NewEvaluableExpression(formula);
            if err != nil {
               logger.Error("表达式有误,请检查!", formula)
               //return "false"
               return "false"
            }
            result, err1 := expression.Evaluate(nil)
            if err1 != nil {
@@ -264,12 +274,12 @@
      }
   } else {
      for _, def := range label.DefenceLevel {
         formula := strconv.Itoa(int(def)) + rule.Operator + formate(rule.RuleValue)
         formula := strconv.Itoa(int(def)) + rule.Operator + rule.RuleValue
         logger.Info("-------打印布防等级规则公式:",formula)
         expression, err := govaluate.NewEvaluableExpression(formula);
         if err != nil {
            logger.Error("表达式有误,请检查!", formula)
            //return "false"
            return "false"
         }
         result, err1 := expression.Evaluate(nil)
         if err1 != nil {
@@ -309,11 +319,21 @@
}
// 调用目标服务器的插入接口
func pushData(urls []*protomsg.PushUrl, data ruleserver.ResultMsg) {
func pushData(urls []*protomsg.PushUrl, data structure.ResultMsg) {
   for _, url := range urls {
      logger.Debug("看看推送地址:",url.Url)
      Push("tcp://192.168.1.123:40012", data)
      bytes,err1 := proto.Marshal(data)
      if err1 != nil {
         logger.Info("序列化失败:",err1)
      }
      if _, ok := urlPool[url.Url] ; ok {
         urlPool[url.Url] <- bytes
         logger.Info("chan信息而: ", urlPool[url.Url])
      }
      logger.Info("chan信息以: ", urlPool[url.Url])
   }
}
// 把报警等级转化成汉字