diff --git a/pkg/compute/models/guests.go b/pkg/compute/models/guests.go index da09a03218..d8c268f8b4 100644 --- a/pkg/compute/models/guests.go +++ b/pkg/compute/models/guests.go @@ -2539,10 +2539,10 @@ func (manager *SGuestManager) TotalCount( ownerId mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, status []string, hypervisors []string, - isSystem bool, pendingDelete bool, + includeSystem bool, pendingDelete bool, hostTypes []string, resourceTypes []string, providers []string, brands []string, cloudEnv string, ) SGuestCountStat { - return usageTotalGuestResouceCount(scope, ownerId, rangeObjs, status, hypervisors, isSystem, pendingDelete, hostTypes, resourceTypes, providers, brands, cloudEnv) + return usageTotalGuestResouceCount(scope, ownerId, rangeObjs, status, hypervisors, includeSystem, pendingDelete, hostTypes, resourceTypes, providers, brands, cloudEnv) } func (self *SGuest) detachNetworks(ctx context.Context, userCred mcclient.TokenCredential, gns []SGuestnetwork, reserve bool, deploy bool) error { @@ -3025,39 +3025,6 @@ type SGuestCountStat struct { } func usageTotalGuestResouceCount( - scope rbacutils.TRbacScope, - ownerId mcclient.IIdentityProvider, - rangeObjs []db.IStandaloneModel, - status []string, - hypervisors []string, - isSystem bool, - pendingDelete bool, - hostTypes []string, - resourceTypes []string, - providers []string, brands []string, cloudEnv string, -) SGuestCountStat { - q, guests := _guestResourceCountQuery(scope, ownerId, rangeObjs, status, hypervisors, - pendingDelete, hostTypes, resourceTypes, providers, brands, cloudEnv) - if isSystem { - q = q.IsTrue("is_system") - } else { - q = q.Filter(sqlchemy.OR( - sqlchemy.IsNull(guests.Field("is_system")), sqlchemy.IsFalse(guests.Field("is_system")))) - } - - stat := SGuestCountStat{} - row := q.Row() - err := q.Row2Struct(row, &stat) - if err != nil { - log.Errorf("%s", err) - } - stat.TotalCpuCount += stat.TotalBackupCpuCount - stat.TotalMemSize += stat.TotalBackupMemSize - stat.TotalDiskSize += stat.TotalBackupDiskSize - return stat -} - -func totalGuestResourceCount( scope rbacutils.TRbacScope, ownerId mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, @@ -3071,11 +3038,11 @@ func totalGuestResourceCount( ) SGuestCountStat { q, guests := _guestResourceCountQuery(scope, ownerId, rangeObjs, status, hypervisors, pendingDelete, hostTypes, resourceTypes, providers, brands, cloudEnv) - if !includeSystem { q = q.Filter(sqlchemy.OR( sqlchemy.IsNull(guests.Field("is_system")), sqlchemy.IsFalse(guests.Field("is_system")))) } + stat := SGuestCountStat{} row := q.Row() err := q.Row2Struct(row, &stat) diff --git a/pkg/compute/models/quotas.go b/pkg/compute/models/quotas.go index 81bbf1e64e..6232446065 100644 --- a/pkg/compute/models/quotas.go +++ b/pkg/compute/models/quotas.go @@ -188,7 +188,7 @@ func (self *SQuota) FetchUsage(ctx context.Context) error { diskSize := totalDiskSize(scope, ownerId, tristate.None, tristate.None, false, false, rangeObjs, providers, brands, keys.CloudEnv, hypervisors) - guest := totalGuestResourceCount(scope, ownerId, rangeObjs, nil, hypervisors, false, false, nil, nil, providers, brands, keys.CloudEnv) + guest := usageTotalGuestResouceCount(scope, ownerId, rangeObjs, nil, hypervisors, false, false, nil, nil, providers, brands, keys.CloudEnv) self.Count = guest.TotalGuestCount self.Cpu = guest.TotalCpuCount diff --git a/pkg/compute/models/storages.go b/pkg/compute/models/storages.go index a16703042b..a251a06019 100644 --- a/pkg/compute/models/storages.go +++ b/pkg/compute/models/storages.go @@ -834,7 +834,7 @@ type StorageCapacityStat struct { TotalSizeVirtual float64 } -func filterDisksByScope(scope rbacutils.TRbacScope, ownerId mcclient.IIdentityProvider, pendingDeleted bool, isSystem bool) *sqlchemy.SSubQuery { +func filterDisksByScope(scope rbacutils.TRbacScope, ownerId mcclient.IIdentityProvider, pendingDeleted bool, includeSystem bool) *sqlchemy.SSubQuery { q := DiskManager.Query() switch scope { case rbacutils.ScopeSystem: @@ -848,16 +848,14 @@ func filterDisksByScope(scope rbacutils.TRbacScope, ownerId mcclient.IIdentityPr } else { q = q.IsFalse("pending_deleted") } - if isSystem { - q = q.IsTrue("is_system") - } else { + if !includeSystem { q = q.IsFalse("is_system") } return q.SubQuery() } -func (manager *SStorageManager) disksReadyQ(scope rbacutils.TRbacScope, ownerId mcclient.IIdentityProvider, pendingDeleted bool, isSystem bool) *sqlchemy.SSubQuery { - disks := filterDisksByScope(scope, ownerId, pendingDeleted, isSystem) +func (manager *SStorageManager) disksReadyQ(scope rbacutils.TRbacScope, ownerId mcclient.IIdentityProvider, pendingDeleted bool, includeSystem bool) *sqlchemy.SSubQuery { + disks := filterDisksByScope(scope, ownerId, pendingDeleted, includeSystem) q := disks.Query( disks.Field("storage_id"), sqlchemy.SUM("used_capacity", disks.Field("disk_size")), @@ -867,7 +865,7 @@ func (manager *SStorageManager) disksReadyQ(scope rbacutils.TRbacScope, ownerId return q.SubQuery() } -func (manager *SStorageManager) diskIsAttachedQ(isAttached bool, scope rbacutils.TRbacScope, ownerId mcclient.IIdentityProvider, pendingDeleted bool, isSystem bool) *sqlchemy.SSubQuery { +func (manager *SStorageManager) diskIsAttachedQ(isAttached bool, scope rbacutils.TRbacScope, ownerId mcclient.IIdentityProvider, pendingDeleted bool, includeSystem bool) *sqlchemy.SSubQuery { sumKey := "attached_used_capacity" countKey := "attached_count" cond := sqlchemy.In @@ -877,7 +875,7 @@ func (manager *SStorageManager) diskIsAttachedQ(isAttached bool, scope rbacutils cond = sqlchemy.NotIn } sq := GuestdiskManager.Query("disk_id").SubQuery() - disks := filterDisksByScope(scope, ownerId, pendingDeleted, isSystem) + disks := filterDisksByScope(scope, ownerId, pendingDeleted, includeSystem) disks = disks.Query().Filter(cond(disks.Field("id"), sq)).SubQuery() q := disks.Query( disks.Field("storage_id"), @@ -887,16 +885,16 @@ func (manager *SStorageManager) diskIsAttachedQ(isAttached bool, scope rbacutils return q.SubQuery() } -func (manager *SStorageManager) diskAttachedQ(scope rbacutils.TRbacScope, ownerId mcclient.IIdentityProvider, pendingDeleted bool, isSystem bool) *sqlchemy.SSubQuery { - return manager.diskIsAttachedQ(true, scope, ownerId, pendingDeleted, isSystem) +func (manager *SStorageManager) diskAttachedQ(scope rbacutils.TRbacScope, ownerId mcclient.IIdentityProvider, pendingDeleted bool, includeSystem bool) *sqlchemy.SSubQuery { + return manager.diskIsAttachedQ(true, scope, ownerId, pendingDeleted, includeSystem) } -func (manager *SStorageManager) diskDetachedQ(scope rbacutils.TRbacScope, ownerId mcclient.IIdentityProvider, pendingDeleted bool, isSystem bool) *sqlchemy.SSubQuery { - return manager.diskIsAttachedQ(false, scope, ownerId, pendingDeleted, isSystem) +func (manager *SStorageManager) diskDetachedQ(scope rbacutils.TRbacScope, ownerId mcclient.IIdentityProvider, pendingDeleted bool, includeSystem bool) *sqlchemy.SSubQuery { + return manager.diskIsAttachedQ(false, scope, ownerId, pendingDeleted, includeSystem) } -func (manager *SStorageManager) disksFailedQ(scope rbacutils.TRbacScope, ownerId mcclient.IIdentityProvider, pendingDeleted bool, isSystem bool) *sqlchemy.SSubQuery { - disks := filterDisksByScope(scope, ownerId, pendingDeleted, isSystem) +func (manager *SStorageManager) disksFailedQ(scope rbacutils.TRbacScope, ownerId mcclient.IIdentityProvider, pendingDeleted bool, includeSystem bool) *sqlchemy.SSubQuery { + disks := filterDisksByScope(scope, ownerId, pendingDeleted, includeSystem) q := disks.Query( disks.Field("storage_id"), sqlchemy.SUM("failed_capacity", disks.Field("disk_size")), @@ -911,13 +909,13 @@ func (manager *SStorageManager) totalCapacityQ( resourceTypes []string, providers []string, brands []string, cloudEnv string, scope rbacutils.TRbacScope, ownerId mcclient.IIdentityProvider, - pendingDeleted bool, isSystem bool, + pendingDeleted bool, includeSystem bool, storageOwnership bool, ) *sqlchemy.SQuery { - stmt := manager.disksReadyQ(scope, ownerId, pendingDeleted, isSystem) - stmt2 := manager.disksFailedQ(scope, ownerId, pendingDeleted, isSystem) - attachedDisks := manager.diskAttachedQ(scope, ownerId, pendingDeleted, isSystem) - detachedDisks := manager.diskDetachedQ(scope, ownerId, pendingDeleted, isSystem) + stmt := manager.disksReadyQ(scope, ownerId, pendingDeleted, includeSystem) + stmt2 := manager.disksFailedQ(scope, ownerId, pendingDeleted, includeSystem) + attachedDisks := manager.diskAttachedQ(scope, ownerId, pendingDeleted, includeSystem) + detachedDisks := manager.diskDetachedQ(scope, ownerId, pendingDeleted, includeSystem) storages := manager.Query().SubQuery() q := storages.Query( storages.Field("capacity"), @@ -1047,7 +1045,7 @@ func (manager *SStorageManager) TotalCapacity( providers []string, brands []string, cloudEnv string, scope rbacutils.TRbacScope, ownerId mcclient.IIdentityProvider, - pendingDeleted bool, isSystem bool, + pendingDeleted bool, includeSystem bool, storageOwnership bool, ) StoragesCapacityStat { res1 := manager.calculateCapacity( @@ -1057,7 +1055,7 @@ func (manager *SStorageManager) TotalCapacity( resourceTypes, providers, brands, cloudEnv, scope, ownerId, - pendingDeleted, isSystem, + pendingDeleted, includeSystem, storageOwnership, ), ) diff --git a/pkg/compute/usages/handler.go b/pkg/compute/usages/handler.go index 1a2ac140bb..20d5a01158 100644 --- a/pkg/compute/usages/handler.go +++ b/pkg/compute/usages/handler.go @@ -63,7 +63,7 @@ func (u Usage) Include(nus ...Usage) Usage { return u } -type objUsageFunc func(rbacutils.TRbacScope, mcclient.IIdentityProvider, bool, []db.IStandaloneModel, []string, []string, []string, string) (Usage, error) +type objUsageFunc func(rbacutils.TRbacScope, mcclient.IIdentityProvider, bool, []db.IStandaloneModel, []string, []string, []string, string, bool) (Usage, error) func getRangeObjId(ctx context.Context) (string, error) { params := appctx.AppContextParams(ctx) @@ -116,11 +116,12 @@ func rangeObjHandler( providers := json.GetQueryStringArray(query, "provider") brands := json.GetQueryStringArray(query, "brand") cloudEnv, _ := query.GetString("cloud_env") + includeSystem := json.QueryBoolean(query, "system", false) var rangeObjs []db.IStandaloneModel if obj != nil { rangeObjs = []db.IStandaloneModel{obj} } - usage, err := reporter(scope, ownerId, isOwner, rangeObjs, hostTypes, providers, brands, cloudEnv) + usage, err := reporter(scope, ownerId, isOwner, rangeObjs, hostTypes, providers, brands, cloudEnv, includeSystem) if err != nil { httperrors.GeneralServerError(w, err) return @@ -170,36 +171,36 @@ func getQuery(r *http.Request) json.JSONObject { return query } -func ReportHostUsage(scope rbacutils.TRbacScope, userCred mcclient.IIdentityProvider, isOwner bool, hosts []db.IStandaloneModel, hostTypes []string, providers []string, brands []string, cloudEnv string) (Usage, error) { - return ReportGeneralUsage(scope, userCred, isOwner, hosts, hostTypes, providers, brands, cloudEnv) +func ReportHostUsage(scope rbacutils.TRbacScope, userCred mcclient.IIdentityProvider, isOwner bool, hosts []db.IStandaloneModel, hostTypes []string, providers []string, brands []string, cloudEnv string, includeSystem bool) (Usage, error) { + return ReportGeneralUsage(scope, userCred, isOwner, hosts, hostTypes, providers, brands, cloudEnv, includeSystem) } -func ReportWireUsage(scope rbacutils.TRbacScope, userCred mcclient.IIdentityProvider, isOwner bool, wires []db.IStandaloneModel, hostTypes []string, providers []string, brands []string, cloudEnv string) (Usage, error) { - return ReportGeneralUsage(scope, userCred, isOwner, wires, hostTypes, providers, brands, cloudEnv) +func ReportWireUsage(scope rbacutils.TRbacScope, userCred mcclient.IIdentityProvider, isOwner bool, wires []db.IStandaloneModel, hostTypes []string, providers []string, brands []string, cloudEnv string, includeSystem bool) (Usage, error) { + return ReportGeneralUsage(scope, userCred, isOwner, wires, hostTypes, providers, brands, cloudEnv, includeSystem) } -func ReportCloudAccountUsage(scope rbacutils.TRbacScope, userCred mcclient.IIdentityProvider, isOwner bool, accounts []db.IStandaloneModel, hostTypes []string, providers []string, brands []string, cloudEnv string) (Usage, error) { - return ReportGeneralUsage(scope, userCred, isOwner, accounts, hostTypes, providers, brands, cloudEnv) +func ReportCloudAccountUsage(scope rbacutils.TRbacScope, userCred mcclient.IIdentityProvider, isOwner bool, accounts []db.IStandaloneModel, hostTypes []string, providers []string, brands []string, cloudEnv string, includeSystem bool) (Usage, error) { + return ReportGeneralUsage(scope, userCred, isOwner, accounts, hostTypes, providers, brands, cloudEnv, includeSystem) } -func ReportCloudProviderUsage(scope rbacutils.TRbacScope, userCred mcclient.IIdentityProvider, isOwner bool, managers []db.IStandaloneModel, hostTypes []string, providers []string, brands []string, cloudEnv string) (Usage, error) { - return ReportGeneralUsage(scope, userCred, isOwner, managers, hostTypes, providers, brands, cloudEnv) +func ReportCloudProviderUsage(scope rbacutils.TRbacScope, userCred mcclient.IIdentityProvider, isOwner bool, managers []db.IStandaloneModel, hostTypes []string, providers []string, brands []string, cloudEnv string, includeSystem bool) (Usage, error) { + return ReportGeneralUsage(scope, userCred, isOwner, managers, hostTypes, providers, brands, cloudEnv, includeSystem) } -func ReportSchedtagUsage(scope rbacutils.TRbacScope, userCred mcclient.IIdentityProvider, isOwner bool, schedtags []db.IStandaloneModel, hostTypes []string, providers []string, brands []string, cloudEnv string) (Usage, error) { - return ReportGeneralUsage(scope, userCred, isOwner, schedtags, hostTypes, providers, brands, cloudEnv) +func ReportSchedtagUsage(scope rbacutils.TRbacScope, userCred mcclient.IIdentityProvider, isOwner bool, schedtags []db.IStandaloneModel, hostTypes []string, providers []string, brands []string, cloudEnv string, includeSystem bool) (Usage, error) { + return ReportGeneralUsage(scope, userCred, isOwner, schedtags, hostTypes, providers, brands, cloudEnv, includeSystem) } -func ReportZoneUsage(scope rbacutils.TRbacScope, userCred mcclient.IIdentityProvider, isOwner bool, zones []db.IStandaloneModel, hostTypes []string, providers []string, brands []string, cloudEnv string) (Usage, error) { - return ReportGeneralUsage(scope, userCred, isOwner, zones, hostTypes, providers, brands, cloudEnv) +func ReportZoneUsage(scope rbacutils.TRbacScope, userCred mcclient.IIdentityProvider, isOwner bool, zones []db.IStandaloneModel, hostTypes []string, providers []string, brands []string, cloudEnv string, includeSystem bool) (Usage, error) { + return ReportGeneralUsage(scope, userCred, isOwner, zones, hostTypes, providers, brands, cloudEnv, includeSystem) } -func ReportCloudRegionUsage(scope rbacutils.TRbacScope, userCred mcclient.IIdentityProvider, isOwner bool, cloudRegions []db.IStandaloneModel, hostTypes []string, providers []string, brands []string, cloudEnv string) (Usage, error) { - return ReportGeneralUsage(scope, userCred, isOwner, cloudRegions, hostTypes, providers, brands, cloudEnv) +func ReportCloudRegionUsage(scope rbacutils.TRbacScope, userCred mcclient.IIdentityProvider, isOwner bool, cloudRegions []db.IStandaloneModel, hostTypes []string, providers []string, brands []string, cloudEnv string, includeSystem bool) (Usage, error) { + return ReportGeneralUsage(scope, userCred, isOwner, cloudRegions, hostTypes, providers, brands, cloudEnv, includeSystem) } func getSystemGeneralUsage(userCred mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, hostTypes []string, - providers []string, brands []string, cloudEnv string) (Usage, error) { + providers []string, brands []string, cloudEnv string, includeSystem bool) (Usage, error) { count := RegionUsage(rangeObjs, providers, brands, cloudEnv) zone := ZoneUsage(rangeObjs, providers, brands, cloudEnv) count.Include(zone) @@ -220,12 +221,9 @@ func getSystemGeneralUsage(userCred mcclient.IIdentityProvider, rangeObjs []db.I count.Add("cpu.virtual", host.GetVirtualCPUCount()) } - guestRunningUsage := GuestRunningUsage("all.running_servers", rbacutils.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false) + guestRunningUsage := GuestRunningUsage("all.running_servers", rbacutils.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, includeSystem) runningMem := guestRunningUsage.Get("all.running_servers.memory").(int) runningCpu := guestRunningUsage.Get("all.running_servers.cpu").(int) - sysGuestRunningUsage := GuestRunningUsage("all.running_servers.system", rbacutils.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, true) - sysRunningMem := sysGuestRunningUsage.Get("all.running_servers.system.memory").(int) - sysRunningCpu := sysGuestRunningUsage.Get("all.running_servers.system.cpu").(int) // containerRunningUsage := containerUsage("all.containers", rbacutils.ScopeSystem, nil, rangeObjs, hostTypes, nil, providers, brands, cloudEnv) // containerRunningMem := containerRunningUsage.Get("all.containers.memory").(int) @@ -233,21 +231,15 @@ func getSystemGeneralUsage(userCred mcclient.IIdentityProvider, rangeObjs []db.I // runningMem += containerRunningMem // runningCpu += containerRunningCpu runningCpuCmtRate := 0.0 - sysRunningCpuCmtRate := 0.0 runningMemCmtRate := 0.0 - sysRunningMemCmtRate := 0.0 if pmemTotal > 0 { runningMemCmtRate = utils.FloatRound(float64(runningMem)/pmemTotal, 2) - sysRunningMemCmtRate = utils.FloatRound(float64(sysRunningMem)/pmemTotal, 2) } if pcpuTotal > 0 { runningCpuCmtRate = utils.FloatRound(float64(runningCpu)/pcpuTotal, 2) - sysRunningCpuCmtRate = utils.FloatRound(float64(sysRunningCpu)/pcpuTotal, 2) } count.Add("all.memory_commit_rate.running", runningMemCmtRate) count.Add("all.cpu_commit_rate.running", runningCpuCmtRate) - count.Add("all.memory_commit_rate.running.system", sysRunningMemCmtRate) - count.Add("all.cpu_commit_rate.running.system", sysRunningCpuCmtRate) count.Include( VpcUsage("", providers, brands, cloudEnv, nil, rbacutils.ScopeSystem, rangeObjs), @@ -262,44 +254,29 @@ func getSystemGeneralUsage(userCred mcclient.IIdentityProvider, rangeObjs []db.I BaremetalUsage(userCred, rbacutils.ScopeSystem, rangeObjs, hostTypes, providers, brands, cloudEnv), - StorageUsage("", rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, false, rbacutils.ScopeSystem, nil), + StorageUsage("", rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, includeSystem, rbacutils.ScopeSystem, nil), StorageUsage("system", rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false, true, rbacutils.ScopeSystem, nil), - StorageUsage("prepaid_pool", rangeObjs, hostTypes, []string{api.HostResourceTypePrepaidRecycle}, providers, brands, cloudEnv, false, false, rbacutils.ScopeSystem, nil), - StorageUsage("any_pool", rangeObjs, hostTypes, nil, providers, brands, cloudEnv, false, false, rbacutils.ScopeSystem, nil), + StorageUsage("prepaid_pool", rangeObjs, hostTypes, []string{api.HostResourceTypePrepaidRecycle}, providers, brands, cloudEnv, false, includeSystem, rbacutils.ScopeSystem, nil), + StorageUsage("any_pool", rangeObjs, hostTypes, nil, providers, brands, cloudEnv, false, includeSystem, rbacutils.ScopeSystem, nil), StorageUsage("any_pool.system", rangeObjs, hostTypes, nil, providers, brands, cloudEnv, false, true, rbacutils.ScopeSystem, nil), - StorageUsage("any_pool.pending_delete", rangeObjs, hostTypes, nil, providers, brands, cloudEnv, true, false, rbacutils.ScopeSystem, nil), + StorageUsage("any_pool.pending_delete", rangeObjs, hostTypes, nil, providers, brands, cloudEnv, true, includeSystem, rbacutils.ScopeSystem, nil), StorageUsage("any_pool.pending_delete.system", rangeObjs, hostTypes, nil, providers, brands, cloudEnv, true, true, rbacutils.ScopeSystem, nil), - GuestNormalUsage("all.servers", rbacutils.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false), - GuestNormalUsage("all.servers.prepaid_pool", rbacutils.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypePrepaidRecycle}, providers, brands, cloudEnv, false), - GuestNormalUsage("all.servers.any_pool", rbacutils.ScopeSystem, nil, rangeObjs, hostTypes, nil, providers, brands, cloudEnv, false), + GuestNormalUsage("all.servers", rbacutils.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, includeSystem), + GuestNormalUsage("all.servers.prepaid_pool", rbacutils.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypePrepaidRecycle}, providers, brands, cloudEnv, includeSystem), + GuestNormalUsage("all.servers.any_pool", rbacutils.ScopeSystem, nil, rangeObjs, hostTypes, nil, providers, brands, cloudEnv, includeSystem), - GuestNormalUsage("all.servers.system", rbacutils.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, true), - GuestNormalUsage("all.servers.prepaid_pool.system", rbacutils.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypePrepaidRecycle}, providers, brands, cloudEnv, true), - GuestNormalUsage("all.servers.any_pool.system", rbacutils.ScopeSystem, nil, rangeObjs, hostTypes, nil, providers, brands, cloudEnv, true), + GuestPendingDeleteUsage("all.pending_delete_servers", rbacutils.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, includeSystem), + GuestPendingDeleteUsage("all.pending_delete_servers.prepaid_pool", rbacutils.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypePrepaidRecycle}, providers, brands, cloudEnv, includeSystem), + GuestPendingDeleteUsage("all.pending_delete_servers.any_pool", rbacutils.ScopeSystem, nil, rangeObjs, hostTypes, nil, providers, brands, cloudEnv, includeSystem), - GuestPendingDeleteUsage("all.pending_delete_servers", rbacutils.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false), - GuestPendingDeleteUsage("all.pending_delete_servers.prepaid_pool", rbacutils.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypePrepaidRecycle}, providers, brands, cloudEnv, false), - GuestPendingDeleteUsage("all.pending_delete_servers.any_pool", rbacutils.ScopeSystem, nil, rangeObjs, hostTypes, nil, providers, brands, cloudEnv, false), - - GuestPendingDeleteUsage("all.pending_delete_servers.system", rbacutils.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, true), - GuestPendingDeleteUsage("all.pending_delete_servers.prepaid_pool.system", rbacutils.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypePrepaidRecycle}, providers, brands, cloudEnv, true), - GuestPendingDeleteUsage("all.pending_delete_servers.any_pool.system", rbacutils.ScopeSystem, nil, rangeObjs, hostTypes, nil, providers, brands, cloudEnv, true), - - GuestReadyUsage("all.ready_servers", rbacutils.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false), - GuestReadyUsage("all.ready_servers.prepaid_pool", rbacutils.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypePrepaidRecycle}, providers, brands, cloudEnv, false), - GuestReadyUsage("all.ready_servers.any_pool", rbacutils.ScopeSystem, nil, rangeObjs, hostTypes, nil, providers, brands, cloudEnv, false), - GuestRunningUsage("all.running_servers.prepaid_pool", rbacutils.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypePrepaidRecycle}, providers, brands, cloudEnv, false), - GuestRunningUsage("all.running_servers.any_pool", rbacutils.ScopeSystem, nil, rangeObjs, hostTypes, nil, providers, brands, cloudEnv, false), - - GuestReadyUsage("all.ready_servers.system", rbacutils.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, true), - GuestReadyUsage("all.ready_servers.prepaid_pool.system", rbacutils.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypePrepaidRecycle}, providers, brands, cloudEnv, true), - GuestReadyUsage("all.ready_servers.any_pool.system", rbacutils.ScopeSystem, nil, rangeObjs, hostTypes, nil, providers, brands, cloudEnv, true), - GuestRunningUsage("all.running_servers.prepaid_pool.system", rbacutils.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypePrepaidRecycle}, providers, brands, cloudEnv, true), - GuestRunningUsage("all.running_servers.any_pool.system", rbacutils.ScopeSystem, nil, rangeObjs, hostTypes, nil, providers, brands, cloudEnv, true), + GuestReadyUsage("all.ready_servers", rbacutils.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, includeSystem), + GuestReadyUsage("all.ready_servers.prepaid_pool", rbacutils.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypePrepaidRecycle}, providers, brands, cloudEnv, includeSystem), + GuestReadyUsage("all.ready_servers.any_pool", rbacutils.ScopeSystem, nil, rangeObjs, hostTypes, nil, providers, brands, cloudEnv, includeSystem), + GuestRunningUsage("all.running_servers.prepaid_pool", rbacutils.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypePrepaidRecycle}, providers, brands, cloudEnv, includeSystem), + GuestRunningUsage("all.running_servers.any_pool", rbacutils.ScopeSystem, nil, rangeObjs, hostTypes, nil, providers, brands, cloudEnv, includeSystem), guestRunningUsage, - sysGuestRunningUsage, // containerRunningUsage, IsolatedDeviceUsage("", rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv), @@ -340,26 +317,16 @@ func getDomainGeneralUsage(scope rbacutils.TRbacScope, cred mcclient.IIdentityPr runningMem := guestRunningUsage.Get("domain.running_servers.memory").(int) runningCpu := guestRunningUsage.Get("domain.running_servers.cpu").(int) - sysGuestRunningUsage := GuestRunningUsage("domain.running_servers.system", rbacutils.ScopeSystem, nil, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, true) - sysRunningMem := sysGuestRunningUsage.Get("domain.running_servers.system.memory").(int) - sysRunningCpu := sysGuestRunningUsage.Get("domain.running_servers.system.cpu").(int) - runningCpuCmtRate := 0.0 - sysRunningCpuCmtRate := 0.0 runningMemCmtRate := 0.0 - sysRunningMemCmtRate := 0.0 if pmemTotal > 0 { runningMemCmtRate = utils.FloatRound(float64(runningMem)/pmemTotal, 2) - sysRunningMemCmtRate = utils.FloatRound(float64(sysRunningMem)/pmemTotal, 2) } if pcpuTotal > 0 { runningCpuCmtRate = utils.FloatRound(float64(runningCpu)/pcpuTotal, 2) - sysRunningCpuCmtRate = utils.FloatRound(float64(sysRunningCpu)/pcpuTotal, 2) } count.Add("domain.memory_commit_rate.running", runningMemCmtRate) count.Add("domain.cpu_commit_rate.running", runningCpuCmtRate) - count.Add("domain.memory_commit_rate.running.system", sysRunningMemCmtRate) - count.Add("domain.cpu_commit_rate.running.system", sysRunningCpuCmtRate) count.Include( VpcUsage("domain", providers, brands, cloudEnv, cred, rbacutils.ScopeDomain, rangeObjs), @@ -384,34 +351,20 @@ func getDomainGeneralUsage(scope rbacutils.TRbacScope, cred mcclient.IIdentityPr GuestNormalUsage(getKey(scope, "servers.prepaid_pool"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypePrepaidRecycle}, providers, brands, cloudEnv, false), GuestNormalUsage(getKey(scope, "servers.any_pool"), scope, cred, rangeObjs, hostTypes, nil, providers, brands, cloudEnv, false), - GuestNormalUsage(getKey(scope, "servers.prepaid_pool.system"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypePrepaidRecycle}, providers, brands, cloudEnv, true), - GuestNormalUsage(getKey(scope, "servers.any_pool.system"), scope, cred, rangeObjs, hostTypes, nil, providers, brands, cloudEnv, true), guestRunningUsage, - sysGuestRunningUsage, // GuestRunningUsage(getKey(scope, "running_servers"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv), GuestRunningUsage(getKey(scope, "running_servers.prepaid_pool"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypePrepaidRecycle}, providers, brands, cloudEnv, false), GuestRunningUsage(getKey(scope, "running_servers.any_pool"), scope, cred, rangeObjs, hostTypes, nil, providers, brands, cloudEnv, false), - GuestRunningUsage(getKey(scope, "running_servers.prepaid_pool.system"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypePrepaidRecycle}, providers, brands, cloudEnv, true), - GuestRunningUsage(getKey(scope, "running_servers.any_pool.system"), scope, cred, rangeObjs, hostTypes, nil, providers, brands, cloudEnv, true), - GuestPendingDeleteUsage(getKey(scope, "pending_delete_servers"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false), GuestPendingDeleteUsage(getKey(scope, "pending_delete_servers.prepaid_pool"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypePrepaidRecycle}, providers, brands, cloudEnv, false), GuestPendingDeleteUsage(getKey(scope, "pending_delete_servers.any_pool"), scope, cred, rangeObjs, hostTypes, nil, providers, brands, cloudEnv, false), - GuestPendingDeleteUsage(getKey(scope, "pending_delete_servers.system"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, true), - GuestPendingDeleteUsage(getKey(scope, "pending_delete_servers.prepaid_pool.system"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypePrepaidRecycle}, providers, brands, cloudEnv, true), - GuestPendingDeleteUsage(getKey(scope, "pending_delete_servers.any_pool.system"), scope, cred, rangeObjs, hostTypes, nil, providers, brands, cloudEnv, true), - GuestReadyUsage(getKey(scope, "ready_servers"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false), GuestReadyUsage(getKey(scope, "ready_servers.prepaid_pool"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypePrepaidRecycle}, providers, brands, cloudEnv, false), GuestReadyUsage(getKey(scope, "ready_servers.any_pool"), scope, cred, rangeObjs, hostTypes, nil, providers, brands, cloudEnv, false), - GuestReadyUsage(getKey(scope, "ready_servers.system"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, true), - GuestReadyUsage(getKey(scope, "ready_servers.prepaid_pool.system"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypePrepaidRecycle}, providers, brands, cloudEnv, true), - GuestReadyUsage(getKey(scope, "ready_servers.any_pool.system"), scope, cred, rangeObjs, hostTypes, nil, providers, brands, cloudEnv, true), - NetworkUsage(getKey(scope, ""), scope, cred, providers, brands, cloudEnv, rangeObjs), EipUsage(scope, cred, rangeObjs, providers, brands, cloudEnv), @@ -437,34 +390,18 @@ func getProjectGeneralUsage(scope rbacutils.TRbacScope, cred mcclient.IIdentityP count.Include( GuestNormalUsage(getKey(scope, "servers.prepaid_pool"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypePrepaidRecycle}, providers, brands, cloudEnv, false), GuestNormalUsage(getKey(scope, "servers.any_pool"), scope, cred, rangeObjs, hostTypes, nil, providers, brands, cloudEnv, false), - - GuestNormalUsage(getKey(scope, "servers.prepaid_pool.system"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypePrepaidRecycle}, providers, brands, cloudEnv, true), - GuestNormalUsage(getKey(scope, "servers.any_pool.system"), scope, cred, rangeObjs, hostTypes, nil, providers, brands, cloudEnv, true), - GuestRunningUsage(getKey(scope, "running_servers"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false), GuestRunningUsage(getKey(scope, "running_servers.prepaid_pool"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypePrepaidRecycle}, providers, brands, cloudEnv, false), GuestRunningUsage(getKey(scope, "running_servers.any_pool"), scope, cred, rangeObjs, hostTypes, nil, providers, brands, cloudEnv, false), - GuestRunningUsage(getKey(scope, "running_servers.system"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, true), - GuestRunningUsage(getKey(scope, "running_servers.prepaid_pool.system"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypePrepaidRecycle}, providers, brands, cloudEnv, true), - GuestRunningUsage(getKey(scope, "running_servers.any_pool.system"), scope, cred, rangeObjs, hostTypes, nil, providers, brands, cloudEnv, true), - GuestPendingDeleteUsage(getKey(scope, "pending_delete_servers"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false), GuestPendingDeleteUsage(getKey(scope, "pending_delete_servers.prepaid_pool"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypePrepaidRecycle}, providers, brands, cloudEnv, false), GuestPendingDeleteUsage(getKey(scope, "pending_delete_servers.any_pool"), scope, cred, rangeObjs, hostTypes, nil, providers, brands, cloudEnv, false), - GuestPendingDeleteUsage(getKey(scope, "pending_delete_servers.system"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, true), - GuestPendingDeleteUsage(getKey(scope, "pending_delete_servers.prepaid_pool.system"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypePrepaidRecycle}, providers, brands, cloudEnv, true), - GuestPendingDeleteUsage(getKey(scope, "pending_delete_servers.any_pool.system"), scope, cred, rangeObjs, hostTypes, nil, providers, brands, cloudEnv, true), - GuestReadyUsage(getKey(scope, "ready_servers"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, false), GuestReadyUsage(getKey(scope, "ready_servers.prepaid_pool"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypePrepaidRecycle}, providers, brands, cloudEnv, false), GuestReadyUsage(getKey(scope, "ready_servers.any_pool"), scope, cred, rangeObjs, hostTypes, nil, providers, brands, cloudEnv, false), - GuestReadyUsage(getKey(scope, "ready_servers.system"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypeShared}, providers, brands, cloudEnv, true), - GuestReadyUsage(getKey(scope, "ready_servers.prepaid_pool.system"), scope, cred, rangeObjs, hostTypes, []string{api.HostResourceTypePrepaidRecycle}, providers, brands, cloudEnv, true), - GuestReadyUsage(getKey(scope, "ready_servers.any_pool.system"), scope, cred, rangeObjs, hostTypes, nil, providers, brands, cloudEnv, true), - NetworkUsage(getKey(scope, ""), scope, cred, providers, brands, cloudEnv, rangeObjs), EipUsage(scope, cred, rangeObjs, providers, brands, cloudEnv), @@ -499,11 +436,12 @@ func ReportGeneralUsage( providers []string, brands []string, cloudEnv string, + includeSystem bool, ) (count Usage, err error) { count = make(map[string]interface{}) if scope == rbacutils.ScopeSystem || isOwner { - count, err = getSystemGeneralUsage(userCred, rangeObjs, hostTypes, providers, brands, cloudEnv) + count, err = getSystemGeneralUsage(userCred, rangeObjs, hostTypes, providers, brands, cloudEnv, includeSystem) if err != nil { return } @@ -579,7 +517,7 @@ func StorageUsage( rangeObjs []db.IStandaloneModel, hostTypes []string, resourceTypes []string, providers []string, brands []string, cloudEnv string, - pendingDeleted bool, isSystem bool, + pendingDeleted bool, includeSystem bool, scope rbacutils.TRbacScope, ownerId mcclient.IIdentityProvider, ) Usage { sPrefix := getSysKey(scope, "storages") @@ -594,7 +532,7 @@ func StorageUsage( hostTypes, resourceTypes, providers, brands, cloudEnv, scope, ownerId, - pendingDeleted, isSystem, + pendingDeleted, includeSystem, true, ) count[sPrefix] = result.Capacity @@ -619,7 +557,7 @@ func StorageUsage( hostTypes, resourceTypes, providers, brands, cloudEnv, scope, ownerId, - pendingDeleted, isSystem, + pendingDeleted, includeSystem, false, ) @@ -644,10 +582,10 @@ func DisksUsage( brands []string, cloudEnv string, scope rbacutils.TRbacScope, ownerId mcclient.IIdentityProvider, - pendingDeleted bool, isSystem bool, + pendingDeleted bool, includeSystem bool, ) Usage { count := make(map[string]interface{}) - result := models.StorageManager.TotalCapacity(rangeObjs, hostTypes, resourceTypes, providers, brands, cloudEnv, scope, ownerId, pendingDeleted, isSystem, false) + result := models.StorageManager.TotalCapacity(rangeObjs, hostTypes, resourceTypes, providers, brands, cloudEnv, scope, ownerId, pendingDeleted, includeSystem, false) count[dPrefix] = result.CapacityUsed count[fmt.Sprintf("%s.storage", dPrefix)] = result.Capacity count[fmt.Sprintf("%s.storage.virtual", dPrefix)] = result.CapacityVirtual @@ -758,26 +696,26 @@ func hostUsage( func GuestNormalUsage(prefix string, scope rbacutils.TRbacScope, cred mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, hostTypes []string, resourceTypes []string, providers []string, - brands []string, cloudEnv string, isSystem bool) Usage { - return guestUsage(prefix, scope, cred, rangeObjs, hostTypes, resourceTypes, providers, brands, cloudEnv, nil, false, isSystem) + brands []string, cloudEnv string, includeSystem bool) Usage { + return guestUsage(prefix, scope, cred, rangeObjs, hostTypes, resourceTypes, providers, brands, cloudEnv, nil, false, includeSystem) } func GuestPendingDeleteUsage(prefix string, scope rbacutils.TRbacScope, cred mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, hostTypes []string, resourceTypes []string, providers []string, - brands []string, cloudEnv string, isSystem bool) Usage { - return guestUsage(prefix, scope, cred, rangeObjs, hostTypes, resourceTypes, providers, brands, cloudEnv, nil, true, isSystem) + brands []string, cloudEnv string, includeSystem bool) Usage { + return guestUsage(prefix, scope, cred, rangeObjs, hostTypes, resourceTypes, providers, brands, cloudEnv, nil, true, includeSystem) } func GuestRunningUsage(prefix string, scope rbacutils.TRbacScope, cred mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, hostTypes []string, resourceTypes []string, providers []string, - brands []string, cloudEnv string, isSystem bool) Usage { - return guestUsage(prefix, scope, cred, rangeObjs, hostTypes, resourceTypes, providers, brands, cloudEnv, []string{api.VM_RUNNING}, false, isSystem) + brands []string, cloudEnv string, includeSystem bool) Usage { + return guestUsage(prefix, scope, cred, rangeObjs, hostTypes, resourceTypes, providers, brands, cloudEnv, []string{api.VM_RUNNING}, false, includeSystem) } func GuestReadyUsage(prefix string, scope rbacutils.TRbacScope, cred mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, hostTypes []string, resourceTypes []string, providers []string, - brands []string, cloudEnv string, isSystem bool) Usage { - return guestUsage(prefix, scope, cred, rangeObjs, hostTypes, resourceTypes, providers, brands, cloudEnv, []string{api.VM_READY}, false, isSystem) + brands []string, cloudEnv string, includeSystem bool) Usage { + return guestUsage(prefix, scope, cred, rangeObjs, hostTypes, resourceTypes, providers, brands, cloudEnv, []string{api.VM_READY}, false, includeSystem) } func guestHypervisorsUsage( @@ -787,12 +725,12 @@ func guestHypervisorsUsage( rangeObjs []db.IStandaloneModel, hostTypes []string, resourceTypes []string, providers []string, brands []string, cloudEnv string, status, hypervisors []string, - pendingDelete, isSystem bool, + pendingDelete, includeSystem bool, ) Usage { // temporarily hide system resources // XXX needs more work later guest := models.GuestManager.TotalCount(scope, ownerId, rangeObjs, status, hypervisors, - isSystem, pendingDelete, hostTypes, resourceTypes, providers, brands, cloudEnv) + includeSystem, pendingDelete, hostTypes, resourceTypes, providers, brands, cloudEnv) count := make(map[string]interface{}) count[prefix] = guest.TotalGuestCount count[fmt.Sprintf("%s.cpu", prefix)] = guest.TotalCpuCount @@ -815,10 +753,10 @@ func guestHypervisorsUsage( func guestUsage(prefix string, scope rbacutils.TRbacScope, userCred mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, hostTypes []string, resourceTypes []string, providers []string, brands []string, cloudEnv string, - status []string, pendingDelete, isSystem bool) Usage { + status []string, pendingDelete, includeSystem bool) Usage { hypervisors := sets.NewString(api.HYPERVISORS...) hypervisors.Delete(api.HYPERVISOR_CONTAINER) - return guestHypervisorsUsage(prefix, scope, userCred, rangeObjs, hostTypes, resourceTypes, providers, brands, cloudEnv, status, hypervisors.List(), pendingDelete, isSystem) + return guestHypervisorsUsage(prefix, scope, userCred, rangeObjs, hostTypes, resourceTypes, providers, brands, cloudEnv, status, hypervisors.List(), pendingDelete, includeSystem) } /*func containerUsage(prefix string, scope rbacutils.TRbacScope, userCred mcclient.IIdentityProvider, rangeObjs []db.IStandaloneModel, @@ -846,10 +784,10 @@ func getKey(scope rbacutils.TRbacScope, key string) string { return _getKey(scope, key, false) } -func _getKey(scope rbacutils.TRbacScope, key string, isSystem bool) string { +func _getKey(scope rbacutils.TRbacScope, key string, includeSystem bool) string { switch scope { case rbacutils.ScopeProject: - if isSystem { + if includeSystem { if len(key) > 0 { return fmt.Sprintf("project.%s", key) } else { @@ -865,7 +803,7 @@ func _getKey(scope rbacutils.TRbacScope, key string, isSystem bool) string { return "domain" } default: - if isSystem { + if includeSystem { return key } else { if len(key) > 0 {