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 }