forked from JointCloud/JCC-CSScheduler
86 lines
2.4 KiB
Go
86 lines
2.4 KiB
Go
package http
|
|
|
|
import (
|
|
"io"
|
|
"net/http"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"gitlink.org.cn/cloudream/common/consts/errorcode"
|
|
"gitlink.org.cn/cloudream/common/pkgs/logger"
|
|
schsdk "gitlink.org.cn/cloudream/common/sdks/scheduler"
|
|
cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
|
|
"gitlink.org.cn/cloudream/common/utils/serder"
|
|
)
|
|
|
|
type JobSetService struct {
|
|
*Server
|
|
}
|
|
|
|
func (s *Server) JobSetSvc() *JobSetService {
|
|
return &JobSetService{
|
|
Server: s,
|
|
}
|
|
}
|
|
|
|
type JobSetSubmitResp struct {
|
|
JobSetID schsdk.JobSetID `json:"jobSetID"`
|
|
FilesUploadScheme schsdk.JobSetFilesUploadScheme `json:"filesUploadScheme"`
|
|
}
|
|
|
|
func (s *JobSetService) Submit(ctx *gin.Context) {
|
|
log := logger.WithField("HTTP", "JobSet.Submit")
|
|
|
|
bodyData, err := io.ReadAll(ctx.Request.Body)
|
|
if err != nil {
|
|
log.Warnf("reading request body: %s", err.Error())
|
|
ctx.JSON(http.StatusOK, Failed(errorcode.OperationFailed, "read request body failed"))
|
|
return
|
|
}
|
|
|
|
jobSetInfo, err := serder.JSONToObjectEx[schsdk.JobSetInfo](bodyData)
|
|
if err != nil {
|
|
log.Warnf("parsing request body: %s", err.Error())
|
|
ctx.JSON(http.StatusOK, Failed(errorcode.OperationFailed, "parse request body failed"))
|
|
return
|
|
}
|
|
|
|
jobsetID, uploadScheme, err := s.svc.JobSetSvc().Submit(jobSetInfo)
|
|
if err != nil {
|
|
log.Warnf("submitting jobset: %s", err.Error())
|
|
ctx.JSON(http.StatusOK, Failed(errorcode.OperationFailed, "submit jobset failed"))
|
|
return
|
|
}
|
|
|
|
ctx.JSON(http.StatusOK, OK(JobSetSubmitResp{
|
|
JobSetID: jobsetID,
|
|
FilesUploadScheme: *uploadScheme,
|
|
}))
|
|
}
|
|
|
|
type JobSetLocalFileUploadedReq struct {
|
|
JobSetID schsdk.JobSetID `json:"jobSetID" binding:"required"`
|
|
LocalPath string `json:"localPath" binding:"required"`
|
|
Error string `json:"error"`
|
|
PackageID cdssdk.PackageID `json:"packageID"`
|
|
}
|
|
|
|
func (s *JobSetService) LocalFileUploaded(ctx *gin.Context) {
|
|
log := logger.WithField("HTTP", "JobSet.LocalFileUploaded")
|
|
|
|
var req JobSetLocalFileUploadedReq
|
|
if err := ctx.ShouldBindJSON(&req); err != nil {
|
|
log.Warnf("binding body: %s", err.Error())
|
|
ctx.JSON(http.StatusBadRequest, Failed(errorcode.BadArgument, "missing argument or invalid argument"))
|
|
return
|
|
}
|
|
|
|
err := s.svc.JobSetSvc().LocalFileUploaded(req.JobSetID, req.LocalPath, req.Error, req.PackageID)
|
|
if err != nil {
|
|
log.Warnf("setting local file: %s", err.Error())
|
|
ctx.JSON(http.StatusBadRequest, Failed(errorcode.OperationFailed, "set local file failed"))
|
|
return
|
|
}
|
|
|
|
ctx.JSON(http.StatusOK, OK(nil))
|
|
}
|