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
|
// commands
|
||||||
CommandPlatformHelper.init(new BungeeCommandPlatformHelper());
|
CommandPlatformHelper.init(new BungeeCommandPlatformHelper());
|
||||||
this.commandManager = new BungeeCommandManager(this);
|
this.commandManager = new BungeeCommandManager(this);
|
||||||
CommandLoader.initCommands(this.commandManager, configuration());
|
CommandLoader.initCommands(this.commandManager, this);
|
||||||
|
|
||||||
logInfo("RedisBungee initialized successfully ");
|
logInfo("RedisBungee initialized successfully ");
|
||||||
}
|
}
|
||||||
|
@ -11,12 +11,13 @@
|
|||||||
package com.imaginarycode.minecraft.redisbungee.commands;
|
package com.imaginarycode.minecraft.redisbungee.commands;
|
||||||
|
|
||||||
import co.aikar.commands.CommandManager;
|
import co.aikar.commands.CommandManager;
|
||||||
|
import com.imaginarycode.minecraft.redisbungee.api.RedisBungeePlugin;
|
||||||
import com.imaginarycode.minecraft.redisbungee.api.config.RedisBungeeConfiguration;
|
import com.imaginarycode.minecraft.redisbungee.api.config.RedisBungeeConfiguration;
|
||||||
|
|
||||||
public class CommandLoader {
|
public class CommandLoader {
|
||||||
|
|
||||||
public static void initCommands(CommandManager<?, ?, ?, ?, ?, ?> commandManager, RedisBungeeConfiguration configuration) {
|
public static void initCommands(CommandManager<?, ?, ?, ?, ?, ?> commandManager, RedisBungeePlugin<?> plugin) {
|
||||||
commandManager.registerCommand(new CommandRedisBungee());
|
commandManager.registerCommand(new CommandRedisBungee(plugin));
|
||||||
// todo: config options to disable each command
|
// 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.CommandIssuer;
|
||||||
import co.aikar.commands.annotation.*;
|
import co.aikar.commands.annotation.*;
|
||||||
import com.imaginarycode.minecraft.redisbungee.Constants;
|
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.AdventureBaseCommand;
|
||||||
|
import com.imaginarycode.minecraft.redisbungee.commands.utils.StopperUUIDCleanupTask;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.event.ClickEvent;
|
import net.kyori.adventure.text.event.ClickEvent;
|
||||||
import net.kyori.adventure.text.event.HoverEvent;
|
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.MiniMessage;
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
|
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
|
||||||
|
|
||||||
@ -26,10 +29,15 @@ import java.util.Date;
|
|||||||
@CommandPermission("redisbungee.use")
|
@CommandPermission("redisbungee.use")
|
||||||
public class CommandRedisBungee extends AdventureBaseCommand {
|
public class CommandRedisBungee extends AdventureBaseCommand {
|
||||||
|
|
||||||
|
private final RedisBungeePlugin<?> plugin;
|
||||||
|
|
||||||
|
public CommandRedisBungee(RedisBungeePlugin<?> plugin) {
|
||||||
|
this.plugin = plugin;
|
||||||
|
}
|
||||||
|
|
||||||
@Default
|
@Default
|
||||||
@Subcommand("info|version|git")
|
@Subcommand("info|version|git")
|
||||||
public static void info(CommandIssuer issuer) {
|
public void info(CommandIssuer issuer) {
|
||||||
final String message = """
|
final String message = """
|
||||||
<color:aqua>This proxy is running RedisBungee Limework's fork
|
<color:aqua>This proxy is running RedisBungee Limework's fork
|
||||||
<color:yellow>========================================
|
<color:yellow>========================================
|
||||||
@ -52,17 +60,30 @@ public class CommandRedisBungee extends AdventureBaseCommand {
|
|||||||
.hoverEvent(HoverEvent.showText(Component.text("Click me to open: " + Constants.getGithubCommitLink())))
|
.hoverEvent(HoverEvent.showText(Component.text("Click me to open: " + Constants.getGithubCommitLink())))
|
||||||
)));
|
)));
|
||||||
}
|
}
|
||||||
|
// <color:aqua>......: <color:green>......
|
||||||
@HelpCommand
|
@HelpCommand
|
||||||
public static void help(CommandIssuer issuer) {
|
public void help(CommandIssuer issuer) {
|
||||||
final String message = """
|
final String message = """
|
||||||
<color:yellow>========================================
|
<color:yellow>========================================
|
||||||
<color:aqua>/rb info: <color:green>shows version, build date, git commit hash.
|
<color:aqua>/rb info: <color:green>shows info of this version.
|
||||||
<color:aqua>/rb help: shows this page.
|
<color:aqua>/rb help: <color:green>shows this page.
|
||||||
<color:aqua>......: <color:green>......
|
<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>========================================
|
||||||
<color:yellow>run /rb help for more commands""";
|
<color:yellow>run /rb help for more commands""";
|
||||||
sendMessage(issuer, MiniMessage.miniMessage().deserialize(message));
|
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;
|
package com.imaginarycode.minecraft.redisbungee.commands.utils;
|
||||||
|
|
||||||
import co.aikar.commands.CommandIssuer;
|
import co.aikar.commands.CommandIssuer;
|
||||||
|
import com.imaginarycode.minecraft.redisbungee.api.RedisBungeePlugin;
|
||||||
import net.kyori.adventure.text.Component;
|
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
|
// load commands
|
||||||
CommandPlatformHelper.init(new VelocityCommandPlatformHelper());
|
CommandPlatformHelper.init(new VelocityCommandPlatformHelper());
|
||||||
this.commandManager = new VelocityCommandManager(this.getProxy(), this);
|
this.commandManager = new VelocityCommandManager(this.getProxy(), this);
|
||||||
CommandLoader.initCommands(this.commandManager, configuration());
|
CommandLoader.initCommands(this.commandManager, this);
|
||||||
|
|
||||||
logInfo("RedisBungee initialized successfully ");
|
logInfo("RedisBungee initialized successfully ");
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user