MetricsRegistry class

Пакет: com.hypixel.hytale.metrics

Файл: com/hypixel/hytale/metrics/MetricsRegistry.java

implements: Codec<T>

Поля (25)

МодификаторыТипИмя
final HytaleLogger LOGGER
private final Codec<R> codec
private final Function<R, MetricsRegistry<R>> codecFunc
private final Function<T, R> func
MetricProvider var13
MetricResults var14
ExtraInfo var2
Path var2
Path var2
long var3
BsonDocument var3
BsonDocument var3
BsonValue var3
String var3
var3
Object var3
long var4
long var4
long var4
Path var4
var4
var4
int var5
String var8
BsonValue var9

Методы (21)

МодификаторыВозвратСигнатура
abstract throw new IllegalArgumentExceptionthrow new IllegalArgumentException("Metric already registered: " + var1)
public Metricpublic Metric(@Nullable Function<T, R> var1, @Nullable Codec<R> var2)
public Metricpublic Metric(@Nullable Function<T, R> var1, @Nullable Function<R, MetricsRegistry<R>> var2)
abstract throw new UnsupportedOperationExceptionthrow new UnsupportedOperationException("Not implemented")
abstract return createDatePathreturn createDatePath(var0, null, var1)
abstract return createDatePathreturn createDatePath(var2, var0, var1)
public BsonValue dumpToBsonBsonValue dumpToBson(T var1)
public void dumpToJsonvoid dumpToJson(@Nonnull Path var1, T var2)
public BsonValue encodepublic BsonValue encode(T var1, ExtraInfo var2)
public Codec<R> getCodecpublic Codec<R> getCodec(R var1)
if if(var9 != null)
if if(this.appendFunc != null)
if if(var13 != null)
if if(var14 != null)
if if(var1 != null)
if if(var2 != null)
if if(this.func == null)
if if(this.codec != null)
public MetricsRegistry<T> registerMetricsRegistry<T> register(String var1, MetricsRegistry<Void> var2)
public <R> MetricsRegistry<T> register<R> MetricsRegistry<T> register(String var1, Function<T, R> var2, Codec<R> var3)
public <R extends MetricProvider> MetricsRegistry<T> register<R extends MetricProvider> MetricsRegistry<T> register(String var1, @Nonnull Function<T, R> var2)

Исходный код

Показать/скрыть
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.schema.SchemaContext;
class="kw">import com.hypixel.hytale.codec.schema.config.Schema;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.logger.backend.HytaleFileHandler;
class="kw">import it.unimi.dsi.fastutil.objects.Object2ObjectLinkedOpenHashMap;
class="kw">import java.io.BufferedWriter;
class="kw">import java.io.IOException;
class="kw">import java.nio.file.Files;
class="kw">import java.nio.file.Path;
class="kw">import java.nio.file.Paths;
class="kw">import java.time.LocalDateTime;
class="kw">import java.time.ZoneId;
class="kw">import java.util.Map;
class="kw">import java.util.Map.Entry;
class="kw">import java.util.concurrent.locks.StampedLock;
class="kw">import java.util.function.Function;
class="kw">import javax.annotation.CheckForNull;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.bson.BsonDocument;
class="kw">import org.bson.BsonValue;
class="kw">import org.bson.codecs.BsonDocumentCodec;
class="kw">import org.bson.codecs.EncoderContext;
class="kw">import org.bson.json.JsonMode;
class="kw">import org.bson.json.JsonWriter;
class="kw">import org.bson.json.JsonWriterSettings;

class="kw">public class MetricsRegistry<T> class="kw">implements Codec<T> {
   class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
   class="kw">public class="kw">static class="kw">final JsonWriterSettings JSON_SETTINGS = JsonWriterSettings.builder()
      .outputMode(JsonMode.STRICT)
      .indent(false)
      .newLineCharacters("\n")
      .int64Converter((var0, var1) -> var1.writeNumber(Long.toString(var0)))
      .build();
   class="kw">private class="kw">static class="kw">final EncoderContext ENCODER_CONTEXT = EncoderContext.builder().build();
   class="kw">private class="kw">static class="kw">final BsonDocumentCodec BSON_DOCUMENT_CODEC = new BsonDocumentCodec();
   @Nullable
   class="kw">private class="kw">final Function<T, MetricProvider> appendFunc;
   class="kw">private class="kw">final StampedLock lock = new StampedLock();
   class="kw">private class="kw">final Map<String, MetricsRegistry.Metric<T, ?>> map = new Object2ObjectLinkedOpenHashMap();

   class="kw">public MetricsRegistry() {
      this.appendFunc = null;
   }

   class="kw">public MetricsRegistry(Function<T, MetricProvider> var1) {
      this.appendFunc = var1;
   }

   class="kw">public MetricsRegistry<T> register(String var1, MetricsRegistry<Void> var2) {
      long var3 = this.lock.writeLock();

      try {
         if (this.map.putIfAbsent(var1, new MetricsRegistry.Metric<>(null, var2)) != null) {
            throw new IllegalArgumentException("Metric already registered: " + var1);
         }
      } class="kw">finally {
         this.lock.unlockWrite(var3);
      }

      class="kw">return this;
   }

   class="kw">public <R> MetricsRegistry<T> register(String var1, Function<T, R> var2, Codec<R> var3) {
      long var4 = this.lock.writeLock();

      try {
         if (this.map.putIfAbsent(var1, new MetricsRegistry.Metric<>(var2, var3)) != null) {
            throw new IllegalArgumentException("Metric already registered: " + var1);
         }
      } class="kw">finally {
         this.lock.unlockWrite(var4);
      }

      class="kw">return this;
   }

   class="kw">public <R class="kw">extends MetricProvider> MetricsRegistry<T> register(String var1, @Nonnull Function<T, R> var2) {
      class="kw">return this.register(var1, var2.andThen(var0 -> var0 == null ? null : var0.toMetricResults()), MetricResults.CODEC);
   }

   @Deprecated
   class="kw">public <R> MetricsRegistry<T> register(String var1, Function<T, R> var2, Function<R, MetricsRegistry<R>> var3) {
      long var4 = this.lock.writeLock();

      try {
         if (this.map.putIfAbsent(var1, new MetricsRegistry.Metric<>(var2, var3)) != null) {
            throw new IllegalArgumentException("Metric already registered: " + var1);
         }
      } class="kw">finally {
         this.lock.unlockWrite(var4);
      }

      class="kw">return this;
   }

   @Override
   class="kw">public T decode(BsonValue var1, ExtraInfo var2) {
      throw new UnsupportedOperationException("Not implemented");
   }

   @Override
   class="kw">public BsonValue encode(T var1, ExtraInfo var2) {
      BsonDocument var3 = new BsonDocument();
      long var4 = this.lock.readLock();

      try {
         for (Entry var7 : this.map.entrySet()) {
            String var8 = var7.getKey();
            BsonValue var9 = var7.getValue().encode(var1, var2);
            if (var9 != null) {
               var3.put(var8, var9);
            }
         }
      } class="kw">finally {
         this.lock.unlockRead(var4);
      }

      if (this.appendFunc != null) {
         MetricProvider var13 = this.appendFunc.apply(var1);
         if (var13 != null) {
            MetricResults var14 = var13.toMetricResults();
            if (var14 != null) {
               var3.putAll(var14.getBson());
            }
         }
      }

      class="kw">return var3;
   }

   @Nonnull
   @Override
   class="kw">public Schema toSchema(@Nonnull SchemaContext var1) {
      throw new UnsupportedOperationException("Not implemented");
   }

   @Nonnull
   class="kw">public MetricResults toMetricResults(T var1) {
      class="kw">return new MetricResults(this.dumpToBson(var1).asDocument());
   }

   class="kw">public BsonValue dumpToBson(T var1) {
      ExtraInfo var2 = ExtraInfo.THREAD_LOCAL.get();
      BsonDocument var3 = this.encode(var1, var2).asDocument();
      var2.getValidationResults().logOrThrowValidatorExceptions(LOGGER);
      class="kw">return var3;
   }

   @Nonnull
   class="kw">public Path dumpToJson(T var1) class="kw">throws IOException {
      Path var2 = createDumpPath(".dump.json");
      this.dumpToJson(var2, var1);
      class="kw">return var2;
   }

   class="kw">public void dumpToJson(@Nonnull Path var1, T var2) class="kw">throws IOException {
      BsonValue var3 = this.dumpToBson(var2);

      try (BufferedWriter var4 = Files.newBufferedWriter(var1)) {
         BSON_DOCUMENT_CODEC.encode(new JsonWriter(var4, JSON_SETTINGS), var3.asDocument(), ENCODER_CONTEXT);
      }
   }

   @Nonnull
   class="kw">public class="kw">static Path createDumpPath(@Nullable String var0) class="kw">throws IOException {
      class="kw">return createDumpPath((String)null, var0);
   }

   @Nonnull
   class="kw">public class="kw">static Path createDumpPath(@Nonnull Path var0, @Nullable String var1) {
      class="kw">return createDatePath(var0, null, var1);
   }

   @Nonnull
   class="kw">public class="kw">static Path createDumpPath(@Nullable String var0, @Nullable String var1) class="kw">throws IOException {
      Path var2 = Paths.get("dumps");
      if (!Files.exists(var2)) {
         Files.createDirectories(var2);
      }

      class="kw">return createDatePath(var2, var0, var1);
   }

   @Nonnull
   class="kw">public class="kw">static Path createDatePath(@Nonnull Path var0, @Nullable String var1, @Nullable String var2) {
      String var3 = HytaleFileHandler.LOG_FILE_DATE_FORMAT.format(LocalDateTime.now(ZoneId.systemDefault()));
      if (var1 != null) {
         var3 = var1 + var3;
      }

      Path var4 = var2 != null ? var0.resolve(var3 + var2) : var0.resolve(var3);
      int var5 = 0;

      while (Files.exists(var4)) {
         if (var2 != null) {
            var4 = var0.resolve(var3 + "_" + var5++ + var2);
         } else {
            var4 = var0.resolve(var3 + "_" + var5++);
         }
      }

      class="kw">return var4;
   }

   class="kw">private class="kw">static class Metric<T, R> {
      @Nullable
      class="kw">private class="kw">final Function<T, R> func;
      @CheckForNull
      class="kw">private class="kw">final Codec<R> codec;
      @CheckForNull
      class="kw">private class="kw">final Function<R, MetricsRegistry<R>> codecFunc;

      class="kw">public Metric(@Nullable Function<T, R> var1, @Nullable Codec<R> var2) {
         this.func = var1;
         this.codec = var2;
         this.codecFunc = null;
      }

      class="kw">public Metric(@Nullable Function<T, R> var1, @Nullable Function<R, MetricsRegistry<R>> var2) {
         this.func = var1;
         this.codec = null;
         this.codecFunc = var2;
      }

      @Nullable
      class="kw">public BsonValue encode(T var1, ExtraInfo var2) {
         if (this.func == null) {
            assert this.codec != null;
            class="kw">return this.codec.encode(null, var2);
         } else {
            Object var3 = this.func.apply(var1);
            class="kw">return var3 == null ? null : this.getCodec(var3).encode(var3, var2);
         }
      }

      @Nonnull
      class="kw">public Codec<R> getCodec(R var1) {
         if (this.codec != null) {
            class="kw">return this.codec;
         }

         assert this.codecFunc != null;
         class="kw">return this.codecFunc.apply(var1);
      }
   }
}