Fixed snapshots time
This commit is contained in:
parent
9fb047c3ac
commit
1945844454
|
@ -4,6 +4,7 @@ import java.util.HashMap;
|
||||||
|
|
||||||
public class AtomicDetailedTimeAbsoluteSamples<T> implements AtomicDetailedTimeAbsoluteSamplesSnapshot<T> {
|
public class AtomicDetailedTimeAbsoluteSamples<T> implements AtomicDetailedTimeAbsoluteSamplesSnapshot<T> {
|
||||||
|
|
||||||
|
private final boolean isSnapshot;
|
||||||
private final int sampleTime;
|
private final int sampleTime;
|
||||||
private final int samplesCount;
|
private final int samplesCount;
|
||||||
private HashMap<T, AtomicTimeAbsoluteSamples> detailedAtomicTimeSamples = new HashMap<>();
|
private HashMap<T, AtomicTimeAbsoluteSamples> detailedAtomicTimeSamples = new HashMap<>();
|
||||||
|
@ -15,13 +16,15 @@ public class AtomicDetailedTimeAbsoluteSamples<T> implements AtomicDetailedTimeA
|
||||||
public AtomicDetailedTimeAbsoluteSamples(int sampleTime, int samplesCount) {
|
public AtomicDetailedTimeAbsoluteSamples(int sampleTime, int samplesCount) {
|
||||||
this.sampleTime = sampleTime;
|
this.sampleTime = sampleTime;
|
||||||
this.samplesCount = samplesCount;
|
this.samplesCount = samplesCount;
|
||||||
|
this.isSnapshot = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public AtomicDetailedTimeAbsoluteSamples(int sampleTime, int samplesCount, HashMap<T, AtomicTimeAbsoluteSamplesSnapshot> detailedAtomicTimeSamples) {
|
public AtomicDetailedTimeAbsoluteSamples(int sampleTime, int samplesCount, HashMap<T, AtomicTimeAbsoluteSamplesSnapshot> detailedAtomicTimeSamples, boolean isSnapshot) {
|
||||||
this.sampleTime = sampleTime;
|
this.sampleTime = sampleTime;
|
||||||
this.samplesCount = samplesCount;
|
this.samplesCount = samplesCount;
|
||||||
this.detailedAtomicTimeSamples = new HashMap<>();
|
this.detailedAtomicTimeSamples = new HashMap<>();
|
||||||
detailedAtomicTimeSamples.forEach((detail, sample) -> this.detailedAtomicTimeSamples.put(detail, (AtomicTimeAbsoluteSamples) sample));
|
detailedAtomicTimeSamples.forEach((detail, sample) -> this.detailedAtomicTimeSamples.put(detail, (AtomicTimeAbsoluteSamples) sample));
|
||||||
|
this.isSnapshot = isSnapshot;
|
||||||
}
|
}
|
||||||
|
|
||||||
private synchronized void updateSamples() {
|
private synchronized void updateSamples() {
|
||||||
|
@ -86,6 +89,6 @@ public class AtomicDetailedTimeAbsoluteSamples<T> implements AtomicDetailedTimeA
|
||||||
var clonedDetailedAtomicTimeSamples = new HashMap<T, AtomicTimeAbsoluteSamplesSnapshot>(detailedAtomicTimeSamples);
|
var clonedDetailedAtomicTimeSamples = new HashMap<T, AtomicTimeAbsoluteSamplesSnapshot>(detailedAtomicTimeSamples);
|
||||||
clonedDetailedAtomicTimeSamples.replaceAll((key, value) -> ((AtomicTimeAbsoluteSamples) value).snapshot());
|
clonedDetailedAtomicTimeSamples.replaceAll((key, value) -> ((AtomicTimeAbsoluteSamples) value).snapshot());
|
||||||
return new AtomicDetailedTimeAbsoluteSamples<>(sampleTime,
|
return new AtomicDetailedTimeAbsoluteSamples<>(sampleTime,
|
||||||
samplesCount, clonedDetailedAtomicTimeSamples);
|
samplesCount, clonedDetailedAtomicTimeSamples, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,8 +17,8 @@ public class AtomicDetailedTimeIncrementalSamples<T> extends AtomicTimeIncrement
|
||||||
}
|
}
|
||||||
|
|
||||||
public AtomicDetailedTimeIncrementalSamples(long startTime, long[] samples, int sampleTime, long currentSampleStartTime, long totalEvents,
|
public AtomicDetailedTimeIncrementalSamples(long startTime, long[] samples, int sampleTime, long currentSampleStartTime, long totalEvents,
|
||||||
HashMap<T, AtomicTimeIncrementalSamplesSnapshot> detailedAtomicTimeSamples) {
|
HashMap<T, AtomicTimeIncrementalSamplesSnapshot> detailedAtomicTimeSamples, boolean isSnapshot) {
|
||||||
super(startTime, samples, sampleTime, currentSampleStartTime, totalEvents);
|
super(startTime, samples, sampleTime, currentSampleStartTime, totalEvents, isSnapshot);
|
||||||
this.detailedAtomicTimeSamples = new HashMap<>();
|
this.detailedAtomicTimeSamples = new HashMap<>();
|
||||||
detailedAtomicTimeSamples.forEach((detail, sample) -> detailedAtomicTimeSamples.put(detail, (AtomicTimeIncrementalSamples) sample));
|
detailedAtomicTimeSamples.forEach((detail, sample) -> detailedAtomicTimeSamples.put(detail, (AtomicTimeIncrementalSamples) sample));
|
||||||
}
|
}
|
||||||
|
@ -76,6 +76,6 @@ public class AtomicDetailedTimeIncrementalSamples<T> extends AtomicTimeIncrement
|
||||||
var clonedDetailedAtomicTimeSamples = new HashMap<T, AtomicTimeIncrementalSamplesSnapshot>(detailedAtomicTimeSamples);
|
var clonedDetailedAtomicTimeSamples = new HashMap<T, AtomicTimeIncrementalSamplesSnapshot>(detailedAtomicTimeSamples);
|
||||||
clonedDetailedAtomicTimeSamples.replaceAll((key, value) -> ((AtomicTimeIncrementalSamples) value).snapshot());
|
clonedDetailedAtomicTimeSamples.replaceAll((key, value) -> ((AtomicTimeIncrementalSamples) value).snapshot());
|
||||||
return new AtomicDetailedTimeIncrementalSamples<>(startTime, Arrays.copyOf(this.samples, this.samples.length), sampleTime,
|
return new AtomicDetailedTimeIncrementalSamples<>(startTime, Arrays.copyOf(this.samples, this.samples.length), sampleTime,
|
||||||
currentSampleStartTime, totalEvents, clonedDetailedAtomicTimeSamples);
|
currentSampleStartTime, totalEvents, clonedDetailedAtomicTimeSamples, isSnapshot);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@ import java.util.Arrays;
|
||||||
|
|
||||||
public class AtomicTimeAbsoluteSamples implements AtomicTimeAbsoluteSamplesSnapshot {
|
public class AtomicTimeAbsoluteSamples implements AtomicTimeAbsoluteSamplesSnapshot {
|
||||||
|
|
||||||
|
protected final boolean isSnapshot;
|
||||||
protected long startTime;
|
protected long startTime;
|
||||||
protected final long[] samples;
|
protected final long[] samples;
|
||||||
protected final int sampleTime;
|
protected final int sampleTime;
|
||||||
|
@ -22,19 +23,26 @@ public class AtomicTimeAbsoluteSamples implements AtomicTimeAbsoluteSamplesSnaps
|
||||||
startTime = -1;
|
startTime = -1;
|
||||||
if (samplesCount < 1) throw new IndexOutOfBoundsException();
|
if (samplesCount < 1) throw new IndexOutOfBoundsException();
|
||||||
if (sampleTime < 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.startTime = startTime;
|
||||||
this.samples = samples;
|
this.samples = samples;
|
||||||
this.sampleTime = sampleTime;
|
this.sampleTime = sampleTime;
|
||||||
this.currentSampleStartTime = currentSampleStartTime;
|
this.currentSampleStartTime = currentSampleStartTime;
|
||||||
this.totalSamplesSum = totalSamplesSum;
|
this.totalSamplesSum = totalSamplesSum;
|
||||||
this.totalSamplesCount = totalSamplesCount;
|
this.totalSamplesCount = totalSamplesCount;
|
||||||
|
this.isSnapshot = isSnapshot;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected synchronized void updateSamples() {
|
protected synchronized void updateSamples() {
|
||||||
checkStarted();
|
checkStarted();
|
||||||
|
|
||||||
|
if (isSnapshot) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
long currentTime = System.nanoTime() / 1000000L;
|
long currentTime = System.nanoTime() / 1000000L;
|
||||||
long timeDiff = currentTime - currentSampleStartTime;
|
long timeDiff = currentTime - currentSampleStartTime;
|
||||||
long timeToShift = timeDiff - (timeDiff % sampleTime);
|
long timeToShift = timeDiff - (timeDiff % sampleTime);
|
||||||
|
@ -107,6 +115,6 @@ public class AtomicTimeAbsoluteSamples implements AtomicTimeAbsoluteSamplesSnaps
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized AtomicTimeAbsoluteSamplesSnapshot snapshot() {
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@ import java.util.Arrays;
|
||||||
|
|
||||||
public class AtomicTimeIncrementalSamples implements AtomicTimeIncrementalSamplesSnapshot {
|
public class AtomicTimeIncrementalSamples implements AtomicTimeIncrementalSamplesSnapshot {
|
||||||
|
|
||||||
|
protected final boolean isSnapshot;
|
||||||
protected long startTime;
|
protected long startTime;
|
||||||
protected final long[] samples;
|
protected final long[] samples;
|
||||||
protected final int sampleTime;
|
protected final int sampleTime;
|
||||||
|
@ -21,18 +22,25 @@ public class AtomicTimeIncrementalSamples implements AtomicTimeIncrementalSample
|
||||||
startTime = -1;
|
startTime = -1;
|
||||||
if (samplesCount < 1) throw new IndexOutOfBoundsException();
|
if (samplesCount < 1) throw new IndexOutOfBoundsException();
|
||||||
if (sampleTime < 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.startTime = startTime;
|
||||||
this.samples = samples;
|
this.samples = samples;
|
||||||
this.sampleTime = sampleTime;
|
this.sampleTime = sampleTime;
|
||||||
this.currentSampleStartTime = currentSampleStartTime;
|
this.currentSampleStartTime = currentSampleStartTime;
|
||||||
this.totalEvents = totalEvents;
|
this.totalEvents = totalEvents;
|
||||||
|
this.isSnapshot = isSnapshot;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected synchronized void updateSamples() {
|
protected synchronized void updateSamples() {
|
||||||
checkStarted();
|
checkStarted();
|
||||||
|
|
||||||
|
if (isSnapshot) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
long currentTime = System.nanoTime() / 1000000L;
|
long currentTime = System.nanoTime() / 1000000L;
|
||||||
long timeDiff = currentTime - currentSampleStartTime;
|
long timeDiff = currentTime - currentSampleStartTime;
|
||||||
long timeToShift = timeDiff - (timeDiff % sampleTime);
|
long timeToShift = timeDiff - (timeDiff % sampleTime);
|
||||||
|
@ -116,6 +124,6 @@ public class AtomicTimeIncrementalSamples implements AtomicTimeIncrementalSample
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized AtomicTimeIncrementalSamplesSnapshot snapshot() {
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue