movingAverageSpeed: record zero n duration
Vladimir Bauer
2 years ago
| 78 | 78 | WC |
| 79 | 79 | producer func(float64) string |
| 80 | 80 | average ewma.MovingAverage |
| 81 | zDur time.Duration | |
| 81 | 82 | msg string |
| 82 | 83 | } |
| 83 | 84 | |
| 93 | 94 | } |
| 94 | 95 | |
| 95 | 96 | func (d *movingAverageSpeed) EwmaUpdate(n int64, dur time.Duration) { |
| 96 | durPerByte := float64(dur) / float64(n) | |
| 97 | if math.IsInf(durPerByte, 0) || math.IsNaN(durPerByte) { | |
| 98 | return | |
| 97 | if n <= 0 { | |
| 98 | d.zDur += dur | |
| 99 | } else { | |
| 100 | durPerByte := float64(d.zDur+dur) / float64(n) | |
| 101 | if math.IsInf(durPerByte, 0) || math.IsNaN(durPerByte) { | |
| 102 | return | |
| 103 | } | |
| 104 | d.average.Add(durPerByte) | |
| 105 | d.zDur = 0 | |
| 99 | 106 | } |
| 100 | d.average.Add(durPerByte) | |
| 101 | 107 | } |
| 102 | 108 | |
| 103 | 109 | // AverageSpeed decorator with dynamic unit measure adjustment. It's |