---
panlei
2019-11-07 52713b8d85e26a984ecaeef926c815e8cf8075b7
labelFilter/ruleForLabel.go
@@ -4,22 +4,24 @@
   "basic.com/dbapi.git"
   "basic.com/pubsub/protomsg.git"
   "basic.com/valib/logger.git"
   "github.com/golang/protobuf/proto"
   "github.com/knetic/govaluate"
   "ruleprocess/structure"
   "strconv"
   "time"
)
func Judge(msg structure.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)
   logger.Info("label的信息:", label.CameraName, label.DefenceLevel, label.Time)
   //logger.Info("label的信息:", label.CameraName, label.DefenceLevel, label.Time)
   if label.CameraName == "" {
      logger.Error("无效数据,直接返回")
      return
@@ -27,7 +29,7 @@
   //拿到所有规则组
   var api dbapi.EventPushApi
   b, allRules := api.FindAllDetails()
   logger.Info("查看所有规则组:", allRules)
   //logger.Info("查看所有规则组:", allRules)
   if !b {
      logger.Error("查询时间推送规则失败!")
   }
@@ -82,6 +84,7 @@
               logger.Info("通过规则,表达式为:", result)
               // 推送服务器
               pushData(ruleGroup.Urls, msg)
               logger.Info("时间推送所用时间:",time.Since(start))
               //os.Exit(1)
            } else {
               logger.Info("没通过规则,表达式为:", result)
@@ -97,7 +100,7 @@
// 是否符合时间规则
func timeJudge(label *Label, groupRule protomsg.EventPush) bool {
   timeNow := time.Now().Format("2006-01-02 15:04:05")
   logger.Info("标签过滤器起始时间为:",groupRule.TimeStart,groupRule.TimeEnd)
   //logger.Info("标签过滤器起始时间为:",groupRule.TimeStart,groupRule.TimeEnd)
   flag1 := isBefore(groupRule.TimeStart, timeNow)
   flag2 := isBefore(timeNow, groupRule.TimeEnd)
   if flag1 && flag2 {
@@ -134,7 +137,7 @@
   if rule.TopicArg == "addr" {
      formula = "'" + label.CameraAddr + "'" + rule.Operator + "'" + rule.RuleValue + "'"
   }
   logger.Info("-------打印摄像机规则公式:",formula)
   //logger.Info("-------打印摄像机规则公式:",formula)
   expression, err := govaluate.NewEvaluableExpression(formula);
   if err != nil {
      logger.Error("表达式有误,请检查!", formula)
@@ -149,7 +152,7 @@
      logger.Info("符合摄像机规则!")
      return "true"
   }
   logger.Info("不符合摄像机规则!")
   //logger.Info("不符合摄像机规则!")
   return "false"
}
@@ -171,7 +174,7 @@
            for _, liker := range arg.Liker {
               formula := "'" + liker.TableId + "'" + rule.Operator + "'" + rule.RuleValue + "'"
               expression, err := govaluate.NewEvaluableExpression(formula);
               logger.Info("-------打印底库规则公式:",formula)
               //logger.Info("-------打印底库规则公式:",formula)
               if err != nil {
                  logger.Error("表达式有误,请检查!", formula)
                  return "false"
@@ -211,7 +214,7 @@
            // 其他这个值先这么处理
            return "true"
         }
         logger.Info("-------打印人员规则公式:",formula)
         //logger.Info("-------打印人员规则公式:",formula)
         expression, err := govaluate.NewEvaluableExpression(formula);
         if err != nil {
            logger.Error("表达式有误,请检查!", formula)
@@ -235,7 +238,7 @@
            }
         } else {
            formula := strconv.Itoa(int(personGroup.AlarmLevel)) + rule.Operator + formate(rule.RuleValue)
            logger.Info("-------打印人员等级规则公式:",formula)
            //logger.Info("-------打印人员等级规则公式:",formula)
            expression, err := govaluate.NewEvaluableExpression(formula);
            if err != nil {
               logger.Error("表达式有误,请检查!", formula)
@@ -272,7 +275,7 @@
   } else {
      for _, def := range label.DefenceLevel {
         formula := strconv.Itoa(int(def)) + rule.Operator + rule.RuleValue
         logger.Info("-------打印布防等级规则公式:",formula)
         //logger.Info("-------打印布防等级规则公式:",formula)
         expression, err := govaluate.NewEvaluableExpression(formula);
         if err != nil {
            logger.Error("表达式有误,请检查!", formula)
@@ -297,7 +300,7 @@
func taskJudge(label *Label, rule *protomsg.EventPushRule) string {
   formula := "'"+label.TaskId +"'"+ rule.Operator +"'"+ rule.RuleValue+"'"
   expression, err := govaluate.NewEvaluableExpression(formula);
   logger.Info("-------打印任务规则公式:",formula)
   //logger.Info("-------打印任务规则公式:",formula)
   if err != nil {
      logger.Error("表达式有误,请检查!", formula)
      return "false"
@@ -319,8 +322,18 @@
func pushData(urls []*protomsg.PushUrl, data structure.ResultMsg) {
   for _, url := range urls {
      logger.Debug("看看推送地址:",url.Url)
      urlPool[url.Url] <- 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])
   }
}
// 把报警等级转化成汉字