77 lines
2.9 KiB
Go
77 lines
2.9 KiB
Go
package mq
|
||
|
||
import (
|
||
"github.com/samber/lo"
|
||
"gitlink.org.cn/cloudream/common/consts/errorcode"
|
||
"gitlink.org.cn/cloudream/common/pkgs/logger"
|
||
"gitlink.org.cn/cloudream/common/pkgs/mq"
|
||
uopsdk "gitlink.org.cn/cloudream/common/sdks/unifyops"
|
||
"gitlink.org.cn/cloudream/scheduler/collector/internal/config"
|
||
schglb "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 := schglb.UnifyOpsPool.Acquire()
|
||
if err != nil {
|
||
logger.Warnf("new unifyOps client, err: %s", err.Error())
|
||
return nil, mq.Failed(errorcode.OperationFailed, "new unifyOps client failed")
|
||
}
|
||
defer schglb.UnifyOpsPool.Release(uniOpsCli)
|
||
|
||
resp, err := uniOpsCli.GetAllSlwNodeInfo()
|
||
if err != nil {
|
||
logger.Warnf("get slwNode info failed, err: %s", err.Error())
|
||
return nil, mq.Failed(errorcode.OperationFailed, "get slwNode info failed")
|
||
}
|
||
|
||
node, ok := lo.Find(resp.Nodes, func(item uopsdk.SlwNode) bool { return item.ID == msg.SlwNodeID })
|
||
if !ok {
|
||
logger.WithField("SlwNodeID", msg.SlwNodeID).
|
||
Warnf("slw node not found")
|
||
return nil, mq.Failed(errorcode.OperationFailed, "slw node not found")
|
||
}
|
||
|
||
// TODO 目前计算中心对应的存储系统NodeID和StorageID是写在此服务的配置文件中的,所以这里进行两个数据源的合并
|
||
nodeConfig, ok := lo.Find(config.Cfg().SlwNodes, func(item config.SlwNodeConfig) bool { return item.SlwNodeID == msg.SlwNodeID })
|
||
if !ok {
|
||
logger.WithField("SlwNodeID", msg.SlwNodeID).
|
||
Warnf("config not found for this slw node")
|
||
return nil, mq.Failed(errorcode.OperationFailed, "config not found for this slw node")
|
||
}
|
||
|
||
node.StgNodeID = nodeConfig.StgNodeID
|
||
node.StorageID = nodeConfig.StorageID
|
||
|
||
return mq.ReplyOK(colmq.NewGetSlwNodeInfoResp(node))
|
||
}
|
||
|
||
func (svc *Service) GetAllSlwNodeInfo(msg *colmq.GetAllSlwNodeInfo) (*colmq.GetAllSlwNodeInfoResp, *mq.CodeMessage) {
|
||
uniOpsCli, err := schglb.UnifyOpsPool.Acquire()
|
||
if err != nil {
|
||
logger.Warnf("new unifyOps client, err: %s", err.Error())
|
||
return nil, mq.Failed(errorcode.OperationFailed, "new unifyOps client failed")
|
||
}
|
||
defer schglb.UnifyOpsPool.Release(uniOpsCli)
|
||
|
||
resp, err := uniOpsCli.GetAllSlwNodeInfo()
|
||
if err != nil {
|
||
logger.Warnf("get slwNode info failed, err: %s", err.Error())
|
||
return nil, mq.Failed(errorcode.OperationFailed, "get slwNode info failed")
|
||
}
|
||
|
||
// TODO 目前计算中心对应的存储系统NodeID和StorageID是写在此服务的配置文件中的,所以这里进行两个数据源的合并
|
||
for i, node := range resp.Nodes {
|
||
nodeConfig, ok := lo.Find(config.Cfg().SlwNodes, func(item config.SlwNodeConfig) bool { return item.SlwNodeID == node.ID })
|
||
if !ok {
|
||
continue
|
||
}
|
||
|
||
node.StgNodeID = nodeConfig.StgNodeID
|
||
node.StorageID = nodeConfig.StorageID
|
||
resp.Nodes[i] = node
|
||
}
|
||
|
||
return mq.ReplyOK(colmq.NewGetAllSlwNodeInfoResp(resp.Nodes))
|
||
}
|