From 06c23a1ade3a9da722a9c7aa181aa33487dff600 Mon Sep 17 00:00:00 2001 From: Craig Bryant Date: Tue, 30 Aug 2016 16:59:39 -0600 Subject: [PATCH] Always put value in first bucket if force is set For a last function, the only values that matters is the last one so always add it to the first window. This avoid the problem where an OK value may be in a future window but the current window has an older alarm value. Change-Id: I20f8e91da266fdb917dd36ded60d1a5c608b74d0 Closes-Bug: #1618641 --- .../common/util/stats/SlidingWindowStats.java | 15 ++++++++------- .../common/util/stats/SlidingWindowStatsTest.java | 4 ++++ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/java/monasca-common-util/src/main/java/monasca/common/util/stats/SlidingWindowStats.java b/java/monasca-common-util/src/main/java/monasca/common/util/stats/SlidingWindowStats.java index 96e19753..bff65d32 100644 --- a/java/monasca-common-util/src/main/java/monasca/common/util/stats/SlidingWindowStats.java +++ b/java/monasca-common-util/src/main/java/monasca/common/util/stats/SlidingWindowStats.java @@ -98,20 +98,21 @@ public class SlidingWindowStats { /** * Adds the {@code value} to the statistics for the slot associated with the {@code timestamp} and * returns true, else returns false if the {@code timestamp} is outside of the window and - * {@code force} is false. If {@code force} is true, always add value + * {@code force} is false. If {@code force} is true, always add value to the first window * * @param value to add * @param timestamp to add value for - * @param force if true, add value to first window even if timestamp is outside of all windows + * @param force if true, add value to first window * @return true if the value was added else false if it the {@code timestamp} was outside the * window and force was false */ public boolean addValue(double value, long timestamp, boolean force) { - int index = indexOfTime(timescale.adjust(timestamp)); - if (index == -1) { - if (force) { - index = 0; - } else { + final int index; + if (force) { + index = 0; + } else { + index = indexOfTime(timescale.adjust(timestamp)); + if (index == -1) { return false; } } diff --git a/java/monasca-common-util/src/test/java/monasca/common/util/stats/SlidingWindowStatsTest.java b/java/monasca-common-util/src/test/java/monasca/common/util/stats/SlidingWindowStatsTest.java index 6a582da8..8e407268 100644 --- a/java/monasca-common-util/src/test/java/monasca/common/util/stats/SlidingWindowStatsTest.java +++ b/java/monasca-common-util/src/test/java/monasca/common/util/stats/SlidingWindowStatsTest.java @@ -170,6 +170,8 @@ public class SlidingWindowStatsTest { TimeResolution.ABSOLUTE, 3, 1, 2, 9); window.addValue(999, 3, true); assertEquals(window.getViewValues(), new double[] { 999 }); + window.addValue(899, 10, true); + assertEquals(window.getViewValues(), new double[] { 899 }); } public void shouldNotAddOutOfWindowValueWithoutForce() { @@ -177,6 +179,8 @@ public class SlidingWindowStatsTest { TimeResolution.ABSOLUTE, 3, 1, 2, 9); window.addValue(999, 3, false); assertEquals(window.getViewValues(), new double[] { Double.NaN }); + window.addValue(899, 10, false); + assertEquals(window.getViewValues(), new double[] { Double.NaN }); } public void shouldIgnoreOutOfOrderValue() {