panlei
2019-11-26 1a7d2c309893b38554fdee05c4b92d2618d66451
给摄像机追踪推送规则数据并引入log4go
2个文件已添加
4个文件已修改
202 ■■■■■ 已修改文件
cache/cache.go 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
go.mod 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
go.sum 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
logger/log4go.json 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
main.go 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruleserver/pushPolygonForTrack.go 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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
    }
}
//根据摄像机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)
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
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=
logger/log4go.json
New file
@@ -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"
  }]
}
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("使用的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()
@@ -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)
                    // 将打完标签的数据插入到ES
                    insertdata.InsertToEs(resultMsg)
                    esEnd := time.Since(start)
                    logger.Debug("插入完Es所用时间:", esEnd)
                    log.Debug("插入完Es所用时间:", 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)
ruleserver/pushPolygonForTrack.go
New file
@@ -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 == "标定算法的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)
}