task_tracker/storage/maintenance.go
2020-01-03 16:37:51 -05:00

74 lines
1.6 KiB
Go

package storage
import (
"github.com/sirupsen/logrus"
)
func (database *Database) ResetFailedTasks(pid int64) int64 {
db := database.getDB()
res, err := db.Exec(`UPDATE task SET status=1, retries=0, assign_time=NULL, assignee=NULL
WHERE project=$1 AND status=2`, pid)
handleErr(err)
rowsAffected, _ := res.RowsAffected()
return rowsAffected
}
func (database *Database) ResetTimedOutTasks() {
db := database.getDB()
res, err := db.Exec(`
UPDATE task SET assignee=NULL, assign_time=NULL
WHERE status=1 AND assignee IS NOT NULL
AND extract(epoch from now() at time zone 'utc') > (assign_time + max_assign_time);`)
handleErr(err)
if err != nil {
return
}
rowsAffected, _ := res.RowsAffected()
logrus.WithFields(logrus.Fields{
"rowsAffected": rowsAffected,
}).Info("Reset timed out tasks")
}
func (database Database) HardReset(pid int64) int64 {
db := database.getDB()
_, err := db.Exec(`UPDATE task SET assignee=NULL WHERE project=$1`, pid)
handleErr(err)
res, err := db.Exec(`DELETE FROM task WHERE project=$1`, pid)
rowsAffected, _ := res.RowsAffected()
logrus.WithFields(logrus.Fields{
"rowsAffected": rowsAffected,
"project": pid,
}).Info("Hard reset")
return rowsAffected
}
func (database Database) ReclaimAssignedTasks(pid int64) int64 {
db := database.getDB()
res, err := db.Exec(`UPDATE task SET assignee=NULL, assign_time=NULL
WHERE project=$1 AND status=1`, pid)
handleErr(err)
rowsAffected, _ := res.RowsAffected()
logrus.WithFields(logrus.Fields{
"rowsAffected": rowsAffected,
"project": pid,
}).Info("Reclaim assigned tasks")
return rowsAffected
}