Skip to content

Commit

Permalink
add sys usage
Browse files Browse the repository at this point in the history
  • Loading branch information
wanyaoqi committed May 20, 2020
1 parent a76427c commit 844b865
Show file tree
Hide file tree
Showing 2 changed files with 189 additions and 65 deletions.
82 changes: 67 additions & 15 deletions pkg/compute/models/guests.go
Original file line number Diff line number Diff line change
Expand Up @@ -2532,10 +2532,10 @@ func (manager *SGuestManager) TotalCount(
ownerId mcclient.IIdentityProvider,
rangeObjs []db.IStandaloneModel,
status []string, hypervisors []string,
includeSystem bool, pendingDelete bool,
isSystem bool, pendingDelete bool,
hostTypes []string, resourceTypes []string, providers []string, brands []string, cloudEnv string,
) SGuestCountStat {
return totalGuestResourceCount(scope, ownerId, rangeObjs, status, hypervisors, includeSystem, pendingDelete, hostTypes, resourceTypes, providers, brands, cloudEnv)
return usageTotalGuestResouceCount(scope, ownerId, rangeObjs, status, hypervisors, isSystem, pendingDelete, hostTypes, resourceTypes, providers, brands, cloudEnv)
}

func (self *SGuest) detachNetworks(ctx context.Context, userCred mcclient.TokenCredential, gns []SGuestnetwork, reserve bool, deploy bool) error {
Expand Down Expand Up @@ -3017,6 +3017,39 @@ type SGuestCountStat struct {
TotalBackupDiskSize int
}

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,
Expand All @@ -3029,6 +3062,36 @@ func totalGuestResourceCount(
resourceTypes []string,
providers []string, brands []string, cloudEnv string,
) 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)
if err != nil {
log.Errorf("%s", err)
}
stat.TotalCpuCount += stat.TotalBackupCpuCount
stat.TotalMemSize += stat.TotalBackupMemSize
stat.TotalDiskSize += stat.TotalBackupDiskSize
return stat
}

func _guestResourceCountQuery(
scope rbacutils.TRbacScope,
ownerId mcclient.IIdentityProvider,
rangeObjs []db.IStandaloneModel,
status []string,
hypervisors []string,
pendingDelete bool,
hostTypes []string,
resourceTypes []string,
providers []string, brands []string, cloudEnv string,
) (*sqlchemy.SQuery, *sqlchemy.SSubQuery) {

guestdisks := GuestdiskManager.Query().SubQuery()
disks := DiskManager.Query().SubQuery()
Expand Down Expand Up @@ -3095,24 +3158,13 @@ func totalGuestResourceCount(
if len(hypervisors) > 0 {
q = q.Filter(sqlchemy.In(guests.Field("hypervisor"), hypervisors))
}
if !includeSystem {
q = q.Filter(sqlchemy.OR(sqlchemy.IsNull(guests.Field("is_system")), sqlchemy.IsFalse(guests.Field("is_system"))))
}

if pendingDelete {
q = q.Filter(sqlchemy.IsTrue(guests.Field("pending_deleted")))
} else {
q = q.Filter(sqlchemy.OR(sqlchemy.IsNull(guests.Field("pending_deleted")), sqlchemy.IsFalse(guests.Field("pending_deleted"))))
}
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
return q, guests
}

func (self *SGuest) getDefaultNetworkConfig() *api.NetworkConfig {
Expand Down

0 comments on commit 844b865

Please sign in to comment.