mirror of
https://github.com/proxiodev/RedisBungee.git
synced 2024-11-05 04:48:02 +00:00
impl: redis clean up task, taken from brains impl.
This commit is contained in:
parent
e76f0d0a00
commit
19064e0a60
@ -0,0 +1,56 @@
|
||||
/*
|
||||
* Copyright (c) 2013-present RedisBungee contributors
|
||||
*
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Eclipse Public License v1.0
|
||||
* which accompanies this distribution, and is available at
|
||||
*
|
||||
* http://www.eclipse.org/legal/epl-v10.html
|
||||
*/
|
||||
|
||||
package com.imaginarycode.minecraft.redisbungee.api.tasks;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.imaginarycode.minecraft.redisbungee.api.RedisBungeePlugin;
|
||||
import com.imaginarycode.minecraft.redisbungee.api.util.uuid.CachedUUIDEntry;
|
||||
import redis.clients.jedis.UnifiedJedis;
|
||||
import redis.clients.jedis.exceptions.JedisException;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
|
||||
public class UUIDCleanupTask extends RedisTask<Void>{
|
||||
|
||||
private final Gson gson = new Gson();
|
||||
private final RedisBungeePlugin<?> plugin;
|
||||
|
||||
public UUIDCleanupTask(RedisBungeePlugin<?> plugin) {
|
||||
super(plugin);
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
// this code is inspired from https://github.com/minecrafter/redisbungeeclean
|
||||
@Override
|
||||
public Void unifiedJedisTask(UnifiedJedis unifiedJedis) {
|
||||
try {
|
||||
final long number = unifiedJedis.hlen("uuid-cache");
|
||||
plugin.logInfo("Found {} entries", number);
|
||||
ArrayList<String> fieldsToRemove = new ArrayList<>();
|
||||
unifiedJedis.hgetAll("uuid-cache").forEach((field, data) -> {
|
||||
CachedUUIDEntry cachedUUIDEntry = gson.fromJson(data, CachedUUIDEntry.class);
|
||||
if (cachedUUIDEntry.expired()) {
|
||||
fieldsToRemove.add(field);
|
||||
}
|
||||
});
|
||||
if (!fieldsToRemove.isEmpty()) {
|
||||
unifiedJedis.hdel("uuid-cache", fieldsToRemove.toArray(new String[0]));
|
||||
}
|
||||
plugin.logInfo("deleted {} entries", fieldsToRemove.size());
|
||||
} catch (JedisException e) {
|
||||
plugin.logFatal("There was an error fetching information", e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -261,7 +261,7 @@ public class RedisBungee extends Plugin implements RedisBungeePlugin<ProxiedPlay
|
||||
// commands
|
||||
CommandPlatformHelper.init(new BungeeCommandPlatformHelper());
|
||||
this.commandManager = new BungeeCommandManager(this);
|
||||
CommandLoader.initCommands(this.commandManager, configuration());
|
||||
CommandLoader.initCommands(this.commandManager, this);
|
||||
|
||||
logInfo("RedisBungee initialized successfully ");
|
||||
}
|
||||
|
@ -11,12 +11,13 @@
|
||||
package com.imaginarycode.minecraft.redisbungee.commands;
|
||||
|
||||
import co.aikar.commands.CommandManager;
|
||||
import com.imaginarycode.minecraft.redisbungee.api.RedisBungeePlugin;
|
||||
import com.imaginarycode.minecraft.redisbungee.api.config.RedisBungeeConfiguration;
|
||||
|
||||
public class CommandLoader {
|
||||
|
||||
public static void initCommands(CommandManager<?, ?, ?, ?, ?, ?> commandManager, RedisBungeeConfiguration configuration) {
|
||||
commandManager.registerCommand(new CommandRedisBungee());
|
||||
public static void initCommands(CommandManager<?, ?, ?, ?, ?, ?> commandManager, RedisBungeePlugin<?> plugin) {
|
||||
commandManager.registerCommand(new CommandRedisBungee(plugin));
|
||||
// todo: config options to disable each command
|
||||
}
|
||||
|
||||
|
@ -13,10 +13,13 @@ package com.imaginarycode.minecraft.redisbungee.commands;
|
||||
import co.aikar.commands.CommandIssuer;
|
||||
import co.aikar.commands.annotation.*;
|
||||
import com.imaginarycode.minecraft.redisbungee.Constants;
|
||||
import com.imaginarycode.minecraft.redisbungee.api.RedisBungeePlugin;
|
||||
import com.imaginarycode.minecraft.redisbungee.commands.utils.AdventureBaseCommand;
|
||||
import com.imaginarycode.minecraft.redisbungee.commands.utils.StopperUUIDCleanupTask;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.event.ClickEvent;
|
||||
import net.kyori.adventure.text.event.HoverEvent;
|
||||
import net.kyori.adventure.text.format.NamedTextColor;
|
||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
|
||||
|
||||
@ -26,10 +29,15 @@ import java.util.Date;
|
||||
@CommandPermission("redisbungee.use")
|
||||
public class CommandRedisBungee extends AdventureBaseCommand {
|
||||
|
||||
private final RedisBungeePlugin<?> plugin;
|
||||
|
||||
public CommandRedisBungee(RedisBungeePlugin<?> plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@Default
|
||||
@Subcommand("info|version|git")
|
||||
public static void info(CommandIssuer issuer) {
|
||||
public void info(CommandIssuer issuer) {
|
||||
final String message = """
|
||||
<color:aqua>This proxy is running RedisBungee Limework's fork
|
||||
<color:yellow>========================================
|
||||
@ -52,17 +60,30 @@ public class CommandRedisBungee extends AdventureBaseCommand {
|
||||
.hoverEvent(HoverEvent.showText(Component.text("Click me to open: " + Constants.getGithubCommitLink())))
|
||||
)));
|
||||
}
|
||||
|
||||
// <color:aqua>......: <color:green>......
|
||||
@HelpCommand
|
||||
public static void help(CommandIssuer issuer) {
|
||||
public void help(CommandIssuer issuer) {
|
||||
final String message = """
|
||||
<color:yellow>========================================
|
||||
<color:aqua>/rb info: <color:green>shows version, build date, git commit hash.
|
||||
<color:aqua>/rb help: shows this page.
|
||||
<color:aqua>......: <color:green>......
|
||||
<color:aqua>/rb info: <color:green>shows info of this version.
|
||||
<color:aqua>/rb help: <color:green>shows this page.
|
||||
<color:aqua>/rb clean: <color:green>cleans up the uuid cache
|
||||
<color:red><bold>WARNING...</bold> <color:white>command above could cause performance issues
|
||||
<color:yellow>========================================
|
||||
<color:yellow>run /rb help for more commands""";
|
||||
sendMessage(issuer, MiniMessage.miniMessage().deserialize(message));
|
||||
}
|
||||
@Subcommand("clean")
|
||||
@Private
|
||||
public void cleanUp(CommandIssuer issuer) {
|
||||
if (StopperUUIDCleanupTask.isRunning) {
|
||||
sendMessage(issuer,
|
||||
Component.text("cleanup is currently running!").color(NamedTextColor.RED));
|
||||
return;
|
||||
}
|
||||
sendMessage(issuer,
|
||||
Component.text("cleanup is Starting, you should see the output status in the proxy console").color(NamedTextColor.GOLD));
|
||||
plugin.executeAsync(new StopperUUIDCleanupTask(plugin));
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -11,6 +11,7 @@
|
||||
package com.imaginarycode.minecraft.redisbungee.commands.utils;
|
||||
|
||||
import co.aikar.commands.CommandIssuer;
|
||||
import com.imaginarycode.minecraft.redisbungee.api.RedisBungeePlugin;
|
||||
import net.kyori.adventure.text.Component;
|
||||
|
||||
|
||||
|
@ -0,0 +1,25 @@
|
||||
package com.imaginarycode.minecraft.redisbungee.commands.utils;
|
||||
|
||||
import com.imaginarycode.minecraft.redisbungee.api.RedisBungeePlugin;
|
||||
import com.imaginarycode.minecraft.redisbungee.api.tasks.UUIDCleanupTask;
|
||||
import redis.clients.jedis.UnifiedJedis;
|
||||
|
||||
public class StopperUUIDCleanupTask extends UUIDCleanupTask {
|
||||
|
||||
public static boolean isRunning = false;
|
||||
|
||||
public StopperUUIDCleanupTask(RedisBungeePlugin<?> plugin) {
|
||||
super(plugin);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Void unifiedJedisTask(UnifiedJedis unifiedJedis) {
|
||||
isRunning = true;
|
||||
try {
|
||||
super.unifiedJedisTask(unifiedJedis);
|
||||
} catch (Exception ignored) {}
|
||||
isRunning = false;
|
||||
return null;
|
||||
}
|
||||
}
|
@ -286,7 +286,7 @@ public class RedisBungeeVelocityPlugin implements RedisBungeePlugin<Player>, Con
|
||||
// load commands
|
||||
CommandPlatformHelper.init(new VelocityCommandPlatformHelper());
|
||||
this.commandManager = new VelocityCommandManager(this.getProxy(), this);
|
||||
CommandLoader.initCommands(this.commandManager, configuration());
|
||||
CommandLoader.initCommands(this.commandManager, this);
|
||||
|
||||
logInfo("RedisBungee initialized successfully ");
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user