diff --git a/models/cloudbrain.go b/models/cloudbrain.go index 552ce74a7..32558438f 100755 --- a/models/cloudbrain.go +++ b/models/cloudbrain.go @@ -6,6 +6,7 @@ import ( "errors" "fmt" "time" + "xorm.io/xorm" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/timeutil" @@ -19,6 +20,7 @@ const ( JobStopped CloudbrainStatus = "STOPPED" JobSucceeded CloudbrainStatus = "SUCCEEDED" JobFailed CloudbrainStatus = "FAILED" + JobRunning CloudbrainStatus = "RUNNING" ) type Cloudbrain struct { @@ -31,6 +33,7 @@ type Cloudbrain struct { SubTaskName string `xorm:"INDEX"` CreatedUnix timeutil.TimeStamp `xorm:"INDEX created"` UpdatedUnix timeutil.TimeStamp `xorm:"INDEX updated"` + CanDebug bool `xorm:"-"` User *User `xorm:"-"` Repo *Repository `xorm:"-"` @@ -320,3 +323,14 @@ func SetCloudbrainStatusByJobID(jobID string, status CloudbrainStatus) (err erro _, err = x.Cols("status").Where("cloudbrain.job_id=?", jobID).Update(cb) return } + +func UpdateJob(job *Cloudbrain) error { + return updateJob(x, job) +} + +func updateJob(e Engine, job *Cloudbrain) error { + var sess *xorm.Session + sess = e.Where("job_id = ?", job.JobID) + _, err := sess.Cols("status").Update(job) + return err +} diff --git a/routers/repo/cloudbrain.go b/routers/repo/cloudbrain.go index 898b49c5f..011435376 100755 --- a/routers/repo/cloudbrain.go +++ b/routers/repo/cloudbrain.go @@ -50,6 +50,15 @@ func CloudBrainIndex(ctx *context.Context) { return } + timestamp := time.Now().Unix() + for i, task := range ciTasks { + if task.Status == string(models.JobRunning) && (timestamp - int64(task.CreatedUnix) > 30){ + ciTasks[i].CanDebug = true + } else { + ciTasks[i].CanDebug = false + } + } + pager := context.NewPagination(int(count), setting.UI.IssuePagingNum, page, 5) pager.SetDefaultParams(ctx) ctx.Data["Page"] = pager @@ -153,12 +162,31 @@ func CloudBrainShow(ctx *context.Context) { taskRoles := jobRes.TaskRoles taskRes, _ := models.ConvertToTaskPod(taskRoles["task1"].(map[string]interface{})) ctx.Data["taskRes"] = taskRes + task.Status = taskRes.TaskStatuses[0].State + err = models.UpdateJob(task) + if err != nil { + ctx.Data["error"] = err.Error() + } } ctx.Data["jobID"] = jobID ctx.HTML(200, tplCloudBrainShow) } +func CloudBrainDebug(ctx *context.Context) { + ctx.Data["PageIsCloudBrain"] = true + + var jobID = ctx.Params(":jobid") + task, err := models.GetCloudbrainByJobID(jobID) + if err != nil { + ctx.ServerError("GetCloudbrainByJobID failed", err) + return + } + + debugUrl := setting.DebugServerHost + "jpylab_" + task.JobID + "_" + task.SubTaskName + ctx.Redirect(debugUrl) +} + func downloadCode(repo *models.Repository, codePath string) error { /* if err := git.Clone(repo.RepoPath(), codePath, git.CloneRepoOptions{ diff --git a/routers/routes/routes.go b/routers/routes/routes.go index 8d722cfe2..c9fa54ca0 100755 --- a/routers/routes/routes.go +++ b/routers/routes/routes.go @@ -895,6 +895,7 @@ func RegisterRoutes(m *macaron.Macaron) { m.Group("/cloudbrain", func() { m.Get("", reqRepoCloudBrainReader, repo.CloudBrainIndex) m.Get("/:jobid", reqRepoCloudBrainReader, repo.CloudBrainShow) + m.Get("/:jobid/debug", reqRepoCloudBrainReader, repo.CloudBrainDebug) m.Get("/create", reqRepoCloudBrainWriter, repo.CloudBrainNew) m.Post("/create", reqRepoCloudBrainWriter, bindIgnErr(auth.CreateCloudBrainForm{}), repo.CloudBrainCreate) }, context.RepoRef()) diff --git a/templates/repo/cloudbrain/index.tmpl b/templates/repo/cloudbrain/index.tmpl index d1e9ababb..474002dd5 100755 --- a/templates/repo/cloudbrain/index.tmpl +++ b/templates/repo/cloudbrain/index.tmpl @@ -54,9 +54,9 @@ -