---
panlei
2019-11-07 2b2576642ae036b1930c1abbb628626e7fc500f5
ruleserver/timeTicker.go
@@ -3,6 +3,7 @@
import (
   "fmt"
   "ruleprocess/logger"
   "ruleprocess/structure"
   "strings"
   "time"
)
@@ -18,7 +19,7 @@
   InitN        int       // 赋值后就不变的初始值
   BufferFlag   int       // 缓冲容错位 连续n帧false才为false
   AlarmFlag    bool      // 报警标志位 定时器开启后第一次报警时会被置为true 往后再来报警也不会插进ES
   CacheSdkData ResultMsg // 定时器的缓存数据 持续时间类的开启定时器时要缓存一帧
   CacheSdkData structure.ResultMsg // 定时器的缓存数据 持续时间类的开启定时器时要缓存一帧
   GroupId      string    // 联动规则需要记录下此时的规则组id
   RuleResults  []*RuleResult
}
@@ -28,38 +29,40 @@
   Sort        int32     // 摄像机在规则组中序号
   Result      string    // 摄像机过滤数据得出的结果
   RuleWithPre string    // 摄像机之间的连接符
   CacheData   ResultMsg // 缓存当前帧数据
   CacheData   structure.ResultMsg // 缓存当前帧数据
}
func TimeTicker() {
   ticker := time.NewTicker(1 * time.Second)
   go func(ticker *time.Ticker) {
      defer ticker.Stop()
      for {
         select {
         case <-ticker.C:
            logger.Info("定时器执行单元", time.Now().Unix())
            fmt.Println("定时器执行单元", time.Now().Unix())
            // 每秒钟计数器池子里所有的计数器元素都减一,减到0的是该报警的
            for k, timeEle := range TimeEleList {
               if timeEle.N > 0 {
                  timeEle.N = timeEle.N - 1
                  logger.Error("-------------------------------------打印定时器计数元素当前值-----------------------------------------:", timeEle.N)
               }
               if timeEle.GroupId != "" && timeEle.N == 0 {
                  // 说明是联动任务的时间窗口 到点儿了该销毁了,再来了再创建
                  delete(TimeEleList, k)
               }
   //go func(ticker *time.Ticker) {
   defer ticker.Stop()
   for {
      select {
      case <-ticker.C:
         logger.Info("定时器执行单元", time.Now().Unix())
         fmt.Println("定时器执行单元", time.Now().Unix())
         // 每秒钟计数器池子里所有的计数器元素都减一,减到0的是该报警的
         rw.Lock()
         for k, timeEle := range TimeEleList {
            if timeEle.N > 0 {
               timeEle.N = timeEle.N - 1
               logger.Error("-------------------------------------打印定时器计数元素当前值-----------------------------------------:", timeEle.N)
            }
         case stop := <-stopChan:
            if stop {
               logger.Info("定时器结束")
               return
               //os.Exit(0)
            if timeEle.GroupId != "" && timeEle.N == 0 {
               // 说明是联动任务的时间窗口 到点儿了该销毁了,再来了再创建
               delete(TimeEleList, k)
            }
         }
         rw.Unlock()
      case stop := <-stopChan:
         if stop {
            logger.Info("定时器结束")
            return
            //os.Exit(0)
         }
      }
   }(ticker)
   }
   //}(ticker)
}
func StopTimeTicker() {
   stopChan <- true
@@ -67,7 +70,7 @@
}
// 判断是否符合定时器条件
func TimerAlarm(oth *Others, groupId string, result bool) (string) {
func TimerAlarm(oth *structure.Others, groupId string, result bool) (string) {
   var flagTime string //
   // 判断有无此规则组的定时器
   flag := false
@@ -91,7 +94,7 @@
                  logger.Debug("———————————-------------首次符合持续时间规则并报警")
                  flagTime = "10"
                  timeEle.AlarmFlag = true
                  oth.CacheData = []ResultMsg{}
                  oth.CacheData = []structure.ResultMsg{}
                  oth.CacheData = append(oth.CacheData,timeEle.CacheSdkData)
                  oth.TimeLabel = flagTime
               }
@@ -145,7 +148,7 @@
func (p SubList) Less(i, j int) bool { return p[i].Sort < p[j].Sort }
// 结构体根据某字段排序
type resultList []*LittleRuleResult
type resultList []*structure.LittleRuleResult
func (p resultList) Swap(i, j int)      { p[i], p[j] = p[j], p[i] }
func (p resultList) Len() int           { return len(p) }