diff options
| -rw-r--r-- | ma/ma.go | 14 | ||||
| -rw-r--r-- | networkQuality.go | 2 |
2 files changed, 12 insertions, 4 deletions
@@ -32,10 +32,18 @@ func (ma *MovingAverage) CalculateAverage() float64 { return float64(total) / float64(ma.divisor.Value()) } -func (ma *MovingAverage) IncreasesLessThan(limit float64) bool { - previous := ma.instants[0] +func (ma *MovingAverage) AllSequentialIncreasesLessThan(limit float64) bool { + + // If we have not yet accumulated a complete set of intervals, + // this is false. + if ma.divisor.Value() != ma.intervals { + return false + } + + previous := ma.instants[ma.index] for i := 1; i < ma.intervals; i++ { - current := ma.instants[i] + currentIndex := (ma.index + i) % ma.intervals + current := ma.instants[currentIndex] percentChange := utilities.SignedPercentDifference(current, previous) previous = current if percentChange > limit { diff --git a/networkQuality.go b/networkQuality.go index 54c4260..e052e1f 100644 --- a/networkQuality.go +++ b/networkQuality.go @@ -242,7 +242,7 @@ func saturate(saturationCtx context.Context, operatingCtx context.Context, lbcGe fmt.Printf("%v: Network reached saturation with current flow count.\n", debug) } // If new flows added and for 4 seconds the moving average throughput did not change: network reached stable saturation - if (currentIteration-previousFlowIncreaseIteration) < 4 && movingAverageAverage.IncreasesLessThan(float64(5)) { + if (currentIteration-previousFlowIncreaseIteration) < 4 && movingAverageAverage.AllSequentialIncreasesLessThan(float64(5)) { if debug != nil { fmt.Printf("%v: New flows added within the last four seconds and the moving-average average is consistent!\n", debug) } |
