| @@ -59,6 +59,7 @@ type Cloudbrain struct { | |||||
| ContainerIp string | ContainerIp string | ||||
| CreatedUnix timeutil.TimeStamp `xorm:"INDEX created"` | CreatedUnix timeutil.TimeStamp `xorm:"INDEX created"` | ||||
| UpdatedUnix timeutil.TimeStamp `xorm:"INDEX updated"` | UpdatedUnix timeutil.TimeStamp `xorm:"INDEX updated"` | ||||
| Duration int `xorm:"INDEX duration"` | |||||
| DeletedAt time.Time `xorm:"deleted"` | DeletedAt time.Time `xorm:"deleted"` | ||||
| CanDebug bool `xorm:"-"` | CanDebug bool `xorm:"-"` | ||||
| CanDel bool `xorm:"-"` | CanDel bool `xorm:"-"` | ||||
| @@ -905,6 +906,12 @@ func SetCloudbrainStatusByJobID(jobID string, status CloudbrainStatus) (err erro | |||||
| return | return | ||||
| } | } | ||||
| func SetTrainJobStatusByJobID(jobID string, status string, duration int) (err error) { | |||||
| cb := &Cloudbrain{JobID: jobID, Status: string(status), Duration: duration} | |||||
| _, err = x.Cols("status", "duration").Where("cloudbrain.job_id=?", jobID).Update(cb) | |||||
| return | |||||
| } | |||||
| func UpdateJob(job *Cloudbrain) error { | func UpdateJob(job *Cloudbrain) error { | ||||
| return updateJob(x, job) | return updateJob(x, job) | ||||
| } | } | ||||
| @@ -916,6 +923,17 @@ func updateJob(e Engine, job *Cloudbrain) error { | |||||
| return err | return err | ||||
| } | } | ||||
| // func UpdateTrainJob(job *CloudbrainInfo) error { | |||||
| // return updateTrainJob(x, job) | |||||
| // } | |||||
| // func updateTrainJob(e Engine, job *CloudbrainInfo) error { | |||||
| // var sess *xorm.Session | |||||
| // sess = e.Where("job_id = ?", job.Cloudbrain.JobID) | |||||
| // _, err := sess.Cols("status", "container_id", "container_ip").Update(job) | |||||
| // return err | |||||
| // } | |||||
| func DeleteJob(job *Cloudbrain) error { | func DeleteJob(job *Cloudbrain) error { | ||||
| return deleteJob(x, job) | return deleteJob(x, job) | ||||
| } | } | ||||
| @@ -151,7 +151,6 @@ func GenerateTask(ctx *context.Context, jobName, uuid, description string) error | |||||
| log.Error("CreateJob failed: %v", err.Error()) | log.Error("CreateJob failed: %v", err.Error()) | ||||
| return err | return err | ||||
| } | } | ||||
| err = models.CreateCloudbrain(&models.Cloudbrain{ | err = models.CreateCloudbrain(&models.Cloudbrain{ | ||||
| Status: string(models.JobWaiting), | Status: string(models.JobWaiting), | ||||
| @@ -501,7 +501,34 @@ func TrainJobIndex(ctx *context.Context) { | |||||
| page = 1 | page = 1 | ||||
| } | } | ||||
| tasks, count, err := models.Cloudbrains(&models.CloudbrainsOptions{ | |||||
| tasks, _, err := models.Cloudbrains(&models.CloudbrainsOptions{ | |||||
| ListOptions: models.ListOptions{ | |||||
| Page: page, | |||||
| PageSize: setting.UI.IssuePagingNum, | |||||
| }, | |||||
| RepoID: repo.ID, | |||||
| Type: models.TypeCloudBrainTrainJob, | |||||
| }) | |||||
| if err != nil { | |||||
| ctx.ServerError("Cloudbrain", err) | |||||
| return | |||||
| } | |||||
| for i := range tasks { | |||||
| TrainJobDetail, err := modelarts.GetTrainJob(tasks[i].Cloudbrain.JobID, strconv.FormatInt(tasks[i].Cloudbrain.VersionID, 10)) | |||||
| if err != nil { | |||||
| log.Error("GetJob(%s) failed:%v", tasks[i].Cloudbrain.JobID, err.Error()) | |||||
| return | |||||
| } | |||||
| err = models.SetTrainJobStatusByJobID(tasks[i].Cloudbrain.JobID, modelarts.TransTrainJobStatus(TrainJobDetail.IntStatus), int(TrainJobDetail.Duration)) | |||||
| // err = models.UpdateJob(tasks[i].Cloudbrain) | |||||
| if err != nil { | |||||
| ctx.ServerError("UpdateJob failed", err) | |||||
| return | |||||
| } | |||||
| } | |||||
| trainTasks, count, err := models.Cloudbrains(&models.CloudbrainsOptions{ | |||||
| ListOptions: models.ListOptions{ | ListOptions: models.ListOptions{ | ||||
| Page: page, | Page: page, | ||||
| PageSize: setting.UI.IssuePagingNum, | PageSize: setting.UI.IssuePagingNum, | ||||
| @@ -519,7 +546,7 @@ func TrainJobIndex(ctx *context.Context) { | |||||
| ctx.Data["Page"] = pager | ctx.Data["Page"] = pager | ||||
| ctx.Data["PageIsCloudBrain"] = true | ctx.Data["PageIsCloudBrain"] = true | ||||
| ctx.Data["Tasks"] = tasks | |||||
| ctx.Data["Tasks"] = trainTasks | |||||
| ctx.HTML(200, tplModelArtsTrainJobIndex) | ctx.HTML(200, tplModelArtsTrainJobIndex) | ||||
| } | } | ||||
| @@ -961,15 +961,15 @@ func RegisterRoutes(m *macaron.Macaron) { | |||||
| }, context.RepoRef()) | }, context.RepoRef()) | ||||
| m.Group("/modelarts", func() { | m.Group("/modelarts", func() { | ||||
| m.Get("", reqRepoCloudBrainReader, repo.ModelArtsIndex) | |||||
| m.Group("/:jobid", func() { | |||||
| m.Get("", reqRepoCloudBrainReader, repo.ModelArtsShow) | |||||
| m.Get("/debug", reqRepoCloudBrainReader, repo.ModelArtsDebug) | |||||
| m.Post("/stop", reqRepoCloudBrainWriter, repo.ModelArtsStop) | |||||
| m.Post("/del", reqRepoCloudBrainWriter, repo.ModelArtsDel) | |||||
| }) | |||||
| m.Get("/create", reqRepoCloudBrainWriter, repo.ModelArtsNew) | |||||
| m.Post("/create", reqRepoCloudBrainWriter, bindIgnErr(auth.CreateModelArtsForm{}), repo.ModelArtsCreate) | |||||
| // m.Get("", reqRepoCloudBrainReader, repo.ModelArtsIndex) | |||||
| // m.Group("/:jobid", func() { | |||||
| // m.Get("", reqRepoCloudBrainReader, repo.ModelArtsShow) | |||||
| // m.Get("/debug", reqRepoCloudBrainReader, repo.ModelArtsDebug) | |||||
| // m.Post("/stop", reqRepoCloudBrainWriter, repo.ModelArtsStop) | |||||
| // m.Post("/del", reqRepoCloudBrainWriter, repo.ModelArtsDel) | |||||
| // }) | |||||
| // m.Get("/create", reqRepoCloudBrainWriter, repo.ModelArtsNew) | |||||
| // m.Post("/create", reqRepoCloudBrainWriter, bindIgnErr(auth.CreateModelArtsForm{}), repo.ModelArtsCreate) | |||||
| m.Group("/notebook", func() { | m.Group("/notebook", func() { | ||||
| m.Get("", reqRepoCloudBrainReader, repo.NotebookIndex) | m.Get("", reqRepoCloudBrainReader, repo.NotebookIndex) | ||||