| | |
| | | |
| | | initTimeRules() //初始化时间规则缓存 |
| | | |
| | | initCameraTaskRules() //初始化摄像机任务规则缓存 |
| | | initCameraTaskRules() //初始化摄像机任务规则缓存按摄像机 |
| | | |
| | | initCameraTaskRulesAll() // 初始化摄像机任务规则缓存全部 |
| | | |
| | | initCamera() //初始化摄像机信息 |
| | | |
| | |
| | | initCameraTaskRules() |
| | | case protomsg.TableChanged_T_CameraTaskArgs: //更新摄像机规则配置参数 |
| | | initCameraTaskRules() |
| | | initCameraTaskRulesAll() |
| | | case protomsg.TableChanged_T_Sdk: //更新sdk配置 |
| | | initSdks() |
| | | default: |
| | |
| | | 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 |
| | |
| | | } |
| | | } |
| | | |
| | | func initCameraTaskRulesAll() { |
| | | var api dbapi.CameraTaskArgsApi |
| | | all := api.FindAll() |
| | | cMap.Set(PREFIX_RULE, all) |
| | | } |
| | | func initSdks() { |
| | | var api dbapi.SdkApi |
| | | sdks := api.FindAll("") |
| | |
| | | } |
| | | } |
| | | |
| | | 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) |
| | |
| | | return nil |
| | | } |
| | | } |
| | | //根据摄像机id从缓存中获取摄像机的任务规则设置 |
| | | 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) |
| | |
| | | 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 |
| | |
| | | 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 |
| | |
| | | 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= |
| | |
| | | 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= |
New file |
| | |
| | | {
|
| | | "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"
|
| | | }]
|
| | | } |
| | |
| | | "flag" |
| | | "fmt" |
| | | "github.com/spf13/viper" |
| | | log "github.com/jeanphorn/log4go" |
| | | "ruleprocess/cache" |
| | | "ruleprocess/ruleserver" |
| | | "sync" |
| | |
| | | logger.Config(logFile, logger.DebugLevel) |
| | | logger.SetSaveDays(7) |
| | | logger.Info("日志初始化成功!") |
| | | |
| | | // log4go |
| | | log.LoadConfiguration("./logger/log4go.json") |
| | | } |
| | | func main() { |
| | | //fmt.Println("缓存初始化完成",<- initchan)//dbserver初始化完毕 |
| | |
| | | //logger.Debug("使用的cpu个数:",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() |
| | |
| | | resultMsg := structure.ResultMsg{SdkMessage: &m, RuleResult: arg.RuleResult} |
| | | ruleserver.GetAttachInfo(resultMsg.SdkMessage) |
| | | ruleEnd := time.Since(start) |
| | | logger.Debug("规则判断完所用时间:", ruleEnd) |
| | | log.Debug("规则判断完所用时间:", ruleEnd) |
| | | // 将打完标签的数据插入到ES |
| | | insertdata.InsertToEs(resultMsg) |
| | | esEnd := time.Since(start) |
| | | logger.Debug("插入完Es所用时间:", esEnd) |
| | | log.Debug("插入完Es所用时间:", esEnd) |
| | | //事件推送 |
| | | labelFilter.PushSomthing(resultMsg) |
| | | //}(msg) |
| | |
| | | } |
| | | |
| | | func CallParamFormat(msg []byte, args *structure.SdkDatas) protomsg.SdkMessage{ |
| | | log.Info("呼叫中间件格式化数据") |
| | | p,err := plugin.Open("./algorithm/middleware.so") |
| | | if err != nil { |
| | | panic(err) |
New file |
| | |
| | | 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 == "标定算法的id" { |
| | | // 得到标定算法的区域 |
| | | 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) |
| | | } |
| | | |