diff --git a/internal/web/actions/default/settings/user-nodes/index.go b/internal/web/actions/default/settings/user-nodes/index.go index a0dfda1e..6e4d620a 100644 --- a/internal/web/actions/default/settings/user-nodes/index.go +++ b/internal/web/actions/default/settings/user-nodes/index.go @@ -1,9 +1,14 @@ package usernodes import ( + "encoding/json" + "fmt" "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeCommon/pkg/nodeconfigs" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" + "github.com/iwind/TeaGo/logs" "github.com/iwind/TeaGo/maps" + "time" ) type IndexAction struct { @@ -36,11 +41,32 @@ func (this *IndexAction) RunGet(params struct{}) { } for _, node := range nodesResp.Nodes { + // 状态 + status := &nodeconfigs.NodeStatus{} + if len(node.StatusJSON) > 0 { + err = json.Unmarshal(node.StatusJSON, &status) + if err != nil { + logs.Error(err) + continue + } + status.IsActive = status.IsActive && time.Now().Unix()-status.UpdatedAt <= 60 // N秒之内认为活跃 + } + nodeMaps = append(nodeMaps, maps.Map{ "id": node.Id, "isOn": node.IsOn, "name": node.Name, "accessAddrs": node.AccessAddrs, + "status": maps.Map{ + "isActive": status.IsActive, + "updatedAt": status.UpdatedAt, + "hostname": status.Hostname, + "cpuUsage": status.CPUUsage, + "cpuUsageText": fmt.Sprintf("%.2f%%", status.CPUUsage*100), + "memUsage": status.MemoryUsage, + "memUsageText": fmt.Sprintf("%.2f%%", status.MemoryUsage*100), + "buildVersion": status.BuildVersion, + }, }) } } diff --git a/web/views/@default/settings/user-nodes/index.html b/web/views/@default/settings/user-nodes/index.html index 10a56d18..eb2efe02 100644 --- a/web/views/@default/settings/user-nodes/index.html +++ b/web/views/@default/settings/user-nodes/index.html @@ -11,7 +11,10 @@ 节点名称 访问地址 - 状态 + 版本号 + CPU + 内存 + 状态 操作 @@ -22,9 +25,26 @@ {{addr}} - - - + + v{{node.status.buildVersion}} + - + + + {{node.status.cpuUsageText}} + - + + + {{node.status.memUsageText}} + - + + + +
+ 运行中 +
+ 已断开 + 未连接 + 详情   删除