From 75a8981bf10aea5ba0d42a86d2d705884ade02e2 Mon Sep 17 00:00:00 2001 From: Qiu Jian Date: Wed, 4 Mar 2020 17:47:34 +0800 Subject: [PATCH] fix: 1. image header details should skip "properties" field 2. cloudprovider details nil pointer panic --- pkg/apis/compute/cloudprovider.go | 6 ++++++ pkg/compute/models/cloudproviders.go | 22 +++++++++++++++++++++- pkg/image/models/images.go | 3 +++ 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/pkg/apis/compute/cloudprovider.go b/pkg/apis/compute/cloudprovider.go index cb511dd06b..1784f9ac86 100644 --- a/pkg/apis/compute/cloudprovider.go +++ b/pkg/apis/compute/cloudprovider.go @@ -73,6 +73,12 @@ type SCloudproviderUsage struct { // 负载均衡器数量 // example: 2 LoadbalancerCount int `json:"loadbalancer_count"` + // 数据库实例数量 + // example: 2 + DBInstanceCount int `json:"dbinstance_count"` + // 弹性缓存实例数量 + // example: 2 + ElasticcacheCount int `json:"elasticcache_count"` // 项目数量 ProjectCount int `json:"project_count"` // 同步区域数量 diff --git a/pkg/compute/models/cloudproviders.go b/pkg/compute/models/cloudproviders.go index 3b2aa3934d..343c47630d 100644 --- a/pkg/compute/models/cloudproviders.go +++ b/pkg/compute/models/cloudproviders.go @@ -263,7 +263,25 @@ func (self *SCloudprovider) getSnapshotCount() (int, error) { } func (self *SCloudprovider) getLoadbalancerCount() (int, error) { - return LoadbalancerManager.Query().Equals("manager_id", self.Id).CountWithError() + vpcs := VpcManager.Query("id", "manager_id").SubQuery() + q := LoadbalancerManager.Query() + q = q.Join(vpcs, sqlchemy.Equals(q.Field("vpc_id"), vpcs.Field("id"))) + q = q.Filter(sqlchemy.Equals(vpcs.Field("manager_id"), self.Id)) + return q.CountWithError() +} + +func (self *SCloudprovider) getDBInstanceCount() (int, error) { + q := DBInstanceManager.Query() + q = q.Filter(sqlchemy.Equals(q.Field("manager_id"), self.Id)) + return q.CountWithError() +} + +func (self *SCloudprovider) getElasticcacheCount() (int, error) { + vpcs := VpcManager.Query("id", "manager_id").SubQuery() + q := ElasticcacheManager.Query() + q = q.Join(vpcs, sqlchemy.Equals(q.Field("vpc_id"), vpcs.Field("id"))) + q = q.Filter(sqlchemy.Equals(vpcs.Field("manager_id"), self.Id)) + return q.CountWithError() } func (self *SCloudprovider) getExternalProjectCount() (int, error) { @@ -805,6 +823,8 @@ func (self *SCloudprovider) getUsage() api.SCloudproviderUsage { usage.EipCount, _ = self.getEipCount() usage.SnapshotCount, _ = self.getSnapshotCount() usage.LoadbalancerCount, _ = self.getLoadbalancerCount() + usage.DBInstanceCount, _ = self.getDBInstanceCount() + usage.ElasticcacheCount, _ = self.getElasticcacheCount() usage.ProjectCount, _ = self.getExternalProjectCount() usage.SyncRegionCount, _ = self.getSyncRegionCount() diff --git a/pkg/image/models/images.go b/pkg/image/models/images.go index 3c8420c149..c8a0ff6ca1 100644 --- a/pkg/image/models/images.go +++ b/pkg/image/models/images.go @@ -312,6 +312,9 @@ func (self *SImage) GetExtraDetailsHeaders(ctx context.Context, userCred mcclien details := ImageManager.FetchCustomizeColumns(ctx, userCred, query, []interface{}{self}, nil, false) extra := jsonutils.Marshal(details[0]).(*jsonutils.JSONDict) for _, k := range extra.SortedKeys() { + if k == "properties" { + continue + } val, _ := extra.GetString(k) if len(val) > 0 { headers[fmt.Sprintf("%s%s", modules.IMAGE_META, k)] = val