From 663ead19e49374c5ca15a3ae6c04f7112e1c78d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E7=A5=A5=E8=B6=85?= Date: Sat, 16 Apr 2022 14:45:54 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=8A=82=E7=82=B9=E6=8E=92?= =?UTF-8?q?=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/db/models/node_dao.go | 78 ++++++++++++++++++++++++++++------ 1 file changed, 65 insertions(+), 13 deletions(-) diff --git a/internal/db/models/node_dao.go b/internal/db/models/node_dao.go index 19b7df76..096b01a1 100644 --- a/internal/db/models/node_dao.go +++ b/internal/db/models/node_dao.go @@ -10,6 +10,7 @@ import ( "github.com/TeaOSLab/EdgeAPI/internal/errors" "github.com/TeaOSLab/EdgeAPI/internal/utils" "github.com/TeaOSLab/EdgeAPI/internal/utils/numberutils" + "github.com/TeaOSLab/EdgeAPI/internal/utils/sizes" "github.com/TeaOSLab/EdgeCommon/pkg/configutils" "github.com/TeaOSLab/EdgeCommon/pkg/nodeconfigs" "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs" @@ -22,8 +23,10 @@ import ( "github.com/iwind/TeaGo/maps" "github.com/iwind/TeaGo/rands" "github.com/iwind/TeaGo/types" + timeutil "github.com/iwind/TeaGo/utils/time" "strconv" "strings" + "time" ) const ( @@ -309,6 +312,7 @@ func (this *NodeDAO) ListEnabledNodesMatch(tx *dbs.Tx, offset int64, size int64) (result []*Node, err error) { query := this.Query(tx). + Result(this.Table + ".*"). // must have table name for table joins below State(NodeStateEnabled). Offset(offset). Limit(size). @@ -317,14 +321,14 @@ func (this *NodeDAO) ListEnabledNodesMatch(tx *dbs.Tx, // 集群 if clusterId > 0 { if includeSecondaryNodes { - query.Where("(clusterId=:primaryClusterId OR JSON_CONTAINS(secondaryClusterIds, :primaryClusterIdString))"). + query.Where("("+this.Table+".clusterId=:primaryClusterId OR JSON_CONTAINS(secondaryClusterIds, :primaryClusterIdString))"). Param("primaryClusterId", clusterId). Param("primaryClusterIdString", types.String(clusterId)) } else { - query.Attr("clusterId", clusterId) + query.Attr(this.Table+".clusterId", clusterId) } } else { - query.Where("clusterId IN (SELECT id FROM " + SharedNodeClusterDAO.Table + " WHERE state=1)") + query.Where(this.Table + ".clusterId IN (SELECT id FROM " + SharedNodeClusterDAO.Table + " WHERE state=1)") } // 安装状态 @@ -369,30 +373,78 @@ func (this *NodeDAO) ListEnabledNodesMatch(tx *dbs.Tx, } // 排序 + var minute = timeutil.FormatTime("YmdHi", time.Now().Unix()-60) + var nodeValueTable = SharedNodeValueDAO.Table + var valueItem = "" + var valueField = "" + var isAsc = false + var ifNullValue int64 = 0 switch order { case "cpuAsc": - query.Asc("IF(JSON_EXTRACT(status, '$.updatedAt')>UNIX_TIMESTAMP()-120, IFNULL(JSON_EXTRACT(status, '$.cpuUsage'), 0), 0)") + valueItem = "cpu" + valueField = "usage" + isAsc = true + ifNullValue = 100 case "cpuDesc": - query.Desc("IF(JSON_EXTRACT(status, '$.updatedAt')>UNIX_TIMESTAMP()-120, IFNULL(JSON_EXTRACT(status, '$.cpuUsage'), 0), 0)") + valueItem = "cpu" + valueField = "usage" + isAsc = false + ifNullValue = -1 case "memoryAsc": - query.Asc("IF(JSON_EXTRACT(status, '$.updatedAt')>UNIX_TIMESTAMP()-120, IFNULL(JSON_EXTRACT(status, '$.memoryUsage'), 0), 0)") + valueItem = "memory" + valueField = "usage" + isAsc = true + ifNullValue = 100 case "memoryDesc": - query.Desc("IF(JSON_EXTRACT(status, '$.updatedAt')>UNIX_TIMESTAMP()-120, IFNULL(JSON_EXTRACT(status, '$.memoryUsage'), 0), 0)") + valueItem = "memory" + valueField = "usage" + isAsc = false + ifNullValue = -1 case "trafficInAsc": - query.Asc("IF(JSON_EXTRACT(status, '$.updatedAt')>UNIX_TIMESTAMP()-120, IFNULL(JSON_EXTRACT(status, '$.trafficInBytes'), 0), 0)") + valueItem = "trafficIn" + valueField = "total" + isAsc = true + ifNullValue = 60 * sizes.G case "trafficInDesc": - query.Desc("IF(JSON_EXTRACT(status, '$.updatedAt')>UNIX_TIMESTAMP()-120, IFNULL(JSON_EXTRACT(status, '$.trafficInBytes'), 0), 0)") + valueItem = "trafficIn" + valueField = "total" + isAsc = false + ifNullValue = -1 case "trafficOutAsc": - query.Asc("IF(JSON_EXTRACT(status, '$.updatedAt')>UNIX_TIMESTAMP()-120, IFNULL(JSON_EXTRACT(status, '$.trafficOutBytes'), 0), 0)") + valueItem = "trafficOut" + valueField = "total" + isAsc = true + ifNullValue = sizes.G case "trafficOutDesc": - query.Desc("IF(JSON_EXTRACT(status, '$.updatedAt')>UNIX_TIMESTAMP()-120, IFNULL(JSON_EXTRACT(status, '$.trafficOutBytes'), 0), 0)") + valueItem = "trafficOut" + valueField = "total" + isAsc = false + ifNullValue = -1 case "loadAsc": - query.Asc("IF(JSON_EXTRACT(status, '$.updatedAt')>UNIX_TIMESTAMP()-120, IFNULL(JSON_EXTRACT(status, '$.load1m'), 0), 0)") + valueItem = "load" + valueField = "load1m" + isAsc = true + ifNullValue = 1000 case "loadDesc": - query.Desc("IF(JSON_EXTRACT(status, '$.updatedAt')>UNIX_TIMESTAMP()-120, IFNULL(JSON_EXTRACT(status, '$.load1m'), 0), 0)") + valueItem = "load" + valueField = "load1m" + isAsc = false + ifNullValue = -1 default: query.Desc("level") } + + if len(valueItem) > 0 { + query.Join(SharedNodeValueDAO, dbs.QueryJoinLeft, this.Table+".id="+nodeValueTable+".nodeId AND "+nodeValueTable+".role='"+nodeconfigs.NodeRoleNode+"' AND "+nodeValueTable+".item='"+valueItem+"' "+" AND "+nodeValueTable+".minute=:minute") + query.Param("minute", minute) + var ifNullSQL = "IFNULL(CAST(JSON_EXTRACT(value, '$." + valueField + "') AS DECIMAL (20, 6)), " + types.String(ifNullValue) + ")" + if isAsc { + query.Asc(ifNullSQL) + } else { + query.Desc(ifNullSQL) + } + } + query.DescPk() _, err = query.FindAll()