cancel all pending or started builds when the app starts

This commit is contained in:
Brad 2014-06-11 12:39:29 -07:00
parent 88ee774d8d
commit 1a143f8fb4
3 changed files with 23 additions and 1 deletions

View file

@ -93,6 +93,9 @@ func main() {
perms := perm.NewManager(db)
commits := commit.NewManager(db)
// cancel all previously running builds
go commits.CancelAll()
// setup the session managers
sess := session.NewSession(users)

View file

@ -43,6 +43,10 @@ type CommitManager interface {
// Delete removes the commit from the datastore.
Delete(commit *Commit) error
// CancelAll will update the status of all Started or Pending
// builds to a status of Killed (cancelled).
CancelAll() error
}
// commitManager manages a list of commits in a SQL database.
@ -140,7 +144,16 @@ UPDATE output SET output_raw = ? WHERE commit_id = ?;
// SQL statement to delete a Commit by ID.
const deleteStmt = `
DELETE FROM commits WHERE commit_id = ?
DELETE FROM commits WHERE commit_id = ?;
`
// SQL statement to cancel all running Commits.
const cancelStmt = `
UPDATE commits SET
commit_status = ?,
commit_started = ?,
commit_finished = ?
WHERE commit_status IN ('Started', 'Pending');
`
func (db *commitManager) Find(id int64) (*Commit, error) {
@ -215,3 +228,8 @@ func (db *commitManager) Delete(commit *Commit) error {
_, err := db.Exec(deleteStmt, commit.ID)
return err
}
func (db *commitManager) CancelAll() error {
_, err := db.Exec(cancelStmt, StatusKilled, time.Now().Unix(), time.Now().Unix())
return err
}

View file

@ -12,6 +12,7 @@ const (
StatusSuccess = "Success"
StatusFailure = "Failure"
StatusError = "Error"
StatusKilled = "Killed"
)
type Commit struct {