From d7c6faf69ff5cd591530c917d99354b4ece9290f Mon Sep 17 00:00:00 2001 From: panlei <2799247126@qq.com> Date: 星期四, 07 十一月 2019 16:16:02 +0800 Subject: [PATCH] --- --- ruleserver/timeTicker.go | 155 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 155 insertions(+), 0 deletions(-) diff --git a/ruleserver/timeTicker.go b/ruleserver/timeTicker.go new file mode 100644 index 0000000..a572879 --- /dev/null +++ b/ruleserver/timeTicker.go @@ -0,0 +1,155 @@ +package ruleserver + +import ( + "fmt" + "basic.com/valib/logger.git" + "ruleprocess/structure" + "strings" + "time" +) + +var stopChan = make(chan bool) + +// 璁℃暟鍣╩ap 鐙珛浠诲姟鐨勯敭鏄换鍔d鎷兼帴鍖哄煙id 鑱斿姩浠诲姟鐨勯敭鏄痝roupid锛堣兘涓嶈兘閮界敤groupId?锛� +var TimeEleList = make(map[string]*TimeElement) + +// 瀹氭椂鍣ㄥ厓绱� +type TimeElement struct { + N int // 鎸夋椂闂翠緷娆¢�掑噺鐨勫綋鍓嶅�� + InitN int // 璧嬪�煎悗灏变笉鍙樼殑鍒濆鍊� + BufferFlag int // 缂撳啿瀹归敊浣� 杩炵画n甯alse鎵嶄负false + AlarmFlag bool // 鎶ヨ鏍囧織浣� 瀹氭椂鍣ㄥ紑鍚悗绗竴娆℃姤璀︽椂浼氳缃负true 寰�鍚庡啀鏉ユ姤璀︿篃涓嶄細鎻掕繘ES + CacheSdkData structure.ResultMsg // 瀹氭椂鍣ㄧ殑缂撳瓨鏁版嵁 鎸佺画鏃堕棿绫荤殑寮�鍚畾鏃跺櫒鏃惰缂撳瓨涓�甯� + GroupId string // 鑱斿姩瑙勫垯闇�瑕佽褰曚笅姝ゆ椂鐨勮鍒欑粍id + RuleResults []*RuleResult +} +type RuleResult struct { + // 姣忎釜鎽勫儚鏈轰竴涓粨鏋勪綋 + CameraId string // 鎽勫儚鏈篿d + Sort int32 // 鎽勫儚鏈哄湪瑙勫垯缁勪腑搴忓彿 + Result string // 鎽勫儚鏈鸿繃婊ゆ暟鎹緱鍑虹殑缁撴灉 + RuleWithPre string // 鎽勫儚鏈轰箣闂寸殑杩炴帴绗� + 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鐨勬槸璇ユ姤璀︾殑 + rw.Lock() + 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) + } + } + rw.Unlock() + case stop := <-stopChan: + if stop { + logger.Info("瀹氭椂鍣ㄧ粨鏉�") + return + //os.Exit(0) + } + } + } + //}(ticker) +} +func StopTimeTicker() { + stopChan <- true + TimeTicker() +} + +// 鍒ゆ柇鏄惁绗﹀悎瀹氭椂鍣ㄦ潯浠� +func TimerAlarm(oth *structure.Others, groupId string, result bool) (string) { + var flagTime string // + // 鍒ゆ柇鏈夋棤姝よ鍒欑粍鐨勫畾鏃跺櫒 + flag := false + rw.Lock() + for k, _ := range TimeEleList { + //logger.Debug("-----------------鐪嬬湅杩欎釜key鍜実roupId", k, groupId) + if strings.Contains(k, groupId) && k != groupId{ + flag = true + } + } + if flag { // 鏈夊畾鏃跺櫒 + if result { // 缁撴灉涓虹湡 + for k, timeEle := range TimeEleList { + if strings.Contains(k, groupId) && k != groupId{ + if timeEle.N == 0 && timeEle.AlarmFlag { + logger.Debug("-------------------------绗﹀悎鎸佺画鏃堕棿瑙勫垯浣嗗苟涓嶆槸棣栨锛屼笉鎶ヨ") + flagTime = "11" + oth.TimeLabel = flagTime + } + if timeEle.N == 0 && !timeEle.AlarmFlag { // 杩欑粍瑙勫垯鐨勫畾鏃跺櫒瑕佸叏閮ㄧ瓑浜�0 鏆備笖璁や负涓�缁勮鍒欏彧鏈変竴涓畾鏃跺櫒 + logger.Debug("鈥斺�斺�斺�斺�斺�斺�斺�斺�斺�斺��-------------棣栨绗﹀悎鎸佺画鏃堕棿瑙勫垯骞舵姤璀�") + flagTime = "10" + timeEle.AlarmFlag = true + oth.CacheData = []structure.ResultMsg{} + oth.CacheData = append(oth.CacheData,timeEle.CacheSdkData) + oth.TimeLabel = flagTime + } + if timeEle.N != 0 { + flagTime = "00" + // 鏈夊畾鏃跺櫒浣嗕笉涓�0鎶婂凡鎵撶殑鏍囩鍒犻櫎 + // args.RuleResult = nil + logger.Debug("------------------------缁撴灉涓虹湡浣嗚鏁板櫒涓嶅埌0锛屼笉鎶ヨ,姝ゆ椂鐨勮鏁板櫒", k, "鐨勫�间负锛�", timeEle.N) + } + } + } + } else { // 缁撴灉涓哄亣 + for k, timeEle := range TimeEleList { + if strings.Contains(k, groupId) && k != groupId{ + if timeEle.AlarmFlag { + if timeEle.BufferFlag == 0 { + logger.Debug("------------------------------鏉�姝诲畾鏃跺櫒锛屾姤璀︽甯х姸鎬佹敼鍙樼殑鏁版嵁锛屾鏃剁殑璁℃暟鍣ㄧ殑鍊间负", timeEle.N) + flagTime = "12" + oth.TimeLabel = flagTime + delete(TimeEleList, k) + } else { + if timeEle.BufferFlag > 0 { + logger.Debug("缂撳啿鍖哄噺鍑�") + timeEle.BufferFlag-- + } + } + } else { + logger.Debug("-----------缁撴灉涓哄亣涓斾笉鍒�0锛屾潃姝诲畾鏃跺櫒") + delete(TimeEleList, k) + } + } + } + } + } else { // 鏃犲畾鏃跺櫒 + if result { + flagTime = "01" + oth.TimeLabel = flagTime + } else { + flagTime = "00" + } + } + rw.Unlock() + return flagTime +} + +// 缁撴瀯浣撴牴鎹煇瀛楁鎺掑簭 +type SubList []*RuleResult + +func (p SubList) Swap(i, j int) { p[i], p[j] = p[j], p[i] } +func (p SubList) Len() int { return len(p) } +func (p SubList) Less(i, j int) bool { return p[i].Sort < p[j].Sort } + +// 缁撴瀯浣撴牴鎹煇瀛楁鎺掑簭 +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) } +func (p resultList) Less(i, j int) bool { return p[i].Sort < p[j].Sort } -- Gitblit v1.8.0