From 7cc649f47ad6af6a7bdc1f8b66603ab11d01d2d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=88=E8=BD=A9?= Date: Thu, 19 Dec 2024 11:33:49 +0800 Subject: [PATCH] fix(region): host custom total count (#21828) --- pkg/compute/models/hosts.go | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/pkg/compute/models/hosts.go b/pkg/compute/models/hosts.go index b51d07ad256..4b8e2711b49 100644 --- a/pkg/compute/models/hosts.go +++ b/pkg/compute/models/hosts.go @@ -3802,6 +3802,27 @@ func (manager *SHostManager) FetchCustomizeColumns( return rows } +func (manager *SHostManager) CustomizedTotalCount(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, totalQ *sqlchemy.SQuery) (int, jsonutils.JSONObject, error) { + results := struct { + apis.TotalCountBase + StatusInfo []apis.StatusStatisticStatusInfo + }{} + + err := totalQ.First(&results.TotalCountBase) + if err != nil && errors.Cause(err) != sql.ErrNoRows { + return -1, nil, errors.Wrapf(err, "First") + } + + totalSQ := totalQ.ResetFields().SubQuery() + statQ := totalSQ.Query(totalSQ.Field("status"), sqlchemy.COUNT("total_count", totalSQ.Field("id"))) + statQ = statQ.GroupBy(totalSQ.Field("status")) + err = statQ.All(&results.StatusInfo) + if err != nil { + return -1, nil, errors.Wrapf(err, "status query") + } + return results.Count, jsonutils.Marshal(results), nil +} + func fetchBaremetalServer(hostIds []string) (map[string]*SGuest, error) { guests := []SGuest{} err := GuestManager.Query().In("host_id", hostIds).Equals("hypervisor", api.HOST_TYPE_BAREMETAL).All(&guests)