feat(region): host list order by server count

This commit is contained in:
Zexi Li
2021-05-06 20:53:04 +08:00
parent 67f6aa11a5
commit ac491f4f58
3 changed files with 17 additions and 0 deletions

View File

@@ -60,6 +60,8 @@ func init() {
Sn string `help:"find host by sn"`
OrderByServerCount string `help:"Order by server count" choices:"desc|asc"`
options.BaseListOptions
}
R(&HostListOptions{}, "host-list", "List hosts", func(s *mcclient.ClientSession, opts *HostListOptions) error {

View File

@@ -124,6 +124,10 @@ type HostListInput struct {
ServerIdForNetwork string `json:"server_id_for_network"`
// 宿主机 cpu 架构
CpuArchitecture string `json:"cpu_architecture"`
// 按虚拟机数量排序
// enum: asc,desc
OrderByServerCount string `json:"order_by_server_count"`
}
type HostDetails struct {

View File

@@ -490,6 +490,17 @@ func (manager *SHostManager) OrderByExtraFields(
if err != nil {
return nil, errors.Wrap(err, "SZoneResourceBaseManager.OrderByExtraFields")
}
if db.NeedOrderQuery([]string{query.OrderByServerCount}) {
guests := GuestManager.Query().SubQuery()
guestCounts := guests.Query(
guests.Field("host_id"),
sqlchemy.COUNT("id").Label("guest_count"),
).GroupBy("host_id").SubQuery()
q = q.LeftJoin(guestCounts, sqlchemy.Equals(q.Field("id"), guestCounts.Field("host_id")))
db.OrderByFields(q, []string{query.OrderByServerCount}, []sqlchemy.IQueryField{guestCounts.Field("guest_count")})
}
return q, nil
}