github.com/justinjmoses/evergreen@v0.0.0-20170530173719-1d50e381ff0d/scheduler/task_queue_persister.go (about) 1 package scheduler 2 3 import ( 4 "github.com/evergreen-ci/evergreen/model" 5 "github.com/evergreen-ci/evergreen/model/task" 6 "github.com/mongodb/grip" 7 ) 8 9 // TaskQueuePersister is responsible for taking a task queue for a particular distro 10 // and saving it. 11 type TaskQueuePersister interface { 12 PersistTaskQueue(distro string, tasks []task.Task, 13 taskExpectedDuration model.ProjectTaskDurations) ([]model.TaskQueueItem, 14 error) 15 } 16 17 // DBTaskQueuePersister saves a queue to the database. 18 type DBTaskQueuePersister struct{} 19 20 // PersistTaskQueue saves the task queue to the database. 21 // Returns an error if the db call returns an error. 22 func (self *DBTaskQueuePersister) PersistTaskQueue(distro string, 23 tasks []task.Task, 24 taskDurations model.ProjectTaskDurations) ([]model.TaskQueueItem, error) { 25 taskQueue := make([]model.TaskQueueItem, 0, len(tasks)) 26 for _, t := range tasks { 27 expectedTaskDuration := model.GetTaskExpectedDuration(t, taskDurations) 28 taskQueue = append(taskQueue, model.TaskQueueItem{ 29 Id: t.Id, 30 DisplayName: t.DisplayName, 31 BuildVariant: t.BuildVariant, 32 RevisionOrderNumber: t.RevisionOrderNumber, 33 Requester: t.Requester, 34 Revision: t.Revision, 35 Project: t.Project, 36 ExpectedDuration: expectedTaskDuration, 37 Priority: t.Priority, 38 }) 39 40 if err := t.SetExpectedDuration(expectedTaskDuration); err != nil { 41 grip.Errorf("Error updating projected task duration for %s: %+v", t.Id, err) 42 } 43 } 44 return taskQueue, model.UpdateTaskQueue(distro, taskQueue) 45 }