From eb95ee71562c287c915cf4f4402bc71604bce3a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=88=E8=BD=A9?= Date: Sat, 29 Sep 2018 11:50:13 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0region=E5=AF=B9guest=E7=BB=9F?= =?UTF-8?q?=E8=AE=A1=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/compute/models/cloudregions.go | 20 ++++++++++++++++++++ pkg/mcclient/modules/mod_cloudregions.go | 3 ++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/pkg/compute/models/cloudregions.go b/pkg/compute/models/cloudregions.go index 44a1901655..6cdf658d3e 100644 --- a/pkg/compute/models/cloudregions.go +++ b/pkg/compute/models/cloudregions.go @@ -3,6 +3,7 @@ package models import ( "context" "database/sql" + "time" "yunion.io/x/jsonutils" "yunion.io/x/log" @@ -70,6 +71,23 @@ func (self *SCloudregion) GetZoneCount() int { } } +func (self *SCloudregion) GetGuestCount(increment bool) int { + zoneTable := ZoneManager.Query("id").Equals("cloudregion_id", self.Id) + if self.Id == "default" { + zoneTable = ZoneManager.Query("id").Filter(sqlchemy.OR(sqlchemy.IsNull(zoneTable.Field("cloudregion_id")), + sqlchemy.IsEmpty(zoneTable.Field("cloudregion_id")), + sqlchemy.Equals(zoneTable.Field("cloudregion_id"), self.Id))) + } + sq := HostManager.Query("id").In("zone_id", zoneTable) + query := GuestManager.Query().In("host_id", sq) + if increment { + year, month, _ := time.Now().UTC().Date() + startOfMonth := time.Date(year, month, 1, 0, 0, 0, 0, time.UTC) + query.GE("created_at", startOfMonth) + } + return query.Count() +} + func (self *SCloudregion) GetVpcCount() int { vpcs := VpcManager.Query() if self.Id == "default" { @@ -84,6 +102,8 @@ func (self *SCloudregion) GetVpcCount() int { func (self *SCloudregion) getMoreDetails(extra *jsonutils.JSONDict) *jsonutils.JSONDict { extra.Add(jsonutils.NewInt(int64(self.GetVpcCount())), "vpc_count") extra.Add(jsonutils.NewInt(int64(self.GetZoneCount())), "zone_count") + extra.Add(jsonutils.NewInt(int64(self.GetGuestCount(false))), "guest_count") + extra.Add(jsonutils.NewInt(int64(self.GetGuestCount(true))), "guest_increment_count") return extra } diff --git a/pkg/mcclient/modules/mod_cloudregions.go b/pkg/mcclient/modules/mod_cloudregions.go index 6b3be4119d..ae41321e22 100644 --- a/pkg/mcclient/modules/mod_cloudregions.go +++ b/pkg/mcclient/modules/mod_cloudregions.go @@ -6,7 +6,8 @@ var ( func init() { Cloudregions = NewComputeManager("cloudregion", "cloudregions", - []string{"ID", "Name", "Enabled", "Status", "Provider", "Latitude", "Longitude"}, + []string{"ID", "Name", "Enabled", "Status", "Provider", "Latitude", "Longitude", + "vpc_count", "zone_count", "guest_count", "guest_increment_count"}, []string{}) registerCompute(&Cloudregions)