Reviewed-by: 史梦园 <1729788216@qq.com>tags/v1.21.12.1
| @@ -165,6 +165,7 @@ type TaskInfo struct { | |||
| Username string `json:"username"` | |||
| TaskName string `json:"task_name"` | |||
| CodeName string `json:"code_name"` | |||
| BenchmarkCategory string `json:"selected_category"` | |||
| } | |||
| func ConvertToTaskPod(input map[string]interface{}) (TaskPod, error) { | |||
| @@ -265,6 +266,15 @@ type ImageInfo struct { | |||
| PlaceView string | |||
| } | |||
| type Categories struct { | |||
| Category []*Category `json:"category"` | |||
| } | |||
| type Category struct { | |||
| Id int `json:"id"` | |||
| Value string `json:"value"` | |||
| } | |||
| type CommitImageParams struct { | |||
| Ip string `json:"ip"` | |||
| TaskContainerId string `json:"taskContainerId"` | |||
| @@ -11,6 +11,7 @@ type CreateCloudBrainForm struct { | |||
| Command string `form:"command" binding:"Required"` | |||
| Attachment string `form:"attachment" binding:"Required"` | |||
| JobType string `form:"job_type" binding:"Required"` | |||
| BenchmarkCategory string `form:"get_benchmark_category"` | |||
| } | |||
| type CommitImageCloudBrainForm struct { | |||
| @@ -443,6 +443,7 @@ var ( | |||
| IsBenchmarkEnabled bool | |||
| BenchmarkCode string | |||
| BenchmarkServerHost string | |||
| BenchmarkCategory string | |||
| //snn4imagenet config | |||
| IsSnn4imagenetEnabled bool | |||
| @@ -1150,6 +1151,7 @@ func NewContext() { | |||
| IsBenchmarkEnabled = sec.Key("ENABLED").MustBool(false) | |||
| BenchmarkCode = sec.Key("BENCHMARKCODE").MustString("https://yangzhx:justfortest123@git.openi.org.cn/yangzhx/detection_benchmark_script.git") | |||
| BenchmarkServerHost = sec.Key("HOST").MustString("http://192.168.202.90:3366/") | |||
| BenchmarkCategory = sec.Key("CATEGORY").MustString("") | |||
| sec = Cfg.Section("snn4imagenet") | |||
| IsSnn4imagenetEnabled = sec.Key("ENABLED").MustBool(false) | |||
| @@ -108,7 +108,6 @@ func CloudBrainNew(ctx *context.Context) { | |||
| } | |||
| for i, payload := range resultPublic.Payload.ImageInfo { | |||
| log.Info(resultPublic.Payload.ImageInfo[i].Place) | |||
| if strings.HasPrefix(resultPublic.Payload.ImageInfo[i].Place, "192.168") { | |||
| resultPublic.Payload.ImageInfo[i].PlaceView = payload.Place[strings.Index(payload.Place, "/"):len(payload.Place)] | |||
| } else { | |||
| @@ -131,6 +130,10 @@ func CloudBrainNew(ctx *context.Context) { | |||
| ctx.Data["model_path"] = cloudbrain.ModelMountPath | |||
| ctx.Data["benchmark_path"] = cloudbrain.BenchMarkMountPath | |||
| ctx.Data["is_benchmark_enabled"] = setting.IsBenchmarkEnabled | |||
| var categories *models.Categories | |||
| json.Unmarshal([]byte(setting.BenchmarkCategory), &categories) | |||
| ctx.Data["benchmark_categories"] = categories.Category | |||
| ctx.Data["snn4imagenet_path"] = cloudbrain.Snn4imagenetMountPath | |||
| ctx.Data["is_snn4imagenet_enabled"] = setting.IsSnn4imagenetEnabled | |||
| ctx.HTML(200, tplCloudBrainNew) | |||
| @@ -162,12 +165,12 @@ func CloudBrainCreate(ctx *context.Context, form auth.CreateCloudBrainForm) { | |||
| benchmarkPath := setting.JobPath + jobName + cloudbrain.BenchMarkMountPath | |||
| if setting.IsBenchmarkEnabled && jobType == string(models.JobTypeBenchmark) { | |||
| downloadRateCode(repo, jobName, setting.BenchmarkCode, benchmarkPath) | |||
| downloadRateCode(repo, jobName, setting.BenchmarkCode, benchmarkPath, form.BenchmarkCategory) | |||
| } | |||
| snn4imagenetPath := setting.JobPath + jobName + cloudbrain.Snn4imagenetMountPath | |||
| if setting.IsSnn4imagenetEnabled && jobType == string(models.JobTypeSnn4imagenet) { | |||
| downloadRateCode(repo, jobName, setting.Snn4imagenetCode, snn4imagenetPath) | |||
| downloadRateCode(repo, jobName, setting.Snn4imagenetCode, snn4imagenetPath, "") | |||
| } | |||
| err = cloudbrain.GenerateTask(ctx, jobName, image, command, uuid, codePath, modelPath, benchmarkPath, snn4imagenetPath, jobType) | |||
| @@ -258,16 +261,15 @@ func CloudBrainCommitImage(ctx *context.Context, form auth.CommitImageCloudBrain | |||
| func CloudBrainStop(ctx *context.Context) { | |||
| var jobID = ctx.Params(":jobid") | |||
| log.Info(jobID) | |||
| task, err := models.GetCloudbrainByJobID(jobID) | |||
| if err != nil { | |||
| ctx.ServerError("GetCloudbrainByJobID failed", err) | |||
| return | |||
| } | |||
| if task.Status != string(models.JobRunning) { | |||
| log.Error("the job(%s) is not running", task.JobName) | |||
| ctx.ServerError("the job is not running", errors.New("the job is not running")) | |||
| if task.Status == string(models.JobStopped) { | |||
| log.Error("the job(%s) has been stopped", task.JobName) | |||
| ctx.ServerError("the job has been stopped", errors.New("the job has been stopped")) | |||
| return | |||
| } | |||
| @@ -337,7 +339,7 @@ func downloadCode(repo *models.Repository, codePath string) error { | |||
| return nil | |||
| } | |||
| func downloadRateCode(repo *models.Repository, taskName, gitPath, codePath string) error { | |||
| func downloadRateCode(repo *models.Repository, taskName, gitPath, codePath, benchmarkCategory string) error { | |||
| err := os.MkdirAll(codePath, os.ModePerm) | |||
| if err != nil { | |||
| log.Error("mkdir codePath failed", err.Error()) | |||
| @@ -366,6 +368,7 @@ func downloadRateCode(repo *models.Repository, taskName, gitPath, codePath strin | |||
| Username: repo.Owner.Name, | |||
| TaskName: taskName, | |||
| CodeName: repo.Name, | |||
| BenchmarkCategory: benchmarkCategory, | |||
| }) | |||
| if err != nil { | |||
| log.Error("json.Marshal failed", err.Error()) | |||
| @@ -33,7 +33,7 @@ | |||
| <div class="sixteen wide mobile eight wide tablet eight wide computer column" style=" margin:2.0rem 0"> | |||
| {{.i18n.Tr "custom.foot.copyright"}} <a href="http://beian.miit.gov.cn/" target="_blank">京ICP备18004880号-2</a> | |||
| <br> | |||
| {{.i18n.Tr "powered_by 鹏城实验室云脑、"}}<a href="https://www.trustie.net/" target="_blank">Trustie确实</a>、{{.i18n.Tr "、gitea"}} | |||
| {{.i18n.Tr "powered_by 鹏城实验室云脑、"}}<a href="https://www.trustie.net/" target="_blank">Trustie确实</a>{{.i18n.Tr "、gitea"}} | |||
| <br> | |||
| </div> | |||
| </div> | |||
| @@ -297,9 +297,9 @@ | |||
| <!-- 停止 --> | |||
| <div class="one wide column"> | |||
| <div class="ui text center clipboard"> | |||
| <form id="stopForm-{{.JobID}}" action="{{if ne .Status "RUNNING"}}javascript:void(0){{else}}{{$.Link}}/{{.JobID}}/stop{{end}}" method="post"> | |||
| <form id="stopForm-{{.JobID}}" action="{{if eq .Status "STOPPED"}}javascript:void(0){{else}}{{$.Link}}/{{.JobID}}/stop{{end}}" method="post"> | |||
| {{$.CsrfTokenHtml}} | |||
| <a class="fitted" onclick="document.getElementById('stopForm-{{.JobID}}').submit();" style="{{if ne .Status "RUNNING"}}color:#CCCCCC{{end}}; font-size:16px; font-weight:bold">停止</a> | |||
| <a class="fitted" onclick="document.getElementById('stopForm-{{.JobID}}').submit();" style="{{if eq .Status "STOPPED"}}color:#CCCCCC{{end}}; font-size:16px; font-weight:bold">停止</a> | |||
| </form> | |||
| </div> | |||
| </div> | |||
| @@ -110,7 +110,6 @@ | |||
| {{.i18n.Tr "repo.cloudbrain.new"}} | |||
| </h3> | |||
| <div class="ui attached segment"> | |||
| <!-- <br> --> | |||
| <div class="inline required field"> | |||
| <label>任务名称</label> | |||
| <input name="job_name" id="cloudbrain_job_name" placeholder="任务名称" value="{{.job_name}}" tabindex="3" autofocus required maxlength="255"> | |||
| @@ -125,6 +124,17 @@ | |||
| </select> | |||
| </div> | |||
| <div class="inline required field cloudbrain_benchmark"> | |||
| <label style="vertical-align: top; margin-top:9px">数据集类别</label> | |||
| <select class="ui search dropdown" multiple="multiple" id="cloudbrain_benchmark_category" style='width:385px'> | |||
| {{range .benchmark_categories}} | |||
| <option value="{{.Value}}">{{.Value}}</option> | |||
| {{end}} | |||
| </select> | |||
| </div> | |||
| <input id="store_category" type="hidden" name="get_benchmark_category"> | |||
| <div class="inline required field"> | |||
| <label>镜像</label> | |||
| <select class="ui search dropdown" id="cloudbrain_image" placeholder="选择镜像" style='width:385px' name="image"> | |||
| @@ -170,6 +180,7 @@ | |||
| <label>启动命令</label> | |||
| <textarea name="command" rows="10" readonly="readonly">{{.command}}</textarea> | |||
| </div> | |||
| <div class="inline field"> | |||
| <label></label> | |||
| <button class="ui green button" onclick="showmask()"> | |||
| @@ -196,7 +207,12 @@ | |||
| document.getElementById("mask").style.display = "none" | |||
| } | |||
| } | |||
| $('#cloudbrain_benchmark_category') | |||
| .dropdown({ | |||
| placeholder: "选择数据集类别", | |||
| }) | |||
| $('select.dropdown') | |||
| .dropdown(); | |||
| @@ -212,4 +228,10 @@ | |||
| } | |||
| }) | |||
| }) | |||
| $('.ui.green.button').click(function() { | |||
| selected_value = $("#cloudbrain_benchmark_category").val() | |||
| $('#store_category').attr("value", selected_value) | |||
| }) | |||
| </script> | |||