| | |
| | | import ( |
| | | "context" |
| | | "flag" |
| | | "os" |
| | | "path" |
| | | "path/filepath" |
| | | "sdkCompare/proto/facecompare" |
| | | "strconv" |
| | | "time" |
| | | |
| | | "sdkCompare/cache" |
| | | "sdkCompare/compare" |
| | | "sdkCompare/config" |
| | | "sdkCompare/db" |
| | | "sdkCompare/proto/facecompare" |
| | | |
| | | "basic.com/pubsub/protomsg.git" |
| | | "basic.com/valib/logger.git" |
| | |
| | | "nanomsg.org/go-mangos/transport/tcp" |
| | | ) |
| | | |
| | | var ( |
| | | envirment string |
| | | procName string |
| | | targetType1 string |
| | | ) |
| | | const procName = "faceCompare" |
| | | |
| | | func init() { |
| | | flag.StringVar(&envirment, "e", "config", "") |
| | | |
| | | flag.StringVar(&targetType1, "targetType1", "FaceDetect", "cache feature") |
| | | |
| | | flag.Parse() |
| | | vaversion.Usage() |
| | | } |
| | | |
| | | config.Init(envirment) |
| | | func main() { |
| | | err := config.Init() |
| | | if err != nil { |
| | | return |
| | | } |
| | | |
| | | procName = filepath.Base(os.Args[0]) |
| | | var logFile = path.Join(config.LogConf.Path, procName+".log") |
| | | var logFile = path.Join(config.LogConf.Path, "faceCompare.log") |
| | | |
| | | // 日志初始化 |
| | | logger.InitLogger(logFile, config.LogConf.Level, config.LogConf.MaxSize, config.LogConf.MaxBackups, config.LogConf.MaxAge) |
| | | logger.Info("logger init success !") |
| | | } |
| | | |
| | | func main() { |
| | | //esutil.InitLog(logger.Debug) |
| | | logger.Debug("This is a new server about sdk compare, proc name ", procName) |
| | | |
| | | serveUrl := "tcp://0.0.0.0:" |
| | | if err := cache.ConnectDB(); err != nil { |
| | | if err := db.ConnectDB(); err != nil { |
| | | logger.Error(err.Error()) |
| | | return |
| | | } |
| | |
| | | cache.InitDbTablePersons() |
| | | serveUrl = serveUrl + strconv.Itoa(config.DbPersonCompInfo.ServePort) |
| | | |
| | | logger.Debugf("%s serve url:%s", procName, serveUrl) |
| | | logger.Infof("%s serve url:%s", procName, serveUrl) |
| | | |
| | | Recv(serveUrl) |
| | | } |
| | |
| | | if sock, err = rep.NewSocket(); err != nil { |
| | | logger.Error("new rep socket err:", err) |
| | | } |
| | | |
| | | sock.AddTransport(ipc.NewTransport()) |
| | | sock.AddTransport(tcp.NewTransport()) |
| | | if err = sock.Listen(url); err != nil { |
| | |
| | | for { |
| | | select { |
| | | case <-ctx.Done(): |
| | | logger.Debug("ctx done") |
| | | logger.Info("ctx done") |
| | | return |
| | | default: |
| | | msg, err = sock.Recv() |
| | | if err != nil { |
| | | if err != nil || len(msg) <= 0 { |
| | | continue |
| | | } |
| | | |
| | | if len(msg) > 0 { |
| | | var compareType facecompare.CompareRequest |
| | | err = proto.Unmarshal(msg, &compareType) |
| | | if err != nil { |
| | | logger.Error("compareType json unmarshal error") |
| | | var request facecompare.CompareRequest |
| | | err = proto.Unmarshal(msg, &request) |
| | | if err != nil { |
| | | logger.Warn("CompareRequest json unmarshal error") |
| | | continue |
| | | } |
| | | |
| | | var result []byte |
| | | if request.CompareType == facecompare.CompareType_Compare { |
| | | var compareArgInfo protomsg.CompareArgs |
| | | var cacheChangeInfo protomsg.EsPersonCacheChange |
| | | if err = proto.Unmarshal(request.Payload, &compareArgInfo); err == nil { |
| | | timeStart := time.Now() |
| | | result = compare.GetComparePersonBaseInfo(compareArgInfo) |
| | | logger.Debug("用时:", time.Since(timeStart)) |
| | | } else if err = proto.Unmarshal(request.Payload, &cacheChangeInfo); err == nil { |
| | | cache.UpdateCache(&cacheChangeInfo) |
| | | } else { |
| | | logger.Warn("CompareArgs or EsPersonCacheChange json unmarshal error") |
| | | continue |
| | | } |
| | | var result []byte |
| | | if compareType.CompareType == facecompare.CompareType_Compare { |
| | | var compareArgInfo protomsg.CompareArgs |
| | | var cacheChangeInfo protomsg.EsPersonCacheChange |
| | | if err = proto.Unmarshal(compareType.Payload, &compareArgInfo); err == nil { |
| | | timeStart := time.Now() |
| | | result = cache.GetComparePersonBaseInfo(compareArgInfo) |
| | | logger.Debug("用时:", time.Since(timeStart)) |
| | | } else if err = proto.Unmarshal(compareType.Payload, &cacheChangeInfo); err == nil { |
| | | cache.UpdateCache(&cacheChangeInfo) |
| | | } else { |
| | | logger.Error("CompareArgs or EsPersonCacheChange json unmarshal error") |
| | | continue |
| | | } else if request.CompareType == facecompare.CompareType_UpdateCache { |
| | | var compareEvent protomsg.CompareEvent |
| | | if err = proto.Unmarshal(request.Payload, &compareEvent); err == nil { |
| | | if compareEvent.EventType == protomsg.CompareEventType_ReInitCache { //加入集群后重新初始化缓存 |
| | | cache.ReInitDbTablePersonsCache() |
| | | } else if compareEvent.EventType == protomsg.CompareEventType_UpdateCache { //库中新增更新缓存 |
| | | id := string(compareEvent.Payload) |
| | | cache.UpdateDbPersonsCacheById(id) |
| | | logger.Info("--------------更新人员缓存, id: ", id) |
| | | } |
| | | } else if compareType.CompareType == facecompare.CompareType_UpdateCache { |
| | | var compareEvent protomsg.CompareEvent |
| | | if err = proto.Unmarshal(compareType.Payload, &compareEvent); err == nil { |
| | | if compareEvent.EventType == protomsg.CompareEventType_ReInitCache { //加入集群后重新初始化缓存 |
| | | cache.ReInitDbTablePersonsCache() |
| | | } else if compareEvent.EventType == protomsg.CompareEventType_UpdateCache { //库中新增更新缓存 |
| | | id := string(compareEvent.Payload) |
| | | cache.UpdateDbPersonsCacheById(id) |
| | | logger.Debug("--------------更新人员缓存, id: ", id) |
| | | } |
| | | } else { |
| | | logger.Error("CompareEvent json unmarshal error") |
| | | continue |
| | | } |
| | | } else { |
| | | logger.Warn("CompareEvent json unmarshal error") |
| | | continue |
| | | } |
| | | err = sock.Send(result) |
| | | if err != nil { |
| | | logger.Error("send reply err:", err.Error()) |
| | | } |
| | | } |
| | | |
| | | err = sock.Send(result) |
| | | if err != nil { |
| | | logger.Warn("send reply err:", err.Error()) |
| | | } |
| | | } |
| | | } |