feat: cache stats and ajustements

This commit is contained in:
aro 2023-01-16 19:07:55 +01:00
parent 3f2473aac5
commit f4e2f9cb46
4 changed files with 57 additions and 9 deletions

View file

@ -1,4 +1,4 @@
package net.artelnatif.nicko.gui.items.invalidator; package net.artelnatif.nicko.gui.items.admin.invalidator;
import de.studiocode.invui.item.ItemProvider; import de.studiocode.invui.item.ItemProvider;
import de.studiocode.invui.item.builder.ItemBuilder; import de.studiocode.invui.item.builder.ItemBuilder;
@ -12,16 +12,17 @@ import org.bukkit.event.inventory.ClickType;
import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryClickEvent;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
public class InvalidateAllItem extends BaseItem { public class SkinCacheInvalidateAllItem extends BaseItem {
@Override @Override
public ItemProvider getItemProvider() { public ItemProvider getItemProvider() {
final ItemBuilder builder = new ItemBuilder(Material.BARRIER); final ItemBuilder builder = new ItemBuilder(Material.BARRIER);
builder.setDisplayName("§fInvalidate §6all §fthe skin cache"); builder.setDisplayName("§6Invalidate the full Skin Cache");
builder.addLoreLines( builder.addLoreLines(
"§c§oNOT RECOMMENDED", "§c§oNOT RECOMMENDED",
"§7Invalidate every skin entry present in the cache,", "§7Invalidate every skin entry present in the cache,",
"§7without removing active player disguises.", "§7without resetting player disguises.",
"§7Skins will have to be fetched again if asked by a disguise."); "§7Could be useful if a skin has been updated",
"§7recently and the cache is now outdated.");
return builder; return builder;
} }

View file

@ -0,0 +1,44 @@
package net.artelnatif.nicko.gui.items.admin.invalidator;
import com.google.common.cache.CacheStats;
import com.google.common.cache.LoadingCache;
import de.studiocode.invui.item.ItemProvider;
import de.studiocode.invui.item.builder.ItemBuilder;
import de.studiocode.invui.item.impl.BaseItem;
import net.artelnatif.nicko.NickoBukkit;
import net.artelnatif.nicko.mojang.MojangSkin;
import org.bukkit.Material;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.ItemFlag;
import org.jetbrains.annotations.NotNull;
import java.util.Optional;
public class SkinCacheStatisticsItem extends BaseItem {
@Override
public ItemProvider getItemProvider() {
final ItemBuilder builder = new ItemBuilder(Material.OAK_SIGN);
final LoadingCache<String, Optional<MojangSkin>> cache = NickoBukkit.getInstance().getMojangAPI().getCache();
final CacheStats stats = cache.stats();
builder.addEnchantment(Enchantment.DAMAGE_ALL, 1, false);
builder.addItemFlags(ItemFlag.HIDE_ENCHANTS);
builder.setDisplayName("§6Skin Cache overview:");
builder.addLoreLines(
"§d§oCache is cleared every 24 hours.",
"§6Average Load Penalty: §d" + Math.round(stats.averageLoadPenalty()),
"§6Request Count: §d" + stats.requestCount(),
"§6Skin Cached: §d" + Math.round(cache.size()),
"§7§o(Click to refresh)");
return builder;
}
@Override
public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) {
if (clickType.isLeftClick() || clickType.isRightClick()) {
notifyWindows();
}
}
}

View file

@ -4,22 +4,24 @@ import de.studiocode.invui.gui.GUI;
import de.studiocode.invui.gui.builder.GUIBuilder; import de.studiocode.invui.gui.builder.GUIBuilder;
import de.studiocode.invui.gui.builder.guitype.GUIType; import de.studiocode.invui.gui.builder.guitype.GUIType;
import de.studiocode.invui.window.impl.single.SimpleWindow; import de.studiocode.invui.window.impl.single.SimpleWindow;
import net.artelnatif.nicko.gui.items.admin.invalidator.SkinCacheStatisticsItem;
import net.artelnatif.nicko.gui.items.common.BackItem; import net.artelnatif.nicko.gui.items.common.BackItem;
import net.artelnatif.nicko.gui.items.invalidator.InvalidateAllItem; import net.artelnatif.nicko.gui.items.admin.invalidator.SkinCacheInvalidateAllItem;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
public class SkinInvalidatorSelectionGUI { public class SkinInvalidatorSelectionGUI {
private final Player player; private final Player player;
private final GUI gui; private final GUI gui;
private final String[] structure = new String[]{ private final String[] structure = new String[]{
"B # # A S", "B # S A #",
}; };
public SkinInvalidatorSelectionGUI(Player player) { public SkinInvalidatorSelectionGUI(Player player) {
this.gui = new GUIBuilder<>(GUIType.NORMAL) this.gui = new GUIBuilder<>(GUIType.NORMAL)
.setStructure(structure) .setStructure(structure)
.addIngredient('B', new BackItem(new AdminPanelGUI(player).getGUI())) .addIngredient('B', new BackItem(new AdminPanelGUI(player).getGUI()))
.addIngredient('A', new InvalidateAllItem()) .addIngredient('A', new SkinCacheInvalidateAllItem())
.addIngredient('S', new SkinCacheStatisticsItem())
.build(); .build();
this.player = player; this.player = player;
} }

View file

@ -31,7 +31,8 @@ public class MojangAPI {
}; };
private final LoadingCache<String, Optional<MojangSkin>> cache = CacheBuilder private final LoadingCache<String, Optional<MojangSkin>> cache = CacheBuilder
.newBuilder() .newBuilder()
.expireAfterWrite(8, TimeUnit.HOURS) .recordStats()
.expireAfterWrite(24, TimeUnit.HOURS)
.build(loader); .build(loader);
private final NickoBukkit instance; private final NickoBukkit instance;