diff --git a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/SlidingWindow.java b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/SlidingWindow.java index 62164a48..e4e86acd 100644 --- a/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/SlidingWindow.java +++ b/prometheus-metrics-core/src/main/java/io/prometheus/metrics/core/metrics/SlidingWindow.java @@ -43,7 +43,7 @@ public SlidingWindow(Class clazz, Supplier constructor, ObjDoubleConsumer< this.ringBuffer[i] = constructor.get(); } this.currentBucket = 0; - this.lastRotateTimestampMillis = System.currentTimeMillis(); + this.lastRotateTimestampMillis = currentTimeMillis.getAsLong(); this.durationBetweenRotatesMillis = TimeUnit.SECONDS.toMillis(maxAgeSeconds) / ageBuckets; } diff --git a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/SlidingWindowTest.java b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/SlidingWindowTest.java index 3b57220f..3461d959 100644 --- a/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/SlidingWindowTest.java +++ b/prometheus-metrics-core/src/test/java/io/prometheus/metrics/core/metrics/SlidingWindowTest.java @@ -10,9 +10,9 @@ public class SlidingWindowTest { - static class Observer { + class Observer { - List values = new ArrayList<>(); + final List values = new ArrayList<>(); public void observe(double value) { values.add(value); @@ -23,10 +23,11 @@ void assertValues(double... expectedValues) { for (double expectedValue : expectedValues) { expectedList.add(expectedValue); } - Assert.assertEquals(expectedList, values); + Assert.assertEquals("Start time: " + startTime + ", current time: " + currentTimeMillis.get() + ", elapsed time: " + (currentTimeMillis.get() - startTime), expectedList, values); } } + private long startTime; private final AtomicLong currentTimeMillis = new AtomicLong(); private SlidingWindow ringBuffer; private final long maxAgeSeconds = 30; @@ -35,7 +36,8 @@ void assertValues(double... expectedValues) { @Before public void setUp() { - currentTimeMillis.set(System.currentTimeMillis()); + startTime = System.currentTimeMillis(); + currentTimeMillis.set(startTime); ringBuffer = new SlidingWindow<>(Observer.class, Observer::new, Observer::observe, maxAgeSeconds, ageBuckets); ringBuffer.currentTimeMillis = currentTimeMillis::get; }