package model
import (
dbmodel "github.com/goodrain/rainbond/db/model"
)
type TenantResList []*TenantResource
type PagedTenantResList struct {
List []*TenantResource `json:"list"`
Length int `json:"length"`
}
type TenantResource struct {
AllocatedCPU int `json:"alloc_cpu"`
AllocatedMEM int `json:"alloc_memory"`
UsedCPU int `json:"used_cpu"`
UsedMEM int `json:"used_memory"`
UsedDisk float64 `json:"used_disk"`
Name string `json:"name"`
UUID string `json:"uuid"`
EID string `json:"eid"`
}
func (list TenantResList) Len() int {
return len(list)
}
func (list TenantResList) Less(i, j int) bool {
if list[i].UsedMEM > list[j].UsedMEM {
return true
} else if list[i].UsedMEM < list[j].UsedMEM {
return false
} else {
return list[i].UsedCPU > list[j].UsedCPU
}
}
func (list TenantResList) Swap(i, j int) {
temp := list[i]
list[i] = list[j]
list[j] = temp
}
type TenantAndResource struct {
dbmodel.Tenants
CPURequest int64 `json:"cpu_request"`
CPULimit int64 `json:"cpu_limit"`
MemoryRequest int64 `json:"memory_request"`
MemoryLimit int64 `json:"memory_limit"`
RunningAppNum int64 `json:"running_app_num"`
RunningAppInternalNum int64 `json:"running_app_internal_num"`
RunningAppThirdNum int64 `json:"running_app_third_num"`
RunningApplications int64 `json:"running_applications"`
}
type TenantList []*TenantAndResource
func (list *TenantList) Add(tr *TenantAndResource) {
*list = append(*list, tr)
}
func (list TenantList) Len() int {
return len(list)
}
func (list TenantList) Less(i, j int) bool {
if list[i].MemoryRequest > list[j].MemoryRequest {
return true
}
if list[i].MemoryRequest == list[j].MemoryRequest {
if list[i].CPURequest > list[j].CPURequest {
return true
}
if list[i].CPURequest == list[j].CPURequest {
if list[i].RunningAppNum > list[j].RunningAppNum {
return true
}
if list[i].RunningAppNum == list[j].RunningAppNum {
if list[i].Tenants.LimitMemory > list[j].Tenants.LimitMemory {
return true
}
}
}
}
return false
}
func (list TenantList) Swap(i, j int) {
list[i], list[j] = list[j], list[i]
}
func (list TenantList) Paging(page, pageSize int) map[string]interface{} {
startIndex := (page - 1) * pageSize
endIndex := page * pageSize
var relist TenantList
if startIndex < list.Len() && endIndex < list.Len() {
relist = list[startIndex:endIndex]
}
if startIndex < list.Len() && endIndex >= list.Len() {
relist = list[startIndex:]
}
return map[string]interface{}{
"list": relist,
"page": page,
"pageSize": pageSize,
"total": list.Len(),
}
}