mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-19 02:37:24 +08:00
fix: cloud-account/provider usage not accurate
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
@@ -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())
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user