From 0489506a01dbdaa51f36667e96dfd96742799e09 Mon Sep 17 00:00:00 2001
From: panlei <2799247126@qq.com>
Date: 星期二, 24 九月 2019 10:17:58 +0800
Subject: [PATCH] 配置文件读法改为读缓存
---
ruleserver/ruleToformula.go | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++--------
1 files changed, 52 insertions(+), 8 deletions(-)
diff --git a/ruleserver/ruleToformula.go b/ruleserver/ruleToformula.go
index fdc25cd..5e00666 100644
--- a/ruleserver/ruleToformula.go
+++ b/ruleserver/ruleToformula.go
@@ -6,6 +6,7 @@
"sort"
"strconv"
"strings"
+ "sync"
"time"
"basic.com/pubsub/protomsg.git"
@@ -111,8 +112,15 @@
Sort int32
}
+var rw sync.RWMutex // 璇诲啓閿�
+
// 瀵瑰崟甯у浘鍍忕殑鍒ゆ柇 thisSdkDatas 褰撳墠浼犲叆鐨勮繖甯ф暟鎹紝cacheSdkData 瀹氭椂鍣ㄩ噷缂撳瓨鐨勪竴甯ф暟鎹� 娌℃湁灏辫繑鍥瀗il (thisSdkDatas SdkDatas, cacheSdkDatas SdkDatas)
func Judge(args *SdkDatas, message *protomsg.SdkMessage) {
+ defer func() {
+ if err := recover(); err != nil {
+ logger.Error("瑙勫垯妯″潡鍎跨殑寮傚父鎹曡幏锛�",err)
+ }
+ }()
if len(args.Sdkdata) > 0 {
// 鎷垮埌鏈憚鍍忔満鐨勫尯鍩�
cameraPolygons := GetPolygons(args.CameraId)
@@ -161,7 +169,7 @@
}
}
-func RunRule(args *SdkDatas, groupRule *protomsg.GroupRule, taskId string, message *protomsg.SdkMessage, label Others) bool {
+func RunRule(args *SdkDatas, groupRule *protomsg.GroupRule, taskId string, message *protomsg.SdkMessage, label Others) (bool,[]int) {
defer func() {
if err := recover(); err != nil {
logger.Error("姣斿瑙勫垯鏈夎", err.(string))
@@ -357,27 +365,30 @@
} else {
islink = false
}
+ var labelTypes []int // 0涓簓olo鏍囩锛�1涓篺ace鏍囩 2涓轰袱鑰呮爣绛�
if sdkNames != "" {
args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]Result), Result{taskId, sdkNames, groupRule.GroupId, groupRule.DefenceState, groupRule.AlarmLevel, groupRule.GroupText, locations, polygonId, islink,label,})
+ labelTypes = append(labelTypes,0)
//logger.Info("-------------------yolo缁撴灉鏍囩闀垮害", len(args.RuleResult["yolo"].([]Result)))
}
if faceFlag {
args.RuleResult["face"] = append(args.RuleResult["face"].([]FaceResult), FaceResult{Result{taskId, sdkNames, groupRule.GroupId, groupRule.DefenceState, groupRule.AlarmLevel, groupRule.GroupText, []Rect{}, polygonId, islink,label,}, faces})
//logger.Info("-------------------face缁撴灉鏍囩", len(args.RuleResult["face"].([]FaceResult)))
+ labelTypes = append(labelTypes,1)
}
- return true
+ return true,labelTypes
} else {
- return false
+ return false,[]int{}
}
} else {
// 缁撴灉涓哄亣鏃朵篃瑕佽蛋锛屾湁鏉�姝诲畾鏃跺櫒鐨勬搷浣�
TimerAlarm(&label, groupRule.GroupId, result.(bool))
//fmt.Println(timeFlag)
- return false
+ return false,[]int{}
}
} else {
- return false
+ return false,[]int{}
}
}
@@ -417,11 +428,15 @@
logger.Info("------------------------------------------褰撳墠鏄仈鍔ㄤ换鍔★紝瑙勫垯鏄細", groupRule.GroupText)
var flag bool = true
var timeEle = TimeElement{N: 2, InitN: 2, GroupId: groupRule.GroupId}
+ rw.Lock()
for k, timeEle1 := range TimeEleList {
if k == groupRule.GroupId {
flag = false // 宸茬粡鏈変簡杩欎釜瀹氭椂鍣ㄥ氨缃负false 涓嶅啀鏂板
timeEle = *timeEle1
}
+ }
+ for _,ruleRe := range timeEle.RuleResults {
+ logger.Info("鑱斿姩鏁扮粍閲岀殑鏁版嵁----",ruleRe.CameraId,ruleRe.Sort)
}
if flag { // 濡傛灉杩樻病鏈夎繖涓畾鏃跺櫒鍏冪礌灏辨柊澧炰竴涓�
//timeEle := TimeElement{N: 2, InitN: 2, GroupId: groupRule.GroupId} // 鎵旇繘鍘讳竴涓畾鏃跺櫒鍏冪礌
@@ -431,7 +446,9 @@
// 寰楀嚭杩欑粍瀹屾暣瑙勫垯閲屾秹鍙婂埌鍑犱釜鎽勫儚鏈猴紝鍐冲畾鐫�鏁扮粍閲屾湁鍑犱釜缁撴瀯浣�,鍘婚噸娣诲姞鏂瑰紡
for j := 0; j < len(groupRule.Rules); j++ {
var flag1 bool = true
+ logger.Info("瑙勫垯缁勪俊鎭細",groupRule.Rules[j].CameraId)
for _, ruleRes := range TimeEleList[groupRule.GroupId].RuleResults {
+ logger.Info("鑱斿姩鏁扮粍閲岀殑鏁版嵁锛�",ruleRes.CameraId,ruleRes.Sort)
if groupRule.Rules[j].CameraId == ruleRes.CameraId {
flag1 = false
}
@@ -441,8 +458,9 @@
}
}
}
+ rw.Unlock()
// 寰�鏁扮粍閲岃祴鍊�
- isOk := RunRule(args, groupRule, taskId, message, label)
+ isOk,labelTypes := RunRule(args, groupRule, taskId, message, label)
if isOk {
logger.Info("杩欏抚鍥惧儚鍦ㄤ换鍔′笅鐨勪竴鏁存潯瑙勫垯涓嬶紙鑱斿姩浠诲姟涓嬪氨鏄窡鏈憚鍍忔満鍍忕浉鍏崇殑灏忚鍒欙級鐨勫垽鏂粨鏋滀负true")
// 鏍规嵁cameraId鍘绘洿鏂版垨鑰呮彃鍏ョ粨鏋�,鐒跺悗鍒ゆ柇鏄惁鏁扮粍鏄惁鍙互寰楀嚭鎶ヨ鐨勭粨璁�
@@ -492,6 +510,7 @@
result, _ := expression.Evaluate(nil) // 寰楀埌鏁板鍏紡鐨勭粨鏋�
if result.(bool) {
logger.Info("___________________________________________________________________鑱斿姩浠诲姟鎶ヨ")
+ rw.RLock()
if TimeEleList[groupRule.GroupId] != nil { // 鏋佸伓灏旀湁鎯呭喌浼氱瓑浜巒il锛屼笉鐭ラ亾涓哄暐锛屽仛涓垽鏂互闃插畷鏈�
// 鎶婃暟缁勯噷缂撳瓨鐨勬暟鎹彇鍑烘潵涓�璧锋姤璀�
label.LinkCache = []ResultMsg{}
@@ -510,13 +529,28 @@
}
}
}
+ rw.RUnlock()
}
}
} else {
logger.Warn("鏁扮粍涓嶅渾婊′笉鎵撴爣绛�")
// 鍊掓槸鎶婃墦鐨勭粍瑙勫垯鏍囩缁欏幓鎺変簡鍟�
- lens := len(args.RuleResult["yolo"].([]Result))-1
- args.RuleResult["yolo"] = args.RuleResult["yolo"].([]Result)[0:lens]
+ for _,val := range labelTypes {
+ if val == 0 {
+ if len(args.RuleResult["yolo"].([]Result)) >= 1 {
+ lens := len(args.RuleResult["yolo"].([]Result))-1
+ args.RuleResult["yolo"] = args.RuleResult["yolo"].([]Result)[0:lens]
+ }
+ }
+ if val == 1 {
+ if len(args.RuleResult["face"].([]FaceResult)) >= 1 {
+ lens := len(args.RuleResult["face"].([]FaceResult))-1
+ args.RuleResult["face"] = args.RuleResult["face"].([]FaceResult)[0:lens]
+ }
+ }
+ }
+
+
}
} else { // 娌℃湁鎶ヨ锛�
//logger.Info("杩欏抚鍥惧儚鍦ㄤ换鍔′笅鐨勪竴鏁存潯瑙勫垯涓嬶紙鑱斿姩浠诲姟涓嬪氨鏄窡鏈憚鍍忔満鍍忕浉鍏崇殑灏忚鍒欙級鐨勫垽鏂粨鏋滀负false")
@@ -526,12 +560,14 @@
// va.Result = strconv.FormatBool(isOk)
// }
//}
+ rw.Lock()
for k, _ := range TimeEleList {
if k == groupRule.GroupId {
delete(TimeEleList, k)
logger.Debug("鍥犱负瀹氭椂鍣ㄧ殑涓�甯ф暟鎹粨鏋滀负false锛屽共鎺夊畾鏃跺櫒")
}
}
+ rw.Unlock()
// 鍥犱负鏈抚鏁版嵁涓嶇鍚堣鍒欙紝鎵�浠ヤ篃涓嶇敤缁熻缁撴灉鏁扮粍閲岀殑涓滆タ
}
@@ -662,6 +698,12 @@
return LittleRuleResult{am.sdkName, rule.RuleWithPre + "" + "false", rule.Sort}
}
+ } else if rule.SdkArgAlias == "" {
+ if am.targetNum > 0 {
+ return LittleRuleResult{am.sdkName, rule.RuleWithPre + "" + "true", rule.Sort}
+ } else {
+ return LittleRuleResult{am.sdkName, rule.RuleWithPre + "" + "false", rule.Sort}
+ }
} else {
return LittleRuleResult{}
}
@@ -678,6 +720,7 @@
if rule.SdkArgAlias == "duration" { //
logger.Info("褰撳墠灏忚鍒欐槸锛�---------", rule)
// 鍏堢湅鐪嬪畾鏃跺櫒鍏冪礌闃熷垪涓槸鍚︽湁杩欐潯瑙勫垯鐨勫畾鏃跺櫒,濡傛灉鏈夊氨涓嶈兘鍐嶆鍒涘缓浜�
+ rw.Lock()
var flag bool = true
for k, _ := range TimeEleList {
if k == groupId+"+"+rule.Id {
@@ -693,6 +736,7 @@
TimeEleList[groupId+"+"+rule.Id] = &timeEle // 瀹氭椂鍣ㄥ厓绱犱互褰撳墠鎸佺画鏃堕棿灏忚鍒檌d涓洪敭
logger.Info("鍒涘缓浜嗚鏁板櫒")
}
+ rw.Unlock()
}
}
}
--
Gitblit v1.8.0