diff --git a/api/internal/logic/ai/getcentertasklistlogic.go b/api/internal/logic/ai/getcentertasklistlogic.go index 2e63cf74..26a05d33 100644 --- a/api/internal/logic/ai/getcentertasklistlogic.go +++ b/api/internal/logic/ai/getcentertasklistlogic.go @@ -68,6 +68,8 @@ func (l *GetCenterTaskListLogic) GetCenterTaskList() (resp *types.CenterTaskList t := &types.AiTask{ Name: task.Name, Status: task.Status, + Cluster: task.ClusterName, + Card: task.Card, TimeElapsed: int32(elapsed.Seconds()), } resp.List = append(resp.List, t) diff --git a/api/internal/logic/schedule/schedulesubmitlogic.go b/api/internal/logic/schedule/schedulesubmitlogic.go index b2aa78f5..5caf9d91 100644 --- a/api/internal/logic/schedule/schedulesubmitlogic.go +++ b/api/internal/logic/schedule/schedulesubmitlogic.go @@ -73,7 +73,12 @@ func (l *ScheduleSubmitLogic) ScheduleSubmit(req *types.ScheduleReq) (resp *type scheResult.Strategy = r.Strategy scheResult.Replica = r.Replica scheResult.Msg = r.Msg - err := l.svcCtx.Scheduler.AiStorages.SaveAiTask(id, opt, r.ClusterId, r.TaskId, constants.Saved, r.Msg) + + opt.ComputeCard = r.Card + + clusterName, _ := l.svcCtx.Scheduler.AiStorages.GetClusterNameById(r.ClusterId) + + err := l.svcCtx.Scheduler.AiStorages.SaveAiTask(id, opt, r.ClusterId, clusterName, r.TaskId, constants.Saved, r.Msg) if err != nil { return nil, err } diff --git a/api/internal/scheduler/database/aiStorage.go b/api/internal/scheduler/database/aiStorage.go index f25cd5c2..ede21f28 100644 --- a/api/internal/scheduler/database/aiStorage.go +++ b/api/internal/scheduler/database/aiStorage.go @@ -35,6 +35,16 @@ func (s *AiStorage) GetClustersByAdapterId(id string) (*types.ClusterListResp, e return &resp, nil } +func (s *AiStorage) GetClusterNameById(id string) (string, error) { + var name string + tx := s.DbEngin.Raw("select `description` from t_cluster where `id` = ?", id).Scan(&name) + if tx.Error != nil { + logx.Errorf(tx.Error.Error()) + return "", tx.Error + } + return name, nil +} + func (s *AiStorage) GetAdapterIdsByType(adapterType string) ([]string, error) { var list []types.AdapterInfo var ids []string @@ -90,7 +100,7 @@ func (s *AiStorage) SaveTask(name string, strategyCode int64, synergyStatus int6 return taskModel.Id, nil } -func (s *AiStorage) SaveAiTask(taskId int64, option *option.AiOption, clusterId string, jobId string, status string, msg string) error { +func (s *AiStorage) SaveAiTask(taskId int64, option *option.AiOption, clusterId string, clusterName string, jobId string, status string, msg string) error { // 构建主任务结构体 aId, err := strconv.ParseInt(option.AdapterId, 10, 64) if err != nil { @@ -100,18 +110,24 @@ func (s *AiStorage) SaveAiTask(taskId int64, option *option.AiOption, clusterId if err != nil { return err } + + del, _ := time.Parse(constants.Layout, constants.Layout) + aiTaskModel := models.TaskAi{ - TaskId: taskId, - AdapterId: aId, - ClusterId: cId, - Name: option.TaskName, - Replica: option.Replica, - JobId: jobId, - TaskType: option.TaskType, - Strategy: option.StrategyName, - Status: status, - Msg: msg, - CommitTime: time.Now(), + TaskId: taskId, + AdapterId: aId, + ClusterId: cId, + ClusterName: clusterName, + Name: option.TaskName, + Replica: option.Replica, + JobId: jobId, + TaskType: option.TaskType, + Strategy: option.StrategyName, + Status: status, + Msg: msg, + Card: option.ComputeCard, + DeletedAt: del, + CommitTime: time.Now(), } // 保存任务数据到数据库 tx := s.DbEngin.Create(&aiTaskModel) diff --git a/api/internal/scheduler/schedulers/aiScheduler.go b/api/internal/scheduler/schedulers/aiScheduler.go index 75f435d0..d401f408 100644 --- a/api/internal/scheduler/schedulers/aiScheduler.go +++ b/api/internal/scheduler/schedulers/aiScheduler.go @@ -46,6 +46,7 @@ type AiResult struct { ClusterId string Strategy string Replica int32 + Card string Msg string } @@ -156,6 +157,7 @@ func (as *AiScheduler) AssignTask(clusters []*strategy.AssignedCluster) (interfa result.Replica = c.Replicas result.ClusterId = c.ClusterId result.Strategy = as.option.StrategyName + result.Card = opt.ComputeCard ch <- result wg.Done() @@ -192,23 +194,29 @@ func (as *AiScheduler) AssignTask(clusters []*strategy.AssignedCluster) (interfa }) msg := fmt.Sprintf("clusterId: %v , error: %v \n", e.clusterId, e.err.Error()) errmsg += msg - err := as.AiStorages.SaveAiTask(taskId, as.option, e.clusterId, "", constants.Failed, msg) + + clusterName, _ := as.AiStorages.GetClusterNameById(e.clusterId) + + err := as.AiStorages.SaveAiTask(taskId, as.option, e.clusterId, clusterName, "", constants.Failed, msg) if err != nil { return nil, errors.New("database add failed: " + err.Error()) } } for _, s := range results { + as.option.ComputeCard = s.Card //execute card + clusterName, _ := as.AiStorages.GetClusterNameById(s.ClusterId) + if s.Msg != "" { msg := fmt.Sprintf("clusterId: %v , error: %v \n", s.ClusterId, s.Msg) errmsg += msg - err := as.AiStorages.SaveAiTask(taskId, as.option, s.ClusterId, "", constants.Failed, msg) + err := as.AiStorages.SaveAiTask(taskId, as.option, s.ClusterId, clusterName, "", constants.Failed, msg) if err != nil { return nil, errors.New("database add failed: " + err.Error()) } } else { msg := fmt.Sprintf("clusterId: %v , submitted successfully, taskId: %v \n", s.ClusterId, s.TaskId) errmsg += msg - err := as.AiStorages.SaveAiTask(taskId, as.option, s.ClusterId, s.TaskId, constants.Saved, msg) + err := as.AiStorages.SaveAiTask(taskId, as.option, s.ClusterId, clusterName, s.TaskId, constants.Saved, msg) if err != nil { return nil, errors.New("database add failed: " + err.Error()) } diff --git a/api/internal/scheduler/strategy/strategy.go b/api/internal/scheduler/strategy/strategy.go index 1bec626a..59d6cb17 100644 --- a/api/internal/scheduler/strategy/strategy.go +++ b/api/internal/scheduler/strategy/strategy.go @@ -18,8 +18,9 @@ type Strategy interface { } type AssignedCluster struct { - ClusterId string - Replicas int32 + ClusterId string + ClusterName string + Replicas int32 } func GetStrategyNames() []string { diff --git a/api/internal/storeLink/octopus.go b/api/internal/storeLink/octopus.go index 3f0f8021..1045ec90 100644 --- a/api/internal/storeLink/octopus.go +++ b/api/internal/storeLink/octopus.go @@ -402,7 +402,7 @@ func (o *OctopusLink) DownloadAlgorithmCode(ctx context.Context, resourceType st aLatest := &octopus.Algorithms{} for i, _ := range algorithms { - if time.Unix(aLatest.CreatedAt, 0).After(time.Unix(algorithms[i].CreatedAt, 0)) { + if time.Unix(algorithms[i].CreatedAt, 0).After(time.Unix(aLatest.CreatedAt, 0)) { aLatest = algorithms[i] } } @@ -789,36 +789,32 @@ func setResourceIdByCard(option *option.AiOption, specs *octopus.GetResourceSpec } switch computeCard { case GCU: + option.ComputeCard = computeCard if cardNum == s { // 1, 4, 8 option.ResourceId = spec.Id - option.ComputeCard = computeCard return nil } if 1 < cardNum && cardNum <= 4 && s == 4 { option.ResourceId = spec.Id - option.ComputeCard = computeCard return nil } if 4 < cardNum && s == 8 { option.ResourceId = spec.Id - option.ComputeCard = computeCard return nil } case MLU: // 1, 2, 4 + option.ComputeCard = computeCard if cardNum/2 == s { option.ResourceId = spec.Id - option.ComputeCard = computeCard return nil } if 1 < cardNum/2 && cardNum/2 <= 2 && s == 2 { option.ResourceId = spec.Id - option.ComputeCard = computeCard return nil } if 2 < cardNum/2 && s == 4 { option.ResourceId = spec.Id - option.ComputeCard = computeCard return nil } } diff --git a/api/internal/storeLink/shuguangai.go b/api/internal/storeLink/shuguangai.go index 16811591..b2be408c 100644 --- a/api/internal/storeLink/shuguangai.go +++ b/api/internal/storeLink/shuguangai.go @@ -565,10 +565,14 @@ func (s *ShuguangAi) generateResourceId(option *option.AiOption) error { if option.ResourceType == CPU { option.ResourceId = "WodTB2rJ8SobMgQ1nrtR245jxOrsovFi" + option.ComputeCard = CPU return nil } if option.ResourceType == CARD { + + option.ComputeCard = DCU + if 0 <= option.Tops && option.Tops <= DCU_TOPS { option.ResourceId = "WodTB2rJ8SobMgQ1nrtR245jxOrsovFi" return nil