fix: cloud-account/provider usage not accurate

This commit is contained in:
Qiu Jian
2020-04-27 02:10:23 +08:00
parent bc12970351
commit 912bf5c699
14 changed files with 20 additions and 18 deletions
+1 -1
View File
@@ -1196,7 +1196,7 @@ func (manager *SBucketManager) usageQByCloudEnv(q *sqlchemy.SQuery, providers []
}
func (manager *SBucketManager) usageQByRanges(q *sqlchemy.SQuery, rangeObjs []db.IStandaloneModel) *sqlchemy.SQuery {
return rangeObjectsFilter(q, rangeObjs, q.Field("cloudregion_id"), nil, q.Field("manager_id"))
return RangeObjectsFilter(q, rangeObjs, q.Field("cloudregion_id"), nil, q.Field("manager_id"))
}
func (manager *SBucketManager) usageQ(q *sqlchemy.SQuery, rangeObjs []db.IStandaloneModel, providers []string, brands []string, cloudEnv string) *sqlchemy.SQuery {
+1 -1
View File
@@ -1611,7 +1611,7 @@ func (man *SDBInstanceManager) TotalCount(
q := man.Query()
q = scopeOwnerIdFilter(q, scope, ownerId)
q = CloudProviderFilter(q, q.Field("manager_id"), providers, brands, cloudEnv)
q = rangeObjectsFilter(q, rangeObjs, q.Field("cloudregion_id"), nil, q.Field("manager_id"))
q = RangeObjectsFilter(q, rangeObjs, q.Field("cloudregion_id"), nil, q.Field("manager_id"))
return q.CountWithError()
}
+1 -1
View File
@@ -1539,7 +1539,7 @@ func totalDiskSize(
storages := StorageManager.Query().SubQuery()
q = q.Join(storages, sqlchemy.Equals(storages.Field("id"), disks.Field("storage_id")))
q = CloudProviderFilter(q, storages.Field("manager_id"), providers, brands, cloudEnv)
q = rangeObjectsFilter(q, rangeObjs, nil, storages.Field("zone_id"), storages.Field("manager_id"))
q = RangeObjectsFilter(q, rangeObjs, nil, storages.Field("zone_id"), storages.Field("manager_id"))
if len(hypervisors) > 0 {
hoststorages := HoststorageManager.Query().SubQuery()
hosts := HostManager.Query().SubQuery()
+1 -1
View File
@@ -1449,7 +1449,7 @@ func (man *SElasticcacheManager) TotalCount(
q = q.Join(vpcs, sqlchemy.Equals(q.Field("vpc_id"), vpcs.Field("id")))
q = scopeOwnerIdFilter(q, scope, ownerId)
q = CloudProviderFilter(q, vpcs.Field("manager_id"), providers, brands, cloudEnv)
q = rangeObjectsFilter(q, rangeObjs, vpcs.Field("cloudregion_id"), nil, vpcs.Field("manager_id"))
q = RangeObjectsFilter(q, rangeObjs, vpcs.Field("cloudregion_id"), nil, vpcs.Field("manager_id"))
return q.CountWithError()
}
+1 -1
View File
@@ -1349,7 +1349,7 @@ func (manager *SElasticipManager) usageQByCloudEnv(q *sqlchemy.SQuery, providers
}
func (manager *SElasticipManager) usageQByRanges(q *sqlchemy.SQuery, rangeObjs []db.IStandaloneModel) *sqlchemy.SQuery {
return rangeObjectsFilter(q, rangeObjs, q.Field("cloudregion_id"), nil, q.Field("manager_id"))
return RangeObjectsFilter(q, rangeObjs, q.Field("cloudregion_id"), nil, q.Field("manager_id"))
}
func (manager *SElasticipManager) usageQ(q *sqlchemy.SQuery, rangeObjs []db.IStandaloneModel, providers []string, brands []string, cloudEnv string) *sqlchemy.SQuery {
+1 -1
View File
@@ -22,7 +22,7 @@ import (
"yunion.io/x/onecloud/pkg/util/rbacutils"
)
func rangeObjectsFilter(q *sqlchemy.SQuery, rangeObjs []db.IStandaloneModel, regionField sqlchemy.IQueryField, zoneField sqlchemy.IQueryField, managerField sqlchemy.IQueryField) *sqlchemy.SQuery {
func RangeObjectsFilter(q *sqlchemy.SQuery, rangeObjs []db.IStandaloneModel, regionField sqlchemy.IQueryField, zoneField sqlchemy.IQueryField, managerField sqlchemy.IQueryField) *sqlchemy.SQuery {
for _, rangeObj := range rangeObjs {
q = rangeObjFilter(q, rangeObj, regionField, zoneField, managerField)
}
+1 -1
View File
@@ -652,7 +652,7 @@ func totalGuestNicCount(
q = q.Join(hosts, sqlchemy.Equals(guests.Field("host_id"), hosts.Field("id")))
q = CloudProviderFilter(q, hosts.Field("manager_id"), providers, brands, cloudEnv)
q = rangeObjectsFilter(q, rangeObjs, nil, hosts.Field("zone_id"), hosts.Field("manager_id"))
q = RangeObjectsFilter(q, rangeObjs, nil, hosts.Field("zone_id"), hosts.Field("manager_id"))
switch scope {
case rbacutils.ScopeSystem:
+1 -1
View File
@@ -293,7 +293,7 @@ func totalLBNicCount(
case rbacutils.ScopeProject:
q = q.Filter(sqlchemy.Equals(lbs.Field("tenant_id"), ownerId.GetProjectId()))
}
q = rangeObjectsFilter(q, rangeObjs, nil, lbs.Field("zone_id"), lbs.Field("manager_id"))
q = RangeObjectsFilter(q, rangeObjs, nil, lbs.Field("zone_id"), lbs.Field("manager_id"))
q = CloudProviderFilter(q, lbs.Field("manager_id"), providers, brands, cloudEnv)
return q.CountWithError()
}
+1 -1
View File
@@ -1067,7 +1067,7 @@ func (man *SLoadbalancerManager) TotalCount(
q := man.Query()
q = scopeOwnerIdFilter(q, scope, ownerId)
q = CloudProviderFilter(q, q.Field("manager_id"), providers, brands, cloudEnv)
q = rangeObjectsFilter(q, rangeObjs, nil, q.Field("zone_id"), q.Field("manager_id"))
q = RangeObjectsFilter(q, rangeObjs, nil, q.Field("zone_id"), q.Field("manager_id"))
return q.CountWithError()
}
+1 -1
View File
@@ -816,7 +816,7 @@ func TotalSnapshotCount(scope rbacutils.TRbacScope, ownerId mcclient.IIdentityPr
q = q.Equals("tenant_id", ownerId.GetProjectId())
}
q = rangeObjectsFilter(q, rangeObjs, q.Field("cloudregion_id"), nil, q.Field("manager_id"))
q = RangeObjectsFilter(q, rangeObjs, q.Field("cloudregion_id"), nil, q.Field("manager_id"))
q = CloudProviderFilter(q, q.Field("manager_id"), providers, brands, cloudEnv)
q = q.Equals("created_by", api.SNAPSHOT_MANUAL)
q = q.Equals("fake_deleted", false)
+1 -1
View File
@@ -44,6 +44,6 @@ func AttachUsageQuery(
}
}
q = CloudProviderFilter(q, hosts.Field("manager_id"), providers, brands, cloudEnv)
q = rangeObjectsFilter(q, rangeObjs, nil, hosts.Field("zone_id"), hosts.Field("manager_id"))
q = RangeObjectsFilter(q, rangeObjs, nil, hosts.Field("zone_id"), hosts.Field("manager_id"))
return q
}
+1 -1
View File
@@ -1084,7 +1084,7 @@ func (manager *SVpcManager) totalCount(
q = q.Equals("domain_id", ownerId.GetProjectDomainId())
}
q = CloudProviderFilter(q, q.Field("manager_id"), providers, brands, cloudEnv)
q = rangeObjectsFilter(q, rangeObjs, q.Field("cloudregion_id"), nil, q.Field("manager_id"))
q = RangeObjectsFilter(q, rangeObjs, q.Field("cloudregion_id"), nil, q.Field("manager_id"))
cnt, _ := q.CountWithError()
+2 -2
View File
@@ -450,7 +450,7 @@ func (manager *SWireManager) totalCountQ(
hostsQ = CloudProviderFilter(hostsQ, hostsQ.Field("manager_id"), providers, brands, cloudEnv)
}
if len(rangeObjs) > 0 {
hostsQ = rangeObjectsFilter(hostsQ, rangeObjs, nil, hostsQ.Field("zone_id"), hostsQ.Field("manager_id"))
hostsQ = RangeObjectsFilter(hostsQ, rangeObjs, nil, hostsQ.Field("zone_id"), hostsQ.Field("manager_id"))
}
hosts := hostsQ.SubQuery()
groups := filterByScopeOwnerId(GroupManager.Query(), scope, ownerId).SubQuery()
@@ -459,7 +459,7 @@ func (manager *SWireManager) totalCountQ(
lbsQ = CloudProviderFilter(lbsQ, lbsQ.Field("manager_id"), providers, brands, cloudEnv)
}
if len(rangeObjs) > 0 {
lbsQ = rangeObjectsFilter(lbsQ, rangeObjs, lbsQ.Field("cloudregion_id"), lbsQ.Field("zone_id"), lbsQ.Field("manager_id"))
lbsQ = RangeObjectsFilter(lbsQ, rangeObjs, lbsQ.Field("cloudregion_id"), lbsQ.Field("zone_id"), lbsQ.Field("manager_id"))
}
lbs := lbsQ.SubQuery()
+6 -4
View File
@@ -199,8 +199,8 @@ func ReportCloudRegionUsage(scope rbacutils.TRbacScope, userCred mcclient.IIdent
}
func getSystemGeneralUsage(userCred mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, hostTypes []string, providers []string, brands []string, cloudEnv string) (Usage, error) {
count := RegionUsage(providers, brands, cloudEnv)
zone := ZoneUsage(providers, brands, cloudEnv)
count := RegionUsage(rangeObjs, providers, brands, cloudEnv)
zone := ZoneUsage(rangeObjs, providers, brands, cloudEnv)
count.Include(zone)
var pmemTotal float64
@@ -462,12 +462,13 @@ func ReportGeneralUsage(
return
}
func RegionUsage(providers []string, brands []string, cloudEnv string) Usage {
func RegionUsage(rangeObjs []db.IStandaloneModel, providers []string, brands []string, cloudEnv string) Usage {
q := models.CloudregionManager.Query()
if len(providers) > 0 || len(brands) > 0 || len(cloudEnv) > 0 {
subq := models.VpcManager.Query("cloudregion_id")
subq = models.CloudProviderFilter(subq, subq.Field("manager_id"), providers, brands, cloudEnv)
subq = models.RangeObjectsFilter(subq, rangeObjs, nil, nil, subq.Field("manager_id"))
q = q.In("id", subq.SubQuery())
}
@@ -476,12 +477,13 @@ func RegionUsage(providers []string, brands []string, cloudEnv string) Usage {
return count
}
func ZoneUsage(providers []string, brands []string, cloudEnv string) Usage {
func ZoneUsage(rangeObjs []db.IStandaloneModel, providers []string, brands []string, cloudEnv string) Usage {
q := models.ZoneManager.Query()
if len(providers) > 0 || len(brands) > 0 || len(cloudEnv) > 0 {
subq := models.HostManager.Query("zone_id")
subq = models.CloudProviderFilter(subq, subq.Field("manager_id"), providers, brands, cloudEnv)
subq = models.RangeObjectsFilter(subq, rangeObjs, nil, nil, subq.Field("manager_id"))
q = q.In("id", subq.SubQuery())
}