fix(region): host order by commit (#21854)

This commit is contained in:
屈轩
2024-12-20 09:57:35 +08:00
committed by GitHub
parent 5c46e663a3
commit 8813a99a7a
3 changed files with 79 additions and 0 deletions
+12
View File
@@ -151,6 +151,18 @@ type HostListInput struct {
// 按内存超分率排序
// enmu: asc,desc
OrderByMemCommitRate string `json:"order_by_mem_commit_rate"`
// 按本地存储分配大小排序
// enmu: asc,desc
OrderByStorageUsed string `json:"order_by_storage_used"`
// 按cpu分配大小排序
// enmu: asc,desc
OrderByCpuCommit string `json:"order_by_cpu_commit"`
// 按内存分配大小排序
// enmu: asc,desc
OrderByMemCommit string `json:"order_by_mem_commit"`
}
type HostDetails struct {
+63
View File
@@ -581,6 +581,24 @@ func (manager *SHostManager) OrderByExtraFields(
db.OrderByFields(q, []string{query.OrderByCpuCommitRate}, []sqlchemy.IQueryField{sq.Field("cpu_commit_rate")})
}
if db.NeedOrderQuery([]string{query.OrderByCpuCommit}) {
guestsQ := GuestManager.Query()
if options.Options.IgnoreNonrunningGuests {
guestsQ = guestsQ.Equals("status", api.VM_RUNNING)
}
guests := guestsQ.SubQuery()
guestQ := guests.Query(
guests.Field("host_id"),
sqlchemy.SUM("guest_vcpu_count", guests.Field("vcpu_count")),
)
guestSQ := guestQ.GroupBy(guestQ.Field("host_id")).SubQuery()
q = q.LeftJoin(guestSQ, sqlchemy.Equals(q.Field("id"), guestSQ.Field("host_id")))
db.OrderByFields(q, []string{query.OrderByCpuCommit}, []sqlchemy.IQueryField{q.Field("guest_vcpu_count")})
}
if db.NeedOrderQuery([]string{query.OrderByStorage}) {
hoststorages := HoststorageManager.Query().SubQuery()
storages := StorageManager.Query().IsTrue("enabled").In("storage_type", api.HOST_STORAGE_LOCAL_TYPES).SubQuery()
@@ -668,6 +686,51 @@ func (manager *SHostManager) OrderByExtraFields(
db.OrderByFields(q, []string{query.OrderByMemCommitRate}, []sqlchemy.IQueryField{sq.Field("mem_commit_rate")})
}
if db.NeedOrderQuery([]string{query.OrderByMemCommit}) {
guestsQ := GuestManager.Query()
if options.Options.IgnoreNonrunningGuests {
guestsQ = guestsQ.Equals("status", api.VM_RUNNING)
}
guests := guestsQ.SubQuery()
guestQ := guests.Query(
guests.Field("host_id"),
sqlchemy.SUM("guest_vmem_size", guests.Field("vmem_size")),
)
guestSQ := guestQ.GroupBy(guestQ.Field("host_id")).SubQuery()
q = q.LeftJoin(guestSQ, sqlchemy.Equals(q.Field("id"), guestSQ.Field("host_id")))
db.OrderByFields(q, []string{query.OrderByMemCommit}, []sqlchemy.IQueryField{q.Field("guest_vmem_size")})
}
if db.NeedOrderQuery([]string{query.OrderByStorageUsed}) {
disks := DiskManager.Query().Equals("status", api.DISK_READY).SubQuery()
storages := StorageManager.Query().IsTrue("enabled").In("storage_type", api.HOST_STORAGE_LOCAL_TYPES).SubQuery()
hs := HoststorageManager.Query()
hoststorages := hs.Join(storages, sqlchemy.Equals(storages.Field("id"), hs.Field("storage_id"))).SubQuery()
disksQ := disks.Query(
disks.Field("storage_id"),
sqlchemy.SUM("total_disk_size", disks.Field("disk_size")),
)
disksQ = disksQ.LeftJoin(storages, sqlchemy.Equals(disksQ.Field("storage_id"), storages.Field("id")))
disksSQ := disksQ.GroupBy(disksQ.Field("storage_id")).SubQuery()
hoststoragesQ := hoststorages.Query(
hoststorages.Field("host_id"),
sqlchemy.SUM("storage_used", disksSQ.Field("total_disk_size")),
)
hoststoragesQ = hoststoragesQ.Join(disksSQ, sqlchemy.Equals(hoststoragesQ.Field("storage_id"), disksSQ.Field("storage_id")))
storageSQ := hoststoragesQ.GroupBy(hoststoragesQ.Field("host_id")).SubQuery()
q = q.LeftJoin(storageSQ, sqlchemy.Equals(q.Field("id"), storageSQ.Field("host_id")))
db.OrderByFields(q, []string{query.OrderByStorageUsed}, []sqlchemy.IQueryField{q.Field("storage_used")})
}
return q, nil
}
+4
View File
@@ -60,6 +60,10 @@ type HostListOptions struct {
OrderByCpuCommitRate string `help:"Order by host cpu commit rate" choices:"desc|asc"`
OrderByMemCommitRate string `help:"Order by host meme commit rate" choices:"desc|asc"`
OrderByStorageUsed string `help:"Order by storage used" choices:"desc|asc"`
OrderByCpuCommit string `help:"Order by cpu commit" choices:"desc|asc"`
OrderByMemCommit string `help:"Order by mem commit" choices:"desc|asc"`
options.BaseListOptions
}