From f0f7e609c029df7255a01ff5995da9113a76f9cf Mon Sep 17 00:00:00 2001 From: Andrea Cavalli Date: Fri, 17 Jul 2020 19:50:39 +0200 Subject: [PATCH] Update AtomicTimeAbsoluteSamples.java and AtomicTimeIncrementalSamples.java --- .../metrics/AtomicTimeAbsoluteSamples.java | 21 +++++++++++------ .../metrics/AtomicTimeIncrementalSamples.java | 23 ++++++++++++------- 2 files changed, 29 insertions(+), 15 deletions(-) diff --git a/src/main/java/org/warp/commonutils/metrics/AtomicTimeAbsoluteSamples.java b/src/main/java/org/warp/commonutils/metrics/AtomicTimeAbsoluteSamples.java index 43f10d9..66de789 100644 --- a/src/main/java/org/warp/commonutils/metrics/AtomicTimeAbsoluteSamples.java +++ b/src/main/java/org/warp/commonutils/metrics/AtomicTimeAbsoluteSamples.java @@ -88,18 +88,25 @@ public class AtomicTimeAbsoluteSamples implements AtomicTimeAbsoluteSamplesSnaps public synchronized double getAveragePerSecond(long timeRange) { updateSamples(); - // Fix if the time range is bigger than the collected data since start long currentTime = System.nanoTime() / 1000000L; - if (currentTime - timeRange < startTime) { - timeRange = currentTime - startTime; + double preciseTimeRange = timeRange; + // Fix if the time range is bigger than the collected data since start + if (currentTime - preciseTimeRange < startTime) { + preciseTimeRange = currentTime - startTime; } - long samplesCount = Math.min(Math.max(timeRange / sampleTime, 1L), samples.length); - long value = 0; + double samplesCount = Math.min(Math.max(preciseTimeRange / sampleTime, 1d), samples.length); + double value = 0; for (int i = 0; i < samplesCount; i++) { - value += samples[i]; + double sampleValue; + if (i == 0) { + sampleValue = samples[i] * sampleTime / (double) (currentTime - currentSampleStartTime); + } else { + sampleValue = samples[i]; + } + value += sampleValue; } - return ((double) value) / ((double) samplesCount); + return value / samplesCount; } @Override diff --git a/src/main/java/org/warp/commonutils/metrics/AtomicTimeIncrementalSamples.java b/src/main/java/org/warp/commonutils/metrics/AtomicTimeIncrementalSamples.java index fd2de8b..0512c4c 100644 --- a/src/main/java/org/warp/commonutils/metrics/AtomicTimeIncrementalSamples.java +++ b/src/main/java/org/warp/commonutils/metrics/AtomicTimeIncrementalSamples.java @@ -81,19 +81,26 @@ public class AtomicTimeIncrementalSamples implements AtomicTimeIncrementalSample public synchronized double getAveragePerSecond(long timeRange) { updateSamples(); + long currentTime = System.nanoTime() / 1000000L; + double preciseTimeRange = timeRange; // Fix if the time range is bigger than the collected data since start - long currentTime = currentSampleStartTime; - if (currentTime - timeRange < startTime) { - timeRange = currentTime - startTime; + if (currentTime - preciseTimeRange < startTime) { + preciseTimeRange = currentTime - startTime; } - long samplesCount = Math.min(Math.max(timeRange / sampleTime, 1L), samples.length); - long roundedTimeRange = samplesCount * sampleTime; - long value = 0; + double samplesCount = Math.min(Math.max(preciseTimeRange / sampleTime, 1d), samples.length); + double roundedTimeRange = samplesCount * sampleTime; + double value = 0; for (int i = 0; i < samplesCount; i++) { - value += samples[i]; + double sampleValue; + if (i == 0) { + sampleValue = samples[i] * sampleTime / (double) (currentTime - currentSampleStartTime); + } else { + sampleValue = samples[i]; + } + value += sampleValue; } - return ((double) value) / ((double) roundedTimeRange / 1000D); + return (value / roundedTimeRange) * 1000d; }