JCC-CSScheduler/collector/internal/services/unifyops.go

118 lines
4.1 KiB
Go

package services
import (
"gitlink.org.cn/cloudream/common/api/unifyops"
"gitlink.org.cn/cloudream/common/consts/errorcode"
"gitlink.org.cn/cloudream/common/models"
"gitlink.org.cn/cloudream/common/pkgs/logger"
"gitlink.org.cn/cloudream/common/pkgs/mq"
"gitlink.org.cn/cloudream/common/utils/serder"
"gitlink.org.cn/cloudream/scheduler/common/globals"
colmq "gitlink.org.cn/cloudream/scheduler/common/pkgs/mq/collector"
)
func (svc *Service) GetSlwNodeInfo(msg *colmq.GetSlwNodeInfo) (*colmq.GetSlwNodeInfoResp, *mq.CodeMessage) {
uniOpsCli, err := globals.UnifyOpsPool.Acquire()
if err != nil {
logger.Warnf("new unifyOps client, err: %s", err.Error())
return mq.ReplyFailed[colmq.GetSlwNodeInfoResp](errorcode.OperationFailed, "new unifyOps client failed")
}
defer uniOpsCli.Close()
resps, err := uniOpsCli.GetSlwNodeInfo()
if err != nil {
logger.Warnf("get slwNode info failed, err: %s", err.Error())
return mq.ReplyFailed[colmq.GetSlwNodeInfoResp](errorcode.OperationFailed, "get slwNode info failed")
}
return mq.ReplyOK(colmq.NewGetSlwNodeInfoResp(resps.Nodes))
}
func (svc *Service) GetOneResourceData(msg *colmq.GetOneResourceData) (*colmq.GetOneResourceDataResp, *mq.CodeMessage) {
uniOpsCli, err := globals.UnifyOpsPool.Acquire()
if err != nil {
logger.Warnf("new unifyOps client, err: %s", err.Error())
return mq.ReplyFailed[colmq.GetOneResourceDataResp](errorcode.OperationFailed, "new unifyOps client failed")
}
defer uniOpsCli.Close()
var resp models.ResourceData
switch msg.ResourceType {
case models.ResourceTypeCPU:
resp, err = uniOpsCli.GetCPUData(unifyops.Node{
NodeId: msg.NodeId,
})
case models.ResourceTypeNPU:
resp, err = uniOpsCli.GetNPUData(unifyops.Node{
NodeId: msg.NodeId,
})
case models.ResourceTypeGPU:
resp, err = uniOpsCli.GetGPUData(unifyops.Node{
NodeId: msg.NodeId,
})
case models.ResourceTypeMLU:
resp, err = uniOpsCli.GetMLUData(unifyops.Node{
NodeId: msg.NodeId,
})
case models.ResourceTypeStorage:
resp, err = uniOpsCli.GetStorageData(unifyops.Node{
NodeId: msg.NodeId,
})
case models.ResourceTypeMemory:
resp, err = uniOpsCli.GetMemoryData(unifyops.Node{
NodeId: msg.NodeId,
})
default:
return mq.ReplyFailed[colmq.GetOneResourceDataResp](errorcode.OperationFailed, "invalid resource type")
}
if err != nil {
logger.Warnf("get resource data failed, err: %s", err.Error())
return mq.ReplyFailed[colmq.GetOneResourceDataResp](errorcode.OperationFailed, "get resource data failed")
}
return mq.ReplyOK(colmq.NewGetOneResourceDataResp(resp))
}
func (svc *Service) GetAllResourceData(msg *colmq.GetAllResourceData) (*colmq.GetAllResourceDataResp, *mq.CodeMessage) {
uniOpsCli, err := globals.UnifyOpsPool.Acquire()
if err != nil {
logger.Warnf("new unifyOps client, err: %s", err.Error())
return mq.ReplyFailed[colmq.GetAllResourceDataResp](errorcode.OperationFailed, "new unifyOps client failed")
}
defer uniOpsCli.Close()
resps, err := uniOpsCli.GetIndicatorData(unifyops.Node{
NodeId: msg.NodeId,
})
if err != nil {
logger.Warnf("get all resource data failed, err: %s", err.Error())
return mq.ReplyFailed[colmq.GetAllResourceDataResp](errorcode.OperationFailed, "get all resource data failed")
}
var resourceTypeToModel = map[string]models.ResourceData{
models.ResourceTypeCPU: &models.CPUResourceData{},
models.ResourceTypeNPU: &models.NPUResourceData{},
models.ResourceTypeGPU: &models.GPUResourceData{},
models.ResourceTypeMLU: &models.MLUResourceData{},
models.ResourceTypeStorage: &models.StorageResourceData{},
models.ResourceTypeMemory: &models.MemoryResourceData{},
}
var datas []models.ResourceData
for _, resp := range *resps {
data, exists := resourceTypeToModel[resp.Name]
if !exists {
return mq.ReplyFailed[colmq.GetAllResourceDataResp](errorcode.OperationFailed, "invalid resource type")
}
if err = serder.AnyToAny(resp, data); err != nil {
logger.Warnf("get all resource data failed, err: %s", err.Error())
return mq.ReplyFailed[colmq.GetAllResourceDataResp](errorcode.OperationFailed, "get all resource data failed")
}
datas = append(datas, data)
}
return mq.ReplyOK(colmq.NewGetAllResourceDataResp(datas))
}