| | |
| | | |
| | | // 定时器元素 |
| | | type TimeElement struct { |
| | | N int // 按时间依次递减的当前值 |
| | | InitN int // 赋值后就不变的初始值 |
| | | Data AreaMap // |
| | | GroupId string // 联动规则需要记录下此时的规则组id |
| | | RuleResults []*RuleResult |
| | | N int // 按时间依次递减的当前值 |
| | | InitN int // 赋值后就不变的初始值 |
| | | BufferFlag int // 缓冲容错位 连续帧false才为false |
| | | AlarmFlag bool // 报警标志位 定时器开启后第一次报警时会被置为true 往后再来报警也不会插进ES |
| | | CacheSdkData SdkDatas // 定时器的缓存数据 持续时间类的开启定时器时要缓存一帧 |
| | | GroupId string // 联动规则需要记录下此时的规则组id |
| | | RuleResults []*RuleResult |
| | | } |
| | | type RuleResult struct { // 每个摄像机一个结构体 |
| | | type RuleResult struct { |
| | | // 每个摄像机一个结构体 |
| | | CameraId string // 摄像机id |
| | | Sort int32 // 摄像机在规则组中序号 |
| | | Result string // 摄像机过滤数据得出的结果 |
| | |
| | | for { |
| | | select { |
| | | case <-ticker.C: |
| | | logger.Info("定时器执行单元") |
| | | fmt.Println("定时器执行单元") |
| | | logger.Info("定时器执行单元", time.Now().Unix()) |
| | | fmt.Println("定时器执行单元", time.Now().Unix()) |
| | | // 每秒钟计数器池子里所有的计数器元素都减一,减到0的是该报警的 |
| | | for _, timeEle := range TimeEleList { |
| | | for k, timeEle := range TimeEleList { |
| | | if timeEle.N > 0 { |
| | | timeEle.N = timeEle.N - 1 |
| | | logger.Info("-------------------------------------打印定时器元素当前值-----------------------------------------:",timeEle.N) |
| | | logger.Error("-------------------------------------打印定时器元素当前值-----------------------------------------:", timeEle.N) |
| | | } |
| | | if timeEle.GroupId != "" && timeEle.N == 0{ |
| | | // 说明是联动任务的时间窗口 到点儿了该销毁了,再来了再创建 |
| | | delete(TimeEleList,k) |
| | | } |
| | | } |
| | | case stop := <-stopChan: |
| | | if stop { |
| | | logger.Info("定时器结束") |
| | | return |
| | | //os.Exit(0) |
| | | } |
| | | } |
| | |
| | | TimeTicker() |
| | | } |
| | | |
| | | // 定时器单元 废弃版本 |
| | | // func TimeTicker() chan bool { |
| | | // logger.Info("执行了timeTicker") |
| | | // ticker := time.NewTicker(1 * time.Second) |
| | | // stopChan := make(chan bool) |
| | | // go func(ticker *time.Ticker) { |
| | | // defer ticker.Stop() |
| | | // for { |
| | | // select { |
| | | // case <-ticker.C: |
| | | // //logger.Info("执行单元", "计数器集合2", TimeEleList) |
| | | // for k, timeEle := range TimeEleList { |
| | | // timeEle.n = timeEle.n - 1 |
| | | // //logger.Info("遍历的数值", TimeEleList) |
| | | // if timeEle.n == 0 { |
| | | // // do something alarm |
| | | // alarm(k, timeEle) |
| | | // } |
| | | // } |
| | | // case stop := <-stopChan: |
| | | // if stop { |
| | | // logger.Info("定时器结束") |
| | | // return |
| | | // } |
| | | // } |
| | | // } |
| | | // }(ticker) |
| | | // return stopChan |
| | | // } |
| | | |
| | | // 结构体根据某字段排序 |
| | | type SubList []*RuleResult |
| | |
| | | func (p resultList) Swap(i, j int) { p[i], p[j] = p[j], p[i] } |
| | | func (p resultList) Len() int { return len(p) } |
| | | func (p resultList) Less(i, j int) bool { return p[i].Sort < p[j].Sort } |
| | | |