diff --git a/src/main/java/org/warp/commonutils/metrics/AtomicDetailedTimeAbsoluteSamples.java b/src/main/java/org/warp/commonutils/metrics/AtomicDetailedTimeAbsoluteSamples.java index 72445a3..7b8ac9a 100644 --- a/src/main/java/org/warp/commonutils/metrics/AtomicDetailedTimeAbsoluteSamples.java +++ b/src/main/java/org/warp/commonutils/metrics/AtomicDetailedTimeAbsoluteSamples.java @@ -4,6 +4,7 @@ import java.util.HashMap; public class AtomicDetailedTimeAbsoluteSamples implements AtomicDetailedTimeAbsoluteSamplesSnapshot { + private final boolean isSnapshot; private final int sampleTime; private final int samplesCount; private HashMap detailedAtomicTimeSamples = new HashMap<>(); @@ -15,13 +16,15 @@ public class AtomicDetailedTimeAbsoluteSamples implements AtomicDetailedTimeA public AtomicDetailedTimeAbsoluteSamples(int sampleTime, int samplesCount) { this.sampleTime = sampleTime; this.samplesCount = samplesCount; + this.isSnapshot = false; } - public AtomicDetailedTimeAbsoluteSamples(int sampleTime, int samplesCount, HashMap detailedAtomicTimeSamples) { + public AtomicDetailedTimeAbsoluteSamples(int sampleTime, int samplesCount, HashMap detailedAtomicTimeSamples, boolean isSnapshot) { this.sampleTime = sampleTime; this.samplesCount = samplesCount; this.detailedAtomicTimeSamples = new HashMap<>(); detailedAtomicTimeSamples.forEach((detail, sample) -> this.detailedAtomicTimeSamples.put(detail, (AtomicTimeAbsoluteSamples) sample)); + this.isSnapshot = isSnapshot; } private synchronized void updateSamples() { @@ -86,6 +89,6 @@ public class AtomicDetailedTimeAbsoluteSamples implements AtomicDetailedTimeA var clonedDetailedAtomicTimeSamples = new HashMap(detailedAtomicTimeSamples); clonedDetailedAtomicTimeSamples.replaceAll((key, value) -> ((AtomicTimeAbsoluteSamples) value).snapshot()); return new AtomicDetailedTimeAbsoluteSamples<>(sampleTime, - samplesCount, clonedDetailedAtomicTimeSamples); + samplesCount, clonedDetailedAtomicTimeSamples, true); } } diff --git a/src/main/java/org/warp/commonutils/metrics/AtomicDetailedTimeIncrementalSamples.java b/src/main/java/org/warp/commonutils/metrics/AtomicDetailedTimeIncrementalSamples.java index e999011..e79379b 100644 --- a/src/main/java/org/warp/commonutils/metrics/AtomicDetailedTimeIncrementalSamples.java +++ b/src/main/java/org/warp/commonutils/metrics/AtomicDetailedTimeIncrementalSamples.java @@ -17,8 +17,8 @@ public class AtomicDetailedTimeIncrementalSamples extends AtomicTimeIncrement } public AtomicDetailedTimeIncrementalSamples(long startTime, long[] samples, int sampleTime, long currentSampleStartTime, long totalEvents, - HashMap detailedAtomicTimeSamples) { - super(startTime, samples, sampleTime, currentSampleStartTime, totalEvents); + HashMap detailedAtomicTimeSamples, boolean isSnapshot) { + super(startTime, samples, sampleTime, currentSampleStartTime, totalEvents, isSnapshot); this.detailedAtomicTimeSamples = new HashMap<>(); detailedAtomicTimeSamples.forEach((detail, sample) -> detailedAtomicTimeSamples.put(detail, (AtomicTimeIncrementalSamples) sample)); } @@ -76,6 +76,6 @@ public class AtomicDetailedTimeIncrementalSamples extends AtomicTimeIncrement var clonedDetailedAtomicTimeSamples = new HashMap(detailedAtomicTimeSamples); clonedDetailedAtomicTimeSamples.replaceAll((key, value) -> ((AtomicTimeIncrementalSamples) value).snapshot()); return new AtomicDetailedTimeIncrementalSamples<>(startTime, Arrays.copyOf(this.samples, this.samples.length), sampleTime, - currentSampleStartTime, totalEvents, clonedDetailedAtomicTimeSamples); + currentSampleStartTime, totalEvents, clonedDetailedAtomicTimeSamples, isSnapshot); } } diff --git a/src/main/java/org/warp/commonutils/metrics/AtomicTimeAbsoluteSamples.java b/src/main/java/org/warp/commonutils/metrics/AtomicTimeAbsoluteSamples.java index a29fc64..43f10d9 100644 --- a/src/main/java/org/warp/commonutils/metrics/AtomicTimeAbsoluteSamples.java +++ b/src/main/java/org/warp/commonutils/metrics/AtomicTimeAbsoluteSamples.java @@ -4,6 +4,7 @@ import java.util.Arrays; public class AtomicTimeAbsoluteSamples implements AtomicTimeAbsoluteSamplesSnapshot { + protected final boolean isSnapshot; protected long startTime; protected final long[] samples; protected final int sampleTime; @@ -22,19 +23,26 @@ public class AtomicTimeAbsoluteSamples implements AtomicTimeAbsoluteSamplesSnaps startTime = -1; if (samplesCount < 1) throw new IndexOutOfBoundsException(); if (sampleTime < 1) throw new IndexOutOfBoundsException(); + this.isSnapshot = false; } - public AtomicTimeAbsoluteSamples(long startTime, long[] samples, int sampleTime, long currentSampleStartTime, long totalSamplesSum, long totalSamplesCount) { + public AtomicTimeAbsoluteSamples(long startTime, long[] samples, int sampleTime, long currentSampleStartTime, long totalSamplesSum, long totalSamplesCount, boolean isSnapshot) { this.startTime = startTime; this.samples = samples; this.sampleTime = sampleTime; this.currentSampleStartTime = currentSampleStartTime; this.totalSamplesSum = totalSamplesSum; this.totalSamplesCount = totalSamplesCount; + this.isSnapshot = isSnapshot; } protected synchronized void updateSamples() { checkStarted(); + + if (isSnapshot) { + return; + } + long currentTime = System.nanoTime() / 1000000L; long timeDiff = currentTime - currentSampleStartTime; long timeToShift = timeDiff - (timeDiff % sampleTime); @@ -107,6 +115,6 @@ public class AtomicTimeAbsoluteSamples implements AtomicTimeAbsoluteSamplesSnaps } public synchronized AtomicTimeAbsoluteSamplesSnapshot snapshot() { - return new AtomicTimeAbsoluteSamples(startTime, Arrays.copyOf(this.samples, this.samples.length), sampleTime, currentSampleStartTime, totalSamplesSum, totalSamplesCount); + return new AtomicTimeAbsoluteSamples(startTime, Arrays.copyOf(this.samples, this.samples.length), sampleTime, currentSampleStartTime, totalSamplesSum, totalSamplesCount, true); } } diff --git a/src/main/java/org/warp/commonutils/metrics/AtomicTimeIncrementalSamples.java b/src/main/java/org/warp/commonutils/metrics/AtomicTimeIncrementalSamples.java index 4ed75d5..0ad63e2 100644 --- a/src/main/java/org/warp/commonutils/metrics/AtomicTimeIncrementalSamples.java +++ b/src/main/java/org/warp/commonutils/metrics/AtomicTimeIncrementalSamples.java @@ -4,6 +4,7 @@ import java.util.Arrays; public class AtomicTimeIncrementalSamples implements AtomicTimeIncrementalSamplesSnapshot { + protected final boolean isSnapshot; protected long startTime; protected final long[] samples; protected final int sampleTime; @@ -21,18 +22,25 @@ public class AtomicTimeIncrementalSamples implements AtomicTimeIncrementalSample startTime = -1; if (samplesCount < 1) throw new IndexOutOfBoundsException(); if (sampleTime < 1) throw new IndexOutOfBoundsException(); + this.isSnapshot = false; } - public AtomicTimeIncrementalSamples(long startTime, long[] samples, int sampleTime, long currentSampleStartTime, long totalEvents) { + public AtomicTimeIncrementalSamples(long startTime, long[] samples, int sampleTime, long currentSampleStartTime, long totalEvents, boolean isSnapshot) { this.startTime = startTime; this.samples = samples; this.sampleTime = sampleTime; this.currentSampleStartTime = currentSampleStartTime; this.totalEvents = totalEvents; + this.isSnapshot = isSnapshot; } protected synchronized void updateSamples() { checkStarted(); + + if (isSnapshot) { + return; + } + long currentTime = System.nanoTime() / 1000000L; long timeDiff = currentTime - currentSampleStartTime; long timeToShift = timeDiff - (timeDiff % sampleTime); @@ -116,6 +124,6 @@ public class AtomicTimeIncrementalSamples implements AtomicTimeIncrementalSample } public synchronized AtomicTimeIncrementalSamplesSnapshot snapshot() { - return new AtomicTimeIncrementalSamples(startTime, Arrays.copyOf(this.samples, this.samples.length), sampleTime, currentSampleStartTime, totalEvents); + return new AtomicTimeIncrementalSamples(startTime, Arrays.copyOf(this.samples, this.samples.length), sampleTime, currentSampleStartTime, totalEvents, true); } }