Skip to content

Commit

Permalink
fix(region): host order by commit (#21852)
Browse files Browse the repository at this point in the history
  • Loading branch information
ioito authored Dec 20, 2024
1 parent 45c192d commit f8c5365
Show file tree
Hide file tree
Showing 3 changed files with 79 additions and 0 deletions.
12 changes: 12 additions & 0 deletions pkg/apis/compute/host.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
63 changes: 63 additions & 0 deletions pkg/compute/models/hosts.go
Original file line number Diff line number Diff line change
Expand Up @@ -582,6 +582,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()
Expand Down Expand Up @@ -669,6 +687,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
}

Expand Down
4 changes: 4 additions & 0 deletions pkg/mcclient/options/compute/host.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}

Expand Down

0 comments on commit f8c5365

Please sign in to comment.