| @@ -34,6 +34,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"` | ||||
| DeletedAt time.Time `xorm:"deleted"` | |||||
| CanDebug bool `xorm:"-"` | CanDebug bool `xorm:"-"` | ||||
| User *User `xorm:"-"` | User *User `xorm:"-"` | ||||
| @@ -352,3 +353,12 @@ func updateJob(e Engine, job *Cloudbrain) error { | |||||
| _, err := sess.Cols("status", "container_id", "container_ip").Update(job) | _, err := sess.Cols("status", "container_id", "container_ip").Update(job) | ||||
| return err | return err | ||||
| } | } | ||||
| func DeleteJob(job *Cloudbrain) error { | |||||
| return deleteJob(x, job) | |||||
| } | |||||
| func deleteJob(e Engine, job *Cloudbrain) error { | |||||
| _, err := e.ID(job.ID).Delete(job) | |||||
| return err | |||||
| } | |||||
| @@ -247,6 +247,29 @@ func CloudBrainStop(ctx *context.Context) { | |||||
| ctx.Redirect(setting.AppSubURL + ctx.Repo.RepoLink + "/cloudbrain") | ctx.Redirect(setting.AppSubURL + ctx.Repo.RepoLink + "/cloudbrain") | ||||
| } | } | ||||
| func CloudBrainDel(ctx *context.Context) { | |||||
| var jobID = ctx.Params(":jobid") | |||||
| task, err := models.GetCloudbrainByJobID(jobID) | |||||
| if err != nil { | |||||
| ctx.ServerError("GetCloudbrainByJobID failed", err) | |||||
| return | |||||
| } | |||||
| if task.Status != string(models.JobStopped) { | |||||
| log.Error("the job(%s) has not been stopped", task.JobName) | |||||
| ctx.ServerError("the job has not been stopped", errors.New("the job has not been stopped")) | |||||
| return | |||||
| } | |||||
| err = models.DeleteJob(task) | |||||
| if err != nil { | |||||
| ctx.ServerError("UpdateJob failed", err) | |||||
| return | |||||
| } | |||||
| ctx.Redirect(setting.AppSubURL + ctx.Repo.RepoLink + "/cloudbrain") | |||||
| } | |||||
| func downloadCode(repo *models.Repository, codePath string) error { | func downloadCode(repo *models.Repository, codePath string) error { | ||||
| if err := git.Clone(repo.RepoPath(), codePath, git.CloneRepoOptions{}); err != nil { | if err := git.Clone(repo.RepoPath(), codePath, git.CloneRepoOptions{}); err != nil { | ||||
| log.Error("Failed to clone repository: %s (%v)", repo.FullName(), err) | log.Error("Failed to clone repository: %s (%v)", repo.FullName(), err) | ||||
| @@ -899,6 +899,7 @@ func RegisterRoutes(m *macaron.Macaron) { | |||||
| m.Get("/debug", reqRepoCloudBrainReader, repo.CloudBrainDebug) | m.Get("/debug", reqRepoCloudBrainReader, repo.CloudBrainDebug) | ||||
| m.Post("/commit_image", reqRepoCloudBrainWriter, bindIgnErr(auth.CommitImageCloudBrainForm{}), repo.CloudBrainCommitImage) | m.Post("/commit_image", reqRepoCloudBrainWriter, bindIgnErr(auth.CommitImageCloudBrainForm{}), repo.CloudBrainCommitImage) | ||||
| m.Post("/stop", reqRepoCloudBrainWriter, repo.CloudBrainStop) | m.Post("/stop", reqRepoCloudBrainWriter, repo.CloudBrainStop) | ||||
| m.Post("/del", reqRepoCloudBrainWriter, repo.CloudBrainDel) | |||||
| }) | }) | ||||
| m.Get("/create", reqRepoCloudBrainWriter, repo.CloudBrainNew) | m.Get("/create", reqRepoCloudBrainWriter, repo.CloudBrainNew) | ||||
| m.Post("/create", reqRepoCloudBrainWriter, bindIgnErr(auth.CreateCloudBrainForm{}), repo.CloudBrainCreate) | m.Post("/create", reqRepoCloudBrainWriter, bindIgnErr(auth.CreateCloudBrainForm{}), repo.CloudBrainCreate) | ||||