From 05d0f62ad1526aa136875ddb282c500d01107982 Mon Sep 17 00:00:00 2001 From: panlei <2799247126@qq.com> Date: 星期一, 05 八月 2019 17:23:27 +0800 Subject: [PATCH] --- --- labelFilter/ruleForLabel.go | 276 ++++++++++++++++++++++++++++++++++++++---------------- 1 files changed, 193 insertions(+), 83 deletions(-) diff --git a/labelFilter/ruleForLabel.go b/labelFilter/ruleForLabel.go index fe905b2..3588c9c 100644 --- a/labelFilter/ruleForLabel.go +++ b/labelFilter/ruleForLabel.go @@ -4,65 +4,80 @@ "basic.com/dbapi.git" "basic.com/pubsub/protomsg.git" "github.com/knetic/govaluate" + "os" "ruleprocess/logger" "ruleprocess/ruleserver" "strconv" "time" ) -func Judge(label *Label, result ruleserver.ResultMsg){ +func Judge(result ruleserver.ResultMsg){ + // 瑁呴厤鎴愯嚜宸卞彲浠ヨ瘑鍒殑鏁版嵁 + label := new(Label) + label.DataFormatToLabel(result) + logger.Info("label鐨勪俊鎭細",label.CameraName,label.DefenceLevel,label.Time) + if label.CameraName == "" { + logger.Error("鏃犳晥鏁版嵁锛岀洿鎺ヨ繑鍥�") + return + } //鎷垮埌鎵�鏈夎鍒欑粍 var api dbapi.EventPushApi b,allRules := api.FindAllDetails() + logger.Info("鏌ョ湅鎵�鏈夎鍒欑粍锛�",allRules) if !b { logger.Error("鏌ヨ鏃堕棿鎺ㄩ�佽鍒欏け璐ワ紒") } //閬嶅巻鎵�鏈夌殑瑙勫垯缁勶紝鐪嬬湅绗﹀悎鍝釜瑙勫垯缁勶紝灏辨妸鏁版嵁鎻掑叆鍒板摢涓鍒欑粍鐨勭洰鏍囨満鍣ㄤ笂 for _,ruleGroup := range allRules { - // 鍏堣繃鏃堕棿瑙勫垯 - timeJudge(label,ruleGroup) - result := "" - var Connector string - if ruleGroup.IsSatisfyAll { - Connector = "&&" - } else { - Connector = "||" - } - for _,rule := range ruleGroup.Rules { - // 杩囨瘡涓�涓皬瑙勫垯 - if rule.TopicType == "camera" { - result = Connector + cameraJudge(label,rule) - } - if rule.TopicType == "baseLibrary" { - result = Connector + baseJudge(label,rule) - } - if rule.TopicType == "task" { - result = Connector + taskJudge(label,rule) - } - if rule.TopicType == "person" { - result = Connector + taskJudge(label,rule) - } - if rule.TopicType == "defence" { - result = Connector + defenceJudge(label,rule) - } - } - // 寰楀嚭鎬荤殑鍒ゆ柇缁撴灉 - if result != "" { - result = result[2:] // 鎶婂墠涓や綅瀛楃鍘绘帀 - expression, err:= govaluate.NewEvaluableExpression(result); - if err != nil { - logger.Error("琛ㄨ揪寮忔湁璇紝璇锋鏌ワ紒") - } - result, err1:= expression.Evaluate(nil) - if err1 != nil { - logger.Error("甯﹀叆鍙傛暟鏈夎") - } - if result.(bool) { - logger.Info("閫氳繃瑙勫垯锛岃〃杈惧紡涓猴細",result) - // 鎺ㄩ�佹湇鍔″櫒 - pushData(ruleGroup.IpPorts,result.(ruleserver.ResultMsg)) + if ruleGroup.Enable { // 澶ц鍒欏紑鍏冲紑鍚姸鎬� + // 鍏堣繃鏃堕棿瑙勫垯 + timeJudge(label,ruleGroup) + result := "" + var Connector string + if ruleGroup.IsSatisfyAll { + Connector = "&&" } else { - logger.Info("娌¢�氳繃瑙勫垯,琛ㄨ揪寮忎负锛�",result) + Connector = "||" + } + for _,rule := range ruleGroup.Rules { + // 杩囨瘡涓�涓皬瑙勫垯 + if rule.TopicType == "camera" { + result = Connector + cameraJudge(label,rule) + } + if rule.TopicType == "baseLibrary" { + result = Connector + baseJudge(label,rule) + } + if rule.TopicType == "task" { + result = Connector + taskJudge(label,rule) + } + if rule.TopicType == "person" { + result = Connector + taskJudge(label,rule) + } + if rule.TopicType == "defence" { + result = Connector + defenceJudge(label,rule) + } + } + // 寰楀嚭鎬荤殑鍒ゆ柇缁撴灉 + if result != "" { + logger.Info("鎬荤殑鍒ゆ柇缁撴灉锛�",result) + result = result[2:] // 鎶婂墠涓や綅瀛楃鍘绘帀 + expression, err:= govaluate.NewEvaluableExpression(result); + if err != nil { + logger.Error("琛ㄨ揪寮忔湁璇紝璇锋鏌ワ紒") + } + result, err1:= expression.Evaluate(nil) + if err1 != nil { + logger.Error("甯﹀叆鍙傛暟鏈夎") + } + if result.(bool) { + logger.Info("閫氳繃瑙勫垯锛岃〃杈惧紡涓猴細",result) + // 鎺ㄩ�佹湇鍔″櫒 + pushData(ruleGroup.Urls,result.(ruleserver.ResultMsg)) + os.Exit(1) + } else { + logger.Info("娌¢�氳繃瑙勫垯,琛ㄨ揪寮忎负锛�",result) + os.Exit(1) + } } } } @@ -99,65 +114,126 @@ // 鏄惁绗﹀悎鎽勫儚鏈鸿鍒� func cameraJudge(label *Label,rule *protomsg.EventPushRule) string{ + formula := "" if rule.TopicArg == "cameraName" { - if label.CameraName == rule.RuleValue { - logger.Info("绗﹀悎鎽勫儚鏈哄悕绉拌鍒�") - return "true" - } else { - logger.Info("涓嶇鍚堟憚鍍忔満鍚嶇О瑙勫垯") - return "false" - } + formula = label.CameraName + rule.Operator + rule.RuleValue } if rule.TopicArg == "cameraLocation" { - if label.CameraAddr == rule.RuleValue { - logger.Info("绗﹀悎鎽勫儚鏈轰綅缃鍒�") - return "true" - } else { - logger.Info("涓嶇鍚堟憚鍍忔満浣嶇疆瑙勫垯") - return "false" - } + formula = label.CameraAddr + rule.Operator + rule.RuleValue } - return "" + expression, err:= govaluate.NewEvaluableExpression(formula); + if err != nil { + logger.Error("琛ㄨ揪寮忔湁璇紝璇锋鏌ワ紒",formula) + return "false" + } + result, err1:= expression.Evaluate(nil) + if err1 != nil { + logger.Error("甯﹀叆鍙傛暟鏈夎") + return "false" + } + if result.(bool) { + logger.Info("绗﹀悎鎽勫儚鏈鸿鍒�!") + return "true" + } + return "false" } // 鏄惁绗﹀悎搴曞簱瑙勫垯 func baseJudge(label *Label,rule *protomsg.EventPushRule) string{ - flag := "false" - for _,personGroup := range label.Persons { - for _,arg := range personGroup.Args { - for _,liker := range arg.Liker{ - if liker.TableId == rule.RuleValue { - logger.Info("绗﹀悎搴曞簱瑙勫垯锛�") - flag = "true" + if rule.RuleValue == "all" { + for _,personGroup := range label.Persons { + for _, arg := range personGroup.Args { + if len(arg.Liker) > 0 { + logger.Info("婊¤冻鍏ㄩ儴搴曞簱瑙勫垯") + return "true" } } } + return "false" + } else { + for _,personGroup := range label.Persons { + for _,arg := range personGroup.Args { + for _,liker := range arg.Liker{ + formula := liker.TableId + rule.Operator + rule.RuleValue + expression, err:= govaluate.NewEvaluableExpression(formula); + if err != nil { + logger.Error("琛ㄨ揪寮忔湁璇紝璇锋鏌ワ紒",formula) + //return "false" + } + result, err1:= expression.Evaluate(nil) + if err1 != nil { + logger.Error("甯﹀叆鍙傛暟鏈夎") + //return "false" + } + if result.(bool) { + logger.Info("绗﹀悎搴曞簱瑙勫垯!") + return "true" + } + } + } + } + return "false" } - return flag } //鏄惁绗﹀悎浜哄憳瑙勫垯 func personJudge(label *Label,rule *protomsg.EventPushRule) string{ for _,personGroup := range label.Persons { for _,person := range personGroup.Args { - if rule.TopicArg == "sex" && strconv.Itoa(int(person.ThftRes.Gender)) == rule.RuleValue{ - logger.Info("绗﹀悎浜哄憳鎬у埆瑙勫垯锛�") - return "true" + formula := "" + if rule.TopicArg == "sex"{ + formula = strconv.Itoa(int(person.ThftRes.Gender)) + rule.Operator + rule.RuleValue } - if rule.TopicArg == "race" && strconv.Itoa(int(person.ThftRes.Race)) == rule.RuleValue { - logger.Info("绗﹀悎浜哄憳绉嶆棌瑙勫垯锛�") + if rule.TopicArg == "race"{ + formula = strconv.Itoa(int(person.ThftRes.Race)) + rule.Operator + rule.RuleValue return "true" } - if rule.TopicArg == "age" && strconv.Itoa(int(person.ThftRes.Age)) == rule.RuleValue { - logger.Info("绗﹀悎浜哄憳骞撮緞瑙勫垯锛�") + if rule.TopicArg == "age"{ + formula = strconv.Itoa(int(person.ThftRes.Age)) + rule.Operator + rule.RuleValue return "true" } if rule.TopicArg == "others" { // 鍏朵粬杩欎釜鍊煎厛杩欎箞澶勭悊 return "true" } + expression, err:= govaluate.NewEvaluableExpression(formula); + if err != nil { + logger.Error("琛ㄨ揪寮忔湁璇紝璇锋鏌ワ紒",formula) + //return "false" + } + result, err1:= expression.Evaluate(nil) + if err1 != nil { + logger.Error("甯﹀叆鍙傛暟鏈夎") + //return "false" + } + if result.(bool) { + logger.Info("绗﹀悎浜哄憳瑙勫垯锛�",formula) + return "true" + } } - if strconv.Itoa(int(personGroup.AlarmLevel)) == rule.RuleValue { + if rule.TopicArg == "monitorLevel" { + if rule.RuleValue == "all" { + if len(personGroup.Args) > 0 { + logger.Info("绗﹀悎浜哄憳绛夌骇涓哄叏閮ㄧ殑瑙勫垯") + return "true" + } + } else { + formula := strconv.Itoa(int(personGroup.AlarmLevel)) + rule.Operator + rule.RuleValue + expression, err:= govaluate.NewEvaluableExpression(formula); + if err != nil { + logger.Error("琛ㄨ揪寮忔湁璇紝璇锋鏌ワ紒",formula) + //return "false" + } + result, err1:= expression.Evaluate(nil) + if err1 != nil { + logger.Error("甯﹀叆鍙傛暟鏈夎") + //return "false" + } + if result.(bool) { + logger.Info("绗﹀悎浜哄憳绛夌骇瑙勫垯!") + return "true" + } + } logger.Info("绗﹀悎浜哄憳鎶ヨ绛夌骇瑙勫垯锛�") return "true" } @@ -168,18 +244,50 @@ // 鏄惁绗﹀悎甯冮槻绛夌骇瑙勫垯 func defenceJudge(label *Label,rule *protomsg.EventPushRule) string{ - for _,def := range label.DefenceLevel { - if strconv.Itoa(int(def)) == rule.RuleValue { - logger.Info("绗﹀悎甯冮槻绛夌骇瑙勫垯锛�") + if rule.RuleValue == "all" { // 甯冮槻绛夌骇涓哄叏閮ㄦ椂鍙湁鏈夊竷闃茬瓑绾у嵆涓洪�氳繃 + if len(label.DefenceLevel) > 0 { + logger.Info("绗﹀悎甯冮槻绛夌骇瑙勫垯锛屽竷闃茬瓑绾т负鍏ㄩ儴") return "true" + } else { + logger.Info("涓嶇鍚堝竷闃茬瓑绾ц鍒�") + return "false" } + } else { + for _,def := range label.DefenceLevel { + formula := strconv.Itoa(int(def)) + rule.Operator + rule.RuleValue + expression, err:= govaluate.NewEvaluableExpression(formula); + if err != nil { + logger.Error("琛ㄨ揪寮忔湁璇紝璇锋鏌ワ紒",formula) + //return "false" + } + result, err1:= expression.Evaluate(nil) + if err1 != nil { + logger.Error("甯﹀叆鍙傛暟鏈夎") + //return "false" + } + if result.(bool) { + logger.Info("绗﹀悎甯冮槻绛夌骇瑙勫垯!") + return "true" + } + } + logger.Info("涓嶇鍚堝竷闃茬瓑绾ц鍒�") + return "false" } - logger.Info("涓嶇鍚堝竷闃茬瓑绾ц鍒�") - return "false" } // 鏄惁绗﹀悎浠诲姟瑙勫垯 func taskJudge(label *Label,rule *protomsg.EventPushRule) string{ - if label.TaskId == rule.RuleValue { + formula := label.TaskId + rule.Operator + rule.RuleValue + expression, err:= govaluate.NewEvaluableExpression(formula); + if err != nil { + logger.Error("琛ㄨ揪寮忔湁璇紝璇锋鏌ワ紒",formula) + return "false" + } + result, err1:= expression.Evaluate(nil) + if err1 != nil { + logger.Error("甯﹀叆鍙傛暟鏈夎") + return "false" + } + if result.(bool) { logger.Info("绗﹀悎浠诲姟瑙勫垯!") return "true" } @@ -187,6 +295,8 @@ return "false" } // 璋冪敤鐩爣鏈嶅姟鍣ㄧ殑鎻掑叆鎺ュ彛 -func pushData (urls []*protomsg.PushIpPort, data ruleserver.ResultMsg){ - +func pushData (urls []*protomsg.PushUrl, data ruleserver.ResultMsg){ + for _,url := range urls { + Push(url.Url,data) + } } \ No newline at end of file -- Gitblit v1.8.0