From 80ec65ea46c6450143ed3a96a404423eb567646b Mon Sep 17 00:00:00 2001 From: ychao_1983 Date: Tue, 15 Feb 2022 17:11:05 +0800 Subject: [PATCH 1/9] =?UTF-8?q?=E4=BA=91=E8=84=91=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E8=BF=90=E7=BB=B4=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- models/cloudbrain.go | 58 ++++++++++++++++++++++---- routers/admin/cloudbrains.go | 98 ++++++++++++++++++++++++++++++++++++++++++++ routers/routes/routes.go | 3 ++ 3 files changed, 151 insertions(+), 8 deletions(-) create mode 100644 routers/admin/cloudbrains.go diff --git a/models/cloudbrain.go b/models/cloudbrain.go index 82c4c6b83..1a8496355 100755 --- a/models/cloudbrain.go +++ b/models/cloudbrain.go @@ -209,17 +209,20 @@ type GetImagesPayload struct { type CloudbrainsOptions struct { ListOptions - RepoID int64 // include all repos if empty - UserID int64 - JobID string - SortType string - CloudbrainIDs []int64 - // JobStatus CloudbrainStatus + RepoID int64 // include all repos if empty + UserID int64 + JobID string + SortType string + CloudbrainIDs []int64 + JobStatus []string + JobStatusNot bool + Keyword string Type int JobTypes []string VersionName string IsLatestVersion string JobTypeNot bool + NeedRepoInfo bool } type TaskPod struct { @@ -1015,7 +1018,32 @@ func Cloudbrains(opts *CloudbrainsOptions) ([]*CloudbrainInfo, int64, error) { cond = cond.And(builder.In("cloudbrain.id", opts.CloudbrainIDs)) } - count, err := sess.Where(cond).Count(new(Cloudbrain)) + if len(opts.JobStatus) > 0 { + if opts.JobStatusNot { + cond = cond.And( + builder.NotIn("cloudbrain.status", opts.JobStatus), + ) + } else { + cond = cond.And( + builder.In("cloudbrain.status", opts.JobStatus), + ) + } + } + + var count int64 + var err error + condition := "cloudbrain.user_id = `user`.id" + if len(opts.Keyword) == 0 { + count, err = sess.Where(cond).Count(new(Cloudbrain)) + } else { + lowerKeyWord := strings.ToLower(opts.Keyword) + + cond = cond.And(builder.Or(builder.Like{"LOWER(cloudbrain.job_name)", lowerKeyWord}), builder.Like{"`user`.lower_name", lowerKeyWord}) + count, err = sess.Table(&Cloudbrain{}).Where(cond). + Join("left", "`user`", condition).Count(new(CloudbrainInfo)) + + } + if err != nil { return nil, 0, fmt.Errorf("Count: %v", err) } @@ -1033,11 +1061,25 @@ func Cloudbrains(opts *CloudbrainsOptions) ([]*CloudbrainInfo, int64, error) { sess.OrderBy("cloudbrain.created_unix DESC") cloudbrains := make([]*CloudbrainInfo, 0, setting.UI.IssuePagingNum) if err := sess.Table(&Cloudbrain{}).Where(cond). - Join("left", "`user`", "cloudbrain.user_id = `user`.id"). + Join("left", "`user`", condition). Find(&cloudbrains); err != nil { return nil, 0, fmt.Errorf("Find: %v", err) } + if opts.NeedRepoInfo { + var ids []int64 + for _, task := range cloudbrains { + ids = append(ids, task.RepoID) + } + repositoryMap, err := GetRepositoriesMapByIDs(ids) + if err == nil { + for _, task := range cloudbrains { + task.Repo = repositoryMap[task.RepoID] + } + } + + } + return cloudbrains, count, nil } diff --git a/routers/admin/cloudbrains.go b/routers/admin/cloudbrains.go new file mode 100644 index 000000000..8bc4bb03d --- /dev/null +++ b/routers/admin/cloudbrains.go @@ -0,0 +1,98 @@ +package admin + +import ( + "strings" + + "code.gitea.io/gitea/modules/modelarts" + + "code.gitea.io/gitea/models" + "code.gitea.io/gitea/modules/base" + "code.gitea.io/gitea/modules/context" + "code.gitea.io/gitea/modules/setting" +) + +const ( + tplCloudBrains base.TplName = "admin/cloudbrain/list" +) + +func CloudBrains(ctx *context.Context) { + ctx.Data["Title"] = ctx.Tr("admin.cloudBrains") + ctx.Data["PageIsAdmin"] = true + ctx.Data["PageIsAdminCloudBrains"] = true + + listType := ctx.Query("listType") + jobType := ctx.Query("jobType") + jobStatus := ctx.Query("jobStatus") + + ctx.Data["ListType"] = listType + ctx.Data["JobType"] = jobType + ctx.Data["JobStatus"] = jobStatus + + page := ctx.QueryInt("page") + if page <= 0 { + page = 1 + } + debugType := modelarts.DebugType + if listType == models.GPUResource { + debugType = models.TypeCloudBrainOne + } else if listType == models.NPUResource { + debugType = models.TypeCloudBrainTwo + } + + var jobTypes []string + jobTypeNot := false + if jobType == string(models.JobTypeDebug) { + jobTypes = append(jobTypes, string(models.JobTypeSnn4imagenet), string(models.JobTypeBrainScore), string(models.JobTypeDebug)) + } else if jobType != "all" && jobType != "" { + jobTypes = append(jobTypes, jobType) + } + + var jobStatuses []string + jobStatusNot := false + if jobStatus == "other" { + jobStatusNot = true + jobStatuses = append(jobStatuses, string(models.ModelArtsTrainJobWaiting), string(models.ModelArtsTrainJobFailed), string(models.ModelArtsRunning), string(models.ModelArtsTrainJobCompleted), + string(models.ModelArtsStarting), string(models.ModelArtsRestarting), string(models.ModelArtsStartFailed), + string(models.ModelArtsStopping), string(models.ModelArtsStopped)) + } else if jobStatus != "all" && jobStatus != "" { + jobStatuses = append(jobStatuses, jobStatus) + } + + keyword := strings.Trim(ctx.Query("q"), " ") + + ciTasks, count, err := models.Cloudbrains(&models.CloudbrainsOptions{ + ListOptions: models.ListOptions{ + Page: page, + PageSize: setting.UI.IssuePagingNum, + }, + Keyword: keyword, + Type: debugType, + JobTypeNot: jobTypeNot, + JobStatusNot: jobStatusNot, + JobStatus: jobStatuses, + JobTypes: jobTypes, + NeedRepoInfo: true, + }) + if err != nil { + ctx.ServerError("Get job failed:", err) + return + } + + for i, task := range ciTasks { + ciTasks[i].CanDebug = true + ciTasks[i].CanDel = true + ciTasks[i].Cloudbrain.ComputeResource = task.ComputeResource + } + + pager := context.NewPagination(int(count), setting.UI.IssuePagingNum, page, 5) + pager.SetDefaultParams(ctx) + pager.AddParam(ctx, "listType", "ListType") + ctx.Data["Page"] = pager + ctx.Data["PageIsCloudBrain"] = true + ctx.Data["Tasks"] = ciTasks + ctx.Data["CanCreate"] = true + ctx.Data["Keyword"] = keyword + + ctx.HTML(200, tplCloudBrains) + +} diff --git a/routers/routes/routes.go b/routers/routes/routes.go index 9690c115d..a915daf64 100755 --- a/routers/routes/routes.go +++ b/routers/routes/routes.go @@ -507,6 +507,9 @@ func RegisterRoutes(m *macaron.Macaron) { m.Get("", admin.Datasets) // m.Post("/delete", admin.DeleteDataset) }) + m.Group("/cloudbrains", func() { + m.Get("", admin.CloudBrains) + }) m.Group("/^:configType(hooks|system-hooks)$", func() { m.Get("", admin.DefaultOrSystemWebhooks) From e5ca2fcd0d200a89a4a8c1ec6fef5ff1c4e60f1f Mon Sep 17 00:00:00 2001 From: ychao_1983 Date: Wed, 16 Feb 2022 11:29:30 +0800 Subject: [PATCH 2/9] =?UTF-8?q?=E4=BA=91=E8=84=91=E8=BF=90=E7=BB=B4?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=AF=BC=E5=87=BA=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- options/locale/locale_en-US.ini | 4 ++ options/locale/locale_zh-CN.ini | 3 + routers/admin/cloudbrains.go | 119 +++++++++++++++++++++++++++++++++++++++- routers/routes/routes.go | 1 + 4 files changed, 126 insertions(+), 1 deletion(-) diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini index b3ede3b06..318348d56 100755 --- a/options/locale/locale_en-US.ini +++ b/options/locale/locale_en-US.ini @@ -864,9 +864,13 @@ confirm_choice = confirm cloudbran1_tips = Only data in zip format can create cloudbrain tasks cloudbrain_creator=Creator cloudbrain_task = Task Name +cloudbrain_task_type = Task Type +cloudbrain_task_name=Cloud Brain Task Name cloudbrain_operate = Operate cloudbrain_status_createtime = Status/Createtime cloudbrain_status_runtime = Running Time +cloudbrain_jobname_err=Name must start with a lowercase letter or number,can include lowercase letter,number,_ and -,can not end with _, and can be up to 36 characters long. +cloudbrain_query_fail=Failed to query cloudbrain information. record_begintime_get_err=Can not get the record begin time. parameter_is_wrong=The input parameter is wrong. diff --git a/options/locale/locale_zh-CN.ini b/options/locale/locale_zh-CN.ini index 86e88184c..58b0b79b3 100755 --- a/options/locale/locale_zh-CN.ini +++ b/options/locale/locale_zh-CN.ini @@ -868,10 +868,13 @@ confirm_choice=确定 cloudbran1_tips=只有zip格式的数据集才能发起云脑任务 cloudbrain_creator=创建者 cloudbrain_task=任务名称 +cloudbrain_task_type=任务类型 +cloudbrain_task_name=云脑侧任务名称 cloudbrain_operate=操作 cloudbrain_status_createtime=状态/创建时间 cloudbrain_status_runtime = 运行时长 cloudbrain_jobname_err=只能以小写字母或数字开头且只包含小写字母、数字、_和-,不能以_结尾,最长36个字符。 +cloudbrain_query_fail=查询云脑任务失败。 record_begintime_get_err=无法获取统计开始时间。 parameter_is_wrong=输入参数错误,请检查输入参数。 diff --git a/routers/admin/cloudbrains.go b/routers/admin/cloudbrains.go index 8bc4bb03d..2058925e5 100644 --- a/routers/admin/cloudbrains.go +++ b/routers/admin/cloudbrains.go @@ -1,18 +1,27 @@ package admin import ( + "net/http" + "net/url" + "strconv" "strings" + "time" + + "github.com/360EntSecGroup-Skylar/excelize/v2" "code.gitea.io/gitea/modules/modelarts" "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/context" + "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" ) const ( - tplCloudBrains base.TplName = "admin/cloudbrain/list" + tplCloudBrains base.TplName = "admin/cloudbrain/list" + EXCEL_DATE_FORMAT = "20060102150405" + CREATE_TIME_FORMAT = "2006/01/02 15:04:05.00" ) func CloudBrains(ctx *context.Context) { @@ -96,3 +105,111 @@ func CloudBrains(ctx *context.Context) { ctx.HTML(200, tplCloudBrains) } + +func DownloadCloudBrains(ctx *context.Context) { + + page := 1 + + pageSize := 300 + + var cloudBrain = ctx.Tr("repo.cloudbrain") + fileName := getFileName(cloudBrain) + + _, total, err := models.Cloudbrains(&models.CloudbrainsOptions{ + ListOptions: models.ListOptions{ + Page: page, + PageSize: 1, + }, + Type: modelarts.DebugType, + NeedRepoInfo: false, + }) + + if err != nil { + log.Warn("Can not get cloud brain info", err) + ctx.Error(http.StatusBadRequest, ctx.Tr("repo.cloudbrain_query_fail")) + return + } + + totalPage := getTotalPage(total, pageSize) + + f := excelize.NewFile() + + index := f.NewSheet(cloudBrain) + f.DeleteSheet("Sheet1") + + for k, v := range allHeader(ctx) { + f.SetCellValue(cloudBrain, k, v) + } + + var row = 2 + for i := 0; i < totalPage; i++ { + + pageRecords, _, err := models.Cloudbrains(&models.CloudbrainsOptions{ + ListOptions: models.ListOptions{ + Page: page, + PageSize: pageSize, + }, + Type: modelarts.DebugType, + NeedRepoInfo: true, + }) + if err != nil { + log.Warn("Can not get cloud brain info", err) + continue + } + for _, record := range pageRecords { + + for k, v := range allValues(row, record, ctx) { + f.SetCellValue(cloudBrain, k, v) + } + row++ + + } + + page++ + } + f.SetActiveSheet(index) + + ctx.Resp.Header().Set("Content-Disposition", "attachment; filename="+url.QueryEscape(fileName)) + ctx.Resp.Header().Set("Content-Type", "application/octet-stream") + + f.WriteTo(ctx.Resp) +} + +func allValues(row int, rs *models.CloudbrainInfo, ctx *context.Context) map[string]string { + return map[string]string{getCellName("A", row): rs.JobName, getCellName("B", row): rs.Status, getCellName("C", row): rs.JobType, getCellName("D", row): time.Unix(int64(rs.Cloudbrain.CreatedUnix), 0).Format(CREATE_TIME_FORMAT), getCellName("E", row): getDurationTime(rs), + getCellName("F", row): rs.ComputeResource, getCellName("G", row): rs.Name, getCellName("H", row): rs.Repo.OwnerName + "/" + rs.Repo.Alias, getCellName("I", row): rs.JobName, + } +} + +func getDurationTime(rs *models.CloudbrainInfo) string { + if rs.JobType == "TRAIN" || rs.JobType == "INFERENCE" { + return rs.TrainJobDuration + } else { + return "-" + } +} + +func getFileName(baseName string) string { + return baseName + "_" + time.Now().Format(EXCEL_DATE_FORMAT) + ".xlsx" + +} + +func getTotalPage(total int64, pageSize int) int { + + another := 0 + if int(total)%pageSize != 0 { + another = 1 + } + return int(total)/pageSize + another + +} + +func allHeader(ctx *context.Context) map[string]string { + + return map[string]string{"A1": ctx.Tr("repo.cloudbrain_task"), "B1": ctx.Tr("repo.modelarts.status"), "C1": ctx.Tr("repo.cloudbrain_task_type"), "D1": ctx.Tr("repo.modelarts.createtime"), "E1": ctx.Tr("repo.modelarts.train_job.dura_time"), "F1": ctx.Tr("repo.modelarts.computing_resources"), "G1": ctx.Tr("repo.cloudbrain_creator"), "H1": ctx.Tr("repo.repo_name"), "I1": ctx.Tr("repo.cloudbrain_task_name")} + +} + +func getCellName(col string, row int) string { + return col + strconv.Itoa(row) +} diff --git a/routers/routes/routes.go b/routers/routes/routes.go index a915daf64..9e0dcf930 100755 --- a/routers/routes/routes.go +++ b/routers/routes/routes.go @@ -509,6 +509,7 @@ func RegisterRoutes(m *macaron.Macaron) { }) m.Group("/cloudbrains", func() { m.Get("", admin.CloudBrains) + m.Get("/download", admin.DownloadCloudBrains) }) m.Group("/^:configType(hooks|system-hooks)$", func() { From b728b7fa32d146d22ddd72b52fd178d121ccfc8a Mon Sep 17 00:00:00 2001 From: ychao_1983 Date: Wed, 16 Feb 2022 17:43:16 +0800 Subject: [PATCH 3/9] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- models/cloudbrain.go | 2 +- routers/admin/cloudbrains.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/models/cloudbrain.go b/models/cloudbrain.go index 1a8496355..e411c16de 100755 --- a/models/cloudbrain.go +++ b/models/cloudbrain.go @@ -1038,7 +1038,7 @@ func Cloudbrains(opts *CloudbrainsOptions) ([]*CloudbrainInfo, int64, error) { } else { lowerKeyWord := strings.ToLower(opts.Keyword) - cond = cond.And(builder.Or(builder.Like{"LOWER(cloudbrain.job_name)", lowerKeyWord}), builder.Like{"`user`.lower_name", lowerKeyWord}) + cond = cond.And(builder.Or(builder.Like{"LOWER(cloudbrain.job_name)", lowerKeyWord}, builder.Like{"`user`.lower_name", lowerKeyWord})) count, err = sess.Table(&Cloudbrain{}).Where(cond). Join("left", "`user`", condition).Count(new(CloudbrainInfo)) diff --git a/routers/admin/cloudbrains.go b/routers/admin/cloudbrains.go index 2058925e5..471902097 100644 --- a/routers/admin/cloudbrains.go +++ b/routers/admin/cloudbrains.go @@ -93,7 +93,7 @@ func CloudBrains(ctx *context.Context) { ciTasks[i].Cloudbrain.ComputeResource = task.ComputeResource } - pager := context.NewPagination(int(count), setting.UI.IssuePagingNum, page, 5) + pager := context.NewPagination(int(count), setting.UI.IssuePagingNum, page, getTotalPage(count, setting.UI.IssuePagingNum)) pager.SetDefaultParams(ctx) pager.AddParam(ctx, "listType", "ListType") ctx.Data["Page"] = pager From e11c27ea6de18b5fc71d7fbf7769ce750903498f Mon Sep 17 00:00:00 2001 From: zhoupzh Date: Fri, 18 Feb 2022 09:34:04 +0800 Subject: [PATCH 4/9] fix issue --- package-lock.json | 130 +++++++ package.json | 2 + templates/admin/cloudbrain/list.tmpl | 489 +++++++++++++++++++++++++ templates/admin/navbar.tmpl | 3 + templates/org/member/course_members.tmpl | 1 - templates/repo/cloudbrain/benchmark/index.tmpl | 1 - templates/repo/cloudbrain/benchmark/new.tmpl | 1 - templates/repo/createCourse.tmpl | 2 - templates/repo/debugjob/index.tmpl | 41 +-- templates/repo/modelarts/trainjob/index.tmpl | 1 - templates/repo/modelmanage/showinfo.tmpl | 1 - templates/repo/repo_name.tmpl | 4 +- templates/user/dashboard/issues.tmpl | 3 - templates/user/dashboard/milestones.tmpl | 3 - templates/user/profile.tmpl | 1 + tsconfig.json | 0 web_src/js/components/Images.vue | 5 - web_src/js/components/UserAnalysis.vue | 6 - web_src/js/excel/Export2Excel.js | 3 +- web_src/js/excel/util.js | 1 - web_src/js/index.js | 17 +- webpack.config.js | 10 + 22 files changed, 670 insertions(+), 55 deletions(-) create mode 100644 templates/admin/cloudbrain/list.tmpl create mode 100644 tsconfig.json diff --git a/package-lock.json b/package-lock.json index a8e5e3e25..7b706207b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13869,6 +13869,130 @@ "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", "dev": true }, + "ts-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-4.0.0.tgz", + "integrity": "sha512-iissbnuJkqbB3YAmnWyEbmdNcGcoiiXopKHKyqdoCrFQVi9pnplXeveQDXJnQOCYNNcb2pjT2zzSYTX6c9QtAA==", + "dev": true, + "requires": { + "chalk": "^2.3.0", + "enhanced-resolve": "^4.0.0", + "loader-utils": "^1.0.2", + "micromatch": "^3.1.4", + "semver": "^5.0.1" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, "tslib": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", @@ -13928,6 +14052,12 @@ "is-typedarray": "^1.0.0" } }, + "typescript": { + "version": "4.5.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", + "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", + "dev": true + }, "ua-parser-js": { "version": "0.7.21", "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.21.tgz", diff --git a/package.json b/package.json index ba5459a07..e5f829bf1 100644 --- a/package.json +++ b/package.json @@ -69,6 +69,8 @@ "script-loader": "0.7.2", "stylelint": "13.3.3", "stylelint-config-standard": "20.0.0", + "ts-loader": "4.0.0", + "typescript": "4.5.5", "updates": "10.2.11" }, "browserslist": [ diff --git a/templates/admin/cloudbrain/list.tmpl b/templates/admin/cloudbrain/list.tmpl new file mode 100644 index 000000000..b22d491d2 --- /dev/null +++ b/templates/admin/cloudbrain/list.tmpl @@ -0,0 +1,489 @@ + +{{template "base/head" .}} + +
+
+
+
+
+
+
+
+
+ +
+
+ {{template "admin/navbar" .}} +
+ {{template "base/alert" .}} + +
+
+
+
+
+ + +
+
+
+
+ + + +
+ + +
+ +
+ + +
+
+
+ {{$.i18n.Tr "repo.cloudbrain_task"}} +
+
+ 任务类型 +
+
+ {{$.i18n.Tr "repo.modelarts.status"}} +
+
+ {{$.i18n.Tr "repo.modelarts.createtime"}} +
+
+ {{$.i18n.Tr "repo.cloudbrain_status_runtime"}} +
+
+ {{$.i18n.Tr "repo.modelarts.computing_resources"}} +
+
+ {{$.i18n.Tr "repo.cloudbrain_creator"}} +
+
+ 项目 +
+
+ 云脑侧名称 +
+
+ {{$.i18n.Tr "repo.cloudbrain_operate"}} +
+
+
+ + {{range .Tasks}} +
+
+ + +
+ {{if eq .JobType "DEBUG"}} + + {{.JobName}} + + {{else if eq .JobType "INFERENCE"}} + + {{.JobName}} + + {{else if eq .JobType "TRAIN"}} + + {{.JobName}} + + {{else if eq .JobType "BENCHMARK"}} + + {{.JobName}} + + {{end}} +
+ + +
+ {{.JobType}} +
+ +
+ + {{.Status}} + +
+ +
+ {{TimeSinceUnix1 .Cloudbrain.CreatedUnix}} +
+ +
+ {{if .TrainJobDuration}}{{.TrainJobDuration}}{{else}}--{{end}} +
+ +
+ {{if .ComputeResource}}{{.ComputeResource}}{{else}}--{{end}} +
+ +
+ {{if .User.Name}} + + {{else}} + + {{end}} +
+ + + +
+ + {{.JobName}} +
+ +
+ {{if eq .JobType "DEBUG"}} +
+
+ {{$.CsrfTokenHtml}} + {{if eq .Status "RUNNING" "WAITING" "CREATING" "STARTING"}} + + {{$.i18n.Tr "repo.debug"}} + + {{else}} + + {{$.i18n.Tr "repo.debug_again"}} + + {{end}} +
+
+ {{end}} + +
+ {{if eq .JobType "DEBUG" "BENCHMARK"}} +
+ {{$.CsrfTokenHtml}} + + {{$.i18n.Tr "repo.stop"}} + +
+ {{else}} + + {{$.i18n.Tr "repo.stop"}} + + {{end}} +
+ + + +
+ {{$.CsrfTokenHtml}} + + {{$.i18n.Tr "repo.delete"}} + +
+
+
+
+ {{end}} +
+
+ + +
+
+
+ +
+
+
+
+ + +
+ +
+
+ +{{template "base/footer" .}} + + diff --git a/templates/admin/navbar.tmpl b/templates/admin/navbar.tmpl index 2b9f8b7c4..47a9ee811 100644 --- a/templates/admin/navbar.tmpl +++ b/templates/admin/navbar.tmpl @@ -14,6 +14,9 @@ {{.i18n.Tr "admin.datasets"}} + + 云脑任务 + {{.i18n.Tr "admin.hooks"}} diff --git a/templates/org/member/course_members.tmpl b/templates/org/member/course_members.tmpl index 83018739f..5ae6bec89 100644 --- a/templates/org/member/course_members.tmpl +++ b/templates/org/member/course_members.tmpl @@ -120,7 +120,6 @@ \ No newline at end of file diff --git a/templates/repo/debugjob/index.tmpl b/templates/repo/debugjob/index.tmpl index f7773cf2d..d45df324e 100755 --- a/templates/repo/debugjob/index.tmpl +++ b/templates/repo/debugjob/index.tmpl @@ -324,11 +324,11 @@ {{$.CsrfTokenHtml}} {{if .CanDebug}} {{if eq .Status "RUNNING" "WAITING" "CREATING" "STARTING"}} - + {{$.i18n.Tr "repo.debug"}} {{else}} - + {{$.i18n.Tr "repo.debug_again"}} {{end}} @@ -350,11 +350,11 @@ {{$.CsrfTokenHtml}} {{if .CanDel}} {{if eq .ComputeResource "CPU/GPU" }} - + {{$.i18n.Tr "repo.stop"}} {{else}} - + {{$.i18n.Tr "repo.stop"}} {{end}} @@ -369,7 +369,7 @@ {{$.CsrfTokenHtml}} {{if .CanDel}} - + {{$.i18n.Tr "repo.delete"}} {{else}} @@ -490,7 +490,6 @@ \ No newline at end of file + \ No newline at end of file diff --git a/templates/user/dashboard/issues.tmpl b/templates/user/dashboard/issues.tmpl index 85d1fb65c..eb0d76e5b 100644 --- a/templates/user/dashboard/issues.tmpl +++ b/templates/user/dashboard/issues.tmpl @@ -208,6 +208,3 @@ {{template "base/footer" .}} - \ No newline at end of file diff --git a/templates/user/dashboard/milestones.tmpl b/templates/user/dashboard/milestones.tmpl index 1c0ee84fc..4038ce5b0 100644 --- a/templates/user/dashboard/milestones.tmpl +++ b/templates/user/dashboard/milestones.tmpl @@ -117,6 +117,3 @@ {{template "base/footer" .}} - \ No newline at end of file diff --git a/templates/user/profile.tmpl b/templates/user/profile.tmpl index d42ed4058..fa5e0c9b7 100755 --- a/templates/user/profile.tmpl +++ b/templates/user/profile.tmpl @@ -141,6 +141,7 @@ {{if eq .TabName "activity"}} {{if .EnableHeatmap}} +
diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 000000000..e69de29bb diff --git a/web_src/js/components/Images.vue b/web_src/js/components/Images.vue index 6fe26d532..a56d81e4c 100644 --- a/web_src/js/components/Images.vue +++ b/web_src/js/components/Images.vue @@ -310,7 +310,6 @@ export default { }, handleCurrentChange(val){ - console.log(val) this.params.page = val this.getImageList() @@ -350,7 +349,6 @@ export default { }) }, copyUrl(url){ - console.log(url) const cInput = document.createElement('input') cInput.value = url document.body.appendChild(cInput) @@ -380,16 +378,13 @@ export default { clearP(value){ - console.log("sorce value",value) if(!value) return '' const reg = /\<\/?p\>/g; value = value.replace(reg,'') - console.log("repalace:",value) return value }, transformTimestamp(timestamp){ - console.log("timestamp",timestamp) let a = new Date(timestamp).getTime(); const date = new Date(a); const Y = date.getFullYear() + '-'; diff --git a/web_src/js/components/UserAnalysis.vue b/web_src/js/components/UserAnalysis.vue index 5650e164f..682dbc78c 100755 --- a/web_src/js/components/UserAnalysis.vue +++ b/web_src/js/components/UserAnalysis.vue @@ -200,7 +200,6 @@ var saveFileName='' var Date=(this.params.startDate).split('-') var startDate=Date[0]+''+Date[1]+''+Date[2] - console.log(startDate) Date=(this.params.endDate).split('-') var endDate=Date[0]+Date[1]+Date[2] saveFileName = '用户分析_'+this.search+''+startDate+'_'+endDate @@ -258,7 +257,6 @@ getUserList(type_val,index){ this.type_val = type_val this.dynamic = index; - console.log("dj:"+type_val) var now = new Date(); // 当前日期 var nowDayOfWeek = now.getDay(); // 今天本周的第几天 var nowDay = now.getDate(); // 当前日 @@ -324,7 +322,6 @@ // console.log("res.data:"+res.data.data) this.totalNum = res.data.count - console.log("res.count:"+res.data.count) }) @@ -354,9 +351,7 @@ }, filters:{ - transformTimestamp(timestamp){ - console.log("timestamp",timestamp) let a = new Date(timestamp*1000); const date = new Date(a); const Y = date.getFullYear() + '/'; @@ -366,7 +361,6 @@ const m = (date.getMinutes() <10 ? '0'+date.getMinutes() : date.getMinutes());// + ':' ; // const s = (date.getSeconds() <10 ? '0'+date.getSeconds() : date.getSeconds()) ; // 秒 const dateString = Y + M + D + h + m ;//+ s; - console.log('dateString', dateString); // > dateString 2021-07-06 14:23 return dateString; }, }, diff --git a/web_src/js/excel/Export2Excel.js b/web_src/js/excel/Export2Excel.js index 3c6d022af..85921f7ad 100755 --- a/web_src/js/excel/Export2Excel.js +++ b/web_src/js/excel/Export2Excel.js @@ -100,7 +100,6 @@ export function export_table_to_excel(id) { /* original data */ var data = oo[0]; var ws_name = "SheetJS"; - console.log(data); var wb = new Workbook(), ws = sheet_from_array_of_arrays(data); @@ -118,7 +117,7 @@ export function export_table_to_excel(id) { } function formatJson(jsonData) { - console.log(jsonData) + } export function export_json_to_excel(th, jsonData, defaultTitle) { diff --git a/web_src/js/excel/util.js b/web_src/js/excel/util.js index b600e5e37..809b5b51b 100755 --- a/web_src/js/excel/util.js +++ b/web_src/js/excel/util.js @@ -3,7 +3,6 @@ export function export2Excel(columns,list,filename){ const { export_json_to_excel } = require('./Export2Excel'); let tHeader = [] let filterVal = [] - console.log(columns) if(!columns){ return; } diff --git a/web_src/js/index.js b/web_src/js/index.js index 6bc0d2b88..3e38c2c42 100755 --- a/web_src/js/index.js +++ b/web_src/js/index.js @@ -41,6 +41,7 @@ import DataAnalysis from './components/DataAnalysis.vue' import Contributors from './components/Contributors.vue' import Model from './components/Model.vue'; + Vue.use(ElementUI); Vue.prototype.$axios = axios; Vue.prototype.qs = qs; @@ -3584,14 +3585,16 @@ function initVueApp() { } initVueComponents(); - + new Vue({ delimiters: ['${', '}'], el, data: { + page:parseInt(new URLSearchParams(window.location.search).get('page')), searchLimit: Number( (document.querySelector('meta[name=_search_limit]') || {}).content ), + page:1, suburl: AppSubUrl, uid: Number( (document.querySelector('meta[name=_context_uid]') || {}).content @@ -3600,6 +3603,15 @@ function initVueApp() { }, components: { ActivityTopAuthors + }, + mounted(){ + this.page = parseInt(new URLSearchParams(window.location.search).get('page')) + }, + methods:{ + handleCurrentChange:function (val) { + window.location.href='/admin/cloudbrains?page='+val + this.page = val + } } }); } @@ -3688,8 +3700,6 @@ function initVueModel() { } function initVueDataAnalysis() { const el = document.getElementById('data_analysis'); - console.log("el",el) - if (!el) { return; } @@ -3756,7 +3766,6 @@ function initFilterBranchTagDropdown(selector) { }); }); $data.remove(); - console.log("-this",this) new Vue({ delimiters: ['${', '}'], el: this, diff --git a/webpack.config.js b/webpack.config.js index a08810ebc..cd3635427 100755 --- a/webpack.config.js +++ b/webpack.config.js @@ -116,6 +116,15 @@ module.exports = { ], }, { + test: /\.ts$/, + use: [ + { + loader: "ts-loader", + } + ], + exclude: /node_modules/ + }, + { test: /\.js$/, exclude: /node_modules/, use: [ @@ -252,6 +261,7 @@ module.exports = { alias: { vue$: 'vue/dist/vue.esm.js', // needed because vue's default export is the runtime only }, + extensions: ['.tsx', '.ts', '.js'] }, watchOptions: { ignored: [ From fc11cb5b54804d41c5c6243b4e0953ceee4b5712 Mon Sep 17 00:00:00 2001 From: liuzx Date: Fri, 18 Feb 2022 10:16:06 +0800 Subject: [PATCH 5/9] =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=91=98=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E4=BA=91=E8=84=91=E4=BB=BB=E5=8A=A1=E6=97=B6=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E7=AE=A1=E7=90=86=E5=91=98=E7=95=8C=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- routers/repo/cloudbrain.go | 16 ++++++++++++++-- routers/repo/modelarts.go | 16 +++++++++++++--- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/routers/repo/cloudbrain.go b/routers/repo/cloudbrain.go index 0599fb03f..506e2852e 100755 --- a/routers/repo/cloudbrain.go +++ b/routers/repo/cloudbrain.go @@ -587,7 +587,13 @@ func CloudBrainDel(ctx *context.Context) { ctx.ServerError(err.Error(), err) return } - ctx.Redirect(setting.AppSubURL + ctx.Repo.RepoLink + "/debugjob?debugListType=all") + + var isAdminPage = ctx.Query(":isadminpage") + if ctx.IsUserSiteAdmin() && isAdminPage == "true" { + ctx.Redirect(setting.AppSubURL + "/admin" + "/cloudbrains") + } else { + ctx.Redirect(setting.AppSubURL + ctx.Repo.RepoLink + "/debugjob?debugListType=all") + } } func deleteCloudbrainJob(ctx *context.Context) error { @@ -1343,5 +1349,11 @@ func BenchmarkDel(ctx *context.Context) { ctx.ServerError(err.Error(), err) return } - ctx.Redirect(setting.AppSubURL + ctx.Repo.RepoLink + "/cloudbrain/benchmark") + + var isAdminPage = ctx.Query(":isadminpage") + if ctx.IsUserSiteAdmin() && isAdminPage == "true" { + ctx.Redirect(setting.AppSubURL + "/admin" + "/cloudbrains") + } else { + ctx.Redirect(setting.AppSubURL + ctx.Repo.RepoLink + "/cloudbrain/benchmark") + } } diff --git a/routers/repo/modelarts.go b/routers/repo/modelarts.go index 7e9ae3c09..6e06f98fb 100755 --- a/routers/repo/modelarts.go +++ b/routers/repo/modelarts.go @@ -307,7 +307,7 @@ func NotebookDebug2(ctx *context.Context) { ctx.RenderWithErr(err.Error(), tplModelArtsNotebookIndex, nil) return } - + ctx.Redirect(result.Url) } @@ -438,7 +438,12 @@ func NotebookDel(ctx *context.Context) { return } - ctx.Redirect(setting.AppSubURL + ctx.Repo.RepoLink + "/debugjob?debugListType=all") + var isAdminPage = ctx.Query(":isadminpage") + if ctx.IsUserSiteAdmin() && isAdminPage == "true" { + ctx.Redirect(setting.AppSubURL + "/admin" + "/cloudbrains") + } else { + ctx.Redirect(setting.AppSubURL + ctx.Repo.RepoLink + "/debugjob?debugListType=all") + } } func TrainJobIndex(ctx *context.Context) { @@ -1543,7 +1548,12 @@ func TrainJobDel(ctx *context.Context) { DeleteJobStorage(VersionListTasks[0].JobName) } - ctx.Redirect(setting.AppSubURL + ctx.Repo.RepoLink + "/modelarts/train-job") + var isAdminPage = ctx.Query(":isadminpage") + if ctx.IsUserSiteAdmin() && isAdminPage == "true" { + ctx.Redirect(setting.AppSubURL + "/admin" + "/cloudbrains") + } else { + ctx.Redirect(setting.AppSubURL + ctx.Repo.RepoLink + "/modelarts/train-job") + } } func TrainJobStop(ctx *context.Context) { From c6ecb9e1839e4bf29839e1a16d7fb4d8bc4c1628 Mon Sep 17 00:00:00 2001 From: liuzx Date: Fri, 18 Feb 2022 10:21:35 +0800 Subject: [PATCH 6/9] fix-bug --- routers/repo/cloudbrain.go | 4 ++-- routers/repo/modelarts.go | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/routers/repo/cloudbrain.go b/routers/repo/cloudbrain.go index 506e2852e..ba5fc8a05 100755 --- a/routers/repo/cloudbrain.go +++ b/routers/repo/cloudbrain.go @@ -588,7 +588,7 @@ func CloudBrainDel(ctx *context.Context) { return } - var isAdminPage = ctx.Query(":isadminpage") + var isAdminPage = ctx.Query("isadminpage") if ctx.IsUserSiteAdmin() && isAdminPage == "true" { ctx.Redirect(setting.AppSubURL + "/admin" + "/cloudbrains") } else { @@ -1350,7 +1350,7 @@ func BenchmarkDel(ctx *context.Context) { return } - var isAdminPage = ctx.Query(":isadminpage") + var isAdminPage = ctx.Query("isadminpage") if ctx.IsUserSiteAdmin() && isAdminPage == "true" { ctx.Redirect(setting.AppSubURL + "/admin" + "/cloudbrains") } else { diff --git a/routers/repo/modelarts.go b/routers/repo/modelarts.go index 6e06f98fb..7fb8a3c35 100755 --- a/routers/repo/modelarts.go +++ b/routers/repo/modelarts.go @@ -438,7 +438,7 @@ func NotebookDel(ctx *context.Context) { return } - var isAdminPage = ctx.Query(":isadminpage") + var isAdminPage = ctx.Query("isadminpage") if ctx.IsUserSiteAdmin() && isAdminPage == "true" { ctx.Redirect(setting.AppSubURL + "/admin" + "/cloudbrains") } else { @@ -1548,7 +1548,7 @@ func TrainJobDel(ctx *context.Context) { DeleteJobStorage(VersionListTasks[0].JobName) } - var isAdminPage = ctx.Query(":isadminpage") + var isAdminPage = ctx.Query("isadminpage") if ctx.IsUserSiteAdmin() && isAdminPage == "true" { ctx.Redirect(setting.AppSubURL + "/admin" + "/cloudbrains") } else { From 7f00de1ad32b3dc189439dd33d09c955b0d8422b Mon Sep 17 00:00:00 2001 From: zhoupzh Date: Fri, 18 Feb 2022 11:16:52 +0800 Subject: [PATCH 7/9] fix issue --- templates/admin/cloudbrain/list.tmpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/admin/cloudbrain/list.tmpl b/templates/admin/cloudbrain/list.tmpl index b22d491d2..84a8a75cc 100644 --- a/templates/admin/cloudbrain/list.tmpl +++ b/templates/admin/cloudbrain/list.tmpl @@ -241,7 +241,7 @@
{{end}} --> -
+ {{$.CsrfTokenHtml}} {{$.i18n.Tr "repo.delete"}} From 925c0337186eebc2b0037fbe1fd4919930034ea2 Mon Sep 17 00:00:00 2001 From: zhoupzh Date: Mon, 21 Feb 2022 18:43:47 +0800 Subject: [PATCH 8/9] fix issue --- options/locale/locale_en-US.ini | 6 + options/locale/locale_zh-CN.ini | 8 +- templates/admin/cloudbrain/list.tmpl | 302 ++--------------------- templates/admin/cloudbrain/search.tmpl | 46 ++++ templates/repo/cloudbrain/benchmark/index.tmpl | 181 +------------- templates/repo/debugjob/index.tmpl | 182 +------------- templates/repo/modelarts/inferencejob/index.tmpl | 122 +-------- templates/repo/modelarts/trainjob/index.tmpl | 166 +------------ templates/repo/modelarts/trainjob/show.tmpl | 1 + web_src/js/features/cloudrbanin.js | 236 ++++++++++++++++++ web_src/js/index.js | 2 + web_src/less/openi.less | 11 +- 12 files changed, 350 insertions(+), 913 deletions(-) create mode 100644 templates/admin/cloudbrain/search.tmpl create mode 100644 web_src/js/features/cloudrbanin.js diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini index 318348d56..fb2b2cd2d 100755 --- a/options/locale/locale_en-US.ini +++ b/options/locale/locale_en-US.ini @@ -2342,6 +2342,12 @@ datasets.owner=Owner datasets.name=name datasets.private=Private +cloudbrain.all_task_types=All Task Types +cloudbrain.all_computing_resources=All Computing Resources +cloudbrain.all_status=All Status +cloudbrain.download_report=Download Report +cloudbrain.cloudbrain_name=Cloudbrain Name + hooks.desc = Webhooks automatically make HTTP POST requests to a server when certain openi events trigger. Webhooks defined here are defaults and will be copied into all new repositories. Read more in the webhooks guide. hooks.add_webhook = Add Default Webhook hooks.update_webhook = Update Default Webhook diff --git a/options/locale/locale_zh-CN.ini b/options/locale/locale_zh-CN.ini index 58b0b79b3..782335033 100755 --- a/options/locale/locale_zh-CN.ini +++ b/options/locale/locale_zh-CN.ini @@ -2352,6 +2352,12 @@ datasets.owner=所有者 datasets.name=名称 datasets.private=私有 +cloudbrain.all_task_types=全部任务类型 +cloudbrain.all_computing_resources=全部计算资源 +cloudbrain.all_status=全部状态 +cloudbrain.download_report=下载此报告 +cloudbrain.cloudbrain_name=云脑侧名称 + hooks.desc=当某些 openi 事件触发时, Web 钩子会自动向服务器发出 HTTP POST 请求。此处定义的 Web 钩子是默认值, 将复制到所有新建项目中。参阅 Web钩子指南 获取更多内容。 hooks.add_webhook=新增默认Web钩子 hooks.update_webhook=更新默认Web钩子 @@ -2418,7 +2424,7 @@ auths.sspi_auto_activate_users_helper=允许 SSPI 认证自动激活新用户 auths.sspi_strip_domain_names=从用户名中删除域名部分 auths.sspi_strip_domain_names_helper=如果选中此项,域名将从登录名中删除(例如,"DOMAIN\user"和"user@example.org",两者都将变成只是“用户”)。 auths.sspi_separator_replacement=要使用的分隔符代替\, / 和 @ -auths.sspi_separator_replacement_helper=用于替换下级登录名称分隔符的字符 (例如) "DOMAIN\user") 中的 \ 和用户主名字(如"user@example.org中的 @ )。 +auths.sspi_separator_replacement_helper=用于替换下级登录名称分隔符的字符 (例如) "DOMAIN\user") 中的 \ 和用户主名字(如"user@example.org"中的 @ )。 auths.sspi_default_language=默认语言 auths.sspi_default_language_helper=SSPI 认证方法为用户自动创建的默认语言。如果您想要自动检测到语言,请留空。 auths.tips=帮助提示 diff --git a/templates/admin/cloudbrain/list.tmpl b/templates/admin/cloudbrain/list.tmpl index 84a8a75cc..0a09230eb 100644 --- a/templates/admin/cloudbrain/list.tmpl +++ b/templates/admin/cloudbrain/list.tmpl @@ -1,23 +1,3 @@ - {{template "base/head" .}}
@@ -35,64 +15,15 @@ {{template "admin/navbar" .}}
{{template "base/alert" .}} - -
+
-
- -
- - -
- -
-
- - - -
+ {{template "admin/cloudbrain/search" .}} -
-
@@ -100,7 +31,7 @@ {{$.i18n.Tr "repo.cloudbrain_task"}}
- 任务类型 + {{$.i18n.Tr "repo.cloudbrain_task_type"}}
{{$.i18n.Tr "repo.modelarts.status"}} @@ -118,21 +49,19 @@ {{$.i18n.Tr "repo.cloudbrain_creator"}}
- 项目 + {{$.i18n.Tr "repository"}}
- 云脑侧名称 + {{.i18n.Tr "admin.cloudbrain.cloudbrain_name"}}
{{$.i18n.Tr "repo.cloudbrain_operate"}}
- {{range .Tasks}}
-
- +
{{if eq .JobType "DEBUG"}} @@ -154,7 +83,6 @@ {{end}}
-
{{.JobType}}
@@ -190,21 +118,19 @@
- {{.JobName}}
-
{{if eq .JobType "DEBUG"}}
{{$.CsrfTokenHtml}} {{if eq .Status "RUNNING" "WAITING" "CREATING" "STARTING"}} - + {{$.i18n.Tr "repo.debug"}} {{else}} - + {{$.i18n.Tr "repo.debug_again"}} {{end}} @@ -216,34 +142,20 @@ {{if eq .JobType "DEBUG" "BENCHMARK"}} {{$.CsrfTokenHtml}} - + {{$.i18n.Tr "repo.stop"}}
{{else}} - + {{$.i18n.Tr "repo.stop"}} {{end}}
- - -
+ {{$.CsrfTokenHtml}} - + {{$.i18n.Tr "repo.delete"}}
@@ -270,7 +182,6 @@
-
- {{template "base/footer" .}} - diff --git a/templates/admin/cloudbrain/search.tmpl b/templates/admin/cloudbrain/search.tmpl new file mode 100644 index 000000000..bbd45e550 --- /dev/null +++ b/templates/admin/cloudbrain/search.tmpl @@ -0,0 +1,46 @@ +
+
+
+ + +
+
+
+
+ + + +
\ No newline at end of file diff --git a/templates/repo/cloudbrain/benchmark/index.tmpl b/templates/repo/cloudbrain/benchmark/index.tmpl index ea8af1053..dd6dc7af3 100644 --- a/templates/repo/cloudbrain/benchmark/index.tmpl +++ b/templates/repo/cloudbrain/benchmark/index.tmpl @@ -106,7 +106,7 @@
- + {{.Status}}
@@ -137,10 +137,9 @@
{{$.CsrfTokenHtml}} {{if .CanDel}} - - - {{$.i18n.Tr "repo.stop"}} - + + {{$.i18n.Tr "repo.stop"}} + {{else}} @@ -148,26 +147,21 @@ {{end}}
- - 评分 - -
{{$.CsrfTokenHtml}} {{if .CanDel}} - + {{$.i18n.Tr "repo.delete"}} {{else}} - + {{$.i18n.Tr "repo.delete"}} - {{end}}
@@ -221,166 +215,3 @@
{{template "base/footer" .}} - - \ No newline at end of file diff --git a/templates/repo/debugjob/index.tmpl b/templates/repo/debugjob/index.tmpl index d45df324e..eaf1823f1 100755 --- a/templates/repo/debugjob/index.tmpl +++ b/templates/repo/debugjob/index.tmpl @@ -293,7 +293,7 @@
- + {{.Status}}
@@ -324,11 +324,11 @@ {{$.CsrfTokenHtml}} {{if .CanDebug}} {{if eq .Status "RUNNING" "WAITING" "CREATING" "STARTING"}} - + {{$.i18n.Tr "repo.debug"}} {{else}} - + {{$.i18n.Tr "repo.debug_again"}} {{end}} @@ -349,15 +349,9 @@
{{$.CsrfTokenHtml}} {{if .CanDel}} - {{if eq .ComputeResource "CPU/GPU" }} - - {{$.i18n.Tr "repo.stop"}} - - {{else}} - - {{$.i18n.Tr "repo.stop"}} - - {{end}} + + {{$.i18n.Tr "repo.stop"}} + {{else}} {{$.i18n.Tr "repo.stop"}} @@ -369,19 +363,16 @@ {{$.CsrfTokenHtml}} {{if .CanDel}} - + {{$.i18n.Tr "repo.delete"}} {{else}} - - {{$.i18n.Tr "repo.delete"}} + + {{$.i18n.Tr "repo.delete"}} - {{end}}
-
- - +
{{end}} -
@@ -487,7 +477,6 @@ {{template "base/footer" .}} - diff --git a/templates/repo/modelarts/trainjob/index.tmpl b/templates/repo/modelarts/trainjob/index.tmpl index 9a3c32ce9..c376e0e8a 100755 --- a/templates/repo/modelarts/trainjob/index.tmpl +++ b/templates/repo/modelarts/trainjob/index.tmpl @@ -113,7 +113,7 @@
- + {{.Status}}
@@ -143,11 +143,11 @@
{{$.CsrfTokenHtml}} {{if .CanDel}} - + {{$.i18n.Tr "repo.stop"}} {{else}} - + {{$.i18n.Tr "repo.stop"}} {{end}} @@ -157,7 +157,7 @@
{{$.CsrfTokenHtml}} {{if .CanDel}} - + {{$.i18n.Tr "repo.delete"}} {{else}} @@ -204,161 +204,5 @@
- -{{template "base/footer" .}} - - \ No newline at end of file +{{template "base/footer" .}} \ No newline at end of file diff --git a/templates/repo/modelarts/trainjob/show.tmpl b/templates/repo/modelarts/trainjob/show.tmpl index 81d36c1e9..4fad02830 100755 --- a/templates/repo/modelarts/trainjob/show.tmpl +++ b/templates/repo/modelarts/trainjob/show.tmpl @@ -518,6 +518,7 @@ td, th { + {{template "base/footer" .}}