Browse Source

Merge pull request 'V20211213.patch合入develop' (#1020) from V20211213.patch into develop

Reviewed-on: https://git.openi.org.cn/OpenI/aiforge/pulls/1020
tags/v1.21.12.1
lewis 4 years ago
parent
commit
55fb2b7525
17 changed files with 271 additions and 85 deletions
  1. +53
    -0
      models/cloudbrain.go
  2. +2
    -2
      modules/context/repo.go
  3. +95
    -24
      modules/git/repo_branch.go
  4. +28
    -23
      modules/git/repo_tag.go
  5. +8
    -0
      modules/git/utils.go
  6. +5
    -4
      modules/repository/branch.go
  7. +1
    -1
      routers/api/v1/repo/branch.go
  8. +1
    -1
      routers/repo/branch.go
  9. +16
    -1
      routers/repo/cloudbrain.go
  10. +2
    -2
      routers/repo/compare.go
  11. +1
    -1
      routers/repo/issue.go
  12. +50
    -20
      routers/repo/modelarts.go
  13. +1
    -1
      routers/repo/repo_statistic.go
  14. +1
    -1
      services/mirror/mirror.go
  15. +1
    -1
      services/pull/pull.go
  16. +5
    -2
      templates/repo/modelarts/trainjob/show.tmpl
  17. +1
    -1
      templates/repo/modelarts/trainjob/version_new.tmpl

+ 53
- 0
models/cloudbrain.go View File

@@ -31,6 +31,7 @@ const (
JobTypeBrainScore JobType = "BRAINSCORE" JobTypeBrainScore JobType = "BRAINSCORE"
JobTypeTrain JobType = "TRAIN" JobTypeTrain JobType = "TRAIN"


//notebook
ModelArtsCreateQueue ModelArtsJobStatus = "CREATE_QUEUING" //免费资源创建排队中 ModelArtsCreateQueue ModelArtsJobStatus = "CREATE_QUEUING" //免费资源创建排队中
ModelArtsCreating ModelArtsJobStatus = "CREATING" //创建中 ModelArtsCreating ModelArtsJobStatus = "CREATING" //创建中
ModelArtsCreateFailed ModelArtsJobStatus = "CREATE_FAILED" //创建失败 ModelArtsCreateFailed ModelArtsJobStatus = "CREATE_FAILED" //创建失败
@@ -46,6 +47,30 @@ const (
ModelArtsDeleted ModelArtsJobStatus = "DELETED" //已删除 ModelArtsDeleted ModelArtsJobStatus = "DELETED" //已删除
ModelArtsResizing ModelArtsJobStatus = "RESIZING" //规格变更中 ModelArtsResizing ModelArtsJobStatus = "RESIZING" //规格变更中
ModelArtsResizFailed ModelArtsJobStatus = "RESIZE_FAILED" //规格变更失败 ModelArtsResizFailed ModelArtsJobStatus = "RESIZE_FAILED" //规格变更失败

//trainjob
ModelArtsTrainJobUnknown ModelArtsJobStatus = "UNKNOWN" //作业状态未知
ModelArtsTrainJobInit ModelArtsJobStatus = "INIT" //作业初始化状态
ModelArtsTrainJobImageCreating ModelArtsJobStatus = "IMAGE_CREATING" //作业镜像正在创建
ModelArtsTrainJobImageFailed ModelArtsJobStatus = "IMAGE_FAILED" //作业镜像创建失败
ModelArtsTrainJobSubmitTrying ModelArtsJobStatus = "SUBMIT_TRYING" //作业正在提交
ModelArtsTrainJobSubmitFailed ModelArtsJobStatus = "SUBMIT_FAILED" //作业提交失败
ModelArtsTrainJobDeleteFailed ModelArtsJobStatus = "DELETE_FAILED" //作业删除失败
ModelArtsTrainJobWaiting ModelArtsJobStatus = "WAITING" //作业正在排队中
ModelArtsTrainJobRunning ModelArtsJobStatus = "RUNNING" //作业正在运行中
ModelArtsTrainJobKilling ModelArtsJobStatus = "KILLING" //作业正在取消
ModelArtsTrainJobCompleted ModelArtsJobStatus = "COMPLETED" //作业已经完成
ModelArtsTrainJobFailed ModelArtsJobStatus = "FAILED" //作业运行失败
ModelArtsTrainJobKilled ModelArtsJobStatus = "KILLED" //作业取消成功
ModelArtsTrainJobCanceled ModelArtsJobStatus = "CANCELED" //作业取消
ModelArtsTrainJobLost ModelArtsJobStatus = "LOST" //作业丢失
ModelArtsTrainJobScaling ModelArtsJobStatus = "SCALING" //作业正在扩容
ModelArtsTrainJobSubmitModelFailed ModelArtsJobStatus = "SUBMIT_MODEL_FAILED" //提交模型失败
ModelArtsTrainJobDeployServiceFailed ModelArtsJobStatus = "DEPLOY_SERVICE_FAILED" //部署服务失败
ModelArtsTrainJobCheckInit ModelArtsJobStatus = "CHECK_INIT" //审核作业初始化
ModelArtsTrainJobCheckRunning ModelArtsJobStatus = "CHECK_RUNNING" //审核作业正在运行中
ModelArtsTrainJobCheckRunningCompleted ModelArtsJobStatus = "CHECK_RUNNING_COMPLETED" //审核作业已经完成
ModelArtsTrainJobCheckFailed ModelArtsJobStatus = "CHECK_FAILED" //审核作业失败
) )


type Cloudbrain struct { type Cloudbrain struct {
@@ -1091,3 +1116,31 @@ func CanDelJob(isSigned bool, user *User, job *CloudbrainInfo) bool {
} }
return false return false
} }

func GetCloudBrainUnStoppedJob() ([]*Cloudbrain, error) {
cloudbrains := make([]*Cloudbrain, 0, 10)
return cloudbrains, x.
NotIn("status",
JobStopped, JobSucceeded, JobFailed, ModelArtsCreateFailed, ModelArtsStartFailed, ModelArtsUnavailable, ModelArtsResizFailed, ModelArtsDeleted,
ModelArtsStopped, ModelArtsTrainJobCanceled, ModelArtsTrainJobCheckFailed, ModelArtsTrainJobCompleted, ModelArtsTrainJobDeleteFailed, ModelArtsTrainJobDeployServiceFailed,
ModelArtsTrainJobFailed, ModelArtsTrainJobImageFailed, ModelArtsTrainJobKilled, ModelArtsTrainJobLost, ModelArtsTrainJobSubmitFailed, ModelArtsTrainJobSubmitModelFailed).
Limit(100).
Find(&cloudbrains)
}

func GetCloudbrainCountByUserID(userID int64) (int, error) {
count, err := x.In("status", JobWaiting, JobRunning).And("job_type = ? and user_id = ? and type = ?", JobTypeDebug, userID, TypeCloudBrainOne).Count(new(Cloudbrain))
return int(count), err
}

func GetCloudbrainNotebookCountByUserID(userID int64) (int, error) {
count, err := x.In("status", ModelArtsCreateQueue, ModelArtsCreating, ModelArtsStarting, ModelArtsReadyToStart, ModelArtsResizing, ModelArtsStartQueuing, ModelArtsRunning, ModelArtsRestarting).
And("job_type = ? and user_id = ? and type = ?", JobTypeDebug, userID, TypeCloudBrainTwo).Count(new(Cloudbrain))
return int(count), err
}

func GetCloudbrainTrainJobCountByUserID(userID int64) (int, error) {
count, err := x.In("status", ModelArtsTrainJobInit, ModelArtsTrainJobImageCreating, ModelArtsTrainJobSubmitTrying, ModelArtsTrainJobWaiting, ModelArtsTrainJobRunning, ModelArtsTrainJobScaling, ModelArtsTrainJobCheckInit, ModelArtsTrainJobCheckRunning, ModelArtsTrainJobCheckRunningCompleted).
And("job_type = ? and user_id = ? and type = ?", JobTypeTrain, userID, TypeCloudBrainTwo).Count(new(Cloudbrain))
return int(count), err
}

+ 2
- 2
modules/context/repo.go View File

@@ -524,7 +524,7 @@ func RepoAssignment() macaron.Handler {
} }
ctx.Data["Tags"] = tags ctx.Data["Tags"] = tags


brs, err := ctx.Repo.GitRepo.GetBranches()
brs, _, err := ctx.Repo.GitRepo.GetBranches(0, 0)
if err != nil { if err != nil {
ctx.ServerError("GetBranches", err) ctx.ServerError("GetBranches", err)
return return
@@ -712,7 +712,7 @@ func RepoRefByType(refType RepoRefType) macaron.Handler {
refName = ctx.Repo.Repository.DefaultBranch refName = ctx.Repo.Repository.DefaultBranch
ctx.Repo.BranchName = refName ctx.Repo.BranchName = refName
if !ctx.Repo.GitRepo.IsBranchExist(refName) { if !ctx.Repo.GitRepo.IsBranchExist(refName) {
brs, err := ctx.Repo.GitRepo.GetBranches()
brs, _, err := ctx.Repo.GitRepo.GetBranches(0, 0)
if err != nil { if err != nil {
ctx.ServerError("GetBranches", err) ctx.ServerError("GetBranches", err)
return return


+ 95
- 24
modules/git/repo_branch.go View File

@@ -6,7 +6,9 @@
package git package git


import ( import (
"bufio"
"fmt" "fmt"
"io"
"strings" "strings"


"github.com/go-git/go-git/v5/plumbing" "github.com/go-git/go-git/v5/plumbing"
@@ -74,25 +76,6 @@ func (repo *Repository) SetDefaultBranch(name string) error {
return err return err
} }


// GetBranches returns all branches of the repository.
func (repo *Repository) GetBranches() ([]string, error) {
var branchNames []string

branches, err := repo.gogitRepo.Branches()
if err != nil {
return nil, err
}

_ = branches.ForEach(func(branch *plumbing.Reference) error {
branchNames = append(branchNames, strings.TrimPrefix(branch.Name().String(), BranchPrefix))
return nil
})

// TODO: Sort?

return branchNames, nil
}

// GetBranch returns a branch by it's name // GetBranch returns a branch by it's name
func (repo *Repository) GetBranch(branch string) (*Branch, error) { func (repo *Repository) GetBranch(branch string) (*Branch, error) {
if !repo.IsBranchExist(branch) { if !repo.IsBranchExist(branch) {
@@ -106,16 +89,16 @@ func (repo *Repository) GetBranch(branch string) (*Branch, error) {
} }


// GetBranchesByPath returns a branch by it's path // GetBranchesByPath returns a branch by it's path
func GetBranchesByPath(path string) ([]*Branch, error) {
func GetBranchesByPath(path string, skip, limit int) ([]*Branch, int, error) {
gitRepo, err := OpenRepository(path) gitRepo, err := OpenRepository(path)
if err != nil { if err != nil {
return nil, err
return nil, 0, err
} }
defer gitRepo.Close() defer gitRepo.Close()


brs, err := gitRepo.GetBranches()
brs, countAll, err := gitRepo.GetBranches(skip, limit)
if err != nil { if err != nil {
return nil, err
return nil, 0, err
} }


branches := make([]*Branch, len(brs)) branches := make([]*Branch, len(brs))
@@ -127,7 +110,7 @@ func GetBranchesByPath(path string) ([]*Branch, error) {
} }
} }


return branches, nil
return branches, countAll, nil
} }


// DeleteBranchOptions Option(s) for delete branch // DeleteBranchOptions Option(s) for delete branch
@@ -183,3 +166,91 @@ func (repo *Repository) RemoveRemote(name string) error {
func (branch *Branch) GetCommit() (*Commit, error) { func (branch *Branch) GetCommit() (*Commit, error) {
return branch.gitRepo.GetBranchCommit(branch.Name) return branch.gitRepo.GetBranchCommit(branch.Name)
} }

// GetBranches returns branches from the repository, skipping skip initial branches and
// returning at most limit branches, or all branches if limit is 0.
func (repo *Repository) GetBranches(skip, limit int) ([]string, int, error) {
return callShowRef(repo.Path, BranchPrefix, "--heads", skip, limit)
}

// callShowRef return refs, if limit = 0 it will not limit
func callShowRef(repoPath, prefix, arg string, skip, limit int) (branchNames []string, countAll int, err error) {
stdoutReader, stdoutWriter := io.Pipe()
defer func() {
_ = stdoutReader.Close()
_ = stdoutWriter.Close()
}()

go func() {
stderrBuilder := &strings.Builder{}
err := NewCommand("show-ref", arg).RunInDirPipeline(repoPath, stdoutWriter, stderrBuilder)
if err != nil {
if stderrBuilder.Len() == 0 {
_ = stdoutWriter.Close()
return
}
_ = stdoutWriter.CloseWithError(ConcatenateError(err, stderrBuilder.String()))
} else {
_ = stdoutWriter.Close()
}
}()

i := 0
bufReader := bufio.NewReader(stdoutReader)
for i < skip {
_, isPrefix, err := bufReader.ReadLine()
if err == io.EOF {
return branchNames, i, nil
}
if err != nil {
return nil, 0, err
}
if !isPrefix {
i++
}
}
for limit == 0 || i < skip+limit {
// The output of show-ref is simply a list:
// <sha> SP <ref> LF
_, err := bufReader.ReadSlice(' ')
for err == bufio.ErrBufferFull {
// This shouldn't happen but we'll tolerate it for the sake of peace
_, err = bufReader.ReadSlice(' ')
}
if err == io.EOF {
return branchNames, i, nil
}
if err != nil {
return nil, 0, err
}

branchName, err := bufReader.ReadString('\n')
if err == io.EOF {
// This shouldn't happen... but we'll tolerate it for the sake of peace
return branchNames, i, nil
}
if err != nil {
return nil, i, err
}
branchName = strings.TrimPrefix(branchName, prefix)
if len(branchName) > 0 {
branchName = branchName[:len(branchName)-1]
}
branchNames = append(branchNames, branchName)
i++
}
// count all refs
for limit != 0 {
_, isPrefix, err := bufReader.ReadLine()
if err == io.EOF {
return branchNames, i, nil
}
if err != nil {
return nil, 0, err
}
if !isPrefix {
i++
}
}
return branchNames, i, nil
}

+ 28
- 23
modules/git/repo_tag.go View File

@@ -10,7 +10,6 @@ import (
"strings" "strings"


"github.com/go-git/go-git/v5/plumbing" "github.com/go-git/go-git/v5/plumbing"
"github.com/mcuadros/go-version"
) )


// TagPrefix tags prefix path on the repository // TagPrefix tags prefix path on the repository
@@ -225,29 +224,35 @@ func (repo *Repository) GetTagInfos(page, pageSize int) ([]*Tag, error) {
return tags, nil return tags, nil
} }


// GetTags returns all tags of the repository.
func (repo *Repository) GetTags() ([]string, error) {
var tagNames []string

tags, err := repo.gogitRepo.Tags()
if err != nil {
return nil, err
}
//// GetTags returns all tags of the repository.
//func (repo *Repository) GetTags() ([]string, error) {
// var tagNames []string
//
// tags, err := repo.gogitRepo.Tags()
// if err != nil {
// return nil, err
// }
//
// _ = tags.ForEach(func(tag *plumbing.Reference) error {
// tagNames = append(tagNames, strings.TrimPrefix(tag.Name().String(), TagPrefix))
// return nil
// })
//
// version.Sort(tagNames)
//
// // Reverse order
// for i := 0; i < len(tagNames)/2; i++ {
// j := len(tagNames) - i - 1
// tagNames[i], tagNames[j] = tagNames[j], tagNames[i]
// }
//
// return tagNames, nil
//}


_ = tags.ForEach(func(tag *plumbing.Reference) error {
tagNames = append(tagNames, strings.TrimPrefix(tag.Name().String(), TagPrefix))
return nil
})

version.Sort(tagNames)

// Reverse order
for i := 0; i < len(tagNames)/2; i++ {
j := len(tagNames) - i - 1
tagNames[i], tagNames[j] = tagNames[j], tagNames[i]
}

return tagNames, nil
// GetTags returns all tags of the repository.
func (repo *Repository) GetTags() (tags []string, err error) {
tags, _, err = callShowRef(repo.Path, TagPrefix, "--tags", 0, 0)
return
} }


// GetTagType gets the type of the tag, either commit (simple) or tag (annotated) // GetTagType gets the type of the tag, either commit (simple) or tag (annotated)


+ 8
- 0
modules/git/utils.go View File

@@ -140,3 +140,11 @@ func ParseBool(value string) (result bool, valid bool) {
} }
return intValue != 0, true return intValue != 0, true
} }

// ConcatenateError concatenats an error with stderr string
func ConcatenateError(err error, stderr string) error {
if len(stderr) == 0 {
return err
}
return fmt.Errorf("%w - %s", err, stderr)
}

+ 5
- 4
modules/repository/branch.go View File

@@ -23,9 +23,10 @@ func GetBranch(repo *models.Repository, branch string) (*git.Branch, error) {
return gitRepo.GetBranch(branch) return gitRepo.GetBranch(branch)
} }


// GetBranches returns all the branches of a repository
func GetBranches(repo *models.Repository) ([]*git.Branch, error) {
return git.GetBranchesByPath(repo.RepoPath())
// GetBranches returns branches from the repository, skipping skip initial branches and
// returning at most limit branches, or all branches if limit is 0.
func GetBranches(repo *models.Repository, skip, limit int) ([]*git.Branch, int, error) {
return git.GetBranchesByPath(repo.RepoPath(), skip, limit)
} }


// checkBranchName validates branch name with existing repository branches // checkBranchName validates branch name with existing repository branches
@@ -36,7 +37,7 @@ func checkBranchName(repo *models.Repository, name string) error {
} }
defer gitRepo.Close() defer gitRepo.Close()


branches, err := GetBranches(repo)
branches, _, err := GetBranches(repo, 0, 0)
if err != nil { if err != nil {
return err return err
} }


+ 1
- 1
routers/api/v1/repo/branch.go View File

@@ -204,7 +204,7 @@ func ListBranches(ctx *context.APIContext) {
// "200": // "200":
// "$ref": "#/responses/BranchList" // "$ref": "#/responses/BranchList"


branches, err := repo_module.GetBranches(ctx.Repo.Repository)
branches, _, err := repo_module.GetBranches(ctx.Repo.Repository,0,0)
if err != nil { if err != nil {
ctx.Error(http.StatusInternalServerError, "GetBranches", err) ctx.Error(http.StatusInternalServerError, "GetBranches", err)
return return


+ 1
- 1
routers/repo/branch.go View File

@@ -181,7 +181,7 @@ func deleteBranch(ctx *context.Context, branchName string) error {
} }


func loadBranches(ctx *context.Context) []*Branch { func loadBranches(ctx *context.Context) []*Branch {
rawBranches, err := repo_module.GetBranches(ctx.Repo.Repository)
rawBranches, _, err := repo_module.GetBranches(ctx.Repo.Repository, 0, 0)
if err != nil { if err != nil {
ctx.ServerError("GetBranches", err) ctx.ServerError("GetBranches", err)
return nil return nil


+ 16
- 1
routers/repo/cloudbrain.go View File

@@ -216,7 +216,22 @@ func CloudBrainCreate(ctx *context.Context, form auth.CreateCloudBrainForm) {
return return
} }


_, err := models.GetCloudbrainByName(jobName)
count, err := models.GetCloudbrainCountByUserID(ctx.User.ID)
if err != nil {
log.Error("GetCloudbrainCountByUserID failed:%v", err, ctx.Data["MsgID"])
cloudBrainNewDataPrepare(ctx)
ctx.RenderWithErr("system error", tplCloudBrainNew, &form)
return
} else {
if count >= 1 {
log.Error("the user already has running or waiting task", ctx.Data["MsgID"])
cloudBrainNewDataPrepare(ctx)
ctx.RenderWithErr("you have already a running or waiting task, can not create more", tplCloudBrainNew, &form)
return
}
}

_, err = models.GetCloudbrainByName(jobName)
if err == nil { if err == nil {
log.Error("the job name did already exist", ctx.Data["MsgID"]) log.Error("the job name did already exist", ctx.Data["MsgID"])
cloudBrainNewDataPrepare(ctx) cloudBrainNewDataPrepare(ctx)


+ 2
- 2
routers/repo/compare.go View File

@@ -507,7 +507,7 @@ func getBranchesForRepo(user *models.User, repo *models.Repository) (bool, []str
} }
defer gitRepo.Close() defer gitRepo.Close()


branches, err := gitRepo.GetBranches()
branches, _, err := gitRepo.GetBranches(0, 0)
if err != nil { if err != nil {
return false, nil, err return false, nil, err
} }
@@ -528,7 +528,7 @@ func CompareDiff(ctx *context.Context) {
} }


if ctx.Data["PageIsComparePull"] == true { if ctx.Data["PageIsComparePull"] == true {
headBranches, err := headGitRepo.GetBranches()
headBranches, _, err := headGitRepo.GetBranches(0,0)
if err != nil { if err != nil {
ctx.ServerError("GetBranches", err) ctx.ServerError("GetBranches", err)
return return


+ 1
- 1
routers/repo/issue.go View File

@@ -424,7 +424,7 @@ func RetrieveRepoMetas(ctx *context.Context, repo *models.Repository, isPull boo
return nil return nil
} }


brs, err := ctx.Repo.GitRepo.GetBranches()
brs, _, err := ctx.Repo.GitRepo.GetBranches(0,0)
if err != nil { if err != nil {
ctx.ServerError("GetBranches", err) ctx.ServerError("GetBranches", err)
return nil return nil


+ 50
- 20
routers/repo/modelarts.go View File

@@ -116,7 +116,22 @@ func NotebookCreate(ctx *context.Context, form auth.CreateModelArtsNotebookForm)
description := form.Description description := form.Description
flavor := form.Flavor flavor := form.Flavor


err := modelarts.GenerateTask(ctx, jobName, uuid, description, flavor)
count, err := models.GetCloudbrainNotebookCountByUserID(ctx.User.ID)
if err != nil {
log.Error("GetCloudbrainNotebookCountByUserID failed:%v", err, ctx.Data["MsgID"])
cloudBrainNewDataPrepare(ctx)
ctx.RenderWithErr("system error", tplModelArtsNotebookNew, &form)
return
} else {
if count >= 1 {
log.Error("the user already has running or waiting task", ctx.Data["MsgID"])
cloudBrainNewDataPrepare(ctx)
ctx.RenderWithErr("you have already a running or waiting task, can not create more", tplModelArtsNotebookNew, &form)
return
}
}

err = modelarts.GenerateTask(ctx, jobName, uuid, description, flavor)
if err != nil { if err != nil {
ctx.RenderWithErr(err.Error(), tplModelArtsNotebookNew, &form) ctx.RenderWithErr(err.Error(), tplModelArtsNotebookNew, &form)
return return
@@ -362,13 +377,6 @@ func trainJobNewDataPrepare(ctx *context.Context) error {
outputObsPath := "/" + setting.Bucket + modelarts.JobPath + jobName + modelarts.OutputPath outputObsPath := "/" + setting.Bucket + modelarts.JobPath + jobName + modelarts.OutputPath
ctx.Data["train_url"] = outputObsPath ctx.Data["train_url"] = outputObsPath


Branches, err := ctx.Repo.GitRepo.GetBranches()
if err != nil {
ctx.ServerError("GetBranches error:", err)
return err
}
ctx.Data["Branches"] = Branches
ctx.Data["BranchesCount"] = len(Branches)
ctx.Data["params"] = "" ctx.Data["params"] = ""
ctx.Data["BranchName"] = ctx.Repo.BranchName ctx.Data["BranchName"] = ctx.Repo.BranchName


@@ -439,14 +447,6 @@ func ErrorNewDataPrepare(ctx *context.Context, form auth.CreateModelArtsTrainJob
outputObsPath := "/" + setting.Bucket + modelarts.JobPath + jobName + modelarts.OutputPath outputObsPath := "/" + setting.Bucket + modelarts.JobPath + jobName + modelarts.OutputPath
ctx.Data["train_url"] = outputObsPath ctx.Data["train_url"] = outputObsPath


Branches, err := ctx.Repo.GitRepo.GetBranches()
if err != nil {
ctx.ServerError("GetBranches error:", err)
return err
}
ctx.Data["Branches"] = Branches
ctx.Data["BranchesCount"] = len(Branches)

configList, err := getConfigList(modelarts.PerPage, 1, modelarts.SortByCreateTime, "desc", "", modelarts.ConfigTypeCustom) configList, err := getConfigList(modelarts.PerPage, 1, modelarts.SortByCreateTime, "desc", "", modelarts.ConfigTypeCustom)
if err != nil { if err != nil {
ctx.ServerError("getConfigList failed:", err) ctx.ServerError("getConfigList failed:", err)
@@ -542,13 +542,13 @@ func trainJobNewVersionDataPrepare(ctx *context.Context) error {
outputObsPath := "/" + setting.Bucket + modelarts.JobPath + jobName + modelarts.OutputPath outputObsPath := "/" + setting.Bucket + modelarts.JobPath + jobName + modelarts.OutputPath
ctx.Data["train_url"] = outputObsPath ctx.Data["train_url"] = outputObsPath


Branches, err := ctx.Repo.GitRepo.GetBranches()
branches, _, err := ctx.Repo.GitRepo.GetBranches(0, 0)
if err != nil { if err != nil {
ctx.ServerError("GetBranches error:", err) ctx.ServerError("GetBranches error:", err)
return err return err
} }


ctx.Data["branches"] = Branches
ctx.Data["branches"] = branches
ctx.Data["branch_name"] = task.BranchName ctx.Data["branch_name"] = task.BranchName
ctx.Data["description"] = task.Description ctx.Data["description"] = task.Description
ctx.Data["boot_file"] = task.BootFile ctx.Data["boot_file"] = task.BootFile
@@ -631,12 +631,12 @@ func VersionErrorDataPrepare(ctx *context.Context, form auth.CreateModelArtsTrai
outputObsPath := "/" + setting.Bucket + modelarts.JobPath + jobName + modelarts.OutputPath outputObsPath := "/" + setting.Bucket + modelarts.JobPath + jobName + modelarts.OutputPath
ctx.Data["train_url"] = outputObsPath ctx.Data["train_url"] = outputObsPath


Branches, err := ctx.Repo.GitRepo.GetBranches()
branches, _, err := ctx.Repo.GitRepo.GetBranches(0, 0)
if err != nil { if err != nil {
ctx.ServerError("GetBranches error:", err) ctx.ServerError("GetBranches error:", err)
return err return err
} }
ctx.Data["branches"] = Branches
ctx.Data["branches"] = branches
ctx.Data["description"] = form.Description ctx.Data["description"] = form.Description
ctx.Data["dataset_name"] = task.DatasetName ctx.Data["dataset_name"] = task.DatasetName
ctx.Data["work_server_number"] = form.WorkServerNumber ctx.Data["work_server_number"] = form.WorkServerNumber
@@ -684,6 +684,21 @@ func TrainJobCreate(ctx *context.Context, form auth.CreateModelArtsTrainJobForm)
VersionCount := modelarts.VersionCount VersionCount := modelarts.VersionCount
EngineName := form.EngineName EngineName := form.EngineName


count, err := models.GetCloudbrainTrainJobCountByUserID(ctx.User.ID)
if err != nil {
log.Error("GetCloudbrainTrainJobCountByUserID failed:%v", err, ctx.Data["MsgID"])
ErrorNewDataPrepare(ctx, form)
ctx.RenderWithErr("system error", tplModelArtsTrainJobNew, &form)
return
} else {
if count >= 1 {
log.Error("the user already has running or waiting task", ctx.Data["MsgID"])
ErrorNewDataPrepare(ctx, form)
ctx.RenderWithErr("you have already a running or waiting task, can not create more", tplModelArtsTrainJobNew, &form)
return
}
}

if err := paramCheckCreateTrainJob(form); err != nil { if err := paramCheckCreateTrainJob(form); err != nil {
log.Error("paramCheckCreateTrainJob failed:(%v)", err) log.Error("paramCheckCreateTrainJob failed:(%v)", err)
ErrorNewDataPrepare(ctx, form) ErrorNewDataPrepare(ctx, form)
@@ -854,6 +869,21 @@ func TrainJobCreateVersion(ctx *context.Context, form auth.CreateModelArtsTrainJ
ctx.Data["PageIsTrainJob"] = true ctx.Data["PageIsTrainJob"] = true
var jobID = ctx.Params(":jobid") var jobID = ctx.Params(":jobid")


count, err := models.GetCloudbrainTrainJobCountByUserID(ctx.User.ID)
if err != nil {
log.Error("GetCloudbrainTrainJobCountByUserID failed:%v", err, ctx.Data["MsgID"])
VersionErrorDataPrepare(ctx, form)
ctx.RenderWithErr("system error", tplModelArtsTrainJobVersionNew, &form)
return
} else {
if count >= 1 {
log.Error("the user already has running or waiting task", ctx.Data["MsgID"])
VersionErrorDataPrepare(ctx, form)
ctx.RenderWithErr("you have already a running or waiting task, can not create more", tplModelArtsTrainJobVersionNew, &form)
return
}
}

latestTask, err := models.GetCloudbrainByJobIDAndIsLatestVersion(jobID, modelarts.IsLatestVersion) latestTask, err := models.GetCloudbrainByJobIDAndIsLatestVersion(jobID, modelarts.IsLatestVersion)
if err != nil { if err != nil {
ctx.ServerError("GetCloudbrainByJobIDAndIsLatestVersion faild:", err) ctx.ServerError("GetCloudbrainByJobIDAndIsLatestVersion faild:", err)


+ 1
- 1
routers/repo/repo_statistic.go View File

@@ -208,7 +208,7 @@ func RepoStatisticDaily(date string) {
maxRepoRadar.Completeness = tempRepoStat.Completeness maxRepoRadar.Completeness = tempRepoStat.Completeness
} }


if tempRepoStat.Liveness < minRepoRadar.Completeness {
if tempRepoStat.Liveness < minRepoRadar.Liveness {
minRepoRadar.Liveness = tempRepoStat.Liveness minRepoRadar.Liveness = tempRepoStat.Liveness
} }




+ 1
- 1
services/mirror/mirror.go View File

@@ -252,7 +252,7 @@ func runSync(m *models.Mirror) ([]*mirrorSyncResult, bool) {
} }
} }


branches, err := repo_module.GetBranches(m.Repo)
branches, _, err := repo_module.GetBranches(m.Repo,0,0)
if err != nil { if err != nil {
log.Error("GetBranches: %v", err) log.Error("GetBranches: %v", err)
return nil, false return nil, false


+ 1
- 1
services/pull/pull.go View File

@@ -452,7 +452,7 @@ func CloseBranchPulls(doer *models.User, repoID int64, branch string) error {


// CloseRepoBranchesPulls close all pull requests which head branches are in the given repository // CloseRepoBranchesPulls close all pull requests which head branches are in the given repository
func CloseRepoBranchesPulls(doer *models.User, repo *models.Repository) error { func CloseRepoBranchesPulls(doer *models.User, repo *models.Repository) error {
branches, err := git.GetBranchesByPath(repo.RepoPath())
branches, _, err := git.GetBranchesByPath(repo.RepoPath(), 0, 0)
if err != nil { if err != nil {
return err return err
} }


+ 5
- 2
templates/repo/modelarts/trainjob/show.tmpl View File

@@ -474,6 +474,7 @@ td, th {


<script> <script>
console.log({{.version_list_task}}) console.log({{.version_list_task}})
console.log({{.}})
$('.menu .item').tab() $('.menu .item').tab()
// $('.ui.style.accordion').accordion(); // $('.ui.style.accordion').accordion();


@@ -709,11 +710,13 @@ td, th {
} }
function logScroll(version_name) { function logScroll(version_name) {
let container = document.querySelector(`#log${version_name}`) let container = document.querySelector(`#log${version_name}`)
let scrollTop = container.scrollTop let scrollTop = container.scrollTop
let scrollHeight = container.scrollHeight let scrollHeight = container.scrollHeight
let clientHeight = container.clientHeight let clientHeight = container.clientHeight
if(parseInt(scrollTop) + clientHeight == scrollHeight || parseInt(scrollTop) + clientHeight +1 == scrollHeight || parseInt(scrollTop) + clientHeight - 1 == scrollHeight){
let scrollLeft = container.scrollLeft
if((parseInt(scrollTop) + clientHeight == scrollHeight || parseInt(scrollTop) + clientHeight +1 == scrollHeight || parseInt(scrollTop) + clientHeight - 1 == scrollHeight) && (scrollLeft===0)){
let end_line = $(`#log${version_name} input[name=end_line]`).val() let end_line = $(`#log${version_name} input[name=end_line]`).val()
$.get(`/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${jobID}/log?version_name=${version_name}&base_line=${end_line}&lines=50&order=desc`, (data) => { $.get(`/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${jobID}/log?version_name=${version_name}&base_line=${end_line}&lines=50&order=desc`, (data) => {
if (data.Lines == 0){ if (data.Lines == 0){
@@ -736,7 +739,7 @@ td, th {
console.log(err); console.log(err);
}); });
} }
if(scrollTop == 0){
if(scrollTop == 0 && scrollLeft==0){
let start_line = $(`#log${version_name} input[name=start_line]`).val() let start_line = $(`#log${version_name} input[name=start_line]`).val()
$.get(`/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${jobID}/log?version_name=${version_name}&base_line=${start_line}&lines=50&order=asc`, (data) => { $.get(`/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${jobID}/log?version_name=${version_name}&base_line=${start_line}&lines=50&order=asc`, (data) => {
if (data.Lines == 0){ if (data.Lines == 0){


+ 1
- 1
templates/repo/modelarts/trainjob/version_new.tmpl View File

@@ -346,7 +346,7 @@
{{template "base/footer" .}} {{template "base/footer" .}}


<script> <script>
let url_href = location.pathname.split('create_version')[0]
let url_href = location.pathname.split('/create_version')[0]
let url_post = location.pathname let url_post = location.pathname
let version_name = location.search.split('?version_name=')[1] let version_name = location.search.split('?version_name=')[1]
$("#parents_version").val(version_name) $("#parents_version").val(version_name)


Loading…
Cancel
Save