Browse Source

add control

tags/v1.21.12.1
lewis 4 years ago
parent
commit
e2e2acc400
6 changed files with 59 additions and 11 deletions
  1. +1
    -0
      custom/conf/app.ini.sample
  2. +3
    -2
      modules/modelarts/modelarts.go
  3. +2
    -0
      modules/setting/setting.go
  4. +1
    -1
      routers/api/v1/repo/modelarts.go
  5. +47
    -3
      routers/repo/modelarts.go
  6. +5
    -5
      templates/repo/modelarts/trainjob/show.tmpl

+ 1
- 0
custom/conf/app.ini.sample View File

@@ -1084,6 +1084,7 @@ LOCATION = cn-south-222
BASE_PATH = attachment/ BASE_PATH = attachment/


[modelarts] [modelarts]
ORGANIZATION = modelarts
ENDPOINT = https://modelarts.cn-south-222.ai.pcl.cn ENDPOINT = https://modelarts.cn-south-222.ai.pcl.cn
PROJECT_ID = edfccf24aace4e17a56da6bcbb55a5aa PROJECT_ID = edfccf24aace4e17a56da6bcbb55a5aa
PROJECT_NAME = cn-south-222_test PROJECT_NAME = cn-south-222_test


+ 3
- 2
modules/modelarts/modelarts.go View File

@@ -43,8 +43,9 @@ const (
OutputPath = "/output/" OutputPath = "/output/"
LogPath = "/log/" LogPath = "/log/"
JobPath = "/job/" JobPath = "/job/"
OrderDesc = "desc"
OrderAsc = "asc"
OrderDesc = "desc" //向下查询
OrderAsc = "asc" //向上查询
Lines = 20
TrainUrl = "train_url" TrainUrl = "train_url"
DataUrl = "data_url" DataUrl = "data_url"
) )


+ 2
- 0
modules/setting/setting.go View File

@@ -471,6 +471,7 @@ var (
ModelArtsUsername string ModelArtsUsername string
ModelArtsPassword string ModelArtsPassword string
ModelArtsDomain string ModelArtsDomain string
AllowedOrg string
) )


// DateLang transforms standard language locale name to corresponding value in datetime plugin. // DateLang transforms standard language locale name to corresponding value in datetime plugin.
@@ -1179,6 +1180,7 @@ func NewContext() {
ModelArtsUsername = sec.Key("USERNAME").MustString("") ModelArtsUsername = sec.Key("USERNAME").MustString("")
ModelArtsPassword = sec.Key("PASSWORD").MustString("") ModelArtsPassword = sec.Key("PASSWORD").MustString("")
ModelArtsDomain = sec.Key("DOMAIN").MustString("cn-south-222") ModelArtsDomain = sec.Key("DOMAIN").MustString("cn-south-222")
AllowedOrg = sec.Key("ORGANIZATION").MustString("")
} }


func loadInternalToken(sec *ini.Section) string { func loadInternalToken(sec *ini.Section) string {


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

@@ -105,7 +105,7 @@ func TrainJobGetLog(ctx *context.APIContext) {
return 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 { if err != nil {
log.Error("GetTrainJobLog(%s) failed:%v", jobID, err.Error()) log.Error("GetTrainJobLog(%s) failed:%v", jobID, err.Error())
ctx.JSON(http.StatusInternalServerError, map[string]interface{}{ ctx.JSON(http.StatusInternalServerError, map[string]interface{}{


+ 47
- 3
routers/repo/modelarts.go View File

@@ -7,6 +7,7 @@ import (
"code.gitea.io/gitea/modules/storage" "code.gitea.io/gitea/modules/storage"
"encoding/json" "encoding/json"
"errors" "errors"
"fmt"
"github.com/unknwon/com" "github.com/unknwon/com"
"io" "io"
"net/http" "net/http"
@@ -257,6 +258,15 @@ func NotebookDel(ctx *context.Context) {


func TrainJobIndex(ctx *context.Context) { func TrainJobIndex(ctx *context.Context) {
MustEnableModelArts(ctx) MustEnableModelArts(ctx)

can, err := canUserCreateTrainJob(ctx.User.ID)
if err != nil {
ctx.ServerError("canUserCreateTrainJob", err)
return
}

ctx.Data["CanCreate"] = can

repo := ctx.Repo.Repository repo := ctx.Repo.Repository
page := ctx.QueryInt("page") page := ctx.QueryInt("page")
if page <= 0 { if page <= 0 {
@@ -288,6 +298,18 @@ func TrainJobIndex(ctx *context.Context) {
func TrainJobNew(ctx *context.Context) { func TrainJobNew(ctx *context.Context) {
ctx.Data["PageIsTrainJob"] = true 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() t := time.Now()
var jobName = cutString(ctx.User.Name, 5) + t.Format("2006010215") + strconv.Itoa(int(t.Unix()))[5:] var jobName = cutString(ctx.User.Name, 5) + t.Format("2006010215") + strconv.Itoa(int(t.Unix()))[5:]
ctx.Data["job_name"] = jobName 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 logObsPath := "/" + setting.Bucket + modelarts.JobPath + jobName + modelarts.LogPath
dataPath := "/" + setting.Bucket + "/" + setting.BasePath + path.Join(uuid[0:1], uuid[1:2]) + "/" + uuid + "/" 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 //param check
if err := paramCheckCreateTrainJob(form); err != nil { if err := paramCheckCreateTrainJob(form); err != nil {
log.Error("paramCheckCreateTrainJob failed:(%v)", err) log.Error("paramCheckCreateTrainJob failed:(%v)", err)
@@ -460,7 +494,7 @@ func TrainJobCreate(ctx *context.Context, form auth.CreateModelArtsTrainJobForm)
Parameters: param, Parameters: param,
} }


err := modelarts.GenerateTrainJob(ctx, req)
err = modelarts.GenerateTrainJob(ctx, req)
if err != nil { if err != nil {
log.Error("GenerateTrainJob failed:%v", err.Error()) log.Error("GenerateTrainJob failed:%v", err.Error())
ctx.RenderWithErr(err.Error(), tplModelArtsTrainJobNew, &form) ctx.RenderWithErr(err.Error(), tplModelArtsTrainJobNew, &form)
@@ -624,7 +658,7 @@ func TrainJobGetLog(ctx *context.Context) {
return 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 { if err != nil {
log.Error("GetTrainJobLog(%s) failed:%v", jobID, err.Error()) log.Error("GetTrainJobLog(%s) failed:%v", jobID, err.Error())
ctx.RenderWithErr(err.Error(), tplModelArtsTrainJobShow, nil) ctx.RenderWithErr(err.Error(), tplModelArtsTrainJobShow, nil)
@@ -648,7 +682,7 @@ func trainJobGetLog(jobID string) (*models.GetTrainJobLogFileNamesResult, *model
return nil, nil, err 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 { if err != nil {
log.Error("GetTrainJobLog(%s) failed:%v", jobID, err.Error()) log.Error("GetTrainJobLog(%s) failed:%v", jobID, err.Error())
return nil, nil, err return nil, nil, err
@@ -700,3 +734,13 @@ func TrainJobStop(ctx *context.Context) {


ctx.Redirect(setting.AppSubURL + ctx.Repo.RepoLink + "/modelarts/train-job") 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)
}

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

@@ -164,7 +164,7 @@


if(parseInt(scrollTop) + divHeight + 29 == scrollHeight){ if(parseInt(scrollTop) + divHeight + 29 == scrollHeight){
var end_line = $('input[name=end_line]').val() 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){ if (data.lines == 0){
$('.header').text('您已翻阅至日志底部') $('.header').text('您已翻阅至日志底部')
$('.message').css('display', 'block') $('.message').css('display', 'block')
@@ -173,7 +173,7 @@
}, 1000) }, 1000)
}else{ }else{
$('input[name=end_line]').val(data.EndLine) $('input[name=end_line]').val(data.EndLine)
$('.log').append('<pre>' + data.Content + '</pre>')
$('.log').append('<pre>' + data.Content)
} }
}).fail(function(err) { }).fail(function(err) {
console.log(err); console.log(err);
@@ -181,16 +181,16 @@
} }
if(scrollTop == 0){ if(scrollTop == 0){
var start_line = $('input[name=start_line]').val() 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){ if (data.lines == 0){
$('.header').text('您已翻阅至日志部')
$('.header').text('您已翻阅至日志部')
$('.message').css('display', 'block') $('.message').css('display', 'block')
setTimeout(function(){ setTimeout(function(){
$('.message').css('display', 'none') $('.message').css('display', 'none')
}, 1000) }, 1000)
}else{ }else{
$('input[name=start_line]').val(data.StartLine) //如果变动就改变所对应的值 $('input[name=start_line]').val(data.StartLine) //如果变动就改变所对应的值
$(".log").prepend('<pre>' + data.Content + '/pre')
$(".log").prepend('<pre>' + data.Content)
} }
}).fail(function(err) { }).fail(function(err) {
console.log(err); console.log(err);


Loading…
Cancel
Save