1
0
mirror of https://github.com/newnius/YAO-scheduler.git synced 2025-12-16 16:36:45 +00:00
This commit is contained in:
2020-04-13 01:30:25 +08:00
parent 4ce9378bf6
commit 533099c14b
4 changed files with 55 additions and 5 deletions

View File

@@ -3,11 +3,14 @@ package main
import (
log "github.com/sirupsen/logrus"
"sync"
"strings"
)
type Optimizer struct {
scheduler Scheduler
killedFlag bool
predicts map[string]OptimizerJobExecutionTime
}
var optimizerInstance *Optimizer
@@ -19,11 +22,42 @@ func InstanceOfOptimizer() *Optimizer {
if optimizerInstance == nil {
optimizerInstance = &Optimizer{}
optimizerInstance.predicts = map[string]OptimizerJobExecutionTime{}
}
return optimizerInstance
}
func (jhl *Optimizer) feed(job string, utils []int) {
func (optimizer *Optimizer) feed(job string, utils []int) {
log.Info("optimizer feed")
log.Info(job, utils)
go func() {
str := strings.Split(job, "-")
if len(str) == 2 {
preCnt := 0
for i := 0; i < len(utils); i++ {
if utils[i] > 15 {
break
}
preCnt++
}
postCnt := 0
for i := len(utils); i >= 0; i-- {
if utils[i] > 15 {
break
}
postCnt++
}
if _, ok := optimizer.predicts[str[0]]; !ok {
optimizer.predicts[str[0]] = OptimizerJobExecutionTime{}
}
predict := optimizer.predicts[str[0]]
predict.Pre = ((predict.Pre * predict.Version) + preCnt) / (predict.Version + 1)
predict.Post = ((predict.Post * predict.Version) + postCnt) / (predict.Version + 1)
predict.Total = ((predict.Total * predict.Version) + len(utils)) / (predict.Version + 1)
predict.Version++
}
}()
}