LiveConfigModule class

Пакет: com.hypixel.hytale.server.core.liveconfig

Файл: com/hypixel/hytale/server/core/liveconfig/LiveConfigModule.java

extends: JavaPlugin

Поля (12)

МодификаторыТипИмя
instance
return
String var0
ServerAuthManager var1
Map var1
String var1
LiveConfigSnapshot var2
HashMap var2
String var3
String var4
Object var5
String var6

Методы (11)

МодификаторыВозвратСигнатура
public void forceRefreshvoid forceRefresh()
public boolean getBoolFlagboolean getBoolFlag(@Nonnull String var1, boolean var2)
public int getIntFlagint getIntFlag(@Nonnull String var1, int var2)
public boolean hasFlagboolean hasFlag(@Nonnull String var1)
if if(this.refreshTask != null)
if if(var2 != null)
if if(var0 != null)
private void performRefreshvoid performRefresh()
abstract super super(var1)
static void updateSentryFlagContextvoid updateSentryFlagContext(@Nonnull LiveConfigSnapshot var0)
abstract updateSentryFlagContext updateSentryFlagContext(var2)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.liveconfig;

class="kw">import com.hypixel.hytale.common.plugin.PluginManifest;
class="kw">import com.hypixel.hytale.common.util.java.ManifestUtil;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.server.core.HytaleServer;
class="kw">import com.hypixel.hytale.server.core.auth.ServerAuthManager;
class="kw">import com.hypixel.hytale.server.core.plugin.JavaPlugin;
class="kw">import com.hypixel.hytale.server.core.plugin.JavaPluginInit;
class="kw">import io.sentry.Breadcrumb;
class="kw">import io.sentry.Sentry;
class="kw">import java.util.HashMap;
class="kw">import java.util.Map;
class="kw">import java.util.Map.Entry;
class="kw">import java.util.concurrent.ScheduledFuture;
class="kw">import java.util.concurrent.TimeUnit;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class LiveConfigModule class="kw">extends JavaPlugin {
   @Nonnull
   class="kw">public class="kw">static class="kw">final PluginManifest MANIFEST = PluginManifest.corePlugin(LiveConfigModule.class).build();
   @Nonnull
   class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
   class="kw">private class="kw">static class="kw">final long REFRESH_INTERVAL_SECONDS = 300L;
   class="kw">private class="kw">static class="kw">final long INITIAL_DELAY_SECONDS = Long.getLong("liveconfig.initial.delay", 10L);
   class="kw">private class="kw">static LiveConfigModule instance;
   class="kw">private class="kw">volatile LiveConfigSnapshot snapshot = LiveConfigSnapshot.EMPTY;
   @Nullable
   class="kw">private ScheduledFuture<?> refreshTask;
   class="kw">private class="kw">final LiveConfigService liveConfigService = new LiveConfigService();
   @Nonnull
   class="kw">private class="kw">final String patchline;
   @Nonnull
   class="kw">private class="kw">final String os;
   @Nonnull
   class="kw">private class="kw">final String arch;

   class="kw">public LiveConfigModule(@Nonnull JavaPluginInit var1) {
      super(var1);
      instance = this;
      this.patchline = resolvePatchline();
      this.os = System.getProperty("liveconfig.os", LiveConfigService.detectOS());
      this.arch = System.getProperty("liveconfig.arch", LiveConfigService.detectArch());
   }

   @Nullable
   class="kw">public class="kw">static LiveConfigModule get() {
      class="kw">return instance;
   }

   class="kw">public boolean getBoolFlag(@Nonnull String var1, boolean var2) {
      class="kw">return this.snapshot.getBoolFlag(var1, var2);
   }

   class="kw">public int getIntFlag(@Nonnull String var1, int var2) {
      class="kw">return this.snapshot.getIntFlag(var1, var2);
   }

   @Nonnull
   class="kw">public String getStringFlag(@Nonnull String var1, @Nonnull String var2) {
      class="kw">return this.snapshot.getStringFlag(var1, var2);
   }

   class="kw">public boolean hasFlag(@Nonnull String var1) {
      class="kw">return this.snapshot.hasFlag(var1);
   }

   @Nonnull
   class="kw">public LiveConfigSnapshot getSnapshot() {
      class="kw">return this.snapshot;
   }

   class="kw">public void forceRefresh() {
      this.performRefresh();
   }

   @Override
   class="kw">protected void setup() {
   }

   @Override
   class="kw">protected void start() {
      LOGGER.at(Level.INFO).log("LiveConfig starting (patchline=%s, os=%s, arch=%s)", this.patchline, this.os, this.arch);
      this.refreshTask = HytaleServer.SCHEDULED_EXECUTOR.scheduleAtFixedRate(this::performRefresh, INITIAL_DELAY_SECONDS, 300L, TimeUnit.SECONDS);
   }

   @Override
   class="kw">protected void shutdown() {
      if (this.refreshTask != null) {
         this.refreshTask.cancel(false);
      }
   }

   class="kw">private void performRefresh() {
      if (!LiveConfigService.hasUrlOverride()) {
         ServerAuthManager var1 = ServerAuthManager.getInstance();
         if (!var1.hasSessionToken()) {
            LOGGER.at(Level.FINE).log("No session token - skipping live config refresh");
            class="kw">return;
         }
      }

      try {
         String var6 = this.snapshot.getEtag();
         LiveConfigSnapshot var2 = this.liveConfigService.fetchServerConfigs(this.patchline, this.os, this.arch, ManifestUtil.getImplementationVersion(), var6);
         if (var2 != null) {
            String var3 = this.snapshot.getVersion();
            this.snapshot = var2;
            String var4 = var2.getVersion();
            if (var3 == null || !var3.equals(var4)) {
               updateSentryFlagContext(var2);
               LOGGER.at(Level.INFO).log("LiveConfig updated: version=%s, %d flag(s)", var4, var2.getFlagCount());
            }
         }
      } catch (Exception var5) {
         ((HytaleLogger.Api)LOGGER.at(Level.WARNING).withCause(var5)).log("Failed to refresh live config");
      }
   }

   class="kw">private class="kw">static void updateSentryFlagContext(@Nonnull LiveConfigSnapshot var0) {
      Map var1 = var0.getAllFlags();
      HashMap var2 = new HashMap<>(var1.size());

      for (Entry var4 : var1.entrySet()) {
         Object var5 = var4.getValue().value();
         var2.put(var4.getKey(), var5 != null ? var5.toString() : "null");
      }

      try {
         Sentry.configureScope(var1x -> var1x.setContexts("feature_flags", var2));

         for (Entry var9 : var1.entrySet()) {
            if (var9.getValue().value() class="kw">instanceof Boolean var10) {
               Sentry.addFeatureFlag(var9.getKey(), var10);
            }
         }

         Sentry.addBreadcrumb(Breadcrumb.info(String.format("LiveConfig refreshed with %d flag(s)", var1.size())));
      } catch (Exception var7) {
         ((HytaleLogger.Api)LOGGER.at(Level.WARNING).withCause(var7)).log("Failed to update Sentry feature flag context");
      }
   }

   @Nonnull
   class="kw">private class="kw">static String resolvePatchline() {
      String var0 = System.getProperty("liveconfig.patchline");
      if (var0 != null) {
         class="kw">return var0;
      }

      String var1 = ManifestUtil.getPatchline();
      class="kw">return var1 != null ? var1 : "dev";
   }
}