118 lines
4.1 KiB
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))
|
|
}
|