github.com/billybanfield/evergreen@v0.0.0-20170525200750-eeee692790f7/scheduler/runner.go (about)

     1  package scheduler
     2  
     3  import (
     4  	"time"
     5  
     6  	"github.com/evergreen-ci/evergreen"
     7  	"github.com/evergreen-ci/evergreen/model"
     8  	"github.com/mongodb/grip"
     9  	"github.com/pkg/errors"
    10  )
    11  
    12  // Runner runs the scheduler process.
    13  type Runner struct{}
    14  
    15  const (
    16  	RunnerName  = "scheduler"
    17  	Description = "queue tasks for execution and allocate hosts"
    18  )
    19  
    20  func (r *Runner) Name() string {
    21  	return RunnerName
    22  }
    23  
    24  func (r *Runner) Description() string {
    25  	return Description
    26  }
    27  
    28  func (r *Runner) Run(config *evergreen.Settings) error {
    29  	startTime := time.Now()
    30  	grip.Infoln("Starting scheduler at time:", startTime)
    31  
    32  	schedulerInstance := &Scheduler{
    33  		config,
    34  		&DBTaskFinder{},
    35  		&CmpBasedTaskPrioritizer{},
    36  		&DBTaskDurationEstimator{},
    37  		&DBTaskQueuePersister{},
    38  		&DurationBasedHostAllocator{},
    39  	}
    40  
    41  	if err := schedulerInstance.Schedule(); err != nil {
    42  		err = errors.Wrap(err, "Error running scheduler")
    43  		grip.Error(err)
    44  		return err
    45  	}
    46  
    47  	runtime := time.Since(startTime)
    48  	if err := model.SetProcessRuntimeCompleted(RunnerName, runtime); err != nil {
    49  		err = errors.Wrap(err, "Error updating process status")
    50  		grip.Error(err)
    51  	}
    52  	grip.Infof("Scheduler took %s to run", runtime)
    53  	return nil
    54  }