提交任务接口添加json形式
Former-commit-id: 8398798a0d1d2ea803d15fe3a85f01935f89aed8
This commit is contained in:
parent
b6c1f91c84
commit
e104b5158a
|
@ -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"`
|
||||
|
|
|
@ -21,6 +21,9 @@ info(
|
|||
group : core
|
||||
)
|
||||
service pcm {
|
||||
@handler scheduleTaskByYamlHandler
|
||||
post /core/scheduleTaskByYaml (scheduleTaskByYamlReq) returns ()
|
||||
|
||||
@handler scheduleTaskHandler
|
||||
post /core/scheduleTask (scheduleTaskReq) returns ()
|
||||
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
|
@ -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)
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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
|
||||
}
|
|
@ -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"` // *
|
||||
|
|
Loading…
Reference in New Issue