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