Former-commit-id: a47bea1ee2
pull/154/head
| @@ -166,6 +166,18 @@ type ( | |||||
| ReqBody []string `json:"reqBody"` | ReqBody []string `json:"reqBody"` | ||||
| Replicas int64 `json:"replicas,string"` | Replicas int64 `json:"replicas,string"` | ||||
| } | } | ||||
| PodLogsReq { | |||||
| TaskId string `json:"taskId"` | |||||
| TaskName string `json:"taskName"` | |||||
| ClusterId string `json:"clusterId"` | |||||
| ClusterName string `json:"clusterName"` | |||||
| AdapterId string `json:"adapterId"` | |||||
| AdapterName string `json:"adapterName"` | |||||
| PodName string `json:"podName"` | |||||
| stream bool `json:"stream"` | |||||
| } | |||||
| ) | ) | ||||
| type deleteTaskReq { | type deleteTaskReq { | ||||
| @@ -231,6 +231,9 @@ service pcm { | |||||
| @doc "Create cloud computing common tasks" | @doc "Create cloud computing common tasks" | ||||
| @handler commitGeneralTask | @handler commitGeneralTask | ||||
| post /cloud/task/create (GeneralTaskReq) returns () | post /cloud/task/create (GeneralTaskReq) returns () | ||||
| @handler podLogs | |||||
| post /cloud/pod/logs (PodLogsReq) returns (string) | |||||
| } | } | ||||
| //智算二级接口 | //智算二级接口 | ||||
| @@ -968,10 +971,10 @@ service pcm { | |||||
| post /schedule/getOverview returns (ScheduleOverviewResp) | post /schedule/getOverview returns (ScheduleOverviewResp) | ||||
| @handler DownloadAlgothmCodeHandler | @handler DownloadAlgothmCodeHandler | ||||
| get /schedule/getDownloadAlgothmCode (DownloadAlgorithmCodeReq) returns (DownloadAlgorithmCodeResp) | |||||
| get /schedule/downloadAlgorithmCode (DownloadAlgorithmCodeReq) returns (DownloadAlgorithmCodeResp) | |||||
| @handler UploadAlgothmCodeHandler | @handler UploadAlgothmCodeHandler | ||||
| post /schedule/getDownloadAlgothmCode (UploadAlgorithmCodeReq) returns (UploadAlgorithmCodeResp) | |||||
| post /schedule/uploadAlgorithmCode (UploadAlgorithmCodeReq) returns (UploadAlgorithmCodeResp) | |||||
| @handler GetComputeCardsByClusterHandler | @handler GetComputeCardsByClusterHandler | ||||
| get /schedule/getComputeCardsByCluster/:adapterId/:clusterId (GetComputeCardsByClusterReq) returns (GetComputeCardsByClusterResp) | get /schedule/getComputeCardsByCluster/:adapterId/:clusterId (GetComputeCardsByClusterReq) returns (GetComputeCardsByClusterResp) | ||||
| @@ -109,11 +109,10 @@ type ( | |||||
| TaskType string `form:"taskType"` | TaskType string `form:"taskType"` | ||||
| Dataset string `form:"dataset"` | Dataset string `form:"dataset"` | ||||
| Algorithm string `form:"algorithm"` | Algorithm string `form:"algorithm"` | ||||
| Code string `form:"code"` | |||||
| } | } | ||||
| DownloadAlgorithmCodeResp { | DownloadAlgorithmCodeResp { | ||||
| Code string `json:"algorithms"` | |||||
| Code string `json:"code"` | |||||
| } | } | ||||
| UploadAlgorithmCodeReq { | UploadAlgorithmCodeReq { | ||||
| @@ -0,0 +1,24 @@ | |||||
| package cloud | |||||
| import ( | |||||
| "github.com/zeromicro/go-zero/rest/httpx" | |||||
| "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/logic/cloud" | |||||
| "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/svc" | |||||
| "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/types" | |||||
| "gitlink.org.cn/JointCloud/pcm-coordinator/pkg/repository/result" | |||||
| "net/http" | |||||
| ) | |||||
| func PodLogsHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { | |||||
| return func(w http.ResponseWriter, r *http.Request) { | |||||
| var req types.PodLogsReq | |||||
| if err := httpx.Parse(r, &req); err != nil { | |||||
| result.ParamErrorResult(r, w, err) | |||||
| return | |||||
| } | |||||
| l := cloud.NewPodLogsLogic(r.Context(), svcCtx, w) | |||||
| resp, err := l.PodLogs(&req, w) | |||||
| result.HttpResult(r, w, resp, err) | |||||
| } | |||||
| } | |||||
| @@ -277,6 +277,11 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) { | |||||
| Path: "/cloud/task/create", | Path: "/cloud/task/create", | ||||
| Handler: cloud.CommitGeneralTaskHandler(serverCtx), | Handler: cloud.CommitGeneralTaskHandler(serverCtx), | ||||
| }, | }, | ||||
| { | |||||
| Method: http.MethodPost, | |||||
| Path: "/cloud/pod/logs", | |||||
| Handler: cloud.PodLogsHandler(serverCtx), | |||||
| }, | |||||
| }, | }, | ||||
| rest.WithPrefix("/pcm/v1"), | rest.WithPrefix("/pcm/v1"), | ||||
| ) | ) | ||||
| @@ -1207,12 +1212,12 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) { | |||||
| }, | }, | ||||
| { | { | ||||
| Method: http.MethodGet, | Method: http.MethodGet, | ||||
| Path: "/schedule/getDownloadAlgothmCode", | |||||
| Path: "/schedule/downloadAlgorithmCode", | |||||
| Handler: schedule.DownloadAlgothmCodeHandler(serverCtx), | Handler: schedule.DownloadAlgothmCodeHandler(serverCtx), | ||||
| }, | }, | ||||
| { | { | ||||
| Method: http.MethodPost, | Method: http.MethodPost, | ||||
| Path: "/schedule/getDownloadAlgothmCode", | |||||
| Path: "/schedule/uploadAlgorithmCode", | |||||
| Handler: schedule.UploadAlgothmCodeHandler(serverCtx), | Handler: schedule.UploadAlgothmCodeHandler(serverCtx), | ||||
| }, | }, | ||||
| { | { | ||||
| @@ -7,22 +7,19 @@ import ( | |||||
| "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/logic/schedule" | "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/logic/schedule" | ||||
| "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/svc" | "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/svc" | ||||
| "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/types" | "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/types" | ||||
| "gitlink.org.cn/JointCloud/pcm-coordinator/pkg/repository/result" | |||||
| ) | ) | ||||
| func DownloadAlgothmCodeHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { | func DownloadAlgothmCodeHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { | ||||
| return func(w http.ResponseWriter, r *http.Request) { | return func(w http.ResponseWriter, r *http.Request) { | ||||
| var req types.DownloadAlgorithmCodeReq | var req types.DownloadAlgorithmCodeReq | ||||
| if err := httpx.Parse(r, &req); err != nil { | if err := httpx.Parse(r, &req); err != nil { | ||||
| httpx.ErrorCtx(r.Context(), w, err) | |||||
| result.ParamErrorResult(r, w, err) | |||||
| return | return | ||||
| } | } | ||||
| l := schedule.NewDownloadAlgothmCodeLogic(r.Context(), svcCtx) | l := schedule.NewDownloadAlgothmCodeLogic(r.Context(), svcCtx) | ||||
| resp, err := l.DownloadAlgothmCode(&req) | |||||
| if err != nil { | |||||
| httpx.ErrorCtx(r.Context(), w, err) | |||||
| } else { | |||||
| httpx.OkJsonCtx(r.Context(), w, resp) | |||||
| } | |||||
| resp, err := l.DownloadAlgorithmCode(&req) | |||||
| result.HttpResult(r, w, resp, err) | |||||
| } | } | ||||
| } | } | ||||
| @@ -7,22 +7,19 @@ import ( | |||||
| "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/logic/schedule" | "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/logic/schedule" | ||||
| "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/svc" | "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/svc" | ||||
| "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/types" | "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/types" | ||||
| "gitlink.org.cn/JointCloud/pcm-coordinator/pkg/repository/result" | |||||
| ) | ) | ||||
| func UploadAlgothmCodeHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { | func UploadAlgothmCodeHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { | ||||
| return func(w http.ResponseWriter, r *http.Request) { | return func(w http.ResponseWriter, r *http.Request) { | ||||
| var req types.UploadAlgorithmCodeReq | var req types.UploadAlgorithmCodeReq | ||||
| if err := httpx.Parse(r, &req); err != nil { | if err := httpx.Parse(r, &req); err != nil { | ||||
| httpx.ErrorCtx(r.Context(), w, err) | |||||
| result.ParamErrorResult(r, w, err) | |||||
| return | return | ||||
| } | } | ||||
| l := schedule.NewUploadAlgothmCodeLogic(r.Context(), svcCtx) | l := schedule.NewUploadAlgothmCodeLogic(r.Context(), svcCtx) | ||||
| resp, err := l.UploadAlgothmCode(&req) | |||||
| if err != nil { | |||||
| httpx.ErrorCtx(r.Context(), w, err) | |||||
| } else { | |||||
| httpx.OkJsonCtx(r.Context(), w, resp) | |||||
| } | |||||
| resp, err := l.UploadAlgorithmCode(&req) | |||||
| result.HttpResult(r, w, resp, err) | |||||
| } | } | ||||
| } | } | ||||
| @@ -99,6 +99,8 @@ func (l *CommitGeneralTaskLogic) CommitGeneralTask(req *types.GeneralTaskReq) er | |||||
| Strategy: strategy, | Strategy: strategy, | ||||
| } | } | ||||
| var taskClouds []cloud.TaskCloudModel | var taskClouds []cloud.TaskCloudModel | ||||
| adapterName := "" | |||||
| tx.Table("t_adapter").Select("name").Where("id=?", adapterId).Find(&adapterName) | |||||
| for _, r := range rs { | for _, r := range rs { | ||||
| for _, s := range req.ReqBody { | for _, s := range req.ReqBody { | ||||
| sStruct := UnMarshalK8sStruct(s, int64(r.Replica)) | sStruct := UnMarshalK8sStruct(s, int64(r.Replica)) | ||||
| @@ -107,6 +109,7 @@ func (l *CommitGeneralTaskLogic) CommitGeneralTask(req *types.GeneralTaskReq) er | |||||
| taskCloud.TaskId = uint(taskModel.Id) | taskCloud.TaskId = uint(taskModel.Id) | ||||
| clusterId, _ := strconv.ParseUint(r.ClusterId, 10, 64) | clusterId, _ := strconv.ParseUint(r.ClusterId, 10, 64) | ||||
| taskCloud.AdapterId = uint(adapterId) | taskCloud.AdapterId = uint(adapterId) | ||||
| taskCloud.AdapterName = adapterName | |||||
| taskCloud.ClusterId = uint(clusterId) | taskCloud.ClusterId = uint(clusterId) | ||||
| taskCloud.ClusterName = r.ClusterName | taskCloud.ClusterName = r.ClusterName | ||||
| taskCloud.Status = constants.Saved | taskCloud.Status = constants.Saved | ||||
| @@ -116,8 +119,6 @@ func (l *CommitGeneralTaskLogic) CommitGeneralTask(req *types.GeneralTaskReq) er | |||||
| taskClouds = append(taskClouds, taskCloud) | taskClouds = append(taskClouds, taskCloud) | ||||
| } | } | ||||
| } | } | ||||
| adapterName := "" | |||||
| tx.Table("t_adapter").Select("name").Where("id=?", adapterId).Find(&adapterName) | |||||
| noticeInfo := clientCore.NoticeInfo{ | noticeInfo := clientCore.NoticeInfo{ | ||||
| AdapterId: int64(adapterId), | AdapterId: int64(adapterId), | ||||
| AdapterName: adapterName, | AdapterName: adapterName, | ||||
| @@ -0,0 +1,30 @@ | |||||
| package cloud | |||||
| import ( | |||||
| "context" | |||||
| "github.com/zeromicro/go-zero/core/logx" | |||||
| "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/svc" | |||||
| "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/types" | |||||
| "net/http" | |||||
| ) | |||||
| type PodLogsLogic struct { | |||||
| logx.Logger | |||||
| ctx context.Context | |||||
| svcCtx *svc.ServiceContext | |||||
| w http.ResponseWriter | |||||
| } | |||||
| func NewPodLogsLogic(ctx context.Context, svcCtx *svc.ServiceContext, w http.ResponseWriter) *PodLogsLogic { | |||||
| return &PodLogsLogic{ | |||||
| Logger: logx.WithContext(ctx), | |||||
| ctx: ctx, | |||||
| svcCtx: svcCtx, | |||||
| w: w, | |||||
| } | |||||
| } | |||||
| func (l *PodLogsLogic) PodLogs(req *types.PodLogsReq, w http.ResponseWriter) (resp string, err error) { | |||||
| // todo: add your logic here and delete this line | |||||
| return | |||||
| } | |||||
| @@ -2,13 +2,12 @@ package core | |||||
| import ( | import ( | ||||
| "context" | "context" | ||||
| "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/svc" | |||||
| "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/types" | |||||
| "gitlink.org.cn/JointCloud/pcm-coordinator/pkg/repository/result" | "gitlink.org.cn/JointCloud/pcm-coordinator/pkg/repository/result" | ||||
| "gitlink.org.cn/JointCloud/pcm-coordinator/pkg/utils/timeutils" | "gitlink.org.cn/JointCloud/pcm-coordinator/pkg/utils/timeutils" | ||||
| "time" | "time" | ||||
| "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/svc" | |||||
| "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/types" | |||||
| "github.com/zeromicro/go-zero/core/logx" | "github.com/zeromicro/go-zero/core/logx" | ||||
| ) | ) | ||||
| @@ -51,14 +50,14 @@ func (l *PageListTaskLogic) PageListTask(req *types.PageTaskReq) (resp *types.Pa | |||||
| return nil, result.NewDefaultError(err.Error()) | return nil, result.NewDefaultError(err.Error()) | ||||
| } | } | ||||
| for _, model := range list { | for _, model := range list { | ||||
| if model.EndTime != "" && model.StartTime != "" { | |||||
| if model.StartTime != "" && model.EndTime == "" { | |||||
| startTime := timeutils.TimeStringToGoTime(model.StartTime) | startTime := timeutils.TimeStringToGoTime(model.StartTime) | ||||
| endTime := timeutils.TimeStringToGoTime(model.EndTime) | |||||
| model.RunningTime = int64(endTime.Sub(startTime).Seconds()) | |||||
| model.RunningTime = int64(time.Now().Sub(startTime).Seconds()) | |||||
| } | } | ||||
| if model.StartTime != "" { | |||||
| if model.StartTime != "" && model.EndTime != "" { | |||||
| startTime := timeutils.TimeStringToGoTime(model.StartTime) | startTime := timeutils.TimeStringToGoTime(model.StartTime) | ||||
| model.RunningTime = int64(time.Now().Sub(startTime).Seconds()) | |||||
| endTime := timeutils.TimeStringToGoTime(model.EndTime) | |||||
| model.RunningTime = int64(endTime.Sub(startTime).Seconds()) | |||||
| } | } | ||||
| } | } | ||||
| resp.List = &list | resp.List = &list | ||||
| @@ -17,6 +17,7 @@ package core | |||||
| import ( | import ( | ||||
| "context" | "context" | ||||
| "fmt" | "fmt" | ||||
| "gitlink.org.cn/JointCloud/pcm-coordinator/pkg/constants" | |||||
| "gitlink.org.cn/JointCloud/pcm-coordinator/pkg/models" | "gitlink.org.cn/JointCloud/pcm-coordinator/pkg/models" | ||||
| "strconv" | "strconv" | ||||
| "time" | "time" | ||||
| @@ -55,6 +56,11 @@ func (l *TaskListLogic) TaskList(req *types.TaskListReq) (resp *types.TaskListRe | |||||
| if len(tasks) == 0 { | if len(tasks) == 0 { | ||||
| return nil, nil | return nil, nil | ||||
| } | } | ||||
| // 更新智算任务状态 | |||||
| var ch = make(chan struct{}) | |||||
| go l.updateAitaskStatus(tasks, ch) | |||||
| // 查询任务总数 | // 查询任务总数 | ||||
| l.svcCtx.DbEngin.Model(&models.Task{}).Count(&resp.TotalCount) | l.svcCtx.DbEngin.Model(&models.Task{}).Count(&resp.TotalCount) | ||||
| @@ -106,5 +112,64 @@ func (l *TaskListLogic) TaskList(req *types.TaskListReq) (resp *types.TaskListRe | |||||
| } | } | ||||
| return | |||||
| select { | |||||
| case _ = <-ch: | |||||
| return resp, nil | |||||
| case <-time.After(1 * time.Second): | |||||
| return resp, nil | |||||
| } | |||||
| } | |||||
| func (l *TaskListLogic) updateAitaskStatus(tasks []models.Task, ch chan<- struct{}) { | |||||
| for _, task := range tasks { | |||||
| if task.AdapterTypeDict != 1 { | |||||
| continue | |||||
| } | |||||
| if task.Status == constants.Succeeded { | |||||
| continue | |||||
| } | |||||
| var aiTask []*models.TaskAi | |||||
| tx := l.svcCtx.DbEngin.Raw("select * from task_ai where `task_id` = ? ", task.Id).Scan(&aiTask) | |||||
| if tx.Error != nil { | |||||
| logx.Errorf(tx.Error.Error()) | |||||
| return | |||||
| } | |||||
| start, _ := time.ParseInLocation(constants.Layout, aiTask[0].StartTime, time.Local) | |||||
| end, _ := time.ParseInLocation(constants.Layout, aiTask[0].EndTime, time.Local) | |||||
| var status = constants.Succeeded | |||||
| for _, a := range aiTask { | |||||
| s, _ := time.ParseInLocation(constants.Layout, a.StartTime, time.Local) | |||||
| e, _ := time.ParseInLocation(constants.Layout, a.EndTime, time.Local) | |||||
| if s.Before(start) { | |||||
| start = s | |||||
| } | |||||
| if e.After(end) { | |||||
| end = e | |||||
| } | |||||
| if a.Status == constants.Failed { | |||||
| status = a.Status | |||||
| break | |||||
| } | |||||
| if a.Status == constants.Running { | |||||
| status = a.Status | |||||
| continue | |||||
| } | |||||
| } | |||||
| task.Status = status | |||||
| task.StartTime = &start | |||||
| task.EndTime = &end | |||||
| tx = l.svcCtx.DbEngin.Updates(task) | |||||
| if tx.Error != nil { | |||||
| return | |||||
| } | |||||
| } | |||||
| ch <- struct{}{} | |||||
| } | } | ||||
| @@ -23,8 +23,14 @@ func NewDownloadAlgothmCodeLogic(ctx context.Context, svcCtx *svc.ServiceContext | |||||
| } | } | ||||
| } | } | ||||
| func (l *DownloadAlgothmCodeLogic) DownloadAlgothmCode(req *types.DownloadAlgorithmCodeReq) (resp *types.DownloadAlgorithmCodeResp, err error) { | |||||
| // todo: add your logic here and delete this line | |||||
| func (l *DownloadAlgothmCodeLogic) DownloadAlgorithmCode(req *types.DownloadAlgorithmCodeReq) (resp *types.DownloadAlgorithmCodeResp, err error) { | |||||
| resp = &types.DownloadAlgorithmCodeResp{} | |||||
| code, err := l.svcCtx.Scheduler.AiService.AiCollectorAdapterMap[req.AdapterId][req.ClusterId].DownloadAlgorithmCode(l.ctx, | |||||
| req.ResourceType, req.Card, req.TaskType, req.Dataset, req.Algorithm) | |||||
| if err != nil { | |||||
| return nil, err | |||||
| } | |||||
| resp.Code = code | |||||
| return | |||||
| return resp, nil | |||||
| } | } | ||||
| @@ -23,8 +23,13 @@ func NewUploadAlgothmCodeLogic(ctx context.Context, svcCtx *svc.ServiceContext) | |||||
| } | } | ||||
| } | } | ||||
| func (l *UploadAlgothmCodeLogic) UploadAlgothmCode(req *types.UploadAlgorithmCodeReq) (resp *types.UploadAlgorithmCodeResp, err error) { | |||||
| // todo: add your logic here and delete this line | |||||
| func (l *UploadAlgothmCodeLogic) UploadAlgorithmCode(req *types.UploadAlgorithmCodeReq) (resp *types.UploadAlgorithmCodeResp, err error) { | |||||
| resp = &types.UploadAlgorithmCodeResp{} | |||||
| err = l.svcCtx.Scheduler.AiService.AiCollectorAdapterMap[req.AdapterId][req.ClusterId].UploadAlgorithmCode(l.ctx, | |||||
| req.ResourceType, req.Card, req.TaskType, req.Dataset, req.Algorithm, req.Code) | |||||
| if err != nil { | |||||
| return nil, err | |||||
| } | |||||
| return | |||||
| return resp, nil | |||||
| } | } | ||||
| @@ -54,6 +54,7 @@ const ( | |||||
| CAMBRICON = "cambricon" | CAMBRICON = "cambricon" | ||||
| TRAIN_CMD = "cd /code; python train.py" | TRAIN_CMD = "cd /code; python train.py" | ||||
| VERSION = "V1" | VERSION = "V1" | ||||
| DOMAIN = "http://192.168.242.41:8001/" | |||||
| ) | ) | ||||
| var ( | var ( | ||||
| @@ -340,7 +341,44 @@ func (o *OctopusLink) GetAlgorithms(ctx context.Context) ([]*collector.Algorithm | |||||
| } | } | ||||
| func (o *OctopusLink) DownloadAlgorithmCode(ctx context.Context, resourceType string, card string, taskType string, dataset string, algorithm string) (string, error) { | func (o *OctopusLink) DownloadAlgorithmCode(ctx context.Context, resourceType string, card string, taskType string, dataset string, algorithm string) (string, error) { | ||||
| return "", nil | |||||
| dcReq := &octopus.DownloadCompressReq{ | |||||
| Platform: o.platform, | |||||
| Version: VERSION, | |||||
| AlgorithmId: "", | |||||
| } | |||||
| dcResp, err := o.octopusRpc.DownloadCompress(ctx, dcReq) | |||||
| if err != nil { | |||||
| return "", err | |||||
| } | |||||
| if !dcResp.Success { | |||||
| return "", errors.New(dcResp.Error.Message) | |||||
| } | |||||
| daReq := &octopus.DownloadAlgorithmReq{ | |||||
| Platform: o.platform, | |||||
| Version: VERSION, | |||||
| AlgorithmId: "", | |||||
| CompressAt: dcResp.Payload.CompressAt, | |||||
| Domain: DOMAIN, | |||||
| } | |||||
| daResp, err := o.octopusRpc.DownloadAlgorithm(ctx, daReq) | |||||
| if err != nil { | |||||
| return "", err | |||||
| } | |||||
| if !daResp.Success { | |||||
| return "", errors.New(dcResp.Error.Message) | |||||
| } | |||||
| urlReq := &octopus.AlgorithmUrlReq{ | |||||
| Platform: o.platform, | |||||
| Url: daResp.Payload.DownloadUrl, | |||||
| } | |||||
| urlResp, err := o.octopusRpc.DownloadAlgorithmUrl(ctx, urlReq) | |||||
| if err != nil { | |||||
| return "", err | |||||
| } | |||||
| return urlResp.Algorithm, nil | |||||
| } | } | ||||
| func (o *OctopusLink) UploadAlgorithmCode(ctx context.Context, resourceType string, card string, taskType string, dataset string, algorithm string, code string) error { | func (o *OctopusLink) UploadAlgorithmCode(ctx context.Context, resourceType string, card string, taskType string, dataset string, algorithm string, code string) error { | ||||
| @@ -150,6 +150,17 @@ type GeneralTaskReq struct { | |||||
| Replicas int64 `json:"replicas,string"` | Replicas int64 `json:"replicas,string"` | ||||
| } | } | ||||
| type PodLogsReq struct { | |||||
| TaskId string `json:"taskId"` | |||||
| TaskName string `json:"taskName"` | |||||
| ClusterId string `json:"clusterId"` | |||||
| ClusterName string `json:"clusterName"` | |||||
| AdapterId string `json:"adapterId"` | |||||
| AdapterName string `json:"adapterName"` | |||||
| PodName string `json:"podName"` | |||||
| Stream bool `json:"stream"` | |||||
| } | |||||
| type DeleteTaskReq struct { | type DeleteTaskReq struct { | ||||
| Id int64 `path:"id"` | Id int64 `path:"id"` | ||||
| } | } | ||||
| @@ -938,6 +949,184 @@ type ListResult struct { | |||||
| List interface{} `json:"list,omitempty"` | List interface{} `json:"list,omitempty"` | ||||
| } | } | ||||
| type HpcInfo struct { | |||||
| Id int64 `json:"id"` // id | |||||
| TaskId int64 `json:"task_id"` // 任务id | |||||
| JobId string `json:"job_id"` // 作业id(在第三方系统中的作业id) | |||||
| AdapterId int64 `json:"adapter_id"` // 执行任务的适配器id | |||||
| ClusterId int64 `json:"cluster_id"` // 执行任务的集群id | |||||
| ClusterType string `json:"cluster_type"` // 执行任务的集群类型 | |||||
| Name string `json:"name"` // 名称 | |||||
| Status string `json:"status"` // 状态 | |||||
| CmdScript string `json:"cmd_script"` | |||||
| StartTime string `json:"start_time"` // 开始时间 | |||||
| RunningTime int64 `json:"running_time"` // 运行时间 | |||||
| DerivedEs string `json:"derived_es"` | |||||
| Cluster string `json:"cluster"` | |||||
| BlockId int64 `json:"block_id"` | |||||
| AllocNodes int64 `json:"alloc_nodes"` | |||||
| AllocCpu int64 `json:"alloc_cpu"` | |||||
| CardCount int64 `json:"card_count"` // 卡数 | |||||
| Version string `json:"version"` | |||||
| Account string `json:"account"` | |||||
| WorkDir string `json:"work_dir"` // 工作路径 | |||||
| AssocId int64 `json:"assoc_id"` | |||||
| ExitCode int64 `json:"exit_code"` | |||||
| WallTime string `json:"wall_time"` // 最大运行时间 | |||||
| Result string `json:"result"` // 运行结果 | |||||
| DeletedAt string `json:"deleted_at"` // 删除时间 | |||||
| YamlString string `json:"yaml_string"` | |||||
| AppType string `json:"app_type"` // 应用类型 | |||||
| AppName string `json:"app_name"` // 应用名称 | |||||
| Queue string `json:"queue"` // 队列名称 | |||||
| SubmitType string `json:"submit_type"` // cmd(命令行模式) | |||||
| NNode string `json:"n_node"` // 节点个数(当指定该参数时,GAP_NODE_STRING必须为"") | |||||
| StdOutFile string `json:"std_out_file"` // 工作路径/std.err.%j | |||||
| StdErrFile string `json:"std_err_file"` // 工作路径/std.err.%j | |||||
| StdInput string `json:"std_input"` | |||||
| Environment string `json:"environment"` | |||||
| DeletedFlag int64 `json:"deleted_flag"` // 是否删除(0-否,1-是) | |||||
| CreatedBy int64 `json:"created_by"` // 创建人 | |||||
| CreateTime string `json:"created_time"` // 创建时间 | |||||
| UpdatedBy int64 `json:"updated_by"` // 更新人 | |||||
| UpdateTime string `json:"updated_time"` // 更新时间 | |||||
| } | |||||
| type CloudInfo struct { | |||||
| Participant int64 `json:"participant,omitempty"` | |||||
| Id int64 `json:"id,omitempty"` | |||||
| TaskId int64 `json:"taskId,omitempty"` | |||||
| ApiVersion string `json:"apiVersion,omitempty"` | |||||
| Kind string `json:"kind,omitempty"` | |||||
| Namespace string `json:"namespace,omitempty"` | |||||
| Name string `json:"name,omitempty"` | |||||
| Status string `json:"status,omitempty"` | |||||
| StartTime string `json:"startTime,omitempty"` | |||||
| RunningTime int64 `json:"runningTime,omitempty"` | |||||
| Result string `json:"result,omitempty"` | |||||
| YamlString string `json:"yamlString,omitempty"` | |||||
| } | |||||
| type AiInfo struct { | |||||
| ParticipantId int64 `json:"participantId,omitempty"` | |||||
| TaskId int64 `json:"taskId,omitempty"` | |||||
| ProjectId string `json:"project_id,omitempty"` | |||||
| Name string `json:"name,omitempty"` | |||||
| Status string `json:"status,omitempty"` | |||||
| StartTime string `json:"startTime,omitempty"` | |||||
| RunningTime int64 `json:"runningTime,omitempty"` | |||||
| Result string `json:"result,omitempty"` | |||||
| JobId string `json:"jobId,omitempty"` | |||||
| CreateTime string `json:"createTime,omitempty"` | |||||
| ImageUrl string `json:"imageUrl,omitempty"` | |||||
| Command string `json:"command,omitempty"` | |||||
| FlavorId string `json:"flavorId,omitempty"` | |||||
| SubscriptionId string `json:"subscriptionId,omitempty"` | |||||
| ItemVersionId string `json:"itemVersionId,omitempty"` | |||||
| } | |||||
| type VmInfo struct { | |||||
| ParticipantId int64 `json:"participantId,omitempty"` | |||||
| TaskId int64 `json:"taskId,omitempty"` | |||||
| Name string `json:"name,omitempty"` | |||||
| FlavorRef string `json:"flavor_ref,omitempty"` | |||||
| ImageRef string `json:"image_ref,omitempty"` | |||||
| NetworkUuid string `json:"network_uuid,omitempty"` | |||||
| BlockUuid string `json:"block_uuid,omitempty"` | |||||
| SourceType string `json:"source_type,omitempty"` | |||||
| DeleteOnTermination bool `json:"delete_on_termination,omitempty"` | |||||
| Status string `json:"status,omitempty"` | |||||
| MinCount string `json:"min_count,omitempty"` | |||||
| Platform string `json:"platform,omitempty"` | |||||
| Uuid string `json:"uuid,omitempty"` | |||||
| } | |||||
| type PullTaskInfoReq struct { | |||||
| AdapterId int64 `form:"adapterId"` | |||||
| } | |||||
| type PullTaskInfoResp struct { | |||||
| HpcInfoList []*HpcInfo `json:"HpcInfoList,omitempty"` | |||||
| CloudInfoList []*CloudInfo `json:"CloudInfoList,omitempty"` | |||||
| AiInfoList []*AiInfo `json:"AiInfoList,omitempty"` | |||||
| VmInfoList []*VmInfo `json:"VmInfoList,omitempty"` | |||||
| } | |||||
| type PushTaskInfoReq struct { | |||||
| AdapterId int64 `json:"adapterId"` | |||||
| HpcInfoList []*HpcInfo `json:"hpcInfoList"` | |||||
| CloudInfoList []*CloudInfo `json:"cloudInfoList"` | |||||
| AiInfoList []*AiInfo `json:"aiInfoList"` | |||||
| VmInfoList []*VmInfo `json:"vmInfoList"` | |||||
| } | |||||
| type PushTaskInfoResp struct { | |||||
| Code int64 `json:"code"` | |||||
| Msg string `json:"msg"` | |||||
| } | |||||
| type PushResourceInfoReq struct { | |||||
| AdapterId int64 `json:"adapterId"` | |||||
| ResourceStats []ResourceStats `json:"resourceStats"` | |||||
| } | |||||
| type PushResourceInfoResp struct { | |||||
| Code int64 `json:"code"` | |||||
| Msg string `json:"msg"` | |||||
| } | |||||
| type NoticeInfo struct { | |||||
| AdapterId int64 `json:"adapterId"` | |||||
| AdapterName string `json:"adapterName"` | |||||
| ClusterId int64 `json:"clusterId"` | |||||
| ClusterName string `json:"clusterName"` | |||||
| NoticeType string `json:"noticeType"` | |||||
| TaskName string `json:"taskName"` | |||||
| Incident string `json:"incident"` | |||||
| } | |||||
| type ListNoticeReq struct { | |||||
| } | |||||
| type ListNoticeResp struct { | |||||
| Code int64 `json:"code"` | |||||
| Msg string `json:"msg"` | |||||
| Data []NoticeInfo `json:"data"` | |||||
| } | |||||
| type PushNoticeReq struct { | |||||
| NoticeInfo NoticeInfo `json:"noticeInfo"` | |||||
| } | |||||
| type PushNoticeResp struct { | |||||
| Code int64 `json:"code"` | |||||
| Msg string `json:"msg"` | |||||
| } | |||||
| type ResourceStats struct { | |||||
| ClusterId int64 `json:"clusterId"` | |||||
| Name string `json:"name"` | |||||
| CpuCoreAvail int64 `json:"cpuCoreAvail"` | |||||
| CpuCoreTotal int64 `json:"cpuCoreTotal"` | |||||
| MemAvail float64 `json:"memAvail"` | |||||
| MemTotal float64 `json:"memTotal"` | |||||
| DiskAvail float64 `json:"diskAvail"` | |||||
| DiskTotal float64 `json:"diskTotal"` | |||||
| GpuAvail int64 `json:"gpuAvail"` | |||||
| CardsAvail []*Card `json:"cardsAvail"` | |||||
| CpuCoreHours float64 `json:"cpuCoreHours"` | |||||
| Balance float64 `json:"balance"` | |||||
| } | |||||
| type Card struct { | |||||
| Platform string `json:"platform"` | |||||
| Type string `json:"type"` | |||||
| Name string `json:"name"` | |||||
| TOpsAtFp16 float64 `json:"TOpsAtFp16"` | |||||
| CardHours float64 `json:"cardHours"` | |||||
| CardNum int32 `json:"cardNum"` | |||||
| } | |||||
| type TaskStatusResp struct { | type TaskStatusResp struct { | ||||
| Succeeded int `json:"Succeeded"` | Succeeded int `json:"Succeeded"` | ||||
| Failed int `json:"Failed"` | Failed int `json:"Failed"` | ||||
| @@ -5506,11 +5695,10 @@ type DownloadAlgorithmCodeReq struct { | |||||
| TaskType string `form:"taskType"` | TaskType string `form:"taskType"` | ||||
| Dataset string `form:"dataset"` | Dataset string `form:"dataset"` | ||||
| Algorithm string `form:"algorithm"` | Algorithm string `form:"algorithm"` | ||||
| Code string `form:"code"` | |||||
| } | } | ||||
| type DownloadAlgorithmCodeResp struct { | type DownloadAlgorithmCodeResp struct { | ||||
| Code string `json:"algorithms"` | |||||
| Code string `json:"code"` | |||||
| } | } | ||||
| type UploadAlgorithmCodeReq struct { | type UploadAlgorithmCodeReq struct { | ||||
| @@ -26,7 +26,7 @@ require ( | |||||
| github.com/zeromicro/go-zero v1.6.3 | github.com/zeromicro/go-zero v1.6.3 | ||||
| gitlink.org.cn/JointCloud/pcm-ac v0.0.0-20240426095603-549fefd8bece | gitlink.org.cn/JointCloud/pcm-ac v0.0.0-20240426095603-549fefd8bece | ||||
| gitlink.org.cn/JointCloud/pcm-kubernetes v0.0.0-20240301071143-347480abff2c | gitlink.org.cn/JointCloud/pcm-kubernetes v0.0.0-20240301071143-347480abff2c | ||||
| gitlink.org.cn/JointCloud/pcm-octopus v0.0.0-20240424085753-6899615e9142 | |||||
| gitlink.org.cn/JointCloud/pcm-octopus v0.0.0-20240510133934-6a5526289b35 | |||||
| gitlink.org.cn/JointCloud/pcm-openstack v0.0.0-20240403033338-e7edabad4203 | gitlink.org.cn/JointCloud/pcm-openstack v0.0.0-20240403033338-e7edabad4203 | ||||
| gitlink.org.cn/JointCloud/pcm-slurm v0.0.0-20240301080743-8b94bbaf57f5 | gitlink.org.cn/JointCloud/pcm-slurm v0.0.0-20240301080743-8b94bbaf57f5 | ||||
| gitlink.org.cn/jcce-pcm/pcm-participant-ceph v0.0.0-20230904090036-24fc730ec87d | gitlink.org.cn/jcce-pcm/pcm-participant-ceph v0.0.0-20230904090036-24fc730ec87d | ||||
| @@ -1082,8 +1082,8 @@ gitlink.org.cn/JointCloud/pcm-ac v0.0.0-20240426095603-549fefd8bece h1:W3yBnvAVV | |||||
| gitlink.org.cn/JointCloud/pcm-ac v0.0.0-20240426095603-549fefd8bece/go.mod h1:w3Nb5TNymCItQ7K3x4Q0JLuoq9OerwAzAWT2zsPE9Xo= | gitlink.org.cn/JointCloud/pcm-ac v0.0.0-20240426095603-549fefd8bece/go.mod h1:w3Nb5TNymCItQ7K3x4Q0JLuoq9OerwAzAWT2zsPE9Xo= | ||||
| gitlink.org.cn/JointCloud/pcm-kubernetes v0.0.0-20240301071143-347480abff2c h1:2Wl/hvaSFjh6fmCSIQhjkr9llMRREQeqcXNLZ/HPY18= | gitlink.org.cn/JointCloud/pcm-kubernetes v0.0.0-20240301071143-347480abff2c h1:2Wl/hvaSFjh6fmCSIQhjkr9llMRREQeqcXNLZ/HPY18= | ||||
| gitlink.org.cn/JointCloud/pcm-kubernetes v0.0.0-20240301071143-347480abff2c/go.mod h1:lSRfGs+PxFvw7CcndHWRd6UlLlGrZn0b0hp5cfaMNGw= | gitlink.org.cn/JointCloud/pcm-kubernetes v0.0.0-20240301071143-347480abff2c/go.mod h1:lSRfGs+PxFvw7CcndHWRd6UlLlGrZn0b0hp5cfaMNGw= | ||||
| gitlink.org.cn/JointCloud/pcm-octopus v0.0.0-20240424085753-6899615e9142 h1:+po0nesBDSWsgCySBG7eEXk7i9Ytd58wqvjL1M9y6d8= | |||||
| gitlink.org.cn/JointCloud/pcm-octopus v0.0.0-20240424085753-6899615e9142/go.mod h1:QOD5+/l2D+AYBjF2h5T0mdJyfGAmF78QmeKdbBXbjLQ= | |||||
| gitlink.org.cn/JointCloud/pcm-octopus v0.0.0-20240510133934-6a5526289b35 h1:E2QfpS3Y0FjR8Zyv5l2Ti/2NetQFqHG66c8+T/+J1u0= | |||||
| gitlink.org.cn/JointCloud/pcm-octopus v0.0.0-20240510133934-6a5526289b35/go.mod h1:QOD5+/l2D+AYBjF2h5T0mdJyfGAmF78QmeKdbBXbjLQ= | |||||
| gitlink.org.cn/JointCloud/pcm-openstack v0.0.0-20240403033338-e7edabad4203 h1:s6PsZ1+bev294IWdZRlV7mnOwI1+UzFcldVW/BqhQzI= | gitlink.org.cn/JointCloud/pcm-openstack v0.0.0-20240403033338-e7edabad4203 h1:s6PsZ1+bev294IWdZRlV7mnOwI1+UzFcldVW/BqhQzI= | ||||
| gitlink.org.cn/JointCloud/pcm-openstack v0.0.0-20240403033338-e7edabad4203/go.mod h1:i2rrbMQ+Fve345BY9Heh4MUqVTAimZQElQhzzRee5B8= | gitlink.org.cn/JointCloud/pcm-openstack v0.0.0-20240403033338-e7edabad4203/go.mod h1:i2rrbMQ+Fve345BY9Heh4MUqVTAimZQElQhzzRee5B8= | ||||
| gitlink.org.cn/JointCloud/pcm-slurm v0.0.0-20240301080743-8b94bbaf57f5 h1:+/5vnzkJBfMRnya1NrhOzlroUtRa5ePiYbPKlHLoLV0= | gitlink.org.cn/JointCloud/pcm-slurm v0.0.0-20240301080743-8b94bbaf57f5 h1:+/5vnzkJBfMRnya1NrhOzlroUtRa5ePiYbPKlHLoLV0= | ||||
| @@ -8,6 +8,7 @@ import ( | |||||
| type TaskCloudModel struct { | type TaskCloudModel struct { | ||||
| Id uint `json:"id" gorm:"primarykey;not null;comment:id"` | Id uint `json:"id" gorm:"primarykey;not null;comment:id"` | ||||
| TaskId uint `json:"taskId" gorm:"not null;comment:task表id"` | TaskId uint `json:"taskId" gorm:"not null;comment:task表id"` | ||||
| AdapterName string `json:"adapterName" gorm:"not null;comment:适配器名称"` | |||||
| AdapterId uint `json:"adapterId" gorm:"not null;comment:适配器id"` | AdapterId uint `json:"adapterId" gorm:"not null;comment:适配器id"` | ||||
| AdapterName string `json:"adapterName" gorm:"not null;comment:适配器名称"` | AdapterName string `json:"adapterName" gorm:"not null;comment:适配器名称"` | ||||
| ClusterId uint `json:"clusterId" gorm:"not null;comment:集群id"` | ClusterId uint `json:"clusterId" gorm:"not null;comment:集群id"` | ||||