mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
feat(alerting): alerting scheduling distribution, only distibutes it on seconds for now, not sub second distribution, #5854
This commit is contained in:
@@ -1,10 +1,11 @@
|
||||
package alerting
|
||||
|
||||
type Job struct {
|
||||
Offset int64
|
||||
Delay bool
|
||||
Running bool
|
||||
Rule *Rule
|
||||
Offset int64
|
||||
OffsetWait bool
|
||||
Delay bool
|
||||
Running bool
|
||||
Rule *Rule
|
||||
}
|
||||
|
||||
type ResultLogEntry struct {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package alerting
|
||||
|
||||
import (
|
||||
"math"
|
||||
"time"
|
||||
|
||||
"github.com/grafana/grafana/pkg/log"
|
||||
@@ -34,8 +35,8 @@ func (s *SchedulerImpl) Update(rules []*Rule) {
|
||||
}
|
||||
|
||||
job.Rule = rule
|
||||
job.Offset = int64(i)
|
||||
|
||||
job.Offset = ((rule.Frequency * 1000) / int64(len(rules))) * int64(i)
|
||||
job.Offset = int64(math.Floor(float64(job.Offset) / 1000))
|
||||
jobs[rule.Id] = job
|
||||
}
|
||||
|
||||
@@ -46,9 +47,27 @@ func (s *SchedulerImpl) Tick(tickTime time.Time, execQueue chan *Job) {
|
||||
now := tickTime.Unix()
|
||||
|
||||
for _, job := range s.jobs {
|
||||
if now%job.Rule.Frequency == 0 && job.Running == false {
|
||||
s.log.Debug("Scheduler: Putting job on to exec queue", "name", job.Rule.Name)
|
||||
execQueue <- job
|
||||
if job.Running {
|
||||
continue
|
||||
}
|
||||
|
||||
if job.OffsetWait && now%job.Offset == 0 {
|
||||
job.OffsetWait = false
|
||||
s.enque(job, execQueue)
|
||||
continue
|
||||
}
|
||||
|
||||
if now%job.Rule.Frequency == 0 {
|
||||
if job.Offset > 0 {
|
||||
job.OffsetWait = true
|
||||
} else {
|
||||
s.enque(job, execQueue)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (s *SchedulerImpl) enque(job *Job, execQueue chan *Job) {
|
||||
s.log.Debug("Scheduler: Putting job on to exec queue", "name", job.Rule.Name, "id", job.Rule.Id)
|
||||
execQueue <- job
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user