forked from JointCloud/pcm-coordinator
94 lines
2.8 KiB
Go
94 lines
2.8 KiB
Go
package core
|
|
|
|
import (
|
|
"context"
|
|
"github.com/jinzhu/copier"
|
|
"github.com/zeromicro/go-zero/core/logx"
|
|
clientCore "gitlink.org.cn/JointCloud/pcm-coordinator/client"
|
|
"gitlink.org.cn/JointCloud/pcm-coordinator/internal/svc"
|
|
"gitlink.org.cn/JointCloud/pcm-coordinator/pkg/models"
|
|
"gitlink.org.cn/JointCloud/pcm-coordinator/pkg/models/cloud"
|
|
"gitlink.org.cn/JointCloud/pcm-coordinator/pkg/utils"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type PullTaskInfoLogic struct {
|
|
logx.Logger
|
|
ctx context.Context
|
|
svcCtx *svc.ServiceContext
|
|
}
|
|
|
|
func NewPullTaskInfoLogic(ctx context.Context, svcCtx *svc.ServiceContext) *PullTaskInfoLogic {
|
|
return &PullTaskInfoLogic{
|
|
Logger: logx.WithContext(ctx),
|
|
ctx: ctx,
|
|
svcCtx: svcCtx,
|
|
}
|
|
}
|
|
|
|
func (l *PullTaskInfoLogic) PullTaskInfo(req *clientCore.PullTaskInfoReq) (*clientCore.PullTaskInfoResp, error) {
|
|
resp := clientCore.PullTaskInfoResp{}
|
|
|
|
// check the kind of adapter
|
|
var kind int32
|
|
l.svcCtx.DbEngin.Raw("select type as kind from `t_adapter` where id = ?", req.AdapterId).Scan(&kind)
|
|
// pull task list from database
|
|
switch kind {
|
|
case 2:
|
|
var hpcModelList []models.TaskHpc
|
|
err := findModelList(req.AdapterId, l.svcCtx.DbEngin, &hpcModelList)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
utils.Convert(hpcModelList, &resp.HpcInfoList)
|
|
if len(resp.HpcInfoList) > 0 {
|
|
for i, hpcInfo := range hpcModelList {
|
|
err := copier.CopyWithOption(resp.HpcInfoList[i], hpcInfo, copier.Option{Converters: utils.Converters})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
var clusterType string
|
|
l.svcCtx.DbEngin.Raw("SELECT label FROM `t_cluster` where id = ? ", hpcInfo.ClusterId).Scan(&clusterType)
|
|
resp.HpcInfoList[i].ClusterType = clusterType
|
|
}
|
|
}
|
|
case 0:
|
|
var resourceType int32
|
|
l.svcCtx.DbEngin.Raw("select resource_type as resourceType from `t_adapter` where id = ?", req.AdapterId).Scan(&resourceType)
|
|
switch resourceType {
|
|
case 01:
|
|
var cloudModelList []cloud.TaskCloudModel
|
|
err := findModelList(req.AdapterId, l.svcCtx.DbEngin, &cloudModelList)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
utils.Convert(cloudModelList, &resp.CloudInfoList)
|
|
case 02:
|
|
var vmModelList []models.TaskVm
|
|
err := findModelList(req.AdapterId, l.svcCtx.DbEngin, &vmModelList)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
utils.Convert(vmModelList, &resp.VmInfoList)
|
|
}
|
|
|
|
case 1:
|
|
var aiModelList []models.TaskAiAsynchronous
|
|
err := findModelList(req.AdapterId, l.svcCtx.DbEngin, &aiModelList)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
utils.Convert(aiModelList, &resp.AiInfoList)
|
|
}
|
|
return &resp, nil
|
|
}
|
|
|
|
func findModelList(adapterId int64, dbEngin *gorm.DB, data interface{}) error {
|
|
tx := dbEngin.Where("cluster_id in (select id from t_cluster where adapter_id = ?) AND status not in "+
|
|
"('Deleted', 'Succeeded', 'COMPLETED', 'Completed', 'Failed','FAIL','statC','statE')", adapterId).Find(data)
|
|
if tx.Error != nil {
|
|
return tx.Error
|
|
}
|
|
return nil
|
|
}
|