You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
1.6 KiB
69 lines
1.6 KiB
package biz
|
|
|
|
import (
|
|
"context"
|
|
"github.com/go-kratos/kratos/v2/log"
|
|
"github.com/gookit/goutil/arrutil"
|
|
)
|
|
|
|
type SummaryRepo interface {
|
|
}
|
|
|
|
type SummaryUseCase struct {
|
|
node NodeRepo
|
|
pod PodRepo
|
|
log *log.Helper
|
|
}
|
|
|
|
type SummaryInfo struct {
|
|
VgpuUsed int32
|
|
VgpuTotal int32
|
|
CoreUsed int32
|
|
CoreTotal int32
|
|
MemoryUsed int32
|
|
MemoryTotal int32
|
|
GpuCount int32
|
|
NodeCount int32
|
|
}
|
|
|
|
func NewSummaryUseCase(node NodeRepo, pod PodRepo, logger log.Logger) *SummaryUseCase {
|
|
return &SummaryUseCase{node: node, pod: pod, log: log.NewHelper(logger)}
|
|
}
|
|
|
|
func (t *SummaryUseCase) GetGPUSummary(ctx context.Context, deviceId string, nodeUID string, deviceType string) (SummaryInfo, error) {
|
|
var res SummaryInfo
|
|
deviceInfos, err := t.node.ListAllDevices(ctx)
|
|
if err != nil {
|
|
return res, err
|
|
}
|
|
containers, err := t.pod.ListAll(ctx)
|
|
if err != nil {
|
|
return res, err
|
|
}
|
|
var nodeList []string
|
|
for _, device := range deviceInfos {
|
|
if deviceType != "" && deviceType != device.Type {
|
|
continue
|
|
}
|
|
if nodeUID != "" && nodeUID != device.NodeUid {
|
|
continue
|
|
}
|
|
if deviceId != "" && deviceId != device.Id {
|
|
continue
|
|
}
|
|
res.CoreTotal = res.CoreTotal + device.Devcore
|
|
res.MemoryTotal = res.MemoryTotal + device.Devmem
|
|
res.VgpuTotal = res.VgpuTotal + device.Count
|
|
|
|
vGPU, core, memory := ContainersStatisticsInfo(containers, device.AliasId)
|
|
res.CoreUsed = res.CoreUsed + core
|
|
res.MemoryUsed = res.MemoryUsed + memory
|
|
res.VgpuUsed = res.VgpuUsed + vGPU
|
|
res.GpuCount++
|
|
nodeList = append(nodeList, device.NodeUid)
|
|
}
|
|
nodeList = arrutil.Unique(nodeList)
|
|
res.NodeCount = int32(len(nodeList))
|
|
return res, nil
|
|
}
|