wip: migrate to mono-repo. SPN has already been moved to spn/
This commit is contained in:
87
spn/unit/scheduler_stats.go
Normal file
87
spn/unit/scheduler_stats.go
Normal file
@@ -0,0 +1,87 @@
|
||||
package unit
|
||||
|
||||
// Stats are somewhat racy, as one value of sum or count might already be
|
||||
// updated with the latest slot data, while the other has been not.
|
||||
// This is not so much of a problem, as slots are really short and the impact
|
||||
// is very low.
|
||||
|
||||
// cycleStats calculates the new values and cycles the current values.
|
||||
func (s *Scheduler) cycleStats() {
|
||||
// Get and reset max pace.
|
||||
s.stats.current.maxPace.Store(s.stats.progress.maxPace.Load())
|
||||
s.stats.progress.maxPace.Store(0)
|
||||
|
||||
// Get and reset max leveled pace.
|
||||
s.stats.current.maxLeveledPace.Store(s.stats.progress.maxLeveledPace.Load())
|
||||
s.stats.progress.maxLeveledPace.Store(0)
|
||||
|
||||
// Get and reset avg slot pace.
|
||||
avgPaceCnt := s.stats.progress.avgPaceCnt.Load()
|
||||
if avgPaceCnt > 0 {
|
||||
s.stats.current.avgPace.Store(s.stats.progress.avgPaceSum.Load() / avgPaceCnt)
|
||||
} else {
|
||||
s.stats.current.avgPace.Store(0)
|
||||
}
|
||||
s.stats.progress.avgPaceCnt.Store(0)
|
||||
s.stats.progress.avgPaceSum.Store(0)
|
||||
|
||||
// Get and reset avg unit life.
|
||||
avgUnitLifeCnt := s.stats.progress.avgUnitLifeCnt.Load()
|
||||
if avgUnitLifeCnt > 0 {
|
||||
s.stats.current.avgUnitLife.Store(s.stats.progress.avgUnitLifeSum.Load() / avgUnitLifeCnt)
|
||||
} else {
|
||||
s.stats.current.avgUnitLife.Store(0)
|
||||
}
|
||||
s.stats.progress.avgUnitLifeCnt.Store(0)
|
||||
s.stats.progress.avgUnitLifeSum.Store(0)
|
||||
|
||||
// Get and reset avg work slot duration.
|
||||
avgWorkSlotCnt := s.stats.progress.avgWorkSlotCnt.Load()
|
||||
if avgWorkSlotCnt > 0 {
|
||||
s.stats.current.avgWorkSlot.Store(s.stats.progress.avgWorkSlotSum.Load() / avgWorkSlotCnt)
|
||||
} else {
|
||||
s.stats.current.avgWorkSlot.Store(0)
|
||||
}
|
||||
s.stats.progress.avgWorkSlotCnt.Store(0)
|
||||
s.stats.progress.avgWorkSlotSum.Store(0)
|
||||
|
||||
// Get and reset avg catch up slot duration.
|
||||
avgCatchUpSlotCnt := s.stats.progress.avgCatchUpSlotCnt.Load()
|
||||
if avgCatchUpSlotCnt > 0 {
|
||||
s.stats.current.avgCatchUpSlot.Store(s.stats.progress.avgCatchUpSlotSum.Load() / avgCatchUpSlotCnt)
|
||||
} else {
|
||||
s.stats.current.avgCatchUpSlot.Store(0)
|
||||
}
|
||||
s.stats.progress.avgCatchUpSlotCnt.Store(0)
|
||||
s.stats.progress.avgCatchUpSlotSum.Store(0)
|
||||
}
|
||||
|
||||
// GetMaxSlotPace returns the current maximum slot pace.
|
||||
func (s *Scheduler) GetMaxSlotPace() int64 {
|
||||
return s.stats.current.maxPace.Load()
|
||||
}
|
||||
|
||||
// GetMaxLeveledSlotPace returns the current maximum leveled slot pace.
|
||||
func (s *Scheduler) GetMaxLeveledSlotPace() int64 {
|
||||
return s.stats.current.maxLeveledPace.Load()
|
||||
}
|
||||
|
||||
// GetAvgSlotPace returns the current average slot pace.
|
||||
func (s *Scheduler) GetAvgSlotPace() int64 {
|
||||
return s.stats.current.avgPace.Load()
|
||||
}
|
||||
|
||||
// GetAvgUnitLife returns the current average unit lifetime until it is finished.
|
||||
func (s *Scheduler) GetAvgUnitLife() int64 {
|
||||
return s.stats.current.avgUnitLife.Load()
|
||||
}
|
||||
|
||||
// GetAvgWorkSlotDuration returns the current average work slot duration.
|
||||
func (s *Scheduler) GetAvgWorkSlotDuration() int64 {
|
||||
return s.stats.current.avgWorkSlot.Load()
|
||||
}
|
||||
|
||||
// GetAvgCatchUpSlotDuration returns the current average catch up slot duration.
|
||||
func (s *Scheduler) GetAvgCatchUpSlotDuration() int64 {
|
||||
return s.stats.current.avgCatchUpSlot.Load()
|
||||
}
|
||||
Reference in New Issue
Block a user