func DeleteBuild(c *gin.Context) { engine_ := context.Engine(c) repo := session.Repo(c) // parse the build number and job sequence number from // the repquest parameter. num, _ := strconv.Atoi(c.Params.ByName("number")) seq, _ := strconv.Atoi(c.Params.ByName("job")) build, err := store.GetBuildNumber(c, repo, num) if err != nil { c.AbortWithError(404, err) return } job, err := store.GetJobNumber(c, build, seq) if err != nil { c.AbortWithError(404, err) return } node, err := store.GetNode(c, job.NodeID) if err != nil { c.AbortWithError(404, err) return } engine_.Cancel(build.ID, job.ID, node) }
func DeleteNode(c *gin.Context) { engine := context.Engine(c) id, _ := strconv.Atoi(c.Param("node")) node, err := store.GetNode(c, int64(id)) if err != nil { c.AbortWithStatus(http.StatusNotFound) return } err = store.DeleteNode(c, node) if err != nil { c.AbortWithStatus(http.StatusInternalServerError) return } engine.Deallocate(node) }
func GetStream(c *gin.Context) { engine_ := context.Engine(c) repo := session.Repo(c) buildn, _ := strconv.Atoi(c.Param("build")) jobn, _ := strconv.Atoi(c.Param("number")) c.Writer.Header().Set("Content-Type", "text/event-stream") build, err := store.GetBuildNumber(c, repo, buildn) if err != nil { log.Debugln("stream cannot get build number.", err) c.AbortWithError(404, err) return } job, err := store.GetJobNumber(c, build, jobn) if err != nil { log.Debugln("stream cannot get job number.", err) c.AbortWithError(404, err) return } node, err := store.GetNode(c, job.NodeID) if err != nil { log.Debugln("stream cannot get node.", err) c.AbortWithError(404, err) return } rc, err := engine_.Stream(build.ID, job.ID, node) if err != nil { c.AbortWithError(404, err) return } defer func() { rc.Close() }() go func() { <-c.Writer.CloseNotify() rc.Close() }() rw := &StreamWriter{c.Writer, 0} stdcopy.StdCopy(rw, rw, rc) }