Skip to content

Commit 9f534e0

Browse files
authored
fix(region): guest usage by arch (#23956)
1 parent c6c1064 commit 9f534e0

File tree

6 files changed

+82
-66
lines changed

6 files changed

+82
-66
lines changed

pkg/apis/compute/host.go

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -166,14 +166,6 @@ type HostListInput struct {
166166
// enmu: asc,desc
167167
OrderByMemCommit string `json:"order_by_mem_commit"`
168168

169-
// 按物理cpu使用率排序
170-
// enmu: asc,desc
171-
OrderByCpuUsage string `json:"order_by_cpu_usage"`
172-
173-
// 按物理内存使用率排序
174-
// enmu: asc,desc
175-
OrderByMemUsage string `json:"order_by_mem_usage"`
176-
177169
// 按物理存储使用率排序
178170
// enmu: asc,desc
179171
OrderByStorageUsage string `json:"order_by_storage_usage"`

pkg/apis/const.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,8 @@ const (
149149
)
150150

151151
const (
152+
OS_ARCH_ALL = "all"
153+
152154
OS_ARCH_X86 = "x86"
153155
OS_ARCH_ARM = "arm"
154156

pkg/compute/models/guests.go

Lines changed: 39 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3708,8 +3708,8 @@ func (manager *SGuestManager) TotalCount(
37083708
hostTypes []string, resourceTypes []string, providers []string, brands []string, cloudEnv string,
37093709
since *time.Time,
37103710
policyResult rbacutils.SPolicyResult,
3711-
) SGuestCountStat {
3712-
return usageTotalGuestResouceCount(ctx, scope, ownerId, rangeObjs, status, hypervisors, includeSystem, pendingDelete, hostTypes, resourceTypes, providers, brands, cloudEnv, since, policyResult)
3711+
) map[string]SGuestCountStat {
3712+
return usageTotalGuestResourceCount(ctx, scope, ownerId, rangeObjs, status, hypervisors, includeSystem, pendingDelete, hostTypes, resourceTypes, providers, brands, cloudEnv, since, policyResult)
37133713
}
37143714

37153715
func (self *SGuest) detachNetworks(ctx context.Context, userCred mcclient.TokenCredential, gns []SGuestnetwork, reserve bool) error {
@@ -4410,7 +4410,7 @@ type SGuestCountStat struct {
44104410
TotalBackupDiskSize int
44114411
}
44124412

4413-
func usageTotalGuestResouceCount(
4413+
func usageTotalGuestResourceCount(
44144414
ctx context.Context,
44154415
scope rbacscope.TRbacScope,
44164416
ownerId mcclient.IIdentityProvider,
@@ -4424,12 +4424,41 @@ func usageTotalGuestResouceCount(
44244424
providers []string, brands []string, cloudEnv string,
44254425
since *time.Time,
44264426
policyResult rbacutils.SPolicyResult,
4427+
) map[string]SGuestCountStat {
4428+
countStat := make(map[string]SGuestCountStat)
4429+
for _, arch := range []string{apis.OS_ARCH_ALL, apis.OS_ARCH_X86_64, apis.OS_ARCH_AARCH64} {
4430+
allStat := usageTotalGuestResourceCountByArch(
4431+
ctx, scope, ownerId, rangeObjs, status,
4432+
hypervisors, includeSystem, pendingDelete,
4433+
hostTypes, resourceTypes, providers, brands,
4434+
cloudEnv, since, policyResult, arch,
4435+
)
4436+
countStat[arch] = allStat
4437+
}
4438+
return countStat
4439+
}
4440+
4441+
func usageTotalGuestResourceCountByArch(
4442+
ctx context.Context,
4443+
scope rbacscope.TRbacScope,
4444+
ownerId mcclient.IIdentityProvider,
4445+
rangeObjs []db.IStandaloneModel,
4446+
status []string,
4447+
hypervisors []string,
4448+
includeSystem bool,
4449+
pendingDelete bool,
4450+
hostTypes []string,
4451+
resourceTypes []string,
4452+
providers []string, brands []string, cloudEnv string,
4453+
since *time.Time,
4454+
policyResult rbacutils.SPolicyResult,
4455+
osArch string,
44274456
) SGuestCountStat {
44284457
q, guests := _guestResourceCountQuery(
44294458
ctx,
44304459
scope, ownerId, rangeObjs, status, hypervisors,
44314460
pendingDelete, hostTypes, resourceTypes, providers, brands, cloudEnv, since,
4432-
policyResult,
4461+
policyResult, osArch,
44334462
)
44344463
if !includeSystem {
44354464
q = q.Filter(sqlchemy.OR(
@@ -4461,9 +4490,11 @@ func _guestResourceCountQuery(
44614490
providers []string, brands []string, cloudEnv string,
44624491
since *time.Time,
44634492
policyResult rbacutils.SPolicyResult,
4493+
osArch string,
44644494
) (*sqlchemy.SQuery, *sqlchemy.SSubQuery) {
44654495

44664496
guestdisks := GuestdiskManager.Query().SubQuery()
4497+
44674498
disks := DiskManager.Query().SubQuery()
44684499

44694500
diskQuery := guestdisks.Query(guestdisks.Field("guest_id"), sqlchemy.SUM("guest_disk_size", disks.Field("disk_size")))
@@ -4493,6 +4524,10 @@ func _guestResourceCountQuery(
44934524
} else {
44944525
gq = GuestManager.Query()
44954526
}
4527+
if osArch != "" && osArch != apis.OS_ARCH_ALL {
4528+
gq = gq.Equals("os_arch", osArch)
4529+
}
4530+
44964531
if len(rangeObjs) > 0 || len(hostTypes) > 0 || len(resourceTypes) > 0 || len(providers) > 0 || len(brands) > 0 || len(cloudEnv) > 0 {
44974532
gq = filterGuestByRange(gq, rangeObjs, hostTypes, resourceTypes, providers, brands, cloudEnv)
44984533
}

pkg/compute/models/hosts.go

Lines changed: 16 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,10 @@ type SHost struct {
168168
// 存储详情
169169
StorageInfo jsonutils.JSONObject `nullable:"true" get:"domain" update:"domain" create:"domain_optional"`
170170

171+
RootPartitionUsedCapacityMb int `nullable:"true" list:"domain" update:"domain" create:"domain_optional"`
172+
MemoryUsedMb int `nullable:"true" list:"domain" update:"domain" create:"domain_optional"`
173+
CpuUsagePercent float64 `nullable:"true" list:"domain" update:"domain" create:"domain_optional"`
174+
171175
// IPMI地址
172176
IpmiIp string `width:"16" charset:"ascii" nullable:"true" list:"domain"`
173177

@@ -747,38 +751,6 @@ func (manager *SHostManager) OrderByExtraFields(
747751
db.OrderByFields(q, []string{query.OrderByStorageUsed}, []sqlchemy.IQueryField{q.Field("storage_used")})
748752
}
749753

750-
if db.NeedOrderQuery([]string{query.OrderByCpuUsage}) {
751-
meta := db.Metadata.Query().
752-
Equals("obj_type", HostManager.Keyword()).
753-
Equals("key", api.HOST_METADATA_CPU_USAGE_PERCENT).SubQuery()
754-
metaQ := meta.Query(
755-
meta.Field("obj_id"),
756-
sqlchemy.CASTFloat(meta.Field("value"), "cpu_usage"),
757-
)
758-
metaSQ := metaQ.GroupBy(metaQ.Field("obj_id")).SubQuery()
759-
760-
q = q.LeftJoin(metaSQ, sqlchemy.Equals(q.Field("id"), metaSQ.Field("obj_id")))
761-
762-
db.OrderByFields(q, []string{query.OrderByCpuUsage}, []sqlchemy.IQueryField{metaSQ.Field("cpu_usage")})
763-
}
764-
765-
if db.NeedOrderQuery([]string{query.OrderByMemUsage}) {
766-
meta := db.Metadata.Query().
767-
Equals("obj_type", HostManager.Keyword()).
768-
Equals("key", api.HOST_METADATA_MEMORY_USED_MB).SubQuery()
769-
hosts := HostManager.Query().SubQuery()
770-
metaQ := meta.Query(
771-
meta.Field("obj_id"),
772-
sqlchemy.DIV("mem_usage", sqlchemy.CASTFloat(meta.Field("value"), api.HOST_METADATA_MEMORY_USED_MB), hosts.Field("mem_size")),
773-
).LeftJoin(hosts, sqlchemy.Equals(meta.Field("obj_id"), hosts.Field("id")))
774-
775-
metaSQ := metaQ.GroupBy(metaQ.Field("obj_id")).SubQuery()
776-
777-
q = q.LeftJoin(metaSQ, sqlchemy.Equals(q.Field("id"), metaSQ.Field("obj_id")))
778-
779-
db.OrderByFields(q, []string{query.OrderByMemUsage}, []sqlchemy.IQueryField{metaSQ.Field("mem_usage")})
780-
}
781-
782754
if db.NeedOrderQuery([]string{query.OrderByStorageUsage}) {
783755
hs := HoststorageManager.Query().SubQuery()
784756
storages := StorageManager.Query().IsTrue("enabled").NotEquals("storage_type", api.STORAGE_BAREMETAL).In("storage_type", api.HOST_STORAGE_LOCAL_TYPES).SubQuery()
@@ -5283,9 +5255,6 @@ func (hh *SHost) PerformPing(ctx context.Context, userCred mcclient.TokenCredent
52835255
}
52845256
}
52855257
}
5286-
hh.SetMetadata(ctx, "root_partition_used_capacity_mb", input.RootPartitionUsedCapacityMb, userCred)
5287-
hh.SetMetadata(ctx, "memory_used_mb", input.MemoryUsedMb, userCred)
5288-
hh.SetMetadata(ctx, api.HOST_METADATA_CPU_USAGE_PERCENT, input.CpuUsagePercent, userCred)
52895258

52905259
guests, _ := hh.GetGuests()
52915260
for _, guest := range guests {
@@ -5300,13 +5269,21 @@ func (hh *SHost) PerformPing(ctx context.Context, userCred mcclient.TokenCredent
53005269
}
53015270
}
53025271
}
5272+
hh.SaveUpdates(func() error {
5273+
if hh.HostStatus == api.HOST_ONLINE {
5274+
hh.LastPingAt = time.Now()
5275+
}
5276+
if input.WithData {
5277+
hh.RootPartitionUsedCapacityMb = input.RootPartitionUsedCapacityMb
5278+
hh.MemoryUsedMb = input.MemoryUsedMb
5279+
hh.CpuUsagePercent = input.CpuUsagePercent
5280+
}
5281+
return nil
5282+
})
5283+
53035284
if hh.HostStatus != api.HOST_ONLINE {
53045285
hh.PerformOnline(ctx, userCred, query, nil)
53055286
} else {
5306-
hh.SaveUpdates(func() error {
5307-
hh.LastPingAt = time.Now()
5308-
return nil
5309-
})
53105287
if hh.hasUnknownGuests() {
53115288
hh.StartUploadAllGuestsStatusTask(ctx, userCred)
53125289
}

pkg/compute/models/quotas.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
"yunion.io/x/pkg/tristate"
2424
"yunion.io/x/pkg/util/rbacscope"
2525

26+
"yunion.io/x/onecloud/pkg/apis"
2627
api "yunion.io/x/onecloud/pkg/apis/compute"
2728
identityapi "yunion.io/x/onecloud/pkg/apis/identity"
2829
"yunion.io/x/onecloud/pkg/cloudcommon/db"
@@ -189,7 +190,7 @@ func (self *SQuota) FetchUsage(ctx context.Context) error {
189190

190191
diskSize := totalDiskSize(scope, ownerId, tristate.None, tristate.None, false, false, rangeObjs, providers, brands, keys.CloudEnv, hypervisors)
191192

192-
guest := usageTotalGuestResouceCount(ctx, scope, ownerId, rangeObjs, nil, hypervisors, false, false, nil, nil, providers, brands, keys.CloudEnv, nil, rbacutils.SPolicyResult{})
193+
guest := usageTotalGuestResourceCountByArch(ctx, scope, ownerId, rangeObjs, nil, hypervisors, false, false, nil, nil, providers, brands, keys.CloudEnv, nil, rbacutils.SPolicyResult{}, apis.OS_ARCH_ALL)
193194

194195
self.Count = guest.TotalGuestCount
195196
self.Cpu = guest.TotalCpuCount

pkg/compute/usages/handler.go

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import (
3030
"yunion.io/x/pkg/util/sets"
3131
"yunion.io/x/pkg/utils"
3232

33+
"yunion.io/x/onecloud/pkg/apis"
3334
api "yunion.io/x/onecloud/pkg/apis/compute"
3435
"yunion.io/x/onecloud/pkg/appsrv"
3536
"yunion.io/x/onecloud/pkg/cloudcommon/db"
@@ -990,27 +991,35 @@ func guestHypervisorsUsage(
990991
log.Debugf("guestHypervisorsUsage policyResults %s results %s", policyResult.String(), results.String())
991992
// temporarily hide system resources
992993
// XXX needs more work later
993-
guest := models.GuestManager.TotalCount(ctx, scope, ownerId, rangeObjs, status, hypervisors,
994+
guestCountStats := models.GuestManager.TotalCount(ctx, scope, ownerId, rangeObjs, status, hypervisors,
994995
includeSystem, pendingDelete, hostTypes, resourceTypes, providers, brands, cloudEnv, since,
995996
results,
996997
)
997998

998-
count[prefix] = guest.TotalGuestCount
999-
count[fmt.Sprintf("%s.any_pool", prefix)] = guest.TotalGuestCount
1000-
count[fmt.Sprintf("%s.cpu", prefix)] = guest.TotalCpuCount
1001-
count[fmt.Sprintf("%s.memory", prefix)] = guest.TotalMemSize
999+
originPrefix := prefix
1000+
for arch, guest := range guestCountStats {
1001+
prefix := originPrefix
1002+
if arch != apis.OS_ARCH_ALL {
1003+
prefix = fmt.Sprintf("%s.%s", originPrefix, arch)
1004+
}
10021005

1003-
if len(hypervisors) == 1 && hypervisors[0] == api.HYPERVISOR_POD {
1004-
return count
1005-
}
1006+
count[prefix] = guest.TotalGuestCount
1007+
count[fmt.Sprintf("%s.any_pool", prefix)] = guest.TotalGuestCount
1008+
count[fmt.Sprintf("%s.cpu", prefix)] = guest.TotalCpuCount
1009+
count[fmt.Sprintf("%s.memory", prefix)] = guest.TotalMemSize
10061010

1007-
count[fmt.Sprintf("%s.disk", prefix)] = guest.TotalDiskSize
1008-
count[fmt.Sprintf("%s.isolated_devices", prefix)] = guest.TotalIsolatedCount
1011+
if len(hypervisors) == 1 && hypervisors[0] == api.HYPERVISOR_POD {
1012+
continue
1013+
}
1014+
1015+
count[fmt.Sprintf("%s.disk", prefix)] = guest.TotalDiskSize
1016+
count[fmt.Sprintf("%s.isolated_devices", prefix)] = guest.TotalIsolatedCount
10091017

1010-
count[fmt.Sprintf("%s.ha", prefix)] = guest.TotalBackupGuestCount
1011-
count[fmt.Sprintf("%s.ha.cpu", prefix)] = guest.TotalBackupCpuCount
1012-
count[fmt.Sprintf("%s.ha.memory", prefix)] = guest.TotalBackupMemSize
1013-
count[fmt.Sprintf("%s.ha.disk", prefix)] = guest.TotalBackupDiskSize
1018+
count[fmt.Sprintf("%s.ha", prefix)] = guest.TotalBackupGuestCount
1019+
count[fmt.Sprintf("%s.ha.cpu", prefix)] = guest.TotalBackupCpuCount
1020+
count[fmt.Sprintf("%s.ha.memory", prefix)] = guest.TotalBackupMemSize
1021+
count[fmt.Sprintf("%s.ha.disk", prefix)] = guest.TotalBackupDiskSize
1022+
}
10141023

10151024
return count
10161025
}

0 commit comments

Comments
 (0)