Handle dynamic housekeeping in derived stats.
Use timestamps instead of sample counts for generating summary.
This commit is contained in:
parent
ed38123221
commit
e3e65524b6
@ -68,11 +68,21 @@ func (s *StatsSummary) AddSample(stat info.ContainerStats) error {
|
|||||||
s.secondSamples = append(s.secondSamples, &sample)
|
s.secondSamples = append(s.secondSamples, &sample)
|
||||||
s.updateLatestUsage()
|
s.updateLatestUsage()
|
||||||
// TODO(jnagal): Use 'available' to avoid unnecessary computation.
|
// TODO(jnagal): Use 'available' to avoid unnecessary computation.
|
||||||
if len(s.secondSamples) == 60 {
|
numSamples := len(s.secondSamples)
|
||||||
// Make a minute stat.
|
elapsed := time.Nanosecond
|
||||||
|
if numSamples > 1 {
|
||||||
|
start := s.secondSamples[0].Timestamp
|
||||||
|
end := s.secondSamples[numSamples-1].Timestamp
|
||||||
|
elapsed = end.Sub(start)
|
||||||
|
}
|
||||||
|
if elapsed > 60*time.Second {
|
||||||
|
// Make a minute sample. This works with dynamic housekeeping as long
|
||||||
|
// as we keep max dynamic houskeeping period close to a minute.
|
||||||
minuteSample := GetMinutePercentiles(s.secondSamples)
|
minuteSample := GetMinutePercentiles(s.secondSamples)
|
||||||
// clear seconds samples.
|
// Clear seconds samples. Keep the latest sample for continuity.
|
||||||
s.secondSamples = s.secondSamples[:0]
|
// Copying and resizing helps avoid slice re-allocation.
|
||||||
|
s.secondSamples[0] = s.secondSamples[numSamples-1]
|
||||||
|
s.secondSamples = s.secondSamples[:1]
|
||||||
s.minuteSamples.Add(minuteSample)
|
s.minuteSamples.Add(minuteSample)
|
||||||
err := s.updateDerivedStats()
|
err := s.updateDerivedStats()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
Loading…
Reference in New Issue
Block a user