提交任务接口添加json形式

Former-commit-id: 8398798a0d1d2ea803d15fe3a85f01935f89aed8
This commit is contained in:
zhangwei 2023-05-16 09:36:49 +08:00
parent b6c1f91c84
commit e104b5158a
7 changed files with 156 additions and 22 deletions

View File

@ -171,21 +171,36 @@ type (
)
type (
scheduleTaskReq {
scheduleTaskByYamlReq {
Name string `yaml:"name"`
synergy string `yaml:"synergy"`
Description string `yaml:"description"`
strategy string `yaml:"strategy"`
tasks []TaskInfo `yaml:"tasks"`
tasks []TaskYaml `yaml:"tasks"`
}
TaskInfo {
TaskYaml {
TaskId int64 `yaml:"taskId"`
serviceName string `yaml:"serviceName"`
metadata interface{} `yaml:"metadata"`
}
)
type (
scheduleTaskReq {
Name string `json:"name"`
synergy string `json:"synergy"`
Description string `json:"description"`
strategy string `json:"strategy"`
tasks []TaskInfo `json:"tasks"`
}
TaskInfo {
TaskId int64 `json:"taskId,optional"`
serviceName string `json:"serviceName"`
metadata interface{} `json:"metadata"`
}
)
type (
taskListResp {
TotalCount int `json:"totalCount"`

View File

@ -21,6 +21,9 @@ info(
group : core
)
service pcm {
@handler scheduleTaskByYamlHandler
post /core/scheduleTaskByYaml (scheduleTaskByYamlReq) returns ()
@handler scheduleTaskHandler
post /core/scheduleTask (scheduleTaskReq) returns ()

View File

@ -0,0 +1,36 @@
package core
import (
"PCM/common/result"
"PCM/common/tool"
"net/http"
"PCM/adaptor/PCM-CORE/api/internal/logic/core"
"PCM/adaptor/PCM-CORE/api/internal/svc"
"PCM/adaptor/PCM-CORE/api/internal/types"
"github.com/zeromicro/go-zero/rest/httpx"
)
func ScheduleTaskByYamlHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
var req types.ScheduleTaskByYamlReq
if err := httpx.Parse(r, &req); err != nil {
httpx.ErrorCtx(r.Context(), w, err)
return
}
// 解析yaml文件
_, fileHeader, err := r.FormFile("file")
if err != nil {
result.HttpResult(r, w, nil, err)
return
}
err = tool.Yaml2struct(fileHeader, &req)
if err != nil {
result.HttpResult(r, w, nil, err)
return
}
l := core.NewScheduleTaskByYamlLogic(r.Context(), svcCtx)
err = l.ScheduleTaskByYaml(&req)
result.HttpResult(r, w, nil, err)
}
}

View File

@ -2,33 +2,25 @@ package core
import (
"PCM/common/result"
"PCM/common/tool"
"github.com/zeromicro/go-zero/rest/httpx"
"io/ioutil"
"k8s.io/apimachinery/pkg/util/json"
"net/http"
"PCM/adaptor/PCM-CORE/api/internal/logic/core"
"PCM/adaptor/PCM-CORE/api/internal/svc"
"PCM/adaptor/PCM-CORE/api/internal/types"
"github.com/zeromicro/go-zero/rest/httpx"
)
func ScheduleTaskHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
var req types.ScheduleTaskReq
if err := httpx.Parse(r, &req); err != nil {
bytes, err := ioutil.ReadAll(r.Body)
if err != nil {
httpx.ErrorCtx(r.Context(), w, err)
return
}
// 解析yaml文件
_, fileHeader, err := r.FormFile("file")
if err != nil {
result.HttpResult(r, w, nil, err)
return
}
err = tool.Yaml2struct(fileHeader, &req)
if err != nil {
result.HttpResult(r, w, nil, err)
return
}
json.Unmarshal(bytes, &req)
l := core.NewScheduleTaskLogic(r.Context(), svcCtx)
err = l.ScheduleTask(&req)
result.HttpResult(r, w, nil, err)

View File

@ -17,6 +17,11 @@ import (
func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
server.AddRoutes(
[]rest.Route{
{
Method: http.MethodPost,
Path: "/core/scheduleTaskByYaml",
Handler: core.ScheduleTaskByYamlHandler(serverCtx),
},
{
Method: http.MethodPost,
Path: "/core/scheduleTask",

View File

@ -0,0 +1,69 @@
package core
import (
"PCM/adaptor/PCM-CORE/model"
"context"
"k8s.io/apimachinery/pkg/util/json"
"time"
"PCM/adaptor/PCM-CORE/api/internal/svc"
"PCM/adaptor/PCM-CORE/api/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
type ScheduleTaskByYamlLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
func NewScheduleTaskByYamlLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ScheduleTaskByYamlLogic {
return &ScheduleTaskByYamlLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *ScheduleTaskByYamlLogic) ScheduleTaskByYaml(req *types.ScheduleTaskByYamlReq) error {
bytes, err := json.Marshal(req)
if err != nil {
return err
}
// construct task info
taskModel := model.Task{
Status: "Saved",
Description: req.Description,
Name: req.Name,
YamlString: string(bytes),
StartTime: time.Now(),
CreatedTime: time.Now(),
UpdatedTime: time.Now(),
}
// save the task in mysql and return id
tx := l.svcCtx.DbEngin.Create(&taskModel)
if tx.Error != nil {
return tx.Error
}
// push message into topic
for _, task := range req.Tasks {
task.TaskId = taskModel.Id
reqMessage, err := json.Marshal(task)
if err != nil {
logx.Error(err)
return err
}
switch task.ServiceName {
case "kubeNative":
l.svcCtx.ScheduleCloudClient.Push(string(reqMessage))
case "ac", "th":
l.svcCtx.ScheduleHpcClient.Push(string(reqMessage))
case "modelArts":
l.svcCtx.ScheduleAiClient.Push(string(reqMessage))
}
}
return nil
}

View File

@ -152,20 +152,34 @@ type Region struct {
RunningJobs int64 `json:"runningJobs"`
}
type ScheduleTaskReq struct {
type ScheduleTaskByYamlReq struct {
Name string `yaml:"name"`
Synergy string `yaml:"synergy"`
Description string `yaml:"description"`
Strategy string `yaml:"strategy"`
Tasks []TaskInfo `yaml:"tasks"`
Tasks []TaskYaml `yaml:"tasks"`
}
type TaskInfo struct {
type TaskYaml struct {
TaskId int64 `yaml:"taskId"`
ServiceName string `yaml:"serviceName"`
Metadata interface{} `yaml:"metadata"`
}
type ScheduleTaskReq struct {
Name string `json:"name"`
Synergy string `json:"synergy"`
Description string `json:"description"`
Strategy string `json:"strategy"`
Tasks []TaskInfo `json:"tasks"`
}
type TaskInfo struct {
TaskId int64 `json:"taskId,optional"`
ServiceName string `json:"serviceName"`
Metadata interface{} `json:"metadata"`
}
type TaskListResp struct {
TotalCount int `json:"totalCount"`
CardTime float32 `json:"cardTime"`
@ -1570,8 +1584,8 @@ type NotebookResp struct {
Volume VolumeRes `json:"volume,omitempty" copier:"Volume"`
WorkspaceId string `json:"workspace_id,omitempty" copier:"WorkspaceId"`
Feature string `json:"feature,omitempty" copier:"Feature"`
CreateAt int64 `json:"create_at,omitempty" copier:"CreateAt"` // *
Hooks Hooks `json:"hooks,omitempty" copier:"Hooks"`
CreateAt int64 `json:"create_at,omitempty" copier:"CreateAt"` // *
Hooks Hooks `json:"hooks,omitempty" copier:"Hooks"` // *
Tags []string `json:"tags,omitempty" copier:"Tags"` // *
UpdateAt int64 `json:"update_at,omitempty" copier:"UpdateAt"` // *
UserNotebookResp UserNotebookResp `json:"user,omitempty" copier:"UserNotebookResp"` // *