BucketedOpStats class
Пакет: com.hypixel.hytale.metrics
Файл: com/hypixel/hytale/metrics/BucketedOpStats.java
implements: MetricProvider
Поля (29)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
long |
NANOS_PER_SECOND |
|
|
break |
|
public long |
bytes |
|
public long |
count |
|
public long |
latencySumNanos |
|
public long |
maxLatencyNanos |
|
public long |
minLatencyNanos |
|
public long |
periodSec |
|
|
return |
|
|
return |
|
|
return |
|
long |
var1 |
|
BsonDocument |
var1 |
|
long |
var11 |
|
long |
var13 |
|
|
var13 |
|
|
var13 |
|
long |
var15 |
|
|
var15 |
|
|
var15 |
|
long |
var18 |
|
ExtraInfo |
var2 |
|
long |
var20 |
|
long |
var22 |
|
BucketedOpStats.PeriodView[] |
var3 |
|
long |
var5 |
|
int |
var7 |
|
long |
var7 |
|
long |
var9 |
Методы (20)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
abstract |
return new |
MetricResultsreturn new MetricResults(var1) |
|
public |
PeriodViewpublic PeriodView() |
|
public |
PeriodViewpublic PeriodView(long var1, long var3, long var5, long var7, long var9, long var11) |
|
|
for for(int var3 = 0; var3 < var1; var3++) |
|
|
for for(int var17 = 0; var17 < this.bucketCount; var17++) |
|
|
for for(int var4 = 0; var4 < this.periodsSec.length; var4++) |
abstract |
|
for for(long var8 = this.bucketSecond.get(var7) |
abstract |
|
for for(long var3 = var0.get() |
|
|
if if(var5 < var8) |
|
|
if if(var18 > var5 && var18 <= var3) |
|
|
if if(var20 < var13) |
|
|
if if(var22 > var15) |
|
|
if if(var7 == 0L) |
public |
void |
recordvoid record(long var1, long var3) |
|
void |
recordvoid record(long var1, long var3, long var5) |
abstract |
|
this this(900, DEFAULT_PERIODS_SEC) |
static |
void |
updateMaxvoid updateMax(@Nonnull AtomicLong var0, long var1) |
abstract |
|
updateMax updateMax(this.bucketMaxLatencyNanos[var7], var1) |
static |
void |
updateMinvoid updateMin(@Nonnull AtomicLong var0, long var1) |
abstract |
|
updateMin updateMin(this.bucketMinLatencyNanos[var7], var1) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.metrics;
class="kw">import com.hypixel.hytale.codec.Codec;
class="kw">import com.hypixel.hytale.codec.ExtraInfo;
class="kw">import com.hypixel.hytale.codec.KeyedCodec;
class="kw">import com.hypixel.hytale.codec.builder.BuilderCodec;
class="kw">import com.hypixel.hytale.codec.codecs.array.ArrayCodec;
class="kw">import java.util.concurrent.TimeUnit;
class="kw">import java.util.concurrent.atomic.AtomicLong;
class="kw">import java.util.concurrent.atomic.AtomicLongArray;
class="kw">import java.util.concurrent.atomic.LongAdder;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.bson.BsonDocument;
class="kw">public class BucketedOpStats class="kw">implements MetricProvider {
class="kw">private class="kw">static class="kw">final long NANOS_PER_SECOND = TimeUnit.SECONDS.toNanos(1L);
class="kw">public class="kw">static class="kw">final int DEFAULT_BUCKETS = 900;
class="kw">public class="kw">static class="kw">final long[] DEFAULT_PERIODS_SEC = new long[]{60L, 300L, 900L};
@Nonnull
class="kw">public class="kw">static class="kw">final BuilderCodec<BucketedOpStats.PeriodView> PERIOD_VIEW_CODEC = BuilderCodec.builder(
BucketedOpStats.PeriodView.class, BucketedOpStats.PeriodView::new
)
.append(new KeyedCodec<>("PeriodSec", Codec.LONG), (var0, var1) -> var0.periodSec = var1, var0 -> var0.periodSec)
.add()
.append(new KeyedCodec<>("Count", Codec.LONG), (var0, var1) -> var0.count = var1, var0 -> var0.count)
.add()
.append(new KeyedCodec<>("Bytes", Codec.LONG), (var0, var1) -> var0.bytes = var1, var0 -> var0.bytes)
.add()
.append(new KeyedCodec<>("LatencySumNanos", Codec.LONG), (var0, var1) -> var0.latencySumNanos = var1, var0 -> var0.latencySumNanos)
.add()
.append(new KeyedCodec<>("MinLatencyNanos", Codec.LONG), (var0, var1) -> var0.minLatencyNanos = var1, var0 -> var0.minLatencyNanos)
.add()
.append(new KeyedCodec<>("MaxLatencyNanos", Codec.LONG), (var0, var1) -> var0.maxLatencyNanos = var1, var0 -> var0.maxLatencyNanos)
.add()
.build();
@Nonnull
class="kw">public class="kw">static class="kw">final Codec<BucketedOpStats.PeriodView[]> PERIOD_VIEW_ARRAY_CODEC = new ArrayCodec<>(PERIOD_VIEW_CODEC, BucketedOpStats.PeriodView[]::new);
class="kw">private class="kw">final int bucketCount;
class="kw">private class="kw">final long[] periodsSec;
class="kw">private class="kw">final AtomicLongArray bucketSecond;
class="kw">private class="kw">final LongAdder[] bucketCounts;
class="kw">private class="kw">final LongAdder[] bucketBytes;
class="kw">private class="kw">final LongAdder[] bucketLatencySumNanos;
class="kw">private class="kw">final AtomicLong[] bucketMinLatencyNanos;
class="kw">private class="kw">final AtomicLong[] bucketMaxLatencyNanos;
class="kw">public BucketedOpStats() {
this(900, DEFAULT_PERIODS_SEC);
}
class="kw">public BucketedOpStats(int var1, @Nonnull long[] var2) {
this.bucketCount = var1;
this.periodsSec = (long[])var2.clone();
this.bucketSecond = new AtomicLongArray(var1);
this.bucketCounts = new LongAdder[var1];
this.bucketBytes = new LongAdder[var1];
this.bucketLatencySumNanos = new LongAdder[var1];
this.bucketMinLatencyNanos = new AtomicLong[var1];
this.bucketMaxLatencyNanos = new AtomicLong[var1];
for (int var3 = 0; var3 < var1; var3++) {
this.bucketSecond.set(var3, Long.MIN_VALUE);
this.bucketCounts[var3] = new LongAdder();
this.bucketBytes[var3] = new LongAdder();
this.bucketLatencySumNanos[var3] = new LongAdder();
this.bucketMinLatencyNanos[var3] = new AtomicLong(Long.MAX_VALUE);
this.bucketMaxLatencyNanos[var3] = new AtomicLong(Long.MIN_VALUE);
}
}
class="kw">public void record(long var1, long var3) {
this.record(var1, var3, System.nanoTime() / NANOS_PER_SECOND);
}
void record(long var1, long var3, long var5) {
int var7 = Math.floorMod(var5, this.bucketCount);
for (long var8 = this.bucketSecond.get(var7); var8 != var5; var8 = this.bucketSecond.get(var7)) {
if (var5 < var8) {
class="kw">return;
}
if (this.bucketSecond.compareAndSet(var7, var8, var5)) {
this.bucketCounts[var7].reset();
this.bucketBytes[var7].reset();
this.bucketLatencySumNanos[var7].reset();
this.bucketMinLatencyNanos[var7].set(Long.MAX_VALUE);
this.bucketMaxLatencyNanos[var7].set(Long.MIN_VALUE);
break;
}
}
this.bucketCounts[var7].increment();
this.bucketBytes[var7].add(var3);
this.bucketLatencySumNanos[var7].add(var1);
updateMin(this.bucketMinLatencyNanos[var7], var1);
updateMax(this.bucketMaxLatencyNanos[var7], var1);
}
class="kw">private class="kw">static void updateMin(@Nonnull AtomicLong var0, long var1) {
for (long var3 = var0.get(); var1 < var3; var3 = var0.get()) {
if (var0.compareAndSet(var3, var1)) {
class="kw">return;
}
}
}
class="kw">private class="kw">static void updateMax(@Nonnull AtomicLong var0, long var1) {
for (long var3 = var0.get(); var1 > var3; var3 = var0.get()) {
if (var0.compareAndSet(var3, var1)) {
class="kw">return;
}
}
}
@Nonnull
class="kw">public BucketedOpStats.PeriodView summary(long var1) {
class="kw">return this.summary(var1, System.nanoTime() / NANOS_PER_SECOND);
}
@Nonnull
class="kw">private BucketedOpStats.PeriodView summary(long var1, long var3) {
long var5 = var3 - var1;
long var7 = 0L;
long var9 = 0L;
long var11 = 0L;
long var13 = Long.MAX_VALUE;
long var15 = Long.MIN_VALUE;
for (int var17 = 0; var17 < this.bucketCount; var17++) {
long var18 = this.bucketSecond.get(var17);
if (var18 > var5 && var18 <= var3) {
var7 += this.bucketCounts[var17].sum();
var9 += this.bucketBytes[var17].sum();
var11 += this.bucketLatencySumNanos[var17].sum();
long var20 = this.bucketMinLatencyNanos[var17].get();
long var22 = this.bucketMaxLatencyNanos[var17].get();
if (var20 < var13) {
var13 = var20;
}
if (var22 > var15) {
var15 = var22;
}
}
}
if (var7 == 0L) {
var13 = 0L;
var15 = 0L;
}
class="kw">return new BucketedOpStats.PeriodView(var1, var7, var9, var11, var13, var15);
}
@Nonnull
class="kw">public BucketedOpStats.PeriodView[] allSummaries() {
long var1 = System.nanoTime() / NANOS_PER_SECOND;
BucketedOpStats.PeriodView[] var3 = new BucketedOpStats.PeriodView[this.periodsSec.length];
for (int var4 = 0; var4 < this.periodsSec.length; var4++) {
var3[var4] = this.summary(this.periodsSec[var4], var1);
}
class="kw">return var3;
}
@Nonnull
@Override
class="kw">public MetricResults toMetricResults() {
BsonDocument var1 = new BsonDocument();
ExtraInfo var2 = ExtraInfo.THREAD_LOCAL.get();
var1.put("Periods", PERIOD_VIEW_ARRAY_CODEC.encode(this.allSummaries(), var2));
class="kw">return new MetricResults(var1);
}
class="kw">public class="kw">static class PeriodView {
class="kw">public long periodSec;
class="kw">public long count;
class="kw">public long bytes;
class="kw">public long latencySumNanos;
class="kw">public long minLatencyNanos;
class="kw">public long maxLatencyNanos;
class="kw">public PeriodView() {
}
class="kw">public PeriodView(long var1, long var3, long var5, long var7, long var9, long var11) {
this.periodSec = var1;
this.count = var3;
this.bytes = var5;
this.latencySumNanos = var7;
this.minLatencyNanos = var9;
this.maxLatencyNanos = var11;
}
}
}