diff --git a/internal/web/actions/default/clusters/cluster/nodes.go b/internal/web/actions/default/clusters/cluster/nodes.go index 3e054a9c..7be989d7 100644 --- a/internal/web/actions/default/clusters/cluster/nodes.go +++ b/internal/web/actions/default/clusters/cluster/nodes.go @@ -32,11 +32,12 @@ func (this *NodesAction) RunGet(params struct { Keyword string Level int32 - CpuOrder string - MemoryOrder string - TrafficInOrder string - TrafficOutOrder string - LoadOrder string + CpuOrder string + MemoryOrder string + TrafficInOrder string + TrafficOutOrder string + LoadOrder string + ConnectionsOrder string }) { this.Data["groupId"] = params.GroupId this.Data["regionId"] = params.RegionId @@ -44,7 +45,7 @@ func (this *NodesAction) RunGet(params struct { this.Data["activeState"] = params.ActiveState this.Data["keyword"] = params.Keyword this.Data["level"] = params.Level - this.Data["hasOrder"] = len(params.CpuOrder) > 0 || len(params.MemoryOrder) > 0 || len(params.TrafficInOrder) > 0 || len(params.TrafficOutOrder) > 0 || len(params.LoadOrder) > 0 + this.Data["hasOrder"] = len(params.CpuOrder) > 0 || len(params.MemoryOrder) > 0 || len(params.TrafficInOrder) > 0 || len(params.TrafficOutOrder) > 0 || len(params.LoadOrder) > 0 || len(params.ConnectionsOrder) > 0 // 集群是否已经设置了线路 clusterDNSResp, err := this.RPC().NodeClusterRPC().FindEnabledNodeClusterDNS(this.AdminContext(), &pb.FindEnabledNodeClusterDNSRequest{NodeClusterId: params.ClusterId}) @@ -112,6 +113,10 @@ func (this *NodesAction) RunGet(params struct { req.LoadAsc = true } else if params.LoadOrder == "desc" { req.LoadDesc = true + } else if params.ConnectionsOrder == "asc" { + req.ConnectionsAsc = true + } else if params.ConnectionsOrder == "desc" { + req.ConnectionsDesc = true } nodesResp, err := this.RPC().NodeRPC().ListEnabledNodesMatch(this.AdminContext(), req) if err != nil { @@ -121,8 +126,8 @@ func (this *NodesAction) RunGet(params struct { var nodeMaps = []maps.Map{} for _, node := range nodesResp.Nodes { // 状态 - isSynced := false - status := &nodeconfigs.NodeStatus{} + var isSynced = false + var status = &nodeconfigs.NodeStatus{} if len(node.StatusJSON) > 0 { err = json.Unmarshal(node.StatusJSON, &status) if err != nil { @@ -211,16 +216,17 @@ func (this *NodesAction) RunGet(params struct { "error": node.InstallStatus.Error, }, "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), - "trafficInBytes": status.TrafficInBytes, - "trafficOutBytes": status.TrafficOutBytes, - "load1m": numberutils.FormatFloat2(status.Load1m), + "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), + "trafficInBytes": status.TrafficInBytes, + "trafficOutBytes": status.TrafficOutBytes, + "load1m": numberutils.FormatFloat2(status.Load1m), + "countConnections": status.ConnectionCount, }, "cluster": maps.Map{ "id": node.NodeCluster.Id, diff --git a/internal/web/actions/default/clusters/nodes.go b/internal/web/actions/default/clusters/nodes.go index 079ebff2..04a190e8 100644 --- a/internal/web/actions/default/clusters/nodes.go +++ b/internal/web/actions/default/clusters/nodes.go @@ -33,11 +33,12 @@ func (this *NodesAction) RunGet(params struct { Keyword string Level int32 - CpuOrder string - MemoryOrder string - TrafficInOrder string - TrafficOutOrder string - LoadOrder string + CpuOrder string + MemoryOrder string + TrafficInOrder string + TrafficOutOrder string + LoadOrder string + ConnectionsOrder string }) { this.Data["groupId"] = params.GroupId this.Data["regionId"] = params.RegionId @@ -46,7 +47,7 @@ func (this *NodesAction) RunGet(params struct { this.Data["keyword"] = params.Keyword this.Data["level"] = params.Level this.Data["clusterId"] = params.ClusterId - this.Data["hasOrder"] = len(params.CpuOrder) > 0 || len(params.MemoryOrder) > 0 || len(params.TrafficInOrder) > 0 || len(params.TrafficOutOrder) > 0 || len(params.LoadOrder) > 0 + this.Data["hasOrder"] = len(params.CpuOrder) > 0 || len(params.MemoryOrder) > 0 || len(params.TrafficInOrder) > 0 || len(params.TrafficOutOrder) > 0 || len(params.LoadOrder) > 0 || len(params.ConnectionsOrder) > 0 // 集群是否已经设置了线路 clusterDNSResp, err := this.RPC().NodeClusterRPC().FindEnabledNodeClusterDNS(this.AdminContext(), &pb.FindEnabledNodeClusterDNSRequest{NodeClusterId: params.ClusterId}) @@ -114,6 +115,10 @@ func (this *NodesAction) RunGet(params struct { req.LoadAsc = true } else if params.LoadOrder == "desc" { req.LoadDesc = true + } else if params.ConnectionsOrder == "asc" { + req.ConnectionsAsc = true + } else if params.ConnectionsOrder == "desc" { + req.ConnectionsDesc = true } nodesResp, err := this.RPC().NodeRPC().ListEnabledNodesMatch(this.AdminContext(), req) if err != nil { @@ -123,8 +128,8 @@ func (this *NodesAction) RunGet(params struct { var nodeMaps = []maps.Map{} for _, node := range nodesResp.Nodes { // 状态 - isSynced := false - status := &nodeconfigs.NodeStatus{} + var isSynced = false + var status = &nodeconfigs.NodeStatus{} if len(node.StatusJSON) > 0 { err = json.Unmarshal(node.StatusJSON, &status) if err != nil { @@ -213,16 +218,17 @@ func (this *NodesAction) RunGet(params struct { "error": node.InstallStatus.Error, }, "status": maps.Map{ - "isActive": status.IsActive, - "updatedAt": status.UpdatedAt, - "hostname": status.Hostname, - "cpuUsage": status.CPUUsage, - "cpuUsageText": numberutils.FormatFloat2(status.CPUUsage * 100), - "memUsage": status.MemoryUsage, - "memUsageText": numberutils.FormatFloat2(status.MemoryUsage * 100), - "trafficInBytes": status.TrafficInBytes, - "trafficOutBytes": status.TrafficOutBytes, - "load1m": numberutils.FormatFloat2(status.Load1m), + "isActive": status.IsActive, + "updatedAt": status.UpdatedAt, + "hostname": status.Hostname, + "cpuUsage": status.CPUUsage, + "cpuUsageText": numberutils.FormatFloat2(status.CPUUsage * 100), + "memUsage": status.MemoryUsage, + "memUsageText": numberutils.FormatFloat2(status.MemoryUsage * 100), + "trafficInBytes": status.TrafficInBytes, + "trafficOutBytes": status.TrafficOutBytes, + "load1m": numberutils.FormatFloat2(status.Load1m), + "countConnections": status.ConnectionCount, }, "cluster": maps.Map{ "id": node.NodeCluster.Id, diff --git a/web/views/@default/clusters/cluster/nodes.html b/web/views/@default/clusters/cluster/nodes.html index 25cadbd1..e4682631 100644 --- a/web/views/@default/clusters/cluster/nodes.html +++ b/web/views/@default/clusters/cluster/nodes.html @@ -64,10 +64,11 @@ 节点名称 IP DNS线路 - CPU - 内存 - 下行带宽 - 负载 + CPU + 内存 + 下行带宽 + 连接数 + 负载 状态 操作 @@ -117,20 +118,24 @@ - - + {{node.status.cpuUsageText}} - - + {{node.status.memUsageText}} - - + {{teaweb.formatBits(node.status.trafficOutBytes * 8/60)}} - - - {{node.status.load1m}} + + {{node.status.countConnections}} + - + + + {{node.status.load1m}} - diff --git a/web/views/@default/clusters/cluster/nodes.js b/web/views/@default/clusters/cluster/nodes.js index 47b382a0..ae3b32b9 100644 --- a/web/views/@default/clusters/cluster/nodes.js +++ b/web/views/@default/clusters/cluster/nodes.js @@ -1,6 +1,20 @@ Tea.context(function () { this.teaweb = teaweb + // 显示的统计项 + this.windowWidth = window.innerWidth + this.miniWidth = 760 + this.columnWidth1 = 800 + this.columnWidth2 = 900 + this.columnWidth3 = 1000 + this.columnWidth4 = 1100 + this.columnWidth5 = 1200 + + let that = this + window.addEventListener("resize", function () { + that.windowWidth = window.innerWidth + }) + this.deleteNode = function (nodeId) { teaweb.confirm("确定要从当前集群中删除这个节点吗?", function () { this.$post("/nodes/delete") diff --git a/web/views/@default/clusters/nodes.html b/web/views/@default/clusters/nodes.html index 571e4fb3..513b7b06 100644 --- a/web/views/@default/clusters/nodes.html +++ b/web/views/@default/clusters/nodes.html @@ -58,10 +58,11 @@ 节点名称 IP DNS线路 - CPU - 内存 - 下行带宽 - 负载 + CPU + 内存 + 下行带宽 + 连接数 + 负载 状态 操作 @@ -111,20 +112,24 @@ - - - {{node.status.cpuUsageText}}% + + {{node.status.cpuUsageText}} - - - {{node.status.memUsageText}}% + + {{node.status.memUsageText}} - - + {{teaweb.formatBits(node.status.trafficOutBytes * 8/60)}} - - - {{node.status.load1m}} + + {{node.status.countConnections}} + - + + + {{node.status.load1m}} - diff --git a/web/views/@default/clusters/nodes.js b/web/views/@default/clusters/nodes.js index d5c4f21f..7e81ea26 100644 --- a/web/views/@default/clusters/nodes.js +++ b/web/views/@default/clusters/nodes.js @@ -1,6 +1,20 @@ Tea.context(function () { this.teaweb = teaweb + // 显示的统计项 + this.windowWidth = window.innerWidth + this.miniWidth = 760 + this.columnWidth1 = 800 + this.columnWidth2 = 900 + this.columnWidth3 = 1000 + this.columnWidth4 = 1100 + this.columnWidth5 = 1200 + + let that = this + window.addEventListener("resize", function () { + that.windowWidth = window.innerWidth + }) + this.deleteNode = function (nodeId) { teaweb.confirm("确定要删除这个节点吗?", function () { this.$post("/cluster/nodes/delete")