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";
}
}