From 4324306f529b9bc62d7e818c0b12ff822687bb47 Mon Sep 17 00:00:00 2001
From: zhangmeng <775834166@qq.com>
Date: 星期一, 20 一月 2020 11:14:33 +0800
Subject: [PATCH] update
---
run.go | 14 ++--
common/helper.go | 96 ++++++++++++++++++++++++++++++++
common/reboot.go | 64 +++++++++++++++++++++
3 files changed, 167 insertions(+), 7 deletions(-)
diff --git a/common/helper.go b/common/helper.go
new file mode 100644
index 0000000..29fa255
--- /dev/null
+++ b/common/helper.go
@@ -0,0 +1,96 @@
+package common
+
+import (
+ "context"
+ "encoding/json"
+ "fmt"
+ "io/ioutil"
+ "strconv"
+ "time"
+
+ "basic.com/pubsub/protomsg.git"
+ "github.com/gogo/protobuf/proto"
+)
+
+// GetIpcAddress get ipc
+func GetIpcAddress(shm bool, id string) string {
+ if shm {
+ return id
+ }
+ return `ipc:///tmp/` + id + `.ipc`
+}
+
+// SubConfig sub
+type SubConfig struct {
+ SoFile string `json:"so_file_path"`
+ Env string `json:"runtime"`
+ Param map[string]string `json:"param"`
+}
+
+// SdkConfig sdk
+type SdkConfig struct {
+ SoFile string `json:"so_file_path"`
+ Env string `json:"runtime"`
+ Param map[string]string `json:"param"`
+ Sub *SubConfig `json:"sub"`
+}
+
+// ReadConfig conf
+func ReadConfig(file string) (SdkConfig, error) {
+ data, err := ioutil.ReadFile(file)
+ if err != nil {
+ return SdkConfig{}, fmt.Errorf("READ SDK CONFIG FILE %s ERROR", file)
+ }
+
+ //璇诲彇鐨勬暟鎹负json鏍煎紡锛岄渶瑕佽繘琛岃В鐮�
+ var v SdkConfig
+ err = json.Unmarshal(data, &v)
+
+ return v, err
+}
+
+// Atoi atoi
+func Atoi(s string) int {
+ i, _ := strconv.Atoi(s)
+ return i
+}
+
+// UnserilizeProto un
+func UnserilizeProto(ctx context.Context, data <-chan []byte, out chan<- protomsg.SdkMessage, fn func(...interface{})) {
+ for {
+ select {
+ case <-ctx.Done():
+ return
+ case d := <-data:
+ if len(d) < 100 {
+ continue
+ }
+ msg := protomsg.SdkMessage{}
+ if err := proto.Unmarshal(d, &msg); err != nil {
+ fn(err, " msg 澶勭悊寮傚父")
+ continue
+ }
+
+ out <- msg
+
+ default:
+ time.Sleep(10 * time.Millisecond)
+ }
+ }
+}
+
+// UnpackImage unpack
+func UnpackImage(msg protomsg.SdkMessage, fnName string, fn func(...interface{})) *protomsg.Image {
+ // 鍙嶅簭鍒楀寲鏁版嵁寰楀埌sdk鍏ュ弬
+ i := &protomsg.Image{}
+ err := proto.Unmarshal(msg.Data, i)
+ if err != nil {
+ fn(fnName, " protobuf decode CameraImage error: ", err.Error())
+ return nil
+ }
+ if i.Data == nil {
+ fn(fnName, " protomsg.Image data null")
+ return nil
+ }
+ return i
+}
diff --git a/common/reboot.go b/common/reboot.go
new file mode 100644
index 0000000..e4a9e4c
--- /dev/null
+++ b/common/reboot.go
@@ -0,0 +1,64 @@
+package common
+
+import (
+ "context"
+ "os"
+ "sync"
+ "time"
+)
+
+// Disturber stop
+type Disturber struct {
+ mtx sync.Mutex
+ live bool
+ until int
+ maxTry int
+}
+
+// NewDisturber new
+func NewDisturber(maxTry int) *Disturber {
+ return &Disturber{
+ live: true,
+ until: 0,
+ maxTry: maxTry,
+ }
+}
+
+// Prevent prevent
+func (d *Disturber) Prevent() {
+ d.mtx.Lock()
+ defer d.mtx.Unlock()
+ d.live = true
+}
+
+// MaybeReboot reboot
+func (d *Disturber) MaybeReboot(ctx context.Context, fn func(...interface{})) {
+ d.live = true
+ for {
+ select {
+ case <-ctx.Done():
+ return
+ default:
+ d.mtx.Lock()
+ running := d.live
+ d.mtx.Unlock()
+
+ if running {
+ d.until = 0
+
+ d.mtx.Lock()
+ d.live = false
+ d.mtx.Unlock()
+
+ } else {
+ d.until++
+ fn("!!!!!!No Running: ", d.until)
+ if d.until > d.maxTry {
+ fn("!!!!!!Too Long Running, Reboot: ", d.maxTry)
+ os.Exit(0)
+ }
+ }
+ time.Sleep(time.Second)
+ }
+ }
+}
diff --git a/run.go b/run.go
index 18b7544..90de849 100644
--- a/run.go
+++ b/run.go
@@ -48,7 +48,7 @@
"reid/rpc"
- "basic.com/libgowrapper/sdkhelper.git"
+ "reid/common"
"basic.com/valib/gogpu.git"
@@ -68,7 +68,7 @@
// Create Reid
func Create(config string, typ, id string, gpu int, shm bool, ipc2Rule string, ruleMaxSize int, fn func(...interface{}), reserved map[string]interface{}) interface{} {
- cfg, err := sdkhelper.ReadConfig(config)
+ cfg, err := common.ReadConfig(config)
if err != nil {
fn("Reid SDK Create Error When Read Config: ", err)
return nil
@@ -88,7 +88,7 @@
}
}
- gpuM := sdkhelper.Atoi(cfg.Param[sGPU])
+ gpuM := common.Atoi(cfg.Param[sGPU])
rGPU := gpu
@@ -123,8 +123,8 @@
ipcSnd := s.ipc + postPush
ipcRcv := s.ipc + postPull
- sndURL := sdkhelper.GetIpcAddress(true, ipcSnd)
- rcvURL := sdkhelper.GetIpcAddress(true, ipcRcv)
+ sndURL := common.GetIpcAddress(true, ipcSnd)
+ rcvURL := common.GetIpcAddress(true, ipcRcv)
chSnd := make(chan []byte, 3)
chRcv := make(chan []byte, 3)
@@ -133,7 +133,7 @@
go recv.Run(ctx)
chMsg := make(chan protomsg.SdkMessage, 3)
- go sdkhelper.UnserilizeProto(ctx, chRcv, chMsg, s.fnLogger)
+ go common.UnserilizeProto(ctx, chRcv, chMsg, s.fnLogger)
send := rpc.NewSender(sndURL, chSnd, true, s.fnLogger)
go send.Run(ctx)
@@ -147,7 +147,7 @@
s.fnLogger("reid !!!!!! Recv Msg From Humantrack Error")
continue
}
- i := sdkhelper.UnpackImage(msg, "reid", s.fnLogger)
+ i := common.UnpackImage(msg, "reid", s.fnLogger)
if i == nil || i.Data == nil || i.Width <= 0 || i.Height <= 0 {
s.fnLogger("reid !!!!!! Unpack Image From Humantrack Msg Failed")
continue
--
Gitblit v1.8.0