From d8061dbf8f817b59e7885b9743394ab217feafe0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E6=99=AF=E9=98=B3?= <1656488874@qq.com> Date: Thu, 12 Dec 2019 20:52:09 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=EF=BC=8C=E6=B7=BB=E5=8A=A0=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/model/node.go | 6 ++++++ backend/services/node.go | 39 ++++++++++++++++++++++++--------------- 2 files changed, 30 insertions(+), 15 deletions(-) diff --git a/backend/model/node.go b/backend/model/node.go index a24b36e3..d662ab6d 100644 --- a/backend/model/node.go +++ b/backend/model/node.go @@ -143,6 +143,7 @@ func (n *Node) GetTasks() ([]Task, error) { return tasks, nil } +// 节点列表 func GetNodeList(filter interface{}) ([]Node, error) { s, c := database.GetCol("nodes") defer s.Close() @@ -156,6 +157,7 @@ func GetNodeList(filter interface{}) ([]Node, error) { return results, nil } +// 节点信息 func GetNode(id bson.ObjectId) (Node, error) { var node Node @@ -176,6 +178,7 @@ func GetNode(id bson.ObjectId) (Node, error) { return node, nil } +// 节点信息 func GetNodeByKey(key string) (Node, error) { s, c := database.GetCol("nodes") defer s.Close() @@ -191,6 +194,7 @@ func GetNodeByKey(key string) (Node, error) { return node, nil } +// 更新节点 func UpdateNode(id bson.ObjectId, item Node) error { s, c := database.GetCol("nodes") defer s.Close() @@ -206,6 +210,7 @@ func UpdateNode(id bson.ObjectId, item Node) error { return nil } +// 任务列表 func GetNodeTaskList(id bson.ObjectId) ([]Task, error) { node, err := GetNode(id) if err != nil { @@ -218,6 +223,7 @@ func GetNodeTaskList(id bson.ObjectId) ([]Task, error) { return tasks, nil } +// 节点数 func GetNodeCount(query interface{}) (int, error) { s, c := database.GetCol("nodes") defer s.Close() diff --git a/backend/services/node.go b/backend/services/node.go index 36934746..e6c2ac08 100644 --- a/backend/services/node.go +++ b/backend/services/node.go @@ -50,36 +50,44 @@ func GetNodeData() (Data, error) { return data, err } +func GetRedisNode(key string) (*Data, error) { + // 获取节点数据 + value, err := database.RedisClient.HGet("nodes", key) + if err != nil { + log.Errorf(err.Error()) + return nil, err + } + + // 解析节点列表数据 + var data Data + if err := json.Unmarshal([]byte(value), &data); err != nil { + log.Errorf(err.Error()) + return nil, err + } + return &data, nil +} + // 更新所有节点状态 func UpdateNodeStatus() { // 从Redis获取节点keys list, err := database.RedisClient.HKeys("nodes") if err != nil { - log.Errorf(err.Error()) + log.Errorf("get redis node keys error: %s", err.Error()) return } // 遍历节点keys for _, key := range list { - // 获取节点数据 - value, err := database.RedisClient.HGet("nodes", key) + + data, err := GetRedisNode(key) if err != nil { - log.Errorf(err.Error()) - return + continue } - - // 解析节点列表数据 - var data Data - if err := json.Unmarshal([]byte(value), &data); err != nil { - log.Errorf(err.Error()) - return - } - // 如果记录的更新时间超过60秒,该节点被认为离线 if time.Now().Unix()-data.UpdateTsUnix > 60 { // 在Redis中删除该节点 if err := database.RedisClient.HDel("nodes", data.Key); err != nil { - log.Errorf(err.Error()) + log.Errorf("delete redis node key error:%s, key:%s", err.Error(), data.Key) } continue } @@ -94,7 +102,8 @@ func UpdateNodeStatus() { model.ResetNodeStatusToOffline(list) } -func handleNodeInfo(key string, data Data) { +// 处理接到信息 +func handleNodeInfo(key string, data *Data) { // 添加同步锁 v, err := database.RedisClient.Lock(key) if err != nil { From 935b3e2c4794f9ffafe21914118798a35256010b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E6=99=AF=E9=98=B3?= <1656488874@qq.com> Date: Tue, 17 Dec 2019 10:07:38 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=8E=BB=E6=8E=89select=20=E8=AF=AD?= =?UTF-8?q?=E5=8F=A5=E7=9A=84break=E5=85=B3=E9=94=AE=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/services/log.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/backend/services/log.go b/backend/services/log.go index 60909c61..2034794d 100644 --- a/backend/services/log.go +++ b/backend/services/log.go @@ -49,10 +49,8 @@ func GetRemoteLog(task model.Task) (logStr string, err error) { select { case logStr = <-ch: log.Infof("get remote log") - break case <-time.After(30 * time.Second): logStr = "get remote log timeout" - break } return logStr, nil