diff --git a/models/cloudbrain.go b/models/cloudbrain.go
index bb1241247..dd3d3531c 100755
--- a/models/cloudbrain.go
+++ b/models/cloudbrain.go
@@ -31,6 +31,7 @@ const (
JobTypeBrainScore JobType = "BRAINSCORE"
JobTypeTrain JobType = "TRAIN"
+ //notebook
ModelArtsCreateQueue ModelArtsJobStatus = "CREATE_QUEUING" //免费资源创建排队中
ModelArtsCreating ModelArtsJobStatus = "CREATING" //创建中
ModelArtsCreateFailed ModelArtsJobStatus = "CREATE_FAILED" //创建失败
@@ -46,6 +47,30 @@ const (
ModelArtsDeleted ModelArtsJobStatus = "DELETED" //已删除
ModelArtsResizing ModelArtsJobStatus = "RESIZING" //规格变更中
ModelArtsResizFailed ModelArtsJobStatus = "RESIZE_FAILED" //规格变更失败
+
+ //trainjob
+ ModelArtsTrainJobUnknown ModelArtsJobStatus = "UNKNOWN" //作业状态未知
+ ModelArtsTrainJobInit ModelArtsJobStatus = "INIT" //作业初始化状态
+ ModelArtsTrainJobImageCreating ModelArtsJobStatus = "IMAGE_CREATING" //作业镜像正在创建
+ ModelArtsTrainJobImageFailed ModelArtsJobStatus = "IMAGE_FAILED" //作业镜像创建失败
+ ModelArtsTrainJobSubmitTrying ModelArtsJobStatus = "SUBMIT_TRYING" //作业正在提交
+ ModelArtsTrainJobSubmitFailed ModelArtsJobStatus = "SUBMIT_FAILED" //作业提交失败
+ ModelArtsTrainJobDeleteFailed ModelArtsJobStatus = "DELETE_FAILED" //作业删除失败
+ ModelArtsTrainJobWaiting ModelArtsJobStatus = "WAITING" //作业正在排队中
+ ModelArtsTrainJobRunning ModelArtsJobStatus = "RUNNING" //作业正在运行中
+ ModelArtsTrainJobKilling ModelArtsJobStatus = "KILLING" //作业正在取消
+ ModelArtsTrainJobCompleted ModelArtsJobStatus = "COMPLETED" //作业已经完成
+ ModelArtsTrainJobFailed ModelArtsJobStatus = "FAILED" //作业运行失败
+ ModelArtsTrainJobKilled ModelArtsJobStatus = "KILLED" //作业取消成功
+ ModelArtsTrainJobCanceled ModelArtsJobStatus = "CANCELED" //作业取消
+ ModelArtsTrainJobLost ModelArtsJobStatus = "LOST" //作业丢失
+ ModelArtsTrainJobScaling ModelArtsJobStatus = "SCALING" //作业正在扩容
+ ModelArtsTrainJobSubmitModelFailed ModelArtsJobStatus = "SUBMIT_MODEL_FAILED" //提交模型失败
+ ModelArtsTrainJobDeployServiceFailed ModelArtsJobStatus = "DEPLOY_SERVICE_FAILED" //部署服务失败
+ ModelArtsTrainJobCheckInit ModelArtsJobStatus = "CHECK_INIT" //审核作业初始化
+ ModelArtsTrainJobCheckRunning ModelArtsJobStatus = "CHECK_RUNNING" //审核作业正在运行中
+ ModelArtsTrainJobCheckRunningCompleted ModelArtsJobStatus = "CHECK_RUNNING_COMPLETED" //审核作业已经完成
+ ModelArtsTrainJobCheckFailed ModelArtsJobStatus = "CHECK_FAILED" //审核作业失败
)
type Cloudbrain struct {
@@ -1091,3 +1116,14 @@ func CanDelJob(isSigned bool, user *User, job *CloudbrainInfo) bool {
}
return false
}
+
+func GetCloudBrainUnStoppedJob() ([]*Cloudbrain, error) {
+ cloudbrains := make([]*Cloudbrain, 0, 10)
+ return cloudbrains, x.
+ NotIn("status",
+ JobStopped, JobSucceeded, JobFailed, ModelArtsCreateFailed, ModelArtsStartFailed, ModelArtsUnavailable, ModelArtsResizFailed, ModelArtsDeleted,
+ ModelArtsStopped, ModelArtsTrainJobCanceled, ModelArtsTrainJobCheckFailed, ModelArtsTrainJobCompleted, ModelArtsTrainJobDeleteFailed, ModelArtsTrainJobDeployServiceFailed,
+ ModelArtsTrainJobFailed, ModelArtsTrainJobImageFailed, ModelArtsTrainJobKilled, ModelArtsTrainJobLost, ModelArtsTrainJobSubmitFailed, ModelArtsTrainJobSubmitModelFailed).
+ Limit(100).
+ Find(&cloudbrains)
+}
diff --git a/models/user.go b/models/user.go
index 1ee20d74c..8968f7c02 100755
--- a/models/user.go
+++ b/models/user.go
@@ -145,6 +145,7 @@ type User struct {
AllowImportLocal bool // Allow migrate repository by local path
AllowCreateOrganization bool `xorm:"DEFAULT true"`
ProhibitLogin bool `xorm:"NOT NULL DEFAULT false"`
+ IsOperator bool `xorm:"NOT NULL DEFAULT false"` //运营人员
// Avatar
Avatar string `xorm:"VARCHAR(2048) NOT NULL"`
diff --git a/modules/auth/auth.go b/modules/auth/auth.go
index 16ea9f15e..352e50ca0 100644
--- a/modules/auth/auth.go
+++ b/modules/auth/auth.go
@@ -9,6 +9,9 @@ import (
"reflect"
"strings"
+ "code.gitea.io/gitea/modules/base"
+ "code.gitea.io/gitea/modules/setting"
+
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/auth/sso"
"code.gitea.io/gitea/modules/validation"
@@ -31,6 +34,8 @@ func SignedInUser(ctx *macaron.Context, sess session.Store) (*models.User, bool)
return nil, false
}
+ checkAutoLogin(ctx, sess)
+
// Try to sign in with each of the enabled plugins
for _, ssoMethod := range sso.Methods() {
if !ssoMethod.IsEnabled() {
@@ -46,6 +51,23 @@ func SignedInUser(ctx *macaron.Context, sess session.Store) (*models.User, bool)
return nil, false
}
+func checkAutoLogin(ctx *macaron.Context, sess session.Store) {
+ uid := sess.Get("uid")
+ if uid == nil {
+ uname := ctx.GetCookie(setting.CookieUserName)
+
+ u, err := models.GetUserByName(uname)
+ if err == nil {
+
+ if val, ok := ctx.GetSuperSecureCookie(
+ base.EncodeMD5(u.Rands+u.Passwd), setting.CookieRememberName); ok && val == u.Name {
+ sess.Set("uid", u.ID)
+ }
+ }
+ }
+
+}
+
// Form form binding interface
type Form interface {
binding.Validator
diff --git a/modules/context/auth.go b/modules/context/auth.go
index 3f53e6fce..9877657eb 100755
--- a/modules/context/auth.go
+++ b/modules/context/auth.go
@@ -145,8 +145,7 @@ func Toggle(options *ToggleOptions) macaron.Handler {
}
if options.OperationRequired {
- //todo: add isOperator judgement
- if !ctx.User.IsAdmin {
+ if !ctx.User.IsOperator {
ctx.Error(403)
return
}
diff --git a/modules/context/context.go b/modules/context/context.go
index 6877780e3..5f09e190d 100755
--- a/modules/context/context.go
+++ b/modules/context/context.go
@@ -310,6 +310,7 @@ func Contexter() macaron.Handler {
ctx.Data["SignedUserID"] = ctx.User.ID
ctx.Data["SignedUserName"] = ctx.User.Name
ctx.Data["IsAdmin"] = ctx.User.IsAdmin
+ ctx.Data["IsOperator"] = ctx.User.IsOperator
c.Data["SignedUserName"] = ctx.User.Name
} else {
ctx.Data["SignedUserID"] = int64(0)
diff --git a/modules/cron/tasks_basic.go b/modules/cron/tasks_basic.go
index 207018c20..294690d45 100755
--- a/modules/cron/tasks_basic.go
+++ b/modules/cron/tasks_basic.go
@@ -185,6 +185,17 @@ func registerHandleSummaryStatistic() {
})
}
+func registerSyncCloudbrainStatus() {
+ RegisterTaskFatal("sync_cloudbrain_status", &BaseConfig{
+ Enabled: true,
+ RunAtStart: false,
+ Schedule: "@every 10m",
+ }, func(ctx context.Context, _ *models.User, _ Config) error {
+ repo.SyncCloudbrainStatus()
+ return nil
+ })
+}
+
func initBasicTasks() {
registerUpdateMirrorTask()
registerRepoHealthCheck()
@@ -202,4 +213,6 @@ func initBasicTasks() {
registerHandleRepoAndUserStatistic()
registerHandleSummaryStatistic()
+
+ registerSyncCloudbrainStatus()
}
diff --git a/public/img/overview_rgb.svg b/public/img/overview_rgb.svg
new file mode 100644
index 000000000..1a1257e23
--- /dev/null
+++ b/public/img/overview_rgb.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/img/pro_rgb.svg b/public/img/pro_rgb.svg
new file mode 100644
index 000000000..2110c2115
--- /dev/null
+++ b/public/img/pro_rgb.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/img/user_rgb.svg b/public/img/user_rgb.svg
new file mode 100644
index 000000000..e5cf24cf0
--- /dev/null
+++ b/public/img/user_rgb.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/routers/api/v1/api.go b/routers/api/v1/api.go
index b7ef8d48f..518c63e4f 100755
--- a/routers/api/v1/api.go
+++ b/routers/api/v1/api.go
@@ -75,6 +75,7 @@ import (
"code.gitea.io/gitea/routers/api/v1/repo"
_ "code.gitea.io/gitea/routers/api/v1/swagger" // for swagger generation
"code.gitea.io/gitea/routers/api/v1/user"
+ repo_ext "code.gitea.io/gitea/routers/repo"
"gitea.com/macaron/binding"
"gitea.com/macaron/macaron"
@@ -523,23 +524,26 @@ func RegisterRoutes(m *macaron.Macaron) {
Get(notify.GetThread).
Patch(notify.ReadThread)
}, reqToken())
- adminReq := context.Toggle(&context.ToggleOptions{SignInRequired: true, AdminRequired: true})
+
+ operationReq := context.Toggle(&context.ToggleOptions{SignInRequired: true, OperationRequired: true})
//Project board
m.Group("/projectboard", func() {
- m.Get("/restoreFork", adminReq, repo.RestoreForkNumber)
- m.Get("/downloadAll", adminReq, repo.ServeAllProjectsPeriodStatisticsFile)
- m.Get("/downloadAllOpenI", adminReq, repo.ServeAllProjectsOpenIStatisticsFile)
+ m.Get("/restoreFork", repo.RestoreForkNumber)
+ m.Get("/downloadAll", repo.ServeAllProjectsPeriodStatisticsFile)
+ m.Get("/downloadAllOpenI", repo.ServeAllProjectsOpenIStatisticsFile)
m.Group("/project", func() {
- m.Get("", adminReq, repo.GetAllProjectsPeriodStatistics)
+ m.Get("", repo.GetAllProjectsPeriodStatistics)
m.Group("/:id", func() {
- m.Get("", adminReq, repo.GetProjectLatestStatistics)
- m.Get("/period", adminReq, repo.GetProjectPeriodStatistics)
+ m.Get("", repo.GetProjectLatestStatistics)
+ m.Get("/period", repo.GetProjectPeriodStatistics)
})
})
- })
+ }, operationReq)
+
+ m.Get("/query_user_static_page", operationReq, repo_ext.QueryUserStaticDataPage)
// Users
m.Group("/users", func() {
diff --git a/routers/repo/cloudbrain.go b/routers/repo/cloudbrain.go
index 28f3a0184..bf0fffc18 100755
--- a/routers/repo/cloudbrain.go
+++ b/routers/repo/cloudbrain.go
@@ -715,3 +715,78 @@ func downloadRateCode(repo *models.Repository, taskName, gitPath, codePath, benc
return nil
}
+
+func SyncCloudbrainStatus() {
+ cloudBrains, err := models.GetCloudBrainUnStoppedJob()
+ if err != nil {
+ log.Error("GetCloudBrainUnStoppedJob failed:", err.Error())
+ return
+ }
+
+ for _, task := range cloudBrains {
+ if task.Type == models.TypeCloudBrainOne {
+ result, err := cloudbrain.GetJob(task.JobID)
+ if err != nil {
+ log.Error("GetJob(%s) failed:%v", task.JobName, err)
+ continue
+ }
+
+ if result != nil {
+ jobRes, _ := models.ConvertToJobResultPayload(result.Payload)
+ taskRoles := jobRes.TaskRoles
+ taskRes, _ := models.ConvertToTaskPod(taskRoles[cloudbrain.SubTaskName].(map[string]interface{}))
+ task.Status = taskRes.TaskStatuses[0].State
+ if task.Status != string(models.JobWaiting) {
+ err = models.UpdateJob(task)
+ if err != nil {
+ log.Error("UpdateJob(%s) failed:%v", task.JobName, err)
+ continue
+ }
+ }
+ }
+ } else if task.Type == models.TypeCloudBrainTwo {
+ if task.JobType == string(models.JobTypeDebug) {
+ result, err := modelarts.GetJob(task.JobID)
+ if err != nil {
+ log.Error("GetJob(%s) failed:%v", task.JobName, err)
+ continue
+ }
+
+ if result != nil {
+ task.Status = result.Status
+
+ err = models.UpdateJob(task)
+ if err != nil {
+ log.Error("UpdateJob(%s) failed:%v", task.JobName, err)
+ continue
+ }
+ }
+ } else if task.JobType == string(models.JobTypeTrain) {
+ result, err := modelarts.GetTrainJob(task.JobID, strconv.FormatInt(task.VersionID, 10))
+ if err != nil {
+ log.Error("GetTrainJob(%s) failed:%v", task.JobName, err)
+ continue
+ }
+
+ if result != nil {
+ task.Status = modelarts.TransTrainJobStatus(result.IntStatus)
+ task.Duration = result.Duration
+ task.TrainJobDuration = result.TrainJobDuration
+
+ err = models.UpdateJob(task)
+ if err != nil {
+ log.Error("UpdateJob(%s) failed:%v", task.JobName, err)
+ continue
+ }
+ }
+ } else {
+ log.Error("task.JobType(%s) is error:%s", task.JobName, task.JobType)
+ }
+
+ } else {
+ log.Error("task.Type(%s) is error:%d", task.JobName, task.Type)
+ }
+ }
+
+ return
+}
diff --git a/routers/repo/modelarts.go b/routers/repo/modelarts.go
index ec65baaad..7324bbbee 100755
--- a/routers/repo/modelarts.go
+++ b/routers/repo/modelarts.go
@@ -4,7 +4,6 @@ import (
"encoding/json"
"errors"
"io"
- "io/ioutil"
"net/http"
"os"
"path"
@@ -386,7 +385,7 @@ func trainJobNewDataPrepare(ctx *context.Context) error {
return nil
}
-func ErrorNewDataPrepare(ctx *context.Context, form auth.CreateModelArtsTrainJobForm) error {
+func trainJobErrorNewDataPrepare(ctx *context.Context, form auth.CreateModelArtsTrainJobForm) error {
ctx.Data["PageIsCloudBrain"] = true
//can, err := canUserCreateTrainJob(ctx.User.ID)
@@ -574,7 +573,7 @@ func trainJobNewVersionDataPrepare(ctx *context.Context) error {
return nil
}
-func VersionErrorDataPrepare(ctx *context.Context, form auth.CreateModelArtsTrainJobForm) error {
+func versionErrorDataPrepare(ctx *context.Context, form auth.CreateModelArtsTrainJobForm) error {
ctx.Data["PageIsCloudBrain"] = true
var jobID = ctx.Params(":jobid")
// var versionName = ctx.Params(":version-name")
@@ -690,22 +689,23 @@ func TrainJobCreate(ctx *context.Context, form auth.CreateModelArtsTrainJobForm)
if err := paramCheckCreateTrainJob(form); err != nil {
log.Error("paramCheckCreateTrainJob failed:(%v)", err)
- ErrorNewDataPrepare(ctx, form)
+ trainJobErrorNewDataPrepare(ctx, form)
ctx.RenderWithErr(err.Error(), tplModelArtsTrainJobNew, &form)
return
}
- attach, err := models.GetAttachmentByUUID(uuid)
- if err != nil {
- log.Error("GetAttachmentByUUID(%s) failed:%v", uuid, err.Error())
- return
- }
+ // attach, err := models.GetAttachmentByUUID(uuid)
+ // if err != nil {
+ // log.Error("GetAttachmentByUUID(%s) failed:%v", uuid, err.Error())
+ // return
+ // }
//todo: del the codeLocalPath
- _, err = ioutil.ReadDir(codeLocalPath)
- if err == nil {
- os.RemoveAll(codeLocalPath)
- }
+ // _, err := ioutil.ReadDir(codeLocalPath)
+ // if err == nil {
+ // os.RemoveAll(codeLocalPath)
+ // }
+ os.RemoveAll(codeLocalPath)
gitRepo, _ := git.OpenRepository(repo.RepoPath())
commitID, _ := gitRepo.GetBranchCommitID(branch_name)
@@ -714,7 +714,7 @@ func TrainJobCreate(ctx *context.Context, form auth.CreateModelArtsTrainJobForm)
Branch: branch_name,
}); err != nil {
log.Error("创建任务失败,服务器超时!: %s (%v)", repo.FullName(), err)
- trainJobNewDataPrepare(ctx)
+ trainJobErrorNewDataPrepare(ctx, form)
ctx.RenderWithErr("创建任务失败,服务器超时!", tplModelArtsTrainJobNew, &form)
return
}
@@ -722,14 +722,14 @@ func TrainJobCreate(ctx *context.Context, form auth.CreateModelArtsTrainJobForm)
//todo: upload code (send to file_server todo this work?)
if err := obsMkdir(setting.CodePathPrefix + jobName + modelarts.OutputPath + VersionOutputPath + "/"); err != nil {
log.Error("Failed to obsMkdir_output: %s (%v)", repo.FullName(), err)
- trainJobNewDataPrepare(ctx)
+ trainJobErrorNewDataPrepare(ctx, form)
ctx.RenderWithErr("Failed to obsMkdir_output", tplModelArtsTrainJobNew, &form)
return
}
if err := obsMkdir(setting.CodePathPrefix + jobName + modelarts.LogPath + VersionOutputPath + "/"); err != nil {
log.Error("Failed to obsMkdir_log: %s (%v)", repo.FullName(), err)
- trainJobNewDataPrepare(ctx)
+ trainJobErrorNewDataPrepare(ctx, form)
ctx.RenderWithErr("Failed to obsMkdir_log", tplModelArtsTrainJobNew, &form)
return
}
@@ -738,7 +738,7 @@ func TrainJobCreate(ctx *context.Context, form auth.CreateModelArtsTrainJobForm)
if err := uploadCodeToObs(codeLocalPath, jobName, ""); err != nil {
// if err := uploadCodeToObs(codeLocalPath, jobName, parentDir); err != nil {
log.Error("Failed to uploadCodeToObs: %s (%v)", repo.FullName(), err)
- trainJobNewDataPrepare(ctx)
+ trainJobErrorNewDataPrepare(ctx, form)
ctx.RenderWithErr("Failed to uploadCodeToObs", tplModelArtsTrainJobNew, &form)
return
}
@@ -758,7 +758,7 @@ func TrainJobCreate(ctx *context.Context, form auth.CreateModelArtsTrainJobForm)
err := json.Unmarshal([]byte(params), ¶meters)
if err != nil {
log.Error("Failed to Unmarshal params: %s (%v)", params, err)
- trainJobNewDataPrepare(ctx)
+ trainJobErrorNewDataPrepare(ctx, form)
ctx.RenderWithErr("运行参数错误", tplModelArtsTrainJobNew, &form)
return
}
@@ -801,7 +801,7 @@ func TrainJobCreate(ctx *context.Context, form auth.CreateModelArtsTrainJobForm)
if err != nil {
log.Error("Failed to CreateTrainJobConfig: %v", err)
- trainJobNewDataPrepare(ctx)
+ trainJobErrorNewDataPrepare(ctx, form)
ctx.RenderWithErr("保存作业参数失败:"+err.Error(), tplModelArtsTrainJobNew, &form)
return
}
@@ -839,15 +839,10 @@ func TrainJobCreate(ctx *context.Context, form auth.CreateModelArtsTrainJobForm)
return
}
- err = modelarts.GenerateTrainJob(ctx, req)
+ err := modelarts.GenerateTrainJob(ctx, req)
if err != nil {
log.Error("GenerateTrainJob failed:%v", err.Error())
- trainJobNewDataPrepare(ctx)
- ctx.Data["bootFile"] = form.BootFile
- ctx.Data["uuid"] = form.Attachment
- ctx.Data["datasetName"] = attach.Name
- ctx.Data["params"] = Parameters.Parameter
- ctx.Data["branch_name"] = branch_name
+ trainJobErrorNewDataPrepare(ctx, form)
ctx.RenderWithErr(err.Error(), tplModelArtsTrainJobNew, &form)
return
}
@@ -896,7 +891,7 @@ func TrainJobCreateVersion(ctx *context.Context, form auth.CreateModelArtsTrainJ
if err := paramCheckCreateTrainJob(form); err != nil {
log.Error("paramCheckCreateTrainJob failed:(%v)", err)
- VersionErrorDataPrepare(ctx, form)
+ versionErrorDataPrepare(ctx, form)
ctx.RenderWithErr(err.Error(), tplModelArtsTrainJobVersionNew, &form)
return
}
@@ -920,7 +915,7 @@ func TrainJobCreateVersion(ctx *context.Context, form auth.CreateModelArtsTrainJ
Branch: branch_name,
}); err != nil {
log.Error("创建任务失败,任务名称已存在!: %s (%v)", repo.FullName(), err)
- VersionErrorDataPrepare(ctx, form)
+ versionErrorDataPrepare(ctx, form)
ctx.RenderWithErr("创建任务失败,任务名称已存在!", tplModelArtsTrainJobVersionNew, &form)
return
}
@@ -928,14 +923,14 @@ func TrainJobCreateVersion(ctx *context.Context, form auth.CreateModelArtsTrainJ
//todo: upload code (send to file_server todo this work?)
if err := obsMkdir(setting.CodePathPrefix + jobName + modelarts.OutputPath + VersionOutputPath + "/"); err != nil {
log.Error("Failed to obsMkdir_output: %s (%v)", repo.FullName(), err)
- VersionErrorDataPrepare(ctx, form)
+ versionErrorDataPrepare(ctx, form)
ctx.RenderWithErr("Failed to obsMkdir_output", tplModelArtsTrainJobVersionNew, &form)
return
}
if err := obsMkdir(setting.CodePathPrefix + jobName + modelarts.LogPath + VersionOutputPath + "/"); err != nil {
log.Error("Failed to obsMkdir_log: %s (%v)", repo.FullName(), err)
- VersionErrorDataPrepare(ctx, form)
+ versionErrorDataPrepare(ctx, form)
ctx.RenderWithErr("Failed to obsMkdir_log", tplModelArtsTrainJobVersionNew, &form)
return
}
@@ -945,7 +940,7 @@ func TrainJobCreateVersion(ctx *context.Context, form auth.CreateModelArtsTrainJ
// if err := uploadCodeToObs(codeLocalPath, jobName, ""); err != nil {
if err := uploadCodeToObs(codeLocalPath, jobName, parentDir); err != nil {
log.Error("Failed to uploadCodeToObs: %s (%v)", repo.FullName(), err)
- VersionErrorDataPrepare(ctx, form)
+ versionErrorDataPrepare(ctx, form)
ctx.RenderWithErr("Failed to uploadCodeToObs", tplModelArtsTrainJobVersionNew, &form)
return
}
@@ -965,7 +960,7 @@ func TrainJobCreateVersion(ctx *context.Context, form auth.CreateModelArtsTrainJ
err := json.Unmarshal([]byte(params), ¶meters)
if err != nil {
log.Error("Failed to Unmarshal params: %s (%v)", params, err)
- VersionErrorDataPrepare(ctx, form)
+ versionErrorDataPrepare(ctx, form)
ctx.RenderWithErr("运行参数错误", tplModelArtsTrainJobVersionNew, &form)
return
}
@@ -984,7 +979,7 @@ func TrainJobCreateVersion(ctx *context.Context, form auth.CreateModelArtsTrainJ
if isSaveParam == "on" {
if form.ParameterTemplateName == "" {
log.Error("ParameterTemplateName is empty")
- VersionErrorDataPrepare(ctx, form)
+ versionErrorDataPrepare(ctx, form)
ctx.RenderWithErr("保存作业参数时,作业参数名称不能为空", tplModelArtsTrainJobVersionNew, &form)
return
}
@@ -1008,7 +1003,7 @@ func TrainJobCreateVersion(ctx *context.Context, form auth.CreateModelArtsTrainJ
if err != nil {
log.Error("Failed to CreateTrainJobConfig: %v", err)
- VersionErrorDataPrepare(ctx, form)
+ versionErrorDataPrepare(ctx, form)
ctx.RenderWithErr("保存作业参数失败:"+err.Error(), tplModelArtsTrainJobVersionNew, &form)
return
}
@@ -1055,7 +1050,7 @@ func TrainJobCreateVersion(ctx *context.Context, form auth.CreateModelArtsTrainJ
err = modelarts.GenerateTrainJobVersion(ctx, req, jobID)
if err != nil {
log.Error("GenerateTrainJob failed:%v", err.Error())
- VersionErrorDataPrepare(ctx, form)
+ versionErrorDataPrepare(ctx, form)
ctx.RenderWithErr(err.Error(), tplModelArtsTrainJobVersionNew, &form)
return
}
diff --git a/routers/routes/routes.go b/routers/routes/routes.go
index 3bacb7549..67794bf88 100755
--- a/routers/routes/routes.go
+++ b/routers/routes/routes.go
@@ -792,7 +792,7 @@ func RegisterRoutes(m *macaron.Macaron) {
}, reqSignIn, context.RepoAssignment(), context.UnitTypes(), reqRepoAdmin, context.RepoRef())
m.Post("/:username/:reponame/action/:action", reqSignIn, context.RepoAssignment(), context.UnitTypes(), repo.Action)
- m.Get("/tool/query_user_static_page", adminReq, repo.QueryUserStaticDataPage)
+
// Grouping for those endpoints not requiring authentication
m.Group("/:username/:reponame", func() {
m.Get("/contributors", repo.Contributors)
diff --git a/templates/base/head_navbar.tmpl b/templates/base/head_navbar.tmpl
index 49b3181e7..c0c1aff35 100755
--- a/templates/base/head_navbar.tmpl
+++ b/templates/base/head_navbar.tmpl
@@ -37,7 +37,7 @@
{{.i18n.Tr "explore.users"}}
{{.i18n.Tr "explore.organizations"}}
{{.i18n.Tr "explore.images"}}
- {{if .IsAdmin}}
+ {{if .IsOperator}}
{{.i18n.Tr "explore.data_analysis"}}
{{end}}
@@ -55,7 +55,7 @@
{{.i18n.Tr "explore.users"}}
{{.i18n.Tr "explore.organizations"}}
{{.i18n.Tr "explore.images"}}
- {{if .IsAdmin}}
+ {{if .IsOperator}}
{{.i18n.Tr "explore.data_analysis"}}
{{end}}
diff --git a/templates/base/head_navbar_fluid.tmpl b/templates/base/head_navbar_fluid.tmpl
index 11f5e70da..3b44babaa 100644
--- a/templates/base/head_navbar_fluid.tmpl
+++ b/templates/base/head_navbar_fluid.tmpl
@@ -37,7 +37,7 @@
{{.i18n.Tr "explore.users"}}
{{.i18n.Tr "explore.organizations"}}
{{.i18n.Tr "explore.images"}}
- {{if .IsAdmin}}
+ {{if .IsOperator}}
{{.i18n.Tr "explore.data_analysis"}}
{{end}}
@@ -55,7 +55,7 @@
{{.i18n.Tr "explore.users"}}
{{.i18n.Tr "explore.organizations"}}
{{.i18n.Tr "explore.images"}}
- {{if .IsAdmin}}
+ {{if .IsOperator}}
{{.i18n.Tr "explore.data_analysis"}}
{{end}}
diff --git a/templates/base/head_navbar_home.tmpl b/templates/base/head_navbar_home.tmpl
index c94ff269f..8bbeebec8 100644
--- a/templates/base/head_navbar_home.tmpl
+++ b/templates/base/head_navbar_home.tmpl
@@ -29,7 +29,7 @@
{{.i18n.Tr "explore.users"}}
{{.i18n.Tr "explore.organizations"}}
{{.i18n.Tr "explore.images"}}
- {{if .IsAdmin}}
+ {{if .IsOperator}}
{{.i18n.Tr "explore.data_analysis"}}
{{end}}
@@ -47,7 +47,7 @@
{{.i18n.Tr "explore.users"}}
{{.i18n.Tr "explore.organizations"}}
{{.i18n.Tr "explore.images"}}
- {{if .IsAdmin}}
+ {{if .IsOperator}}
{{.i18n.Tr "explore.data_analysis"}}
{{end}}
diff --git a/web_src/js/components/DataAnalysis.vue b/web_src/js/components/DataAnalysis.vue
index 026c02bd1..ae536db28 100755
--- a/web_src/js/components/DataAnalysis.vue
+++ b/web_src/js/components/DataAnalysis.vue
@@ -3,7 +3,7 @@
-
+
概览
@@ -13,14 +13,14 @@
-
+
项目分析
-
+
用户分析
@@ -121,6 +121,14 @@
/deep/ .el-tabs__item {
padding: 0px 20px 0px 20px;
}
-
+ /deep/ .el-tabs__item.is-active .el-image{
+ filter:none
+ }
+ /deep/ .el-tabs__item:hover .el-image{
+ filter:none
+ }
+ /deep/ .el-image{
+ filter:grayscale(100%)
+ }
\ No newline at end of file
diff --git a/web_src/js/components/ProAnalysis.vue b/web_src/js/components/ProAnalysis.vue
index 817c1a12c..074f8e326 100755
--- a/web_src/js/components/ProAnalysis.vue
+++ b/web_src/js/components/ProAnalysis.vue
@@ -1085,6 +1085,12 @@
return data[0]+''+data[1]+''+data[2]
}
},
+ goBack(){
+ if( $("#pro_detail").is(':visible') ){
+ document.getElementById("pro_main").style.display = "block";
+ document.getElementById("pro_detail").style.display = "none";
+ }
+ },
},
filters:{
@@ -1125,7 +1131,7 @@
return " " +value.user+ ""
}
- },
+ },
},
@@ -1140,6 +1146,10 @@
this.radarOpenI = this.$echarts.init(document.getElementById('radar_openi'))
this.echartsOITd = this.$echarts.init(document.getElementById('line_openi'))
this.echartsSelectData = this.$echarts.init(document.getElementById('selectData'))
+ if (window.history && window.history.pushState) {
+ history.pushState(null, null, document.URL);
+ window.addEventListener('popstate', this.goBack, false);
+ }
// window.onresize=function(){
// this.radarOpenI.resize();
// this.echartsOITd.resize();
diff --git a/web_src/js/components/UserAnalysis.vue b/web_src/js/components/UserAnalysis.vue
index f5a0bb4db..beb4de8e9 100755
--- a/web_src/js/components/UserAnalysis.vue
+++ b/web_src/js/components/UserAnalysis.vue
@@ -27,10 +27,10 @@
-
+
- 下载报告
+ 下载报告
下载报告
@@ -335,7 +335,7 @@
}
};
- this.$axios.get('../tool/query_user_static_page',{
+ this.$axios.get('../api/v1/query_user_static_page',{
params:this.params
}).then((res)=>{
this.tableData = res.data.data