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  }