From 82d1feccae00f5863dea6d0a85911cf92771f90b Mon Sep 17 00:00:00 2001 From: panlei <2799247126@qq.com> Date: 星期六, 22 六月 2019 12:27:15 +0800 Subject: [PATCH] insert data --- /dev/null | 0 insertdata/EsClient.go | 167 ++++++++++++++++ util/upload.go | 66 ++++++ go.sum | 14 common.go | 4 insertdata/insertDataToEs.go | 252 +++++++++++++++++++++++++ go.mod | 6 insertdata/insertDataToEs_test.go | 7 ruleserver/ruleToformula.go | 47 ++-- main.go | 24 ++ ruleserver/timeTicker.go | 1 11 files changed, 553 insertions(+), 35 deletions(-) diff --git a/common.go b/common.go index a0369fe..dd7ea6f 100644 --- a/common.go +++ b/common.go @@ -11,8 +11,8 @@ ) const ( - FDetect = "FaceDetect" - FExtract = "FaceExtract" + FDetect = "FaceDetect" // ParamFacePos 妫�娴� + FExtract = "FaceExtract" // ParamFaceFeature 鎻愬彇 FProperty = "FaceProperty" FCompare = "FaceCompare" FtTract = "FaceTrack" diff --git a/go.mod b/go.mod index 86d0ec8..b581db8 100644 --- a/go.mod +++ b/go.mod @@ -3,15 +3,17 @@ go 1.12 require ( - basic.com/dbapi.git v0.0.0-20190617110911-fa5d3510c294 - basic.com/pubsub/protomsg.git v0.0.0-20190619101540-30768d386c39 + basic.com/dbapi.git v0.0.0-20190622030047-3ea90a522ec1 + basic.com/pubsub/protomsg.git v0.0.0-20190622023307-97ef3bf336ef basic.com/valib/deliver.git v0.0.0-20190531095353-25d8c3b20051 github.com/Microsoft/go-winio v0.4.12 // indirect + github.com/ajg/form v1.5.1 // indirect github.com/gogo/protobuf v1.2.1 // indirect github.com/golang/protobuf v1.3.1 github.com/gorilla/websocket v1.4.0 // 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 diff --git a/go.sum b/go.sum index 9c65692..3fc98a6 100644 --- a/go.sum +++ b/go.sum @@ -1,14 +1,14 @@ -basic.com/dbapi.git v0.0.0-20190617110911-fa5d3510c294 h1:DPtNV4iwgwx6KZ9/Zx7m5Rlhto4w3eKu38JYWhluX44= -basic.com/dbapi.git v0.0.0-20190617110911-fa5d3510c294/go.mod h1:eDXPnxaz6jZPDvBSk7ya7oSASWPCuUEgRTJCjsfKt/Q= -basic.com/pubsub/protomsg.git v0.0.0-20190618064639-ad379d891965 h1:fo7P3P4XNZGRWgUIOMTNR3JtqmT0gObCSU7PlvizUbk= -basic.com/pubsub/protomsg.git v0.0.0-20190618064639-ad379d891965/go.mod h1:un5NV5VWQoblVLZfx1Rt5vyLgwR0jI92d3VJhfrJhWU= -basic.com/pubsub/protomsg.git v0.0.0-20190619101540-30768d386c39 h1:eTlC2Li3IDLyF3uJwFnkSw0YWDQQg9UYqm97356MEJI= -basic.com/pubsub/protomsg.git v0.0.0-20190619101540-30768d386c39/go.mod h1:un5NV5VWQoblVLZfx1Rt5vyLgwR0jI92d3VJhfrJhWU= +basic.com/dbapi.git v0.0.0-20190622030047-3ea90a522ec1 h1:MAAgMzO1rd9+gYYksrtOWIB4dqQZvZEjwaZImygpSgk= +basic.com/dbapi.git v0.0.0-20190622030047-3ea90a522ec1/go.mod h1:eDXPnxaz6jZPDvBSk7ya7oSASWPCuUEgRTJCjsfKt/Q= +basic.com/pubsub/protomsg.git v0.0.0-20190622023307-97ef3bf336ef h1:gUV9FEa23v+2AY4Rvrwh6omHBlV+qyae58GTU8NAv3Y= +basic.com/pubsub/protomsg.git v0.0.0-20190622023307-97ef3bf336ef/go.mod h1:un5NV5VWQoblVLZfx1Rt5vyLgwR0jI92d3VJhfrJhWU= basic.com/valib/deliver.git v0.0.0-20190531095353-25d8c3b20051 h1:9flC2o3kasaM2Y6I+mY+mxmve/pyAY/UzGQZLT3lFHM= basic.com/valib/deliver.git v0.0.0-20190531095353-25d8c3b20051/go.mod h1:bkYiTUGzckyNOjAgn9rB/DOjFzwoSHJlruuWQ6hu6IY= code.cloudfoundry.org/bytefmt v0.0.0-20180906201452-2aa6f33b730c/go.mod h1:wN/zk7mhREp/oviagqUXY3EwuHhWyOvAdsn5Y4CzOrc= github.com/Microsoft/go-winio v0.4.12 h1:xAfWHN1IrQ0NJ9TBC0KBZoqLjzDTr1ML+4MywiUOryc= github.com/Microsoft/go-winio v0.4.12/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA= +github.com/ajg/form v1.5.1 h1:t9c7v8JUKu/XxOGBU0yjNpaMloxGEJhUkqFRq0ibGeU= +github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/gogo/protobuf v1.2.1 h1:/s5zKNz0uPFCZ5hddgPdo2TK2TVrUNMn0OOX8/aZMTE= @@ -25,6 +25,8 @@ github.com/pierrec/lz4 v2.2.3+incompatible h1:YpgKDCFg5dd0Eb+XlgrfJtH4fAqoRA1kBcKnBZ4EFSE= github.com/pierrec/lz4 v2.2.3+incompatible/go.mod h1:g2rHQ0wsQlPM7GZ66p1EVBh+VdeJ8s60jWWxl1M9t1Q= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= +github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/schollz/progressbar/v2 v2.12.1/go.mod h1:fBI3onORwtNtwCWJHsrXtjE3QnJOtqIZrvr3rDaF7L0= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= diff --git a/insertdata/EsClient.go b/insertdata/EsClient.go new file mode 100644 index 0000000..7a72deb --- /dev/null +++ b/insertdata/EsClient.go @@ -0,0 +1,167 @@ +package insertdata + +import ( + "encoding/json" + "errors" + "fmt" + "io" + "io/ioutil" + "net/http" + "strconv" + "strings" + "time" + "bytes" +) + +type Reps struct { + FaceFeature string `json:"faceFeature"` + ID string +} + +// 鑾峰彇es 鏁版嵁缁撴瀯 +func GetEsDataReq(url string, parama string) ([]Reps, error) { + + var reps Reps + var repss []Reps + fmt.Println("es 鏌ヨ璇锋眰璺緞" + url) // 閰嶇疆淇℃伅 鑾峰彇 + req, err := http.NewRequest("POST", url, strings.NewReader(parama)) + + if err != nil { + fmt.Println("build request error! ") + return nil, err + } + + req.Header.Add("Content-Type", "application/json") + timeout := time.Duration(100 * time.Second) + client := &http.Client{Timeout: timeout} + resp, err := client.Do(req) + + if err != nil { + return nil, err + } + + defer resp.Body.Close() + body, err := ioutil.ReadAll(resp.Body) + if err != nil { + return nil, err + } + + jsonStr := string(body) + var dat map[string]interface{} + dec := json.NewDecoder(strings.NewReader(jsonStr)) + + if err := dec.Decode(&dat); err == io.EOF { + fmt.Println(err.Error()) + return nil, err + } else if err != nil { + fmt.Println(err.Error()) + return nil, err + } + dat, ok := dat["hits"].(map[string]interface{}) + if !ok { + return nil, errors.New("data is not type of map[string]interface{}") + } + + for _, value := range dat["hits"].([]interface{}) { + source, ok := value.(map[string]interface{})["_source"].(map[string]interface{}) + if !ok { + return nil, errors.New("value is not type of map[string]interface{}") + } + reps.FaceFeature, ok = source["faceFeature"].(string) + if !ok { + fmt.Println("faceFeature is not string", source["faceFeature"]) + continue + } + reps.ID, ok = source["ID"].(string) + if !ok { + fmt.Println("ID is not string", source["ID"]) + continue + } + + repss = append(repss, reps) + } + return repss, nil + +} + +func PostAction(querynum int, queryindex int) ([]Reps, error) { + defer elapsed("page")() + number := strconv.Itoa(querynum) + point := strconv.Itoa(queryindex) + url := "http://192.168.1.182:9200/videopersons/_search" + parma := `{ + "from":` + point + `, + "query": { + "match_all": {} + }, + "sort": [ + { + "picDate": { + "order": "desc" + } + } + ], + "size":` + number + `, + "_source": [ + "faceFeature", + "ID" + ] + }` + + repss, err := GetEsDataReq(url, parma) + return repss, err +} + +/** 鎻掑叆es锛� +*** url: http://192.168.1.203:9200/personaction/perVideoAction/c58dbddf-4580-43f3-b76a-3213ec809df2?pretty +**param: // json [json slice] +*/ + +/** 娣诲姞鎴栬�呭垹闄ゆ敹钘� +*** url: http://192.168.1.203:9200/videopersons/perVideoPicture/_id/_update + param: []byte + json: { + "doc": { + "collection": "1" // 1 is 鏀惰棌 0 鍙栨秷鏀惰棌 + } + "detect_noop": false + } +**/ + +func EsReq(method string, url string, parama []byte) (err error) { + timeout := time.Duration(10 * time.Second) + client := http.Client{ + Timeout: timeout, + } + request, err := http.NewRequest(method, url, bytes.NewBuffer(parama)) + request.Header.Set("Content-type", "application/json") + + if err != nil { + fmt.Println("build request fail !") + return err + } + + resp, err := client.Do(request) + if err != nil{ + fmt.Println("request error: ", err) + return err + } + + defer resp.Body.Close() + + body, err := ioutil.ReadAll(resp.Body) + if err != nil { + fmt.Println(err) + } + + fmt.Println(string(body)) + return nil +} + + +func elapsed(what string) func() { + start := time.Now() + return func() { + fmt.Printf("%s took %v\n", what, time.Since(start)) + } +} diff --git a/insertdata/insertDataToEs.go b/insertdata/insertDataToEs.go new file mode 100644 index 0000000..d41ff73 --- /dev/null +++ b/insertdata/insertDataToEs.go @@ -0,0 +1,252 @@ +package insertdata + +import ( + "errors" + "fmt" + "encoding/json" + "net" + "time" + + "basic.com/pubsub/protomsg.git" + "basic.com/dbapi.git" + "github.com/golang/protobuf/proto" + "ruleprocess/ruleserver" + "github.com/satori/go.uuid" +) + +// 浜鸿劯鐨勬暟鎹粨鏋� +type PerVideoPicture struct { + Id string `json:"id"` + CameraId string `json:"cameraId"` + CameraAddr string `json:"cameraAddr"` + PicDate string `json:"picDate"` + PicMaxUrl string `json:"picMaxUrl"` + TaskId string `json:"taskId"` + TaskName string `json:"taskName"` + SdkName string `json:"sdkName"` + Content string `json:"content"` + LikeDate string `json:"likeDate"` + Sex int32 `json:"sex"` + Age int32 `json:"age"` + AgeDescription string `json:"ageDescription"` + Race int32 `json:"race"` + SmileLevel int32 `json:"smileLevel"` + BeautyLevel int32 `json:"beautyLevel"` + FaceFeature string `json:"faceFeature"` + PicSmUrl string `json:"picSmUrl"` + VideoUrl string `json:"videoUrl"` + AnalyServerId string `json:"analyServerId"` + AnalyServerName string `json:"analyServerName"` + AnalyServerIp string `json:"analyServerIp"` + ClusterId string `json:"clusterId"` + IsAlarm string `json:"isAlarm"` + IsAckAlarm string `json:"isAckAlarm"` + IsCollect string `json:"isCollect"` + IsDelete int `json:"isDelete"` + BaseInfo Base `json:"baseInfo"` +} + +type Base struct { + TableId string `json:"tableId"` + TableName string `json:"tableName"` + CompareScore float64 `json:"compareScore"` + PersonId string `json:"personId"` + PersonName string `json:"personName"` + PersonPicUrl string `json:"personPicUrl"` + PhoneNum string `json:"phoneNum"` + Sex string `json:"sex"` + IdCard string `json:"idCard"` + MonitorLevel string `json:"monitorLevel"` + Content string `json:"content"` +} + +// yolo琛屼负鐨勬暟鎹粨鏋� +type Personaction struct { + Id string `json:"id"` + CameraId string `json:"cameraId"` + CameraName string `json:"cameraName"` + CameraAddr string `json:"cameraAddr"` + TaskId string `json:"taskId"` + TaskName string `json:"taskName"` + SdkName string `json:"sdkName"` + Content string `json:"content"` + AlarmRules []AlarmRule + AnalyServerId string `json:"analyServerId"` + AnalyServerName string `json:"analyServerName"` + AnalyServerIp string `json:"analyServerIp"` + ClusterId string `json:"clusterId"` + PicUrl string `json:"picUrl"` + PicDate string `json:"picDate"` + VideoUrl string `json:"videoUrl"` + IsAlarm string `json:"isAlarm"` + IsAckAlarm string `json:"isAckAlarm"` + IsCollect string `json:"isCollect"` + IsDelete int `json:"isDelete"` +} + +type AlarmRule struct { + GroupId string `json:"groupId"` + AlarmLevel string `json:"alarmLevel"` + RuleText string `json:"ruleText"` +} + +func InsertToEs(msg ruleserver.ResultMsg) { + fmt.Println("寰�ES鎻掓暟鎹�") + + for _, sdkinfo := range msg.Tasklab.Sdkinfos { + if sdkinfo.Sdktype == "FaceDetect" { + faceParam := protomsg.ParamFacePos{} + err1 := proto.Unmarshal(sdkinfo.Sdkdata, &faceParam) + if err1 != nil { + fmt.Println("瑙f瀽sdk鏁版嵁鏃跺嚭鐜伴敊璇�", err1) + continue + } + for _, face := range faceParam.Faces { + pervideo := PerVideoPicture{ + uuid.NewV4().String(), + msg.Cid, + msg.Caddr, + time.Now().Format("2006-01-02 15:04:05"), + "", + msg.Tasklab.Taskid, + msg.Tasklab.Taskname, + sdkinfo.SdkName, + "", + "", + face.Result.Gender, + face.Result.Age, + "", + face.Result.Race, + face.Result.Smile, + face.Result.Beauty, + "涓嶆槸姣忎釜浜鸿劯绠楁硶閮芥湁", + "---", + "", + "", + "", + "", + "", + "", + "", + "", + 0, + Base{ + "鏄瘡涓汉鑴哥畻娉曢兘鏈夊悧", + "", + 0, + "", + "", + "", + "", + "", + "", + "", + "", + }, + } + requstbody, err := json.Marshal(pervideo) + + if err != nil { + fmt.Println("json parse error ", err) + return + + } + err = EsReq("POST", "http://192.168.1.182:9200/videopersons/perVideoPicture", requstbody) + if err != nil { + fmt.Println("es can not execute right.") + } + } + } + if sdkinfo.Sdktype == "Yolo" { + yoloObj := protomsg.ParamYoloObj{} + err1 := proto.Unmarshal(sdkinfo.Sdkdata, &yoloObj) + if err1 != nil { + fmt.Println("瑙f瀽sdk鏁版嵁鏃跺嚭鐜伴敊璇�", err1) + continue + } + alarmRules := []AlarmRule{} + for _,result := range msg.RuleResult { + alarmRules = append(alarmRules,AlarmRule{result.RuleGroupId,result.AlarmLevel,result.RuleText}) + } + isAlarm := "" + if len(alarmRules) > 0 { + isAlarm = "1" + }else { + isAlarm = "0" + } + // 鏌ヨ鏈満淇℃伅 + flag,localConfig := dbapi.SysSetApi{}.GetServerInfo() + if !flag { + fmt.Println("鏌ヨ鏈満淇℃伅澶辫触锛�") + } + // 鏌ヨcameraName + camera,err := dbapi.CameraApi{}.GetCameraById(msg.Cid) + if err == nil { + fmt.Println("鏌ヨ鎽勫儚鏈轰俊鎭け璐�") + } + serverIp,err := GetLocalIP() + peraction := Personaction{ + uuid.NewV4().String(), + msg.Cid, + camera.Name, + msg.Caddr, + msg.Tasklab.Taskid, + msg.Tasklab.Taskname, + sdkinfo.SdkName, + "", + alarmRules, + localConfig.ServerId, + localConfig.ServerName, + serverIp, + "", + "", + time.Now().Format("2006-01-02 15:04:05"), + "", + isAlarm, + "", + "", + 0, + } + requstbody, err := json.Marshal(peraction) + + if err != nil { + fmt.Println("json parse error ", err) + return + + } + err = EsReq("POST", "http://192.168.1.182:9200/videopersons/perVideoPicture", requstbody) + if err != nil { + fmt.Println("es can not execute right.") + } + } + + } +} + +// 鑾峰彇鏈満ip +func GetLocalIP() (ipv4 string, err error) { + var ( + addrs []net.Addr + addr net.Addr + ipNet *net.IPNet // IP鍦板潃 + isIpNet bool + ) + // 鑾峰彇鎵�鏈夌綉鍗� + if addrs, err = net.InterfaceAddrs(); err != nil { + return + } + // 鍙栫涓�涓潪lo鐨勭綉鍗P + for _, addr = range addrs { + // 杩欎釜缃戠粶鍦板潃鏄疘P鍦板潃: ipv4, ipv6 + if ipNet, isIpNet = addr.(*net.IPNet); isIpNet && !ipNet.IP.IsLoopback() { + // 璺宠繃IPV6 + if ipNet.IP.To4() != nil { + ipv4 = ipNet.IP.String() // 192.168.1.1 + return + } + } + } + + err = errors.New("ipv4 not found") + return +} diff --git a/insertdata/insertDataToEs_test.go b/insertdata/insertDataToEs_test.go new file mode 100644 index 0000000..1851d50 --- /dev/null +++ b/insertdata/insertDataToEs_test.go @@ -0,0 +1,7 @@ +package insertdata + +import "testing" + +func TestInsertToEs(t *testing.T){ + InsertToEs() +} \ No newline at end of file diff --git a/main.go b/main.go index 6b5506e..333df4b 100644 --- a/main.go +++ b/main.go @@ -3,8 +3,9 @@ import ( "fmt" "ruleprocess/ruleserver" + "ruleprocess/insertdata" + "sync" - "analysis/work" "basic.com/pubsub/protomsg.git" "basic.com/valib/deliver.git" "github.com/golang/protobuf/proto" @@ -44,6 +45,9 @@ // 鎶奱rg閲岀殑鎵撶殑鏍囩鎷垮嚭鏉ョ粰m鍐嶅皝瑁呬竴灞� resultMag := ruleserver.ResultMsg{SdkMessage: m, RuleResult: arg.RuleResult} fmt.Println("鎵撳畬鏍囩鍚庣殑缁撴灉锛�",resultMag) + + // 灏嗘墦瀹屾爣绛剧殑鏁版嵁鎻掑叆鍒癊S + insertdata.InsertToEs(resultMag) } } } @@ -77,7 +81,7 @@ arg.KeepRight = false arg.IsStatic = false fmt.Println("浠巑ongos涓嬁鍒扮殑鏁版嵁鍖呴暱搴︿负锛�", len(msg)) - for _, sdkinfo := range m.Tasklab.Sdkinfos { + for _, sdkinfo := range m.Tasklab.Sdkinfos { // yolo绠楁硶 if sdkinfo.Sdktype == "Yolo" { yoloParam := protomsg.ParamYoloObj{} err = proto.Unmarshal(sdkinfo.Sdkdata, &yoloParam) @@ -91,6 +95,22 @@ } } + if sdkinfo.Sdktype == "FaceDetect" { // 浜鸿劯妫�娴� + faceParam := protomsg.ParamFacePos{} + err = proto.Unmarshal(sdkinfo.Sdkdata, &faceParam) + if err != nil { + fmt.Println("瑙f瀽sdk鏁版嵁鏃跺嚭鐜伴敊璇�", err) + continue + } + for _, info := range faceParam.Faces { + photoMap := ruleserver.PhotoMap{Rects:nil, Score: float64(info.Pos.Quality)} + arg.Photo = append(arg.Photo, photoMap) + } + } + //if sdkinfo.Sdktype == "FaceExtract" { // 浜鸿劯鎻愬彇 + + //} + } return m } diff --git a/ruleprocess b/ruleprocess deleted file mode 100755 index 09c07de..0000000 --- a/ruleprocess +++ /dev/null Binary files differ diff --git a/ruleserver/ruleToformula.go b/ruleserver/ruleToformula.go index dd8b75f..bfd6dd4 100644 --- a/ruleserver/ruleToformula.go +++ b/ruleserver/ruleToformula.go @@ -88,14 +88,14 @@ // 浠庨�氶亾涓幏鍙栫殑sdk杈撳嚭鐨勫浘鍍忔暟鎹�(鐩墠涓昏鏄痽olo绠楁硶鐨勬暟鎹�) type ArgsFromSdk struct { - Photo []PhotoMap CameraId string TaskId string - KeepRight bool // 鏄惁闈犲彸琛� 绠楁硶鍒ゆ柇鐨勪笌涓婁竴甯у浘鍍忕殑姣旇緝缁撴灉 - IsStatic bool // 鏄惁闈欐 - ImageWidth int // 鎽勫儚鏈烘媿鎽勭殑鍥惧儚瀹� 鍍忕礌 - ImageHeight int // 鎽勫儚鏈烘媿鎽勭殑鍥惧儚楂� 鍍忕礌 - RuleResult []Result // 杩囧畬瑙勫垯鍚庢墦鐨勬爣绛� + Photo []PhotoMap // yolo绠楁硶缁撴瀯锛屼篃鍙互瀛樹汉鑴哥殑鏁版嵁锛屾瘯绔熶汉鑴镐腑鑳界敤瑙勫垯鏉ユ祴鐨勮繕鏄偅浜涘弬鏁� + KeepRight bool // 鏄惁闈犲彸琛� 绠楁硶鍒ゆ柇鐨勪笌涓婁竴甯у浘鍍忕殑姣旇緝缁撴灉 + IsStatic bool // 鏄惁闈欐 + ImageWidth int // 鎽勫儚鏈烘媿鎽勭殑鍥惧儚瀹� 鍍忕礌 + ImageHeight int // 鎽勫儚鏈烘媿鎽勭殑鍥惧儚楂� 鍍忕礌 + RuleResult []Result // 杩囧畬瑙勫垯鍚庢墦鐨勬爣绛� } // 灏嗕紶閫掕繃鏉ョ殑鍙傛暟杞寲涓� @@ -110,22 +110,14 @@ type Result struct { TaskId string // 浠诲姟id RuleGroupId string // 瑙勫垯缁刬d + AlarmLevel string // 鎶ヨ绛夌骇 + RuleText string // 鏂囧瓧鐗堣鍒欑粍 } // 鍖呭惈N鏉¤鍒欏厓绱犵殑涓�鏁存潯瑙勫垯 type CompleteRule struct { rule string } - -// 鎽勫儚鏈哄尯鍩� 璺熸暟鎹簱鏄犲皠鐨� -// type CameraPolygon struct { -// Id string `json:"id"` -// CameraId string `json:"camera_id"` -// Name string `json:"name"` -// Polygon string `json:"polygon"` // 鍧愭爣鐐瑰尯鍩� -// TriggerLine string `json:"trigger_line"` -// DirectionLine string `json:"direction_line"` -// } // 鏍规嵁鎽勫儚鏈篿d鎷垮埌鎽勫儚鏈烘墍鏈夊尯鍩� func GetPolygons(cameraId string) []protomsg.CameraPolygon { @@ -355,7 +347,7 @@ if flag { fmt.Println("瀹氭椂鍣ㄦ姤璀︿簡") // 杩囧畬瑙勫垯鍚庢墦涓爣绛撅紝鍛婅瘔璋冪敤鑰呮湰甯ф暟鎹拡瀵瑰摢涓换鍔″摢缁勮鍒欐姤璀︿簡 - arg.RuleResult = append(arg.RuleResult, Result{TaskId: taskId, RuleGroupId: groupRule.GroupId}) + arg.RuleResult = append(arg.RuleResult, Result{taskId, groupRule.GroupId,groupRule.AlarmLevel,groupRule.RuleText}) return true } else { return false @@ -377,9 +369,11 @@ for i := 0; i < len(ruleList); i++ { temp := ruleList[i].Rules // temp涓轰竴缁勫畬鏁磋鍒� 鍦ㄦ闇�瑕佸垽鏂鍒欐槸鍚︽槸鑱斿姩瑙勫垯 if len(temp) > 0 { - if strings.Contains(ruleList[i].GroupId, "link") { // groupId涓惈鏈塴ink鍒欎负鑱斿姩浠诲姟 + if strings.Contains(ruleList[i].GroupId, "link") { + // groupId涓惈鏈塴ink鍒欎负鑱斿姩浠诲姟 linkTask(aml, arg, ruleList[i], taskId) - } else { // 鐙珛浠诲姟鐨勫鐞� + } else { + // 鐙珛浠诲姟鐨勫鐞� singleTask(aml, arg, ruleList[i], taskId) } } @@ -388,7 +382,7 @@ } } -// 杩囨护瑙勫垯鍏堢瓫閫変汉鏁� +// 杩囨护瑙勫垯鍏堢瓫閫夊嚭绗﹀悎鏉′欢鐨勭洰鏍囨暟閲� func filterRule(rule *protomsg.Rule, am *AreaMap) { if rule.PolygonId == am.areaId { // 棣栧厛瑙勫垯鎵�瀵瑰簲鐨勫尯鍩焛d瑕佽窡鍖哄煙鏁版嵁鐨刬d瀵圭殑涓� if rule.SdkArgAlias == "score" || rule.SdkArgAlias == "proportion" || rule.SdkArgAlias == "size" { // 鍒ゆ柇鐨勬槸鐩镐技鍊硷紝鍗犳瘮锛屽昂瀵哥瓑杩囨护鏉′欢锛屽鏋滃啀鏈夛紝杩樺彲浠ュ啀鍔� @@ -449,7 +443,7 @@ // 缁欐暟鎹簱鐨勮鍒欒〃杈惧紡浠e弬 args: 涓�鏉″瓙瑙勫垯锛屽尯鍩熸暟鎹� func transferParameters(rule *protomsg.Rule, am *AreaMap) string { if rule.PolygonId == am.areaId { // 棣栧厛瑙勫垯鎵�瀵瑰簲鐨勫尯鍩焛d瑕佽窡鍖哄煙鏁版嵁鐨刬d瀵圭殑涓� - if rule.SdkArgAlias == "targetNum" { // 濡傛灉鍙傛暟鏄鍖哄煙鍐呯洰鏍囨暟閲� + if rule.SdkArgAlias == "targetNum" { // 濡傛灉鍙傛暟鏄鍖哄煙鍐呯洰鏍囨暟閲� 鍗硑olo //fmt.Println("寰楀嚭缁撴灉闃舵", "姣旇緝鐨勮鍒欐槸锛�", rule) if rule.Operator == "" { return strconv.Itoa(am.targetNum) // 濡傛灉鍚庨潰涓嶈窡鎿嶄綔绗﹀氨鐩存帴杩斿洖鏁伴噺 姣斿瑕佽窡涓嬩竴涓尯鍩熸瘮杈冩暟閲忕殑灏辩洿鎺ヨ繑鍥炴湰鍖哄煙鐨勬暟閲� @@ -460,18 +454,25 @@ result, _ := expression.Evaluate(nil) // 寰楀埌鏁板鍏紡鐨勭粨鏋� return strconv.FormatBool(result.(bool)) // 鍔犱笂鍏充簬绠楁硶鐨勫垽鏂潯浠讹紝涓嶈兘鍙湁鍏充簬瑙勫垯鐨勶紝鏈夌殑绠楁硶鏈韩灏辨槸涓�涓鍒欙紝濡備釜浣撻潤姝紝闈犲彸琛�,鎵�浠ワ紝鎷垮埌褰撳墠瀛愯鍒欑殑sdkid鏉ュ垽鏂槸鍚︽槸閭d簺鐗规畩鐨勮鍒� - } else if rule.SdkId == "涓綋闈欐" { // 鏆傛椂鐢ㄦ眽瀛椾唬鏇垮暒锛屾櫄浜涙浛鎹㈡垚姝e紡鐨刬d + } else if rule.SdkId == "IsStatic" { // 闈欐绠楁硶 if am.isStatic { return "true" } else { return "false" } - } else if rule.SdkId == "闈犲彸琛�" { // 鏆傛椂鐢ㄦ眽瀛椾唬鏇垮暒锛屾櫄浜涙浛鎹㈡垚姝e紡鐨刬d + } else if rule.SdkId == "KeepRight" { // 闈犲彸琛岀畻娉� if am.keepRight { return "true" } else { return "false" } + } else if rule.SdkId == "FaceDetect" { // 浜鸿劯妫�娴� + if rule.Operator == "==" || rule.Operator == ">=" || rule.Operator == "<=" || rule.Operator == "<" || rule.Operator == ">" || rule.Operator == "!=" { + // 濡傛灉鏄笉瑙勭煩鐨勮繛鎺ョ缁熺粺杩斿洖false 瑙勫垯涔熷彧鑳藉垽鏂汉鑴哥殑鐩镐技搴︼紝鎵�浠ヤ笉瀛樺湪鍒殑杩炴帴绗� + return "false" + } else { + return "false" + } } } diff --git a/ruleserver/timeTicker.go b/ruleserver/timeTicker.go index 27b553c..6cecea4 100644 --- a/ruleserver/timeTicker.go +++ b/ruleserver/timeTicker.go @@ -85,6 +85,7 @@ // return stopChan // } +// 缁撴瀯浣撴牴鎹煇瀛楁鎺掑簭 type SubList []*RuleResult func (p SubList) Swap(i, j int) { p[i], p[j] = p[j], p[i] } diff --git a/util/upload.go b/util/upload.go new file mode 100644 index 0000000..ce86bc1 --- /dev/null +++ b/util/upload.go @@ -0,0 +1,66 @@ +package util + +import ( + "bytes" + "encoding/json" + "errors" + "fmt" + "io" + "log" + "mime/multipart" + "net/http" + "time" +) +var weedfsUri = "http://192.168.1.182:9500/submit" +func PostFormData(uri string, filename, paramName string, file multipart.File) (maps map[string]interface{}, err0 error) { + body := &bytes.Buffer{} + writer := multipart.NewWriter(body) + _, err := writer.CreateFormFile(paramName, filename) + if err != nil { + return nil, err + } + boundary := writer.Boundary() + //close_string := fmt.Sprintf("\r\n--%s--\r\n", boundary) + close_buf := bytes.NewBufferString(fmt.Sprintf("\r\n--%s--\r\n", boundary)) + request_reader := io.MultiReader(body, file, close_buf) + //_, err = io.Copy(part, file) + //writer.WriteField(key, val) + request, err := http.NewRequest("POST", uri, request_reader) + request.Header.Add("Content-Type", writer.FormDataContentType()) + timeout := time.Duration(5 * time.Second) //瓒呮椂鏃堕棿50ms + client := &http.Client{Timeout: timeout} + resp, err := client.Do(request) + if err != nil { + log.Fatal(err) + return nil, err + } + defer func() { + if r := recover(); r != nil { + fmt.Printf("panic鐨勫唴瀹�%v\n", r) + msg := "涓婁紶鍥剧墖鏈嶅姟鍣ㄥ紓甯�" + if _, ok := r.(error); ok { + msg = r.(error).Error() + fmt.Println("panic--recover()寰楀埌鐨勬槸error绫诲瀷") + } + if _, ok := r.(string); ok { + msg = r.(string) + fmt.Println("panic--recover()寰楀埌鐨勬槸string绫诲瀷") + } + err0 = errors.New(msg) + } + }() + defer resp.Body.Close() + body = &bytes.Buffer{} + _, err = body.ReadFrom(resp.Body) + if err != nil { + log.Fatal(err) + } + fmt.Println(resp.StatusCode) + //fmt.Println(body) + //decoder := json.NewDecoder(strings.NewReader(body.String())) + decoder := make(map[string]interface{}) + if err := json.Unmarshal([]byte(body.String()), &decoder); err != nil { + return nil, err + } + return decoder, nil +} -- Gitblit v1.8.0