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