From 1a7d2c309893b38554fdee05c4b92d2618d66451 Mon Sep 17 00:00:00 2001
From: panlei <2799247126@qq.com>
Date: 星期二, 26 十一月 2019 11:26:08 +0800
Subject: [PATCH] 给摄像机追踪推送规则数据并引入log4go

---
 go.sum                            |    4 +
 ruleserver/pushPolygonForTrack.go |  116 +++++++++++++++++++++++++++++
 cache/cache.go                    |   38 +++++++++
 go.mod                            |    3 
 main.go                           |   10 ++
 logger/log4go.json                |   31 +++++++
 6 files changed, 199 insertions(+), 3 deletions(-)

diff --git a/cache/cache.go b/cache/cache.go
index 2706eb1..9f4381d 100644
--- a/cache/cache.go
+++ b/cache/cache.go
@@ -50,7 +50,9 @@
 
 	initTimeRules() //鍒濆鍖栨椂闂磋鍒欑紦瀛�
 
-	initCameraTaskRules() //鍒濆鍖栨憚鍍忔満浠诲姟瑙勫垯缂撳瓨
+	initCameraTaskRules() //鍒濆鍖栨憚鍍忔満浠诲姟瑙勫垯缂撳瓨鎸夋憚鍍忔満
+
+	initCameraTaskRulesAll() // 鍒濆鍖栨憚鍍忔満浠诲姟瑙勫垯缂撳瓨鍏ㄩ儴
 
 	initCamera() //鍒濆鍖栨憚鍍忔満淇℃伅
 
@@ -85,6 +87,7 @@
 		initCameraTaskRules()
 	case protomsg.TableChanged_T_CameraTaskArgs: //鏇存柊鎽勫儚鏈鸿鍒欓厤缃弬鏁�
 		initCameraTaskRules()
+		initCameraTaskRulesAll()
 	case protomsg.TableChanged_T_Sdk: //鏇存柊sdk閰嶇疆
 		initSdks()
 	default:
@@ -127,6 +130,16 @@
 		cMap.Set(PREFIX_POLYGON+k, v)
 	}
 }
+// 缂撳瓨鍖哄煙骞朵笉鏍规嵁id
+func initPolygonsById() {
+	var api dbapi.CameraApi
+	data := api.FindAllPolygons()
+	for _, item := range data {
+		if item.Type != "line" {
+			cMap.Set(PREFIX_POLYGON+item.Id, item)
+		}
+	}
+}
 
 func initTimeRules() {
 	var api dbapi.CameraApi
@@ -163,6 +176,11 @@
 	}
 }
 
+func initCameraTaskRulesAll() {
+	var api dbapi.CameraTaskArgsApi
+	all := api.FindAll()
+	cMap.Set(PREFIX_RULE, all)
+}
 func initSdks() {
 	var api dbapi.SdkApi
 	sdks := api.FindAll("")
@@ -199,6 +217,15 @@
 	}
 }
 
+func GetPolygonsById(id string) *protomsg.CameraPolygon {
+	obj, b := cMap.Get(PREFIX_POLYGON + id)
+	if b {
+		return obj.(*protomsg.CameraPolygon)
+	} else {
+		return nil
+	}
+}
+
 //浠庣紦瀛樹腑鑾峰彇鏃堕棿瑙勫垯
 func GetTimeRuleById(id string) (exist bool, rule protomsg.CameraTimerule) {
 	obj, b := cMap.Get(PREFIX_TIME + id)
@@ -218,6 +245,15 @@
 		return nil
 	}
 }
+//鏍规嵁鎽勫儚鏈篿d浠庣紦瀛樹腑鑾峰彇鎽勫儚鏈虹殑浠诲姟瑙勫垯璁剧疆
+func GetCameraTaskRulesAll() []*protomsg.TaskGroupArgs {
+	obj, b := cMap.Get(PREFIX_RULE)
+	if b {
+		return obj.([]*protomsg.TaskGroupArgs)
+	} else {
+		return nil
+	}
+}
 
 func GetSdkById(sdkId string) (sdk protomsg.Sdk, err error) {
 	obj, b := cMap.Get(PREFIX_SDK + sdkId)
diff --git a/go.mod b/go.mod
index 18d6ca3..71c60e7 100644
--- a/go.mod
+++ b/go.mod
@@ -16,6 +16,8 @@
 	github.com/go-yaml/yaml v2.1.0+incompatible
 	github.com/gogo/protobuf v1.2.1
 	github.com/golang/protobuf v1.3.1
+	github.com/jeanphorn/log4go v0.0.0-20190526082429-7dbb8deb9468 // indirect
+	github.com/kirinlabs/HttpRequest v0.1.5 // indirect
 	github.com/knetic/govaluate v3.0.0+incompatible
 	github.com/pierrec/lz4 v2.2.3+incompatible
 	github.com/satori/go.uuid v1.2.0
@@ -23,6 +25,7 @@
 	github.com/tmthrgd/go-sem v0.0.0-20160607101025-0214dbf53877 // indirect
 	github.com/tmthrgd/go-shm v0.0.0-20170117044846-90afcfcd5ee9 // indirect
 	github.com/tmthrgd/shm-go v0.0.0-20170130075737-7207ca97b290 // indirect
+	github.com/toolkits/file v0.0.0-20160325033739-a5b3c5147e07 // indirect
 	gocv.io/x/gocv v0.20.0
 	golang.org/x/net v0.0.0-20190603091049-60506f45cf65 // indirect
 	golang.org/x/sys v0.0.0-20190602015325-4c4f7f33c9ed // indirect
diff --git a/go.sum b/go.sum
index f650a0c..47ec4db 100644
--- a/go.sum
+++ b/go.sum
@@ -89,6 +89,8 @@
 github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
 github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
 github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
+github.com/jeanphorn/log4go v0.0.0-20190526082429-7dbb8deb9468 h1:1C4yN/psU4rpTqmuN8ZU7uzMyIvM8m4m6xgy6W0e/5k=
+github.com/jeanphorn/log4go v0.0.0-20190526082429-7dbb8deb9468/go.mod h1:VRGsDaBwSjfG6KG3PtW5uoGc+iqzEG3jEdo2b1ZwSJc=
 github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
 github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
 github.com/kirinlabs/HttpRequest v0.1.5 h1:BzOb6AmBii232R93birBsf663kt8N9y8N0TCQKoEzhA=
@@ -153,6 +155,8 @@
 github.com/tmthrgd/go-shm v0.0.0-20170117044846-90afcfcd5ee9/go.mod h1:vy1jksyhzuQOMkHXMEi+X2bZ47ZeCn3QTnYdFBesABs=
 github.com/tmthrgd/shm-go v0.0.0-20170130075737-7207ca97b290 h1:5zW+TRr0WH4uN72/E/XYwb1PcaYN5BIB/FUbcQ0nHr0=
 github.com/tmthrgd/shm-go v0.0.0-20170130075737-7207ca97b290/go.mod h1:e9PZQr6zVezMTwj1v0j1YhGCNdS2zTCjXU9q9K+HHGk=
+github.com/toolkits/file v0.0.0-20160325033739-a5b3c5147e07 h1:d/VUIMNTk65Xz69htmRPNfjypq2uNRqVsymcXQu6kKk=
+github.com/toolkits/file v0.0.0-20160325033739-a5b3c5147e07/go.mod h1:FbXpUxsx5in7z/OrWFDdhYetOy3/VGIJsVHN9G7RUPA=
 github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
 github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
 github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
diff --git a/logger/log4go.json b/logger/log4go.json
new file mode 100644
index 0000000..6002bf8
--- /dev/null
+++ b/logger/log4go.json
@@ -0,0 +1,31 @@
+{
+  "console": {
+    "enable": true,
+    "level": "FINE"
+  },
+  "files": [{
+    "enable": true,
+    "level": "DEBUG",
+    "filename":"./test.log",
+    "category": "Test",
+    "pattern": "[%D %T] [%C] [%L] (%S) %M"
+  },{
+    "enable": true,
+    "level": "DEBUG",
+    "filename":"ruleprocess.log",
+    "category": "TestRotate",
+    "pattern": "[%D %T] [%C] [%L] (%S) %M",
+    "rotate": true,
+    "maxsize": "1000M",
+    "maxlines": "10K",
+    "daily": true
+  }],
+  "sockets": [{
+    "enable": false,
+    "level": "DEBUG",
+    "category": "TestSocket",
+    "pattern": "[%D %T] [%C] [%L] (%S) %M",
+    "addr": "127.0.0.1:12124",
+    "protocol":"udp"
+  }]
+}
\ No newline at end of file
diff --git a/main.go b/main.go
index 8c4179e..5b67a38 100644
--- a/main.go
+++ b/main.go
@@ -16,6 +16,7 @@
 	"flag"
 	"fmt"
 	"github.com/spf13/viper"
+	log "github.com/jeanphorn/log4go"
 	"ruleprocess/cache"
 	"ruleprocess/ruleserver"
 	"sync"
@@ -42,6 +43,9 @@
 	logger.Config(logFile, logger.DebugLevel)
 	logger.SetSaveDays(7)
 	logger.Info("鏃ュ織鍒濆鍖栨垚鍔燂紒")
+
+	// log4go
+	log.LoadConfiguration("./logger/log4go.json")
 }
 func main() {
 	//fmt.Println("缂撳瓨鍒濆鍖栧畬鎴�",<- initchan)//dbserver鍒濆鍖栧畬姣�
@@ -88,6 +92,7 @@
 				//logger.Debug("浣跨敤鐨刢pu涓暟锛�",runtime.NumCPU())
 				//go func(msg []byte) {
 					logger.Debug("褰撳墠鏃堕棿鎴筹細", time.Now().Unix())
+					log.Info("褰撳墠鏃堕棿鎴�",time.Now().String())
 					arg := structure.SdkDatas{}
 					//paramFormat(msg, &arg)
 					start := time.Now()
@@ -98,11 +103,11 @@
 					resultMsg := structure.ResultMsg{SdkMessage: &m, RuleResult: arg.RuleResult}
 					ruleserver.GetAttachInfo(resultMsg.SdkMessage)
 					ruleEnd := time.Since(start)
-					logger.Debug("瑙勫垯鍒ゆ柇瀹屾墍鐢ㄦ椂闂达細", ruleEnd)
+					log.Debug("瑙勫垯鍒ゆ柇瀹屾墍鐢ㄦ椂闂达細", ruleEnd)
 					// 灏嗘墦瀹屾爣绛剧殑鏁版嵁鎻掑叆鍒癊S
 					insertdata.InsertToEs(resultMsg)
 					esEnd := time.Since(start)
-					logger.Debug("鎻掑叆瀹孍s鎵�鐢ㄦ椂闂达細", esEnd)
+					log.Debug("鎻掑叆瀹孍s鎵�鐢ㄦ椂闂达細", esEnd)
 					//浜嬩欢鎺ㄩ��
 					labelFilter.PushSomthing(resultMsg)
 				//}(msg)
@@ -112,6 +117,7 @@
 }
 
 func CallParamFormat(msg []byte, args *structure.SdkDatas) protomsg.SdkMessage{
+	log.Info("鍛煎彨涓棿浠舵牸寮忓寲鏁版嵁")
 	p,err :=  plugin.Open("./algorithm/middleware.so")
 	if err != nil {
 		panic(err)
diff --git a/ruleserver/pushPolygonForTrack.go b/ruleserver/pushPolygonForTrack.go
new file mode 100644
index 0000000..5cfe6a2
--- /dev/null
+++ b/ruleserver/pushPolygonForTrack.go
@@ -0,0 +1,116 @@
+package ruleserver
+
+import (
+	"basic.com/pubsub/protomsg.git"
+	"ruleprocess/cache"
+	"ruleprocess/logger"
+	"ruleprocess/structure"
+	"github.com/kirinlabs/HttpRequest"
+	"strconv"
+)
+
+type CameraPolygon struct {
+	CameraId string
+	CameraAddr string
+	Rtsp string
+	Area []Polygon
+}
+type Polygon struct {
+	CameraId string
+	CameraAddr string
+	Polygon []structure.Point
+}
+var camps []CameraPolygon
+
+func Handle () {
+	taskRules := cache.GetCameraTaskRulesAll()
+	for _,taskRule := range taskRules {
+		for _,groupRule := range taskRule.GroupRules {
+			for _,rule := range groupRule.Rules {
+				camp := GetCameraPolygon(rule,groupRule)
+				camps = append(camps,*camp)
+			}
+		}
+	}
+}
+
+func GetCameraPolygon(rule *protomsg.Rule,groupRule *protomsg.GroupRule) *CameraPolygon{
+	if rule.SdkId == "鏍囧畾绠楁硶鐨刬d" {
+		// 寰楀埌鏍囧畾绠楁硶鐨勫尯鍩�
+		cameraPolygon := new(CameraPolygon)
+		polygon := cache.GetPolygonsById(rule.PolygonId)
+		cameraPolygon.CameraId = rule.CameraId
+		camera,err := cache.GetCameraById(rule.CameraId)
+		if err != nil {
+			logger.Error("鏌ヨ鎽勫儚鏈轰俊鎭け璐ワ紒",err)
+		}
+		cameraPolygon.CameraAddr = camera.Addr
+		cameraPolygon.Rtsp = camera.Rtsp
+		if rule.SdkArgAlias == "鍏ㄦ櫙鎽勫儚鏈�" { // 濉炵殑鏄嚜宸辩殑鍖哄煙
+			polygon1 := new(Polygon)
+			polygon1.Polygon = Json2points(polygon.Polygon)
+			polygon1.CameraId = rule.CameraId
+			polygon1.CameraAddr = camera.Addr
+			cameraPolygon.Area = append(cameraPolygon.Area,*polygon1)
+		} else { // 濉炵殑鏄笌涔嬬浉鍏崇殑鍏ㄦ櫙鎽勫儚鏈虹殑鍖哄煙
+			for _,rule := range groupRule.Rules {
+				if rule.SdkArgAlias == "鍏ㄦ櫙鎽勫儚鏈�" {
+					polygon1 := new(Polygon)
+					polygon1.Polygon = Json2points(polygon.Polygon)
+					polygon1.CameraId = rule.CameraId
+					polygon1.CameraAddr = camera.Addr
+					cameraPolygon.Area = append(cameraPolygon.Area,*polygon1)
+				}
+			}
+		}
+		return cameraPolygon
+	} else {
+		return nil
+	}
+}
+
+func Struct2JsonString(camps []CameraPolygon) string{
+	str := "["
+	for index,cam := range camps {
+		str1 := "{\"CameraId\":\""+cam.CameraId+"\",\"CameraAddr\":"+cam.CameraAddr+"\",\"Rtsp\":\""+cam.Rtsp+"\",\"Area\":\"["
+		for j,ar := range cam.Area {
+			str2 := "{\""+ar.CameraId+"\": {\"area\": ["
+			for i,point := range ar.Polygon {
+				str3 := ""
+				if i < len(ar.Polygon) - 1 {
+					str3 = "{\"coordinate\": {\"x\": \""+strconv.FormatFloat(point.X, 'f', -1, 64)+"\",\"y\": \""+strconv.FormatFloat(point.Y, 'f', -1, 64)+"\"}},"
+				} else { // 鏈�鍚庝竴涓粨鏋勪綋涓嶅姞閫楀彿
+					str3 = "{\"coordinate\": {\"x\": \""+strconv.FormatFloat(point.X, 'f', -1, 64)+"\",\"y\": \""+strconv.FormatFloat(point.Y, 'f', -1, 64)+"\"}}"
+				}
+				str2 += str3
+			}
+			if j < len(cam.Area) - 1{
+				str2 += "]}},"
+			} else {
+				str2 += "]}}"
+			}
+			str1 += str2
+		}
+		str += str1
+		if index < len(camps) - 1{
+			str += "]},"
+		} else {
+			str += "]}"
+		}
+	}
+	str += "]"
+	return str
+}
+
+func PushPolygon() string{
+	Handle()
+	param := Struct2JsonString(camps)
+	req := HttpRequest.NewRequest()
+	res,err := req.JSON().Post("http://192.168.20.109:7011/tracking/get_region",param)
+	body,err := res.Body()
+	if err != nil {
+		return "璇锋眰澶辫触"+err.Error()
+	}
+	return string(body)
+}
+

--
Gitblit v1.8.0