diff --git a/models/cloudbrain.go b/models/cloudbrain.go index a278b8bd5..0465faf9a 100755 --- a/models/cloudbrain.go +++ b/models/cloudbrain.go @@ -326,6 +326,7 @@ type CloudbrainsOptions struct { IsLatestVersion string JobTypeNot bool NeedRepoInfo bool + RepoIDList []int64 } type TaskPod struct { @@ -1206,6 +1207,12 @@ func Cloudbrains(opts *CloudbrainsOptions) ([]*CloudbrainInfo, int64, error) { ) } } + if len(opts.RepoIDList) > 0 { + cond = cond.And( + builder.In("cloudbrain.repo_id", opts.RepoIDList), + ) + + } var count int64 var err error diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini index ad7d0bfa7..fb38fe067 100755 --- a/options/locale/locale_en-US.ini +++ b/options/locale/locale_en-US.ini @@ -955,6 +955,8 @@ images.delete_task = Delete image images.task_delete_confirm = Are you sure you want to delete this image? Once this image is deleted, it cannot be recovered. cloudbrain=Cloudbrain +cloudbrain.task = Cloudbrain Task +cloudbrain.search = Seach Task Name cloudbrain.new=New cloudbrain cloudbrain.desc=Cloudbrain cloudbrain.cancel=Cancel @@ -2972,3 +2974,11 @@ gpu_num = GPU cpu_num = CPU memory = Memory shared_memory = Shared Memory + + +DEBUG = DEBUG +SNN4IMAGENET = SNN4IMAGENET +BRAINSCORE = BRAINSCORE +TRAIN = TRAIN +INFERENCE = INFERENCE +BENCHMARK = BENCHMARK \ No newline at end of file diff --git a/options/locale/locale_zh-CN.ini b/options/locale/locale_zh-CN.ini index d2bea4899..ea40f9aa8 100755 --- a/options/locale/locale_zh-CN.ini +++ b/options/locale/locale_zh-CN.ini @@ -955,6 +955,8 @@ images.delete_task = 删除镜像 images.task_delete_confirm = 你确认删除该镜像么?此镜像一旦删除不可恢复。 cloudbrain=云脑 +cloudbrain.task = 云脑任务 +cloudbrain.search = 搜索任务名称 cloudbrain.new=新建任务 cloudbrain.desc=云脑功能 cloudbrain.cancel=取消 @@ -2982,3 +2984,10 @@ cpu_num = CPU数 memory = 内存 shared_memory = 共享内存 +DEBUG = 调试任务 +SNN4IMAGENET = 调试任务-脉冲神经网络图片分类测评 +BRAINSCORE = 调试任务-神经相似性测评 +TRAIN = 训练任务 +INFERENCE = 推理任务 +BENCHMARK = 评测任务 + diff --git a/routers/repo/cloudbrain.go b/routers/repo/cloudbrain.go index 9723c34b3..5daf96e78 100755 --- a/routers/repo/cloudbrain.go +++ b/routers/repo/cloudbrain.go @@ -912,8 +912,11 @@ func CloudBrainDel(ctx *context.Context) { } var isAdminPage = ctx.Query("isadminpage") + var isHomePage = ctx.Query("ishomepage") if ctx.IsUserSiteAdmin() && isAdminPage == "true" { ctx.Redirect(setting.AppSubURL + "/admin" + "/cloudbrains") + } else if isHomePage == "true" { + ctx.Redirect(setting.AppSubURL + "/cloudbrains") } else { ctx.Redirect(setting.AppSubURL + ctx.Repo.RepoLink + "/debugjob?debugListType=" + listType) } @@ -1925,8 +1928,11 @@ func BenchmarkDel(ctx *context.Context) { } var isAdminPage = ctx.Query("isadminpage") + var isHomePage = ctx.Query("ishomepage") if ctx.IsUserSiteAdmin() && isAdminPage == "true" { ctx.Redirect(setting.AppSubURL + "/admin" + "/cloudbrains") + } else if isHomePage == "true" { + ctx.Redirect(setting.AppSubURL + "/cloudbrains") } else { ctx.Redirect(setting.AppSubURL + ctx.Repo.RepoLink + "/cloudbrain/benchmark") } @@ -1979,8 +1985,11 @@ func CloudBrainTrainJobDel(ctx *context.Context) { } var isAdminPage = ctx.Query("isadminpage") + var isHomePage = ctx.Query("ishomepage") if ctx.IsUserSiteAdmin() && isAdminPage == "true" { ctx.Redirect(setting.AppSubURL + "/admin" + "/cloudbrains") + } else if isHomePage == "true" { + ctx.Redirect(setting.AppSubURL + "/cloudbrains") } else { ctx.Redirect(setting.AppSubURL + ctx.Repo.RepoLink + "/modelarts/train-job?listType=" + listType) } diff --git a/routers/repo/modelarts.go b/routers/repo/modelarts.go index 5a626de60..318726e8e 100755 --- a/routers/repo/modelarts.go +++ b/routers/repo/modelarts.go @@ -534,8 +534,11 @@ func NotebookDel(ctx *context.Context) { } var isAdminPage = ctx.Query("isadminpage") + var isHomePage = ctx.Query("ishomepage") if ctx.IsUserSiteAdmin() && isAdminPage == "true" { ctx.Redirect(setting.AppSubURL + "/admin" + "/cloudbrains") + } else if isHomePage == "true" { + ctx.Redirect(setting.AppSubURL + "/cloudbrains") } else { ctx.Redirect(setting.AppSubURL + ctx.Repo.RepoLink + "/debugjob?debugListType=" + listType) } @@ -1689,8 +1692,11 @@ func TrainJobDel(ctx *context.Context) { } var isAdminPage = ctx.Query("isadminpage") + var isHomePage = ctx.Query("ishomepage") if ctx.IsUserSiteAdmin() && isAdminPage == "true" { ctx.Redirect(setting.AppSubURL + "/admin" + "/cloudbrains") + } else if isHomePage == "true" { + ctx.Redirect(setting.AppSubURL + "/cloudbrains") } else { ctx.Redirect(setting.AppSubURL + ctx.Repo.RepoLink + "/modelarts/train-job?listType=" + listType) } diff --git a/routers/routes/routes.go b/routers/routes/routes.go index 74b3d9fc7..9df429e8b 100755 --- a/routers/routes/routes.go +++ b/routers/routes/routes.go @@ -349,6 +349,7 @@ func RegisterRoutes(m *macaron.Macaron) { Post(bindIgnErr(auth.InstallForm{}), routers.InstallPost) m.Get("/^:type(issues|pulls)$", reqSignIn, user.Issues) m.Get("/milestones", reqSignIn, reqMilestonesDashboardPageEnabled, user.Milestones) + m.Get("/cloudbrains", reqSignIn, user.Cloudbrains) // ***** START: User ***** m.Group("/user", func() { diff --git a/routers/user/home.go b/routers/user/home.go index 2fc0c60aa..9c7bed2df 100755 --- a/routers/user/home.go +++ b/routers/user/home.go @@ -20,6 +20,7 @@ import ( issue_indexer "code.gitea.io/gitea/modules/indexer/issues" "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/markup/markdown" + "code.gitea.io/gitea/modules/modelarts" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/util" issue_service "code.gitea.io/gitea/services/issue" @@ -31,10 +32,11 @@ import ( ) const ( - tplDashboard base.TplName = "user/dashboard/dashboard" - tplIssues base.TplName = "user/dashboard/issues" - tplMilestones base.TplName = "user/dashboard/milestones" - tplProfile base.TplName = "user/profile" + tplDashboard base.TplName = "user/dashboard/dashboard" + tplIssues base.TplName = "user/dashboard/issues" + tplMilestones base.TplName = "user/dashboard/milestones" + tplProfile base.TplName = "user/profile" + tplCloudbrains base.TplName = "user/dashboard/cloudbrains" ) // getDashboardContextUser finds out dashboard is viewing as which context user. @@ -751,3 +753,111 @@ func Email2User(ctx *context.Context) { } ctx.Redirect(setting.AppSubURL + "/user/" + u.Name) } + +func Cloudbrains(ctx *context.Context) { + ctx.Data["Title"] = ctx.Tr("user.cloudbrains") + + 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 := models.TypeCloudBrainAll + 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), string(models.JobSucceeded)) + } else if jobStatus != "all" && jobStatus != "" { + jobStatuses = append(jobStatuses, jobStatus) + } + + keyword := strings.Trim(ctx.Query("q"), " ") + + ctxUser := getDashboardContextUser(ctx) + if ctx.Written() { + return + } + repos, _, err := models.SearchRepository(&models.SearchRepoOptions{ + Actor: ctx.User, + OwnerID: ctxUser.ID, + }) + if err != nil { + ctx.ServerError("SearchRepository", err) + return + } + var repoIDList []int64 + for i, _ := range repos { + repoIDList = append(repoIDList, repos[i].ID) + } + ciTasks, count, err := models.Cloudbrains(&models.CloudbrainsOptions{ + ListOptions: models.ListOptions{ + Page: page, + PageSize: setting.UI.IssuePagingNum, + }, + Keyword: keyword, + UserID: ctxUser.ID, + Type: debugType, + JobTypeNot: jobTypeNot, + JobStatusNot: jobStatusNot, + JobStatus: jobStatuses, + JobTypes: jobTypes, + NeedRepoInfo: true, + IsLatestVersion: modelarts.IsLatestVersion, + RepoIDList: repoIDList, + }) + 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, getTotalPage(count, setting.UI.IssuePagingNum)) + pager.SetDefaultParams(ctx) + pager.AddParam(ctx, "listType", "ListType") + ctx.Data["Page"] = pager + ctx.Data["PageIsUserCloudBrain"] = true + ctx.Data["Tasks"] = ciTasks + ctx.Data["CanCreate"] = true + ctx.Data["Keyword"] = keyword + + ctx.HTML(200, tplCloudbrains) + +} +func getTotalPage(total int64, pageSize int) int { + + another := 0 + if int(total)%pageSize != 0 { + another = 1 + } + return int(total)/pageSize + another + +} diff --git a/templates/admin/cloudbrain/list.tmpl b/templates/admin/cloudbrain/list.tmpl index 2b4546063..35c08eeef 100755 --- a/templates/admin/cloudbrain/list.tmpl +++ b/templates/admin/cloudbrain/list.tmpl @@ -12,6 +12,7 @@
+ {{template "admin/navbar" .}}
{{template "base/alert" .}} diff --git a/templates/admin/cloudbrain/search_dashboard.tmpl b/templates/admin/cloudbrain/search_dashboard.tmpl new file mode 100644 index 000000000..b5f5deaa1 --- /dev/null +++ b/templates/admin/cloudbrain/search_dashboard.tmpl @@ -0,0 +1,66 @@ + +
+
+
+
+
+ + +
+
+
+
+
+ \ No newline at end of file diff --git a/templates/admin/navbar.tmpl b/templates/admin/navbar.tmpl index 67ec464f9..d04915df1 100644 --- a/templates/admin/navbar.tmpl +++ b/templates/admin/navbar.tmpl @@ -15,7 +15,7 @@ {{.i18n.Tr "admin.datasets"}} - 云脑任务 + {{.i18n.Tr "repo.cloudbrain.task"}} {{.i18n.Tr "explore.images"}} diff --git a/templates/base/head_navbar.tmpl b/templates/base/head_navbar.tmpl index 18cf3ce0e..741bd567e 100755 --- a/templates/base/head_navbar.tmpl +++ b/templates/base/head_navbar.tmpl @@ -23,10 +23,11 @@ {{.i18n.Tr "index"}} -
@@ -53,10 +54,11 @@ {{.i18n.Tr "home"}} -
diff --git a/templates/base/head_navbar_fluid.tmpl b/templates/base/head_navbar_fluid.tmpl index 61326e386..6baeced54 100644 --- a/templates/base/head_navbar_fluid.tmpl +++ b/templates/base/head_navbar_fluid.tmpl @@ -23,10 +23,11 @@ {{.i18n.Tr "index"}} - @@ -52,10 +53,11 @@ {{.i18n.Tr "home"}} - diff --git a/templates/base/head_navbar_home.tmpl b/templates/base/head_navbar_home.tmpl index 49b0b60e8..c9ea13b8a 100644 --- a/templates/base/head_navbar_home.tmpl +++ b/templates/base/head_navbar_home.tmpl @@ -15,10 +15,11 @@ {{.i18n.Tr "index"}} - @@ -44,10 +45,11 @@ {{.i18n.Tr "home"}} - diff --git a/templates/base/head_navbar_pro.tmpl b/templates/base/head_navbar_pro.tmpl index fc9c401ca..e744508f0 100644 --- a/templates/base/head_navbar_pro.tmpl +++ b/templates/base/head_navbar_pro.tmpl @@ -24,10 +24,11 @@ {{.i18n.Tr "index"}} - @@ -57,7 +58,8 @@ diff --git a/templates/repo/cloudbrain/benchmark/index.tmpl b/templates/repo/cloudbrain/benchmark/index.tmpl index b840034e6..be2d8e307 100755 --- a/templates/repo/cloudbrain/benchmark/index.tmpl +++ b/templates/repo/cloudbrain/benchmark/index.tmpl @@ -102,7 +102,7 @@
- + {{.DisplayJobName}}
@@ -177,14 +177,6 @@ {{end}} - - -