New file |
| | |
| | | package esutil |
| | | |
| | | import ( |
| | | "encoding/json" |
| | | "fmt" |
| | | "io" |
| | | "io/ioutil" |
| | | "net/http" |
| | | "strconv" |
| | | "strings" |
| | | "time" |
| | | |
| | | log "github.com/long/test/log" |
| | | ) |
| | | |
| | | func GetEsDataReq(url string, parama string, isSource bool) (error, map[string]interface{}) { |
| | | log.Log.Infoln("es 查询请求路径" + url) // 配置信息 获取 |
| | | req, err := http.NewRequest("POST", url, strings.NewReader(parama)) |
| | | |
| | | if err != nil { |
| | | log.Log.Errorln("build request error! ") |
| | | return err, nil |
| | | } |
| | | |
| | | req.Header.Add("Content-Type", "application/json") |
| | | timeout := time.Duration(10 * time.Second) //超时时间50ms |
| | | client := &http.Client{Timeout: timeout} |
| | | resp, err := client.Do(req) |
| | | |
| | | if err != nil { |
| | | return err, nil |
| | | } |
| | | |
| | | defer resp.Body.Close() |
| | | body, err := ioutil.ReadAll(resp.Body) |
| | | if err != nil { |
| | | return err, nil |
| | | } |
| | | |
| | | jsonStr := string(body) |
| | | var dat map[string]interface{} |
| | | dec := json.NewDecoder(strings.NewReader(jsonStr)) |
| | | |
| | | if err := dec.Decode(&dat); err == io.EOF { |
| | | log.Log.Infoln(err.Error()) |
| | | return err, nil |
| | | } else if err != nil { |
| | | log.Log.Errorln(err.Error()) |
| | | return err, nil |
| | | } |
| | | // 是否需要 解析 es 返回的 source |
| | | if isSource { |
| | | dat = dat["hits"].(map[string]interface{}) |
| | | var data = make(map[string]interface{}, 2) |
| | | data["total"] = dat["total"] |
| | | sources := []interface{}{} |
| | | for _, value := range dat["hits"].([]interface{}) { |
| | | source := value.(map[string]interface{})["_source"].(map[string]interface{}) |
| | | source["id"] = value.(map[string]interface{})["_id"] |
| | | sdkType := source["sdkType"] |
| | | if sdkType != nil { |
| | | sdk, _ := strconv.Atoi(sdkType.(string)) |
| | | source["sdkType"] = sdkTypeToValue(sdk) |
| | | } |
| | | sources = append(sources, source) |
| | | } |
| | | data["datalist"] = sources |
| | | return nil, data |
| | | } else { |
| | | return nil, dat |
| | | } |
| | | } |
| | | |
| | | //sdk类型 |
| | | func sdkTypeToValue(i int) string { |
| | | value := []string{"人脸", "车辆", "人体", "入侵", "拥挤", "靠右行", "人员异常", "个体静止"} |
| | | |
| | | return value[i-1] |
| | | } |
| | | |
| | | func PostAction(sec int, Eurl string) []byte { |
| | | index := "videopersons,personaction" |
| | | url := fmt.Sprintf("%s%s%s", Eurl, index, "/_search") |
| | | |
| | | seccond := strconv.Itoa(sec) |
| | | |
| | | prama := "{\"query\":{\"bool\":{\"filter\":[{\"term\":{\"personIsHub\":\"1\"}},{\"range\":{\"picDate\":{\"gte\":\"now+8h-" + seccond + "s\",\"lt\":\"now+8h\"}}}]}},\"size\":\"1000\",\"sort\":[{\"picDate\":{\"order\":\"desc\"}}]," + |
| | | "\"_source\":[\"BaseName\",\"Gender\",\"Race\",\"content\",\"idcard\",\"picAddress\",\"picDate\",\"sdkType\",\"Age\",\"personId\",\"personIsHub\",\"personPicUrl\",\"picLocalUrl\",\"picSmUrl\",\"videoIp\",\"videoNum\",\"videoReqNum\",\"ageDescription\",\"likePer\",\"picMaxUrl\"]" + "}" |
| | | |
| | | err, tokenRes := GetEsDataReq(url, prama, true) |
| | | if err != nil { |
| | | log.Log.Errorln(err) |
| | | return nil |
| | | } |
| | | jsonstring, _ := json.Marshal(tokenRes) |
| | | if len(jsonstring) <= 26 { |
| | | return nil |
| | | } |
| | | return jsonstring |
| | | } |
New file |
| | |
| | | module github.com/long/test |
| | | |
| | | go 1.12 |
| | | |
| | | require ( |
| | | github.com/lestrrat-go/file-rotatelogs v2.2.0+incompatible |
| | | github.com/lestrrat-go/strftime v0.0.0-20180821113735-8b31f9c59b0f // indirect |
| | | github.com/pkg/errors v0.8.1 |
| | | github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 |
| | | github.com/rs/zerolog v1.14.3 |
| | | github.com/sirupsen/logrus v1.4.1 |
| | | ) |
New file |
| | |
| | | github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= |
| | | github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= |
| | | github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= |
| | | github.com/lestrrat-go/file-rotatelogs v2.2.0+incompatible h1:eXEwY0f2h6mcobdAxm4VRSWds4tqmlLdUqxu8ybiEEA= |
| | | github.com/lestrrat-go/file-rotatelogs v2.2.0+incompatible/go.mod h1:ZQnN8lSECaebrkQytbHj4xNgtg8CR7RYXnPok8e0EHA= |
| | | github.com/lestrrat-go/strftime v0.0.0-20180821113735-8b31f9c59b0f h1:/o/LRlB6dBTBNViFglNdGfsDHBjdL8Yvfm7qQE4ZUh0= |
| | | github.com/lestrrat-go/strftime v0.0.0-20180821113735-8b31f9c59b0f/go.mod h1:RMlXygAD3c48Psmr06d2G75L4E4xxzxkIe/+ppX9eAU= |
| | | github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= |
| | | github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= |
| | | github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= |
| | | github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 h1:mZHayPoR0lNmnHyvtYjDeq0zlVHn9K/ZXoy17ylucdo= |
| | | github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5/go.mod h1:GEXHk5HgEKCvEIIrSpFI3ozzG5xOKA2DVlEX/gGnewM= |
| | | github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= |
| | | github.com/rs/zerolog v1.14.3 h1:4EGfSkR2hJDB0s3oFfrlPqjU1e4WLncergLil3nEKW0= |
| | | github.com/rs/zerolog v1.14.3/go.mod h1:3WXPzbXEEliJ+a6UFE4vhIxV8qR1EML6ngzP9ug4eYg= |
| | | github.com/sirupsen/logrus v1.4.1 h1:GL2rEmy6nsikmW0r8opw9JIRScdMF5hA8cOYLH7In1k= |
| | | github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= |
| | | github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= |
| | | github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= |
| | | github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= |
| | | golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= |
| | | golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= |
| | | golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= |
| | | golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33 h1:I6FyU15t786LL7oL/hn43zqTuEGr4PN7F4XJ1p4E3Y8= |
| | | golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= |
| | | golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU= |
| | | golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= |
| | | golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= |
| | | golang.org/x/tools v0.0.0-20190425163242-31fd60d6bfdc/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= |
New file |
| | |
| | | log/error.log.201905130000 |
New file |
| | |
| | | {"level":"error","msg":"EOF remoteAddr 192.168.1.123:36326 close","time":"2019-05-15T13:54:16+08:00"} |
| | | {"level":"error","msg":"EOF remoteAddr 192.168.1.123:36328 close","time":"2019-05-15T13:56:25+08:00"} |
| | | {"level":"error","msg":"EOF remoteAddr 192.168.1.123:36338 close","time":"2019-05-15T14:06:10+08:00"} |
| | | {"level":"error","msg":"EOF remoteAddr 192.168.1.123:36504 close","time":"2019-05-15T14:06:54+08:00"} |
| | | {"level":"error","msg":"EOF remoteAddr 192.168.1.123:36508 close","time":"2019-05-15T14:17:30+08:00"} |
| | | {"level":"error","msg":"EOF remoteAddr 192.168.1.123:36988 close","time":"2019-05-15T14:20:55+08:00"} |
| | | {"level":"error","msg":"EOF remoteAddr 192.168.1.123:37088 close","time":"2019-05-15T14:21:20+08:00"} |
| | | {"level":"error","msg":"EOF remoteAddr 192.168.1.123:37098 close","time":"2019-05-15T14:23:06+08:00"} |
| | | {"level":"error","msg":"EOF remoteAddr 192.168.1.123:37146 close","time":"2019-05-15T14:25:19+08:00"} |
| | | {"level":"error","msg":"EOF remoteAddr 192.168.1.123:37244 close","time":"2019-05-15T14:31:28+08:00"} |
| | | {"level":"error","msg":"EOF remoteAddr 192.168.1.123:37370 close","time":"2019-05-15T14:32:20+08:00"} |
| | | {"level":"error","msg":"EOF remoteAddr 192.168.1.123:37374 close","time":"2019-05-15T14:33:17+08:00"} |
New file |
| | |
| | | log/info.log.201905130000 |
New file |
| | |
| | | package log |
| | | |
| | | import ( |
| | | "io/ioutil" |
| | | "time" |
| | | |
| | | rotatelogs "github.com/lestrrat-go/file-rotatelogs" |
| | | "github.com/rifflock/lfshook" |
| | | "github.com/sirupsen/logrus" |
| | | ) |
| | | |
| | | var Log *logrus.Logger |
| | | |
| | | func init() { |
| | | Log = NewLogger() |
| | | } |
| | | |
| | | func NewLogger() *logrus.Logger { |
| | | if Log != nil { |
| | | return Log |
| | | } |
| | | |
| | | infopath := "log/info.log" |
| | | infowriter, _ := rotatelogs.New( |
| | | infopath+".%Y%m%d%H%M", |
| | | rotatelogs.WithLinkName(infopath), |
| | | rotatelogs.WithMaxAge(time.Duration(86400)*time.Second), |
| | | rotatelogs.WithRotationTime(time.Duration(604800)*time.Second), |
| | | ) |
| | | errorpath := "log/error.log" |
| | | errorwriter, _ := rotatelogs.New( |
| | | errorpath+".%Y%m%d%H%M", |
| | | rotatelogs.WithLinkName(errorpath), |
| | | rotatelogs.WithMaxAge(time.Duration(86400)*time.Second), |
| | | rotatelogs.WithRotationTime(time.Duration(604800)*time.Second), |
| | | ) |
| | | |
| | | Log = logrus.New() |
| | | Log.SetOutput(ioutil.Discard) |
| | | Log.Hooks.Add(lfshook.NewHook( |
| | | lfshook.WriterMap{ |
| | | logrus.InfoLevel: infowriter, |
| | | logrus.ErrorLevel: errorwriter, |
| | | }, |
| | | &logrus.JSONFormatter{}, |
| | | )) |
| | | return Log |
| | | } |
New file |
| | |
| | | package pack |
| | | |
| | | import ( |
| | | "encoding/binary" |
| | | "fmt" |
| | | "io" |
| | | ) |
| | | |
| | | type Package struct { |
| | | Version [2]int8 |
| | | Datalen int64 |
| | | Data []byte |
| | | } |
| | | |
| | | func (p *Package) String() string { |
| | | return fmt.Sprintf("Version:%d DataLen:%d Data:%s", p.Version, p.Datalen, p.Data) |
| | | } |
| | | |
| | | func (p *Package) Pack(w io.Writer) { |
| | | binary.Write(w, binary.BigEndian, p.Version) |
| | | binary.Write(w, binary.BigEndian, p.Datalen) |
| | | binary.Write(w, binary.BigEndian, p.Data) |
| | | } |
| | | |
| | | func (p *Package) Unpack(r io.Reader) { |
| | | binary.Read(r, binary.BigEndian, &p.Version) |
| | | binary.Read(r, binary.BigEndian, &p.Datalen) |
| | | if p.Datalen > 0 { |
| | | p.Data = make([]byte, p.Datalen) |
| | | } |
| | | binary.Read(r, binary.BigEndian, &p.Data) |
| | | } |
| | | |
| | | func BuildMsg(data []byte) Package { |
| | | var pkg Package |
| | | pkg.Version[0] = 'V' |
| | | pkg.Version[1] = 1 |
| | | pkg.Data = data |
| | | pkg.Datalen = int64(len(pkg.Data)) |
| | | return pkg |
| | | } |
New file |
| | |
| | | package main |
| | | |
| | | import ( |
| | | "flag" |
| | | "net" |
| | | "strconv" |
| | | "time" |
| | | |
| | | "github.com/long/test/esutil" |
| | | log "github.com/long/test/log" |
| | | ) |
| | | |
| | | var addr = flag.String("addr", "192.168.1.124", "The address to listen to;") |
| | | var Eurl = flag.String("eurl", "http://192.168.1.182:9200/", "The port to listen on; ") |
| | | |
| | | var port = flag.Int("port", 6000, "The port to listen on; ") |
| | | var sec = flag.Int("sec", 10, "the second for query data. ") |
| | | |
| | | func main() { |
| | | flag.Parse() |
| | | |
| | | log.Log.Infoln("starting server...") |
| | | |
| | | src := *addr + ":" + strconv.Itoa(*port) |
| | | listener, err := net.Listen("tcp", src) |
| | | if err != nil { |
| | | log.Log.Errorln(err) |
| | | return |
| | | } |
| | | log.Log.Infof("Listening on %s.\n", src) |
| | | |
| | | defer listener.Close() |
| | | |
| | | for { |
| | | conn, err := listener.Accept() |
| | | if err != nil { |
| | | log.Log.Errorf("some connecion error: %s\n", err) |
| | | } |
| | | go handleConnection(conn) |
| | | } |
| | | } |
| | | |
| | | func handleConnection(conn net.Conn) { |
| | | remoteAddr := conn.RemoteAddr().String() |
| | | log.Log.Infoln("Client connected from ", remoteAddr) |
| | | |
| | | ech := make(chan error) |
| | | go func(conn net.Conn, ech chan error) { |
| | | buf := make([]byte, 10) |
| | | _, err := conn.Read(buf) |
| | | if err != nil { |
| | | ech <- err |
| | | } |
| | | }(conn, ech) |
| | | tick := time.NewTicker(10 * time.Second) |
| | | |
| | | for { |
| | | select { |
| | | case <-tick.C: |
| | | handleMessage(conn) |
| | | case err := <-ech: |
| | | log.Log.Errorln(err, "remoteAddr ", remoteAddr, " close") |
| | | break |
| | | } |
| | | } |
| | | |
| | | log.Log.Infoln("Client at " + remoteAddr + " disconnected.") |
| | | } |
| | | |
| | | func handleMessage(conn net.Conn) { |
| | | jsonstring := esutil.PostAction(*sec, *Eurl) |
| | | if jsonstring == nil { |
| | | log.Log.Infoln("the data is nil") |
| | | return |
| | | } |
| | | jsonstring = append(jsonstring, []byte("\000")...) |
| | | log.Log.Infoln("jsonstring len: ", len(jsonstring), "\000 data: ", len("\000")) |
| | | conn.Write(jsonstring) |
| | | } |