diff --git a/custom/conf/app.ini.sample b/custom/conf/app.ini.sample index 350889a3f..ccebe30fd 100755 --- a/custom/conf/app.ini.sample +++ b/custom/conf/app.ini.sample @@ -1084,6 +1084,7 @@ LOCATION = cn-south-222 BASE_PATH = attachment/ [modelarts] +ORGANIZATION = modelarts ENDPOINT = https://modelarts.cn-south-222.ai.pcl.cn PROJECT_ID = edfccf24aace4e17a56da6bcbb55a5aa PROJECT_NAME = cn-south-222_test diff --git a/modules/modelarts/modelarts.go b/modules/modelarts/modelarts.go index 2d00bd0fd..720eee309 100755 --- a/modules/modelarts/modelarts.go +++ b/modules/modelarts/modelarts.go @@ -43,8 +43,9 @@ const ( OutputPath = "/output/" LogPath = "/log/" JobPath = "/job/" - OrderDesc = "desc" - OrderAsc = "asc" + OrderDesc = "desc" //向下查询 + OrderAsc = "asc" //向上查询 + Lines = 20 TrainUrl = "train_url" DataUrl = "data_url" ) diff --git a/modules/setting/setting.go b/modules/setting/setting.go index 0899f3f34..137a74fa1 100755 --- a/modules/setting/setting.go +++ b/modules/setting/setting.go @@ -471,6 +471,7 @@ var ( ModelArtsUsername string ModelArtsPassword string ModelArtsDomain string + AllowedOrg string ) // DateLang transforms standard language locale name to corresponding value in datetime plugin. @@ -1179,6 +1180,7 @@ func NewContext() { ModelArtsUsername = sec.Key("USERNAME").MustString("") ModelArtsPassword = sec.Key("PASSWORD").MustString("") ModelArtsDomain = sec.Key("DOMAIN").MustString("cn-south-222") + AllowedOrg = sec.Key("ORGANIZATION").MustString("") } func loadInternalToken(sec *ini.Section) string { diff --git a/routers/api/v1/repo/modelarts.go b/routers/api/v1/repo/modelarts.go index c654b9c26..31fec40f8 100755 --- a/routers/api/v1/repo/modelarts.go +++ b/routers/api/v1/repo/modelarts.go @@ -105,7 +105,7 @@ func TrainJobGetLog(ctx *context.APIContext) { return } - result, err := modelarts.GetTrainJobLog(jobID, strconv.FormatInt(task.VersionID, 10), baseLine, logFileName, order, 20) + result, err := modelarts.GetTrainJobLog(jobID, strconv.FormatInt(task.VersionID, 10), baseLine, logFileName, order, modelarts.Lines) if err != nil { log.Error("GetTrainJobLog(%s) failed:%v", jobID, err.Error()) ctx.JSON(http.StatusInternalServerError, map[string]interface{}{ diff --git a/routers/repo/modelarts.go b/routers/repo/modelarts.go index 567c898af..b5bab1608 100755 --- a/routers/repo/modelarts.go +++ b/routers/repo/modelarts.go @@ -7,6 +7,7 @@ import ( "code.gitea.io/gitea/modules/storage" "encoding/json" "errors" + "fmt" "github.com/unknwon/com" "io" "net/http" @@ -257,6 +258,15 @@ func NotebookDel(ctx *context.Context) { func TrainJobIndex(ctx *context.Context) { MustEnableModelArts(ctx) + + can, err := canUserCreateTrainJob(ctx.User.ID) + if err != nil { + ctx.ServerError("canUserCreateTrainJob", err) + return + } + + ctx.Data["CanCreate"] = can + repo := ctx.Repo.Repository page := ctx.QueryInt("page") if page <= 0 { @@ -288,6 +298,18 @@ func TrainJobIndex(ctx *context.Context) { func TrainJobNew(ctx *context.Context) { ctx.Data["PageIsTrainJob"] = true + can, err := canUserCreateTrainJob(ctx.User.ID) + if err != nil { + ctx.ServerError("canUserCreateTrainJob", err) + return + } + + if !can { + log.Error("the user can not create train-job") + ctx.ServerError("the user can not create train-job", fmt.Errorf("the user can not create train-job")) + return + } + t := time.Now() var jobName = cutString(ctx.User.Name, 5) + t.Format("2006010215") + strconv.Itoa(int(t.Unix()))[5:] ctx.Data["job_name"] = jobName @@ -352,6 +374,18 @@ func TrainJobCreate(ctx *context.Context, form auth.CreateModelArtsTrainJobForm) logObsPath := "/" + setting.Bucket + modelarts.JobPath + jobName + modelarts.LogPath dataPath := "/" + setting.Bucket + "/" + setting.BasePath + path.Join(uuid[0:1], uuid[1:2]) + "/" + uuid + "/" + can, err := canUserCreateTrainJob(ctx.User.ID) + if err != nil { + ctx.ServerError("canUserCreateTrainJob", err) + return + } + + if !can { + log.Error("the user can not create train-job") + ctx.RenderWithErr("the user can not create train-job", tplModelArtsTrainJobNew, &form) + return + } + //param check if err := paramCheckCreateTrainJob(form); err != nil { log.Error("paramCheckCreateTrainJob failed:(%v)", err) @@ -460,7 +494,7 @@ func TrainJobCreate(ctx *context.Context, form auth.CreateModelArtsTrainJobForm) Parameters: param, } - err := modelarts.GenerateTrainJob(ctx, req) + err = modelarts.GenerateTrainJob(ctx, req) if err != nil { log.Error("GenerateTrainJob failed:%v", err.Error()) ctx.RenderWithErr(err.Error(), tplModelArtsTrainJobNew, &form) @@ -624,7 +658,7 @@ func TrainJobGetLog(ctx *context.Context) { return } - result, err := modelarts.GetTrainJobLog(jobID, strconv.FormatInt(task.VersionID, 10), baseLine, logFileName, order, 20) + result, err := modelarts.GetTrainJobLog(jobID, strconv.FormatInt(task.VersionID, 10), baseLine, logFileName, order, modelarts.Lines) if err != nil { log.Error("GetTrainJobLog(%s) failed:%v", jobID, err.Error()) ctx.RenderWithErr(err.Error(), tplModelArtsTrainJobShow, nil) @@ -648,7 +682,7 @@ func trainJobGetLog(jobID string) (*models.GetTrainJobLogFileNamesResult, *model return nil, nil, err } - result, err := modelarts.GetTrainJobLog(jobID, strconv.FormatInt(task.VersionID, 10), "", resultLogFile.LogFileList[0], modelarts.OrderDesc, 20) + result, err := modelarts.GetTrainJobLog(jobID, strconv.FormatInt(task.VersionID, 10), "", resultLogFile.LogFileList[0], modelarts.OrderDesc, modelarts.Lines) if err != nil { log.Error("GetTrainJobLog(%s) failed:%v", jobID, err.Error()) return nil, nil, err @@ -700,3 +734,13 @@ func TrainJobStop(ctx *context.Context) { ctx.Redirect(setting.AppSubURL + ctx.Repo.RepoLink + "/modelarts/train-job") } + +func canUserCreateTrainJob(uid int64) (bool, error) { + org, err := models.GetOrgByName(setting.AllowedOrg) + if err != nil { + log.Error("get allowed org failed: ", setting.AllowedOrg) + return false, err + } + + return org.IsOrgMember(uid) +} diff --git a/templates/repo/modelarts/trainjob/show.tmpl b/templates/repo/modelarts/trainjob/show.tmpl index fa4e739e0..5616c27be 100755 --- a/templates/repo/modelarts/trainjob/show.tmpl +++ b/templates/repo/modelarts/trainjob/show.tmpl @@ -164,7 +164,7 @@ if(parseInt(scrollTop) + divHeight + 29 == scrollHeight){ var end_line = $('input[name=end_line]').val() - $.get(`/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${jobID}/log?file_name=${file_name}&base_line=${end_line}&order=asc`, (data) => { + $.get(`/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${jobID}/log?file_name=${file_name}&base_line=${end_line}&order=desc`, (data) => { if (data.lines == 0){ $('.header').text('您已翻阅至日志底部') $('.message').css('display', 'block') @@ -173,7 +173,7 @@ }, 1000) }else{ $('input[name=end_line]').val(data.EndLine) - $('.log').append('
' + data.Content + '') + $('.log').append('
' + data.Content)
}
}).fail(function(err) {
console.log(err);
@@ -181,16 +181,16 @@
}
if(scrollTop == 0){
var start_line = $('input[name=start_line]').val()
- $.get(`/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${jobID}/log?file_name=${file_name}&base_line=${start_line}&order=desc`, (data) => {
+ $.get(`/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${jobID}/log?file_name=${file_name}&base_line=${start_line}&order=asc`, (data) => {
if (data.lines == 0){
- $('.header').text('您已翻阅至日志底部')
+ $('.header').text('您已翻阅至日志顶部')
$('.message').css('display', 'block')
setTimeout(function(){
$('.message').css('display', 'none')
}, 1000)
}else{
$('input[name=start_line]').val(data.StartLine) //如果变动就改变所对应的值
- $(".log").prepend('' + data.Content + '/pre')
+ $(".log").prepend('' + data.Content)
}
}).fail(function(err) {
console.log(err);