From e02ce67cf6c77a69164b6e82ab291327bfc4d37e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=88=E8=BD=A9?= Date: Wed, 7 Aug 2024 11:54:05 +0800 Subject: [PATCH] fix(region): show status info with list api (#20944) --- pkg/cloudcommon/db/virtualresource.go | 22 ++++++++++++++++++++++ pkg/compute/models/guests.go | 10 ++++++++-- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/pkg/cloudcommon/db/virtualresource.go b/pkg/cloudcommon/db/virtualresource.go index 029fdd9bda..94178ad82e 100644 --- a/pkg/cloudcommon/db/virtualresource.go +++ b/pkg/cloudcommon/db/virtualresource.go @@ -112,6 +112,28 @@ func (manager *SVirtualResourceBaseManager) GetPropertyStatistics(ctx context.Co return result, nil } +func (manager *SVirtualResourceBaseManager) CustomizedTotalCount(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, totalQ *sqlchemy.SQuery) (int, jsonutils.JSONObject, error) { + results := struct { + apis.TotalCountBase + StatusInfo []apis.StatusStatisticStatusInfo + }{} + + var err error + results.Count, err = totalQ.CountWithError() + if err != nil { + return -1, nil, errors.Wrapf(err, "CountWithError") + } + + totalSQ := totalQ.ResetFields().SubQuery() + statQ := totalSQ.Query(totalSQ.Field("status"), sqlchemy.COUNT("total_count", totalSQ.Field("id")), sqlchemy.SUM("pending_deleted_count", totalSQ.Field("pending_deleted"))) + 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 (manager *SVirtualResourceBaseManager) GetPropertyProjectStatistics(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) ([]apis.ProjectStatistic, error) { im, ok := manager.GetVirtualObject().(IModelManager) if !ok { diff --git a/pkg/compute/models/guests.go b/pkg/compute/models/guests.go index 95324f15ac..c40df83bc6 100644 --- a/pkg/compute/models/guests.go +++ b/pkg/compute/models/guests.go @@ -6849,9 +6849,15 @@ func (manager *SGuestManager) CustomizedTotalCount(ctx context.Context, userCred return -1, nil, errors.Wrap(err, "SGuestManager query total_disk") } - // log.Debugf("CustomizedTotalCount %s", jsonutils.Marshal(results)) + _, statusInfo, err := manager.SVirtualResourceBaseManager.CustomizedTotalCount(ctx, userCred, query, totalQ) + if err != nil { + return -1, nil, errors.Wrapf(err, "virt.CustomizedTotalCount") + } - return results.Count, jsonutils.Marshal(results), nil + ret := jsonutils.Marshal(results).(*jsonutils.JSONDict) + ret.Update(statusInfo) + + return results.Count, ret, nil } func (guest *SGuest) IsSriov() bool {