---
panlei
2019-07-29 57c85bf5f3fd538e00c85533b99118dd1e9259ac
ruleserver/timeTicker.go
@@ -14,12 +14,12 @@
// 定时器元素
type TimeElement struct {
   N            int                  // 按时间依次递减的当前值
   InitN        int                  // 赋值后就不变的初始值
   BufferFlag   int                  // 缓冲容错位 连续n帧false才为false
   AlarmFlag    bool                 // 报警标志位 定时器开启后第一次报警时会被置为true 往后再来报警也不会插进ES
   N            int       // 按时间依次递减的当前值
   InitN        int       // 赋值后就不变的初始值
   BufferFlag   int       // 缓冲容错位 连续n帧false才为false
   AlarmFlag    bool      // 报警标志位 定时器开启后第一次报警时会被置为true 往后再来报警也不会插进ES
   CacheSdkData ResultMsg // 定时器的缓存数据 持续时间类的开启定时器时要缓存一帧
   GroupId      string               // 联动规则需要记录下此时的规则组id
   GroupId      string    // 联动规则需要记录下此时的规则组id
   RuleResults  []*RuleResult
}
type RuleResult struct {
@@ -45,7 +45,7 @@
            for k, timeEle := range TimeEleList {
               if timeEle.N > 0 {
                  timeEle.N = timeEle.N - 1
                  logger.Error("-------------------------------------打印定时器元素当前值-----------------------------------------:", timeEle.N)
                  logger.Error("-------------------------------------打印定时器计数元素当前值-----------------------------------------:", timeEle.N)
               }
               if timeEle.GroupId != "" && timeEle.N == 0 {
                  // 说明是联动任务的时间窗口 到点儿了该销毁了,再来了再创建
@@ -67,19 +67,18 @@
   TimeTicker()
}
// 判断是否符合定时器条件
func TimerAlarm(args *SdkDatas,groupId string,result bool) (string) {
   var flagTime string  //
func TimerAlarm(args *SdkDatas, groupId string, result bool) (string) {
   var flagTime string //
   // 判断有无此规则组的定时器
   flag := false
   for k,_ := range TimeEleList {
      logger.Debug("-----------------看看这个key和groupId",k,groupId)
   for k, _ := range TimeEleList {
      logger.Debug("-----------------看看这个key和groupId", k, groupId)
      if strings.Contains(k, groupId) {
         flag = true
      }
   }
   if flag {     // 有定时器
   if flag { // 有定时器
      if result { // 结果为真
         for k, timeEle := range TimeEleList {
            if strings.Contains(k, groupId) {
@@ -98,8 +97,8 @@
               if timeEle.N != 0 {
                  flagTime = "00"
                  // 有定时器但不为0把已打的标签删除
                  args.RuleResult = nil
                  logger.Debug("------------------------结果为真但计数器不到0,不报警,此时的计数器的值为:",timeEle.N)
                  // args.RuleResult = nil
                  logger.Debug("------------------------结果为真但计数器不到0,不报警,此时的计数器的值为:", timeEle.N)
               }
            }
         }
@@ -108,21 +107,20 @@
            if strings.Contains(k, groupId) {
               if timeEle.AlarmFlag {
                  if timeEle.BufferFlag == 0 {
                     logger.Debug("------------------------------杀死定时器,报警此帧状态改变的数据,此时的计数器的值为",timeEle.N)
                     logger.Debug("------------------------------杀死定时器,报警此帧状态改变的数据,此时的计数器的值为", timeEle.N)
                     flagTime = "12"
                     args.RuleResult["timeLabel"] = flagTime
                     delete(TimeEleList,k)
                     delete(TimeEleList, k)
                  } else {
                     if timeEle.BufferFlag > 0 {
                        timeEle.BufferFlag--
                     }
                  }
               } else {
                  delete(TimeEleList,k)
                  delete(TimeEleList, k)
               }
            }
         }
      }
   } else { // 无定时器
      if result {
@@ -134,6 +132,7 @@
   }
   return flagTime
}
// 结构体根据某字段排序
type SubList []*RuleResult