mirror of
https://github.com/plan-player-analytics/Plan.git
synced 2024-09-12 06:48:50 +02:00
Implemented Connection Debug command
This commit is contained in:
parent
e7002d73f0
commit
8eae745c34
@ -2,6 +2,7 @@ package com.djrapitops.plan.command;
|
||||
|
||||
import com.djrapitops.plan.PlanBungee;
|
||||
import com.djrapitops.plan.command.commands.*;
|
||||
import com.djrapitops.plan.command.commands.manage.ManageConDebugCommand;
|
||||
import com.djrapitops.plan.system.settings.Permissions;
|
||||
import com.djrapitops.plan.system.settings.locale.Locale;
|
||||
import com.djrapitops.plan.system.settings.locale.Msg;
|
||||
@ -50,7 +51,8 @@ public class PlanBungeeCommand extends TreeCommand<PlanBungee> {
|
||||
registerCommand,
|
||||
new WebUserCommand(plugin, registerCommand),
|
||||
new NetworkCommand(),
|
||||
new ListServersCommand(plugin)
|
||||
new ListServersCommand(plugin),
|
||||
new ManageConDebugCommand()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -37,7 +37,8 @@ public class ManageCommand extends TreeCommand<Plan> {
|
||||
new ManageRemoveCommand(),
|
||||
new ManageClearCommand(plugin),
|
||||
new ManageSetupCommand(),
|
||||
new ManageDisableCommand()
|
||||
new ManageDisableCommand(),
|
||||
new ManageConDebugCommand()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,127 @@
|
||||
package com.djrapitops.plan.command.commands.manage;
|
||||
|
||||
import com.djrapitops.plan.PlanPlugin;
|
||||
import com.djrapitops.plan.api.exceptions.connection.*;
|
||||
import com.djrapitops.plan.api.exceptions.database.DBException;
|
||||
import com.djrapitops.plan.system.database.databases.Database;
|
||||
import com.djrapitops.plan.system.info.InfoSystem;
|
||||
import com.djrapitops.plan.system.info.request.CheckConnectionRequest;
|
||||
import com.djrapitops.plan.system.info.server.Server;
|
||||
import com.djrapitops.plan.system.info.server.ServerInfo;
|
||||
import com.djrapitops.plan.system.processing.Processor;
|
||||
import com.djrapitops.plan.system.settings.Permissions;
|
||||
import com.djrapitops.plan.system.settings.locale.Locale;
|
||||
import com.djrapitops.plan.system.settings.locale.Msg;
|
||||
import com.djrapitops.plan.system.webserver.WebServerSystem;
|
||||
import com.djrapitops.plugin.api.utility.log.Log;
|
||||
import com.djrapitops.plugin.command.CommandType;
|
||||
import com.djrapitops.plugin.command.ISender;
|
||||
import com.djrapitops.plugin.command.SubCommand;
|
||||
import com.djrapitops.plugin.settings.ColorScheme;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* This manage SubCommand is used to request settings from Bungee so that connection can be established.
|
||||
*
|
||||
* @author Rsl1122
|
||||
* @since 2.3.0
|
||||
*/
|
||||
public class ManageConDebugCommand extends SubCommand {
|
||||
|
||||
private final ColorScheme cs;
|
||||
|
||||
public ManageConDebugCommand() {
|
||||
super("con",
|
||||
CommandType.ALL,
|
||||
Permissions.MANAGE.getPermission(),
|
||||
"Debug Bukkit-Bungee Connections",
|
||||
"");
|
||||
|
||||
cs = PlanPlugin.getInstance().getColorScheme();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] addHelp() {
|
||||
return Locale.get(Msg.CMD_HELP_MANAGE_HOTSWAP).toArray();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCommand(ISender sender, String commandLabel, String[] args) {
|
||||
if (!WebServerSystem.isWebServerEnabled()) {
|
||||
sender.sendMessage("§cWebServer is not enabled on this server.");
|
||||
return true;
|
||||
}
|
||||
|
||||
Processor.queue(() -> {
|
||||
testServers(sender);
|
||||
});
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private void testServers(ISender sender) {
|
||||
try {
|
||||
List<Server> servers = Database.getActive().fetch().getServers();
|
||||
|
||||
String accessAddress = WebServerSystem.getInstance().getWebServer().getAccessAddress();
|
||||
UUID thisServer = ServerInfo.getServerUUID();
|
||||
for (Server server : servers) {
|
||||
if (thisServer.equals(server.getUuid())) {
|
||||
continue;
|
||||
}
|
||||
testServer(sender, accessAddress, server);
|
||||
}
|
||||
|
||||
} catch (DBException e) {
|
||||
Log.toLog(this.getClass().getName(), e);
|
||||
}
|
||||
}
|
||||
|
||||
private void testServer(ISender sender, String accessAddress, Server server) {
|
||||
String address = server.getWebAddress().toLowerCase();
|
||||
boolean usingHttps = address.startsWith("https");
|
||||
boolean local = address.contains("localhost")
|
||||
|| address.startsWith("https://:")
|
||||
|| address.startsWith("http://:")
|
||||
|| address.contains("127.0.0.1");
|
||||
|
||||
try {
|
||||
|
||||
InfoSystem.getInstance().getConnectionSystem().sendInfoRequest(new CheckConnectionRequest(accessAddress), server);
|
||||
sender.sendMessage(getMsgFor(address, usingHttps, local, true, true));
|
||||
|
||||
} catch (ForbiddenException | BadRequestException | InternalErrorException e) {
|
||||
sender.sendMessage(getMsgFor(address, usingHttps, local, false, false));
|
||||
sender.sendMessage("§eOdd Exception: " + e.getClass().getSimpleName());
|
||||
} catch (UnauthorizedServerException e) {
|
||||
sender.sendMessage(getMsgFor(address, usingHttps, local, true, false));
|
||||
sender.sendMessage("§eFail reason: Unauthorized. Server might be using different database.");
|
||||
} catch (ConnectionFailException e) {
|
||||
sender.sendMessage(getMsgFor(address, usingHttps, local, false, false));
|
||||
sender.sendMessage("§eFail reason: " + e.getCause().getClass().getSimpleName() + " " + e.getCause().getMessage());
|
||||
if (!local) {
|
||||
sender.sendMessage("§eNon-local address, check that port is open");
|
||||
}
|
||||
} catch (GatewayException e) {
|
||||
sender.sendMessage(getMsgFor(address, usingHttps, local, true, false));
|
||||
} catch (NotFoundException e) {
|
||||
sender.sendMessage(getMsgFor(address, usingHttps, local, false, false));
|
||||
sender.sendMessage("§eFail reason: Older Plan version on receiving server");
|
||||
} catch (WebException e) {
|
||||
sender.sendMessage(getMsgFor(address, usingHttps, local, false, false));
|
||||
sender.sendMessage("§eOdd Exception: " + e.getClass().getSimpleName());
|
||||
}
|
||||
}
|
||||
|
||||
private String getMsgFor(String address, boolean usingHttps, boolean local, boolean successTo, boolean successFrom) {
|
||||
String tCol = cs.getTertiaryColor();
|
||||
String sCol = cs.getSecondaryColor();
|
||||
return tCol + address + sCol + ": "
|
||||
+ (usingHttps ? "HTTPS" : "HTTP") + " : "
|
||||
+ (local ? "Local" : "External") + " : "
|
||||
+ "To:" + (successTo ? "§aOK" : "§cFail") + sCol + " : "
|
||||
+ "From:" + (successFrom ? "§aOK" : "§cFail");
|
||||
}
|
||||
}
|
@ -148,7 +148,7 @@ public class ConnectionOut {
|
||||
Log.toLog(this.getClass(), e);
|
||||
}
|
||||
ConnectionLog.logConnectionTo(toServer, infoRequest, -1);
|
||||
throw new ConnectionFailException("Connection failed to address: " + address + "<br>Make sure the server is online.", e);
|
||||
throw new ConnectionFailException("Connection failed to address: " + address + " - Make sure the server is online.", e);
|
||||
} finally {
|
||||
if (connection != null) {
|
||||
connection.disconnect();
|
||||
|
@ -124,6 +124,7 @@ public abstract class ConnectionSystem implements SubSystem {
|
||||
|
||||
putRequest(requests, SaveDBSettingsRequest.createHandler());
|
||||
putRequest(requests, SendDBSettingsRequest.createHandler());
|
||||
putRequest(requests, CheckConnectionRequest.createHandler());
|
||||
return requests;
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,82 @@
|
||||
/*
|
||||
* Licence is provided in the jar as license.yml also here:
|
||||
* https://github.com/Rsl1122/Plan-PlayerAnalytics/blob/master/Plan/src/main/resources/license.yml
|
||||
*/
|
||||
package com.djrapitops.plan.system.info.request;
|
||||
|
||||
import com.djrapitops.plan.api.exceptions.connection.BadRequestException;
|
||||
import com.djrapitops.plan.api.exceptions.connection.ConnectionFailException;
|
||||
import com.djrapitops.plan.api.exceptions.connection.GatewayException;
|
||||
import com.djrapitops.plan.api.exceptions.connection.WebException;
|
||||
import com.djrapitops.plan.system.info.InfoSystem;
|
||||
import com.djrapitops.plan.system.info.server.Server;
|
||||
import com.djrapitops.plan.system.webserver.response.DefaultResponses;
|
||||
import com.djrapitops.plan.system.webserver.response.Response;
|
||||
import com.djrapitops.plugin.api.Check;
|
||||
import com.djrapitops.plugin.utilities.Verify;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* InfoRequest used for Checking Bukkit-Bungee connections.
|
||||
*
|
||||
* @author Rsl1122
|
||||
*/
|
||||
public class CheckConnectionRequest extends InfoRequestWithVariables {
|
||||
|
||||
public CheckConnectionRequest(String webServerAddress) {
|
||||
Verify.nullCheck(webServerAddress, () -> new IllegalArgumentException("webServerAddress can not be null."));
|
||||
|
||||
variables.put("address", webServerAddress);
|
||||
variables.put("continue", "yes");
|
||||
}
|
||||
|
||||
public CheckConnectionRequest() {
|
||||
}
|
||||
|
||||
public static CheckConnectionRequest createHandler() {
|
||||
return new CheckConnectionRequest();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void placeDataToDatabase() {
|
||||
/* Not necessary */
|
||||
}
|
||||
|
||||
@Override
|
||||
public void runLocally() {
|
||||
/* Won't be run */
|
||||
}
|
||||
|
||||
@Override
|
||||
public Response handleRequest(Map<String, String> variables) throws WebException {
|
||||
// Available variables: sender, address
|
||||
|
||||
if (Check.isBungeeAvailable()) {
|
||||
attemptConnection(variables);
|
||||
}
|
||||
|
||||
return DefaultResponses.SUCCESS.get();
|
||||
}
|
||||
|
||||
private void attemptConnection(Map<String, String> variables) throws WebException {
|
||||
boolean shouldNotContinue = variables.get("continue") == null;
|
||||
if (shouldNotContinue) {
|
||||
return;
|
||||
}
|
||||
|
||||
String address = variables.get("address");
|
||||
Verify.nullCheck(address, () -> new BadRequestException("WebServer Address ('address') not specified in the request."));
|
||||
|
||||
UUID serverUUID = UUID.fromString(variables.get("sender"));
|
||||
|
||||
Server bukkit = new Server(-1, serverUUID, "", address, -1);
|
||||
|
||||
try {
|
||||
InfoSystem.getInstance().getConnectionSystem().sendInfoRequest(new CheckConnectionRequest(), bukkit);
|
||||
} catch (ConnectionFailException e) {
|
||||
throw new GatewayException(e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user