movingAverageETA: record zero n duration
Vladimir Bauer
2 years ago
| 62 | 62 | |
| 63 | 63 | type movingAverageETA struct { |
| 64 | 64 | WC |
| 65 | producer func(time.Duration) string | |
| 65 | 66 | average ewma.MovingAverage |
| 66 | 67 | normalizer TimeNormalizer |
| 67 | producer func(time.Duration) string | |
| 68 | zDur time.Duration | |
| 68 | 69 | } |
| 69 | 70 | |
| 70 | 71 | func (d *movingAverageETA) Decor(s Statistics) (string, int) { |
| 77 | 78 | } |
| 78 | 79 | |
| 79 | 80 | func (d *movingAverageETA) EwmaUpdate(n int64, dur time.Duration) { |
| 80 | durPerItem := float64(dur) / float64(n) | |
| 81 | if math.IsInf(durPerItem, 0) || math.IsNaN(durPerItem) { | |
| 82 | return | |
| 83 | } | |
| 84 | d.average.Add(durPerItem) | |
| 81 | if n <= 0 { | |
| 82 | d.zDur += dur | |
| 83 | } else { | |
| 84 | durPerItem := float64(d.zDur+dur) / float64(n) | |
| 85 | if math.IsInf(durPerItem, 0) || math.IsNaN(durPerItem) { | |
| 86 | return | |
| 87 | } | |
| 88 | d.zDur = 0 | |
| 89 | d.average.Add(durPerItem) | |
| 90 | } | |
| 85 | 91 | } |
| 86 | 92 | |
| 87 | 93 | // AverageETA decorator. It's wrapper of NewAverageETA. |