Simplified connection attempts

This commit is contained in:
Rsl1122 2018-01-28 14:54:49 +02:00
parent b3ac110dfe
commit a55b17246a
10 changed files with 54 additions and 67 deletions

View File

@ -4,6 +4,7 @@
*/
package com.djrapitops.plan.system.info;
import com.djrapitops.plan.api.exceptions.connection.NoServersException;
import com.djrapitops.plan.api.exceptions.connection.WebException;
import com.djrapitops.plan.system.info.connection.BukkitConnectionSystem;
import com.djrapitops.plan.system.info.request.CacheNetworkPageContentRequest;
@ -26,7 +27,7 @@ public class BukkitInfoSystem extends InfoSystem {
@Override
public void runLocally(InfoRequest infoRequest) throws WebException {
if (infoRequest instanceof SetupRequest) {
return;
throw new NoServersException("Set-up requests can not be run locally.");
}
infoRequest.runLocally();
}

View File

@ -30,7 +30,7 @@ public class BungeeInfoSystem extends InfoSystem {
@Override
public void runLocally(InfoRequest infoRequest) throws WebException {
// runLocally is called when ConnectionSystem has no servers.
throw new NoServersException("No servers were available to process this request.");
throw new NoServersException("No servers were available to process this request (Local attempt): " + infoRequest.getClass().getSimpleName());
}
@Override

View File

@ -66,10 +66,16 @@ public abstract class InfoSystem implements SubSystem {
try {
if (!connectionSystem.isServerAvailable()) {
runLocally(infoRequest);
return;
}
connectionSystem.sendInfoRequest(infoRequest);
} catch (NoServersException e) {
runLocally(infoRequest);
} catch (WebException original) {
try {
// Attempt to run locally.
runLocally(infoRequest);
} catch (NoServersException e2) {
throw original;
}
}
}

View File

@ -17,8 +17,6 @@ import com.djrapitops.plan.system.webserver.WebServerSystem;
import com.djrapitops.plan.utilities.MiscUtils;
import com.djrapitops.plugin.api.TimeAmount;
import com.djrapitops.plugin.api.utility.log.Log;
import com.djrapitops.plugin.task.AbsRunnable;
import com.djrapitops.plugin.task.RunnableFactory;
import java.util.Optional;
import java.util.UUID;
@ -39,7 +37,7 @@ public class BukkitConnectionSystem extends ConnectionSystem {
}
private void refreshServerMap() {
if (latestServerMapRefresh < MiscUtils.getTime() - TimeAmount.MINUTE.ms() * 2L) {
if (latestServerMapRefresh < MiscUtils.getTime() - TimeAmount.SECOND.ms() * 15L) {
try {
Database database = Database.getActive();
Optional<Server> bungeeInformation = database.fetch().getBungeeInformation();
@ -57,7 +55,7 @@ public class BukkitConnectionSystem extends ConnectionSystem {
refreshServerMap();
if (mainServer == null && bukkitServers.isEmpty()) {
throw new NoServersException("No Servers available to process requests.");
throw new NoServersException("Zero servers available to process requests.");
}
Server server = null;
@ -81,7 +79,7 @@ public class BukkitConnectionSystem extends ConnectionSystem {
@Override
public void sendWideInfoRequest(WideRequest infoRequest) throws NoServersException {
if (bukkitServers.isEmpty()) {
throw new NoServersException("No Servers Available to make process request.");
throw new NoServersException("No Servers available to make wide-request: " + infoRequest.getClass().getSimpleName());
}
for (Server server : bukkitServers.values()) {
WebExceptionLogger.logIfOccurs(this.getClass(), () -> sendInfoRequest(infoRequest, server));
@ -90,7 +88,7 @@ public class BukkitConnectionSystem extends ConnectionSystem {
@Override
public boolean isServerAvailable() {
return ConnectionLog.hasConnectionSucceeded(mainServer);
return mainServer != null && Settings.BUNGEE_OVERRIDE_STANDALONE_MODE.isFalse();
}
@Override
@ -102,12 +100,6 @@ public class BukkitConnectionSystem extends ConnectionSystem {
@Override
public void enable() {
refreshServerMap();
RunnableFactory.createNew("Server List Update Task", new AbsRunnable() {
@Override
public void run() {
refreshServerMap();
}
}).runTaskTimerAsynchronously(TimeAmount.SECOND.ticks() * 30L, TimeAmount.MINUTE.ticks() * 5L);
boolean usingBungeeWebServer = ConnectionSystem.getInstance().isServerAvailable();
boolean usingAlternativeIP = Settings.SHOW_ALTERNATIVE_IP.isTrue();

View File

@ -9,13 +9,10 @@ import com.djrapitops.plan.api.exceptions.database.DBException;
import com.djrapitops.plan.system.database.databases.Database;
import com.djrapitops.plan.system.info.request.*;
import com.djrapitops.plan.system.info.server.Server;
import com.djrapitops.plan.system.info.server.ServerInfo;
import com.djrapitops.plan.system.webserver.WebServerSystem;
import com.djrapitops.plan.utilities.MiscUtils;
import com.djrapitops.plugin.api.TimeAmount;
import com.djrapitops.plugin.api.utility.log.Log;
import com.djrapitops.plugin.task.AbsRunnable;
import com.djrapitops.plugin.task.RunnableFactory;
import java.util.Optional;
import java.util.UUID;
@ -34,7 +31,7 @@ public class BungeeConnectionSystem extends ConnectionSystem {
}
private void refreshServerMap() {
if (latestServerMapRefresh < MiscUtils.getTime() - TimeAmount.MINUTE.ms() * 2L) {
if (latestServerMapRefresh < MiscUtils.getTime() - TimeAmount.SECOND.ms() * 15L) {
try {
bukkitServers = Database.getActive().fetch().getBukkitServers();
latestServerMapRefresh = MiscUtils.getTime();
@ -46,6 +43,7 @@ public class BungeeConnectionSystem extends ConnectionSystem {
@Override
protected Server selectServerForRequest(InfoRequest infoRequest) throws NoServersException {
refreshServerMap();
Server server = null;
if (infoRequest instanceof CacheRequest) {
throw new NoServersException("Bungee should not send Cache requests.");
@ -55,7 +53,7 @@ public class BungeeConnectionSystem extends ConnectionSystem {
} else if (infoRequest instanceof GenerateInspectPageRequest) {
Optional<UUID> serverUUID = getServerWherePlayerIsOnline((GenerateInspectPageRequest) infoRequest);
if (serverUUID.isPresent()) {
server = bukkitServers.getOrDefault(serverUUID.get(), ServerInfo.getServer());
server = bukkitServers.getOrDefault(serverUUID.get(), getOneBukkitServer());
}
}
if (server == null) {
@ -64,10 +62,16 @@ public class BungeeConnectionSystem extends ConnectionSystem {
return server;
}
private Server getOneBukkitServer() {
Optional<Server> first = bukkitServers.values().stream().findAny();
return first.orElse(null);
}
@Override
public void sendWideInfoRequest(WideRequest infoRequest) throws NoServersException {
refreshServerMap();
if (bukkitServers.isEmpty()) {
throw new NoServersException("No Servers Available to make process request.");
throw new NoServersException("No Servers available to make wide-request: " + infoRequest.getClass().getSimpleName());
}
for (Server server : bukkitServers.values()) {
WebExceptionLogger.logIfOccurs(this.getClass(), () -> sendInfoRequest(infoRequest, server));
@ -87,12 +91,6 @@ public class BungeeConnectionSystem extends ConnectionSystem {
@Override
public void enable() {
refreshServerMap();
RunnableFactory.createNew("Server List Update Task", new AbsRunnable() {
@Override
public void run() {
refreshServerMap();
}
}).runTaskTimerAsynchronously(TimeAmount.SECOND.ticks() * 30L, TimeAmount.MINUTE.ticks() * 5L);
}
@Override

View File

@ -7,7 +7,6 @@ package com.djrapitops.plan.system.info.connection;
import com.djrapitops.plan.system.info.request.InfoRequest;
import com.djrapitops.plan.system.info.server.Server;
import com.djrapitops.plan.utilities.MiscUtils;
import com.djrapitops.plugin.utilities.Verify;
import java.util.HashMap;
import java.util.Map;
@ -37,35 +36,6 @@ public class ConnectionLog {
log.put(toServer, requestMap);
}
public static boolean isConnectionPlausible(Server server) {
if (server == null) {
return false;
}
Map<String, Entry> serverLog = getInstance().getLog().get(server);
return Verify.isEmpty(serverLog) || hasConnectionSucceeded(serverLog);
}
public static boolean hasConnectionSucceeded(Server server) {
if (server == null) {
return false;
}
Map<String, Entry> serverLog = getInstance().getLog().get(server);
return !Verify.isEmpty(serverLog)
&& hasConnectionSucceeded(serverLog);
}
private static boolean hasConnectionSucceeded(Map<String, Entry> serverLog) {
for (Entry entry : serverLog.values()) {
if (entry.responseCode == 200) {
return true;
}
}
return false;
}
private static ConnectionLog getInstance() {
return ConnectionSystem.getInstance().getConnectionLog();
}

View File

@ -17,10 +17,7 @@ import com.djrapitops.plan.system.info.server.ServerInfo;
import com.djrapitops.plan.utilities.NullCheck;
import com.djrapitops.plugin.api.utility.log.Log;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import java.util.UUID;
import java.util.*;
/**
* ConnectionSystem manages out- and inbound InfoRequest connections.
@ -121,4 +118,8 @@ public abstract class ConnectionSystem implements SubSystem {
putRequest(requests, SendDBSettingsRequest.createHandler());
return requests;
}
public List<Server> getBukkitServers() {
return new ArrayList<>(bukkitServers.values());
}
}

View File

@ -87,10 +87,10 @@ public class ResponseHandler extends TreePageHandler {
}
try {
return getResponse(request, targetString, target);
} catch (NoServersException | NotFoundException e) {
return new NotFoundResponse(e.getMessage());
} catch (WebUserAuthException e) {
return PromptAuthorizationResponse.getBasicAuthResponse(e);
} catch (NotFoundException e) {
return new NotFoundResponse(e.getMessage());
} catch (ForbiddenException e) {
return new ForbiddenResponse(e.getMessage());
} catch (BadRequestException e) {

View File

@ -2,11 +2,14 @@ package com.djrapitops.plan.system.webserver.response.pages;
import com.djrapitops.plan.api.exceptions.connection.WebException;
import com.djrapitops.plan.system.info.InfoSystem;
import com.djrapitops.plan.system.info.server.ServerInfo;
import com.djrapitops.plan.system.processing.Processor;
import com.djrapitops.plan.system.webserver.response.Response;
import com.djrapitops.plan.system.webserver.response.errors.ErrorResponse;
import com.djrapitops.plugin.api.utility.log.Log;
import java.util.UUID;
/**
* @author Rsl1122
* @since 3.5.2
@ -14,9 +17,13 @@ import com.djrapitops.plugin.api.utility.log.Log;
public class AnalysisPageResponse extends Response {
public static AnalysisPageResponse refreshNow() {
return refreshNow(ServerInfo.getServerUUID());
}
public static AnalysisPageResponse refreshNow(UUID serverUUID) {
Processor.queue(() -> {
try {
InfoSystem.getInstance().generateAnalysisPageOfThisServer();
InfoSystem.getInstance().generateAnalysisPage(serverUUID);
} catch (WebException e) {
// TODO Exception handling
Log.toLog(AnalysisPageResponse.class, e);

View File

@ -8,6 +8,7 @@ import com.djrapitops.plan.PlanPlugin;
import com.djrapitops.plan.system.database.databases.Database;
import com.djrapitops.plan.system.database.databases.sql.SQLDB;
import com.djrapitops.plan.system.info.connection.ConnectionLog;
import com.djrapitops.plan.system.info.connection.ConnectionSystem;
import com.djrapitops.plan.system.info.server.Server;
import com.djrapitops.plan.system.info.server.ServerInfo;
import com.djrapitops.plan.system.info.server.ServerProperties;
@ -66,8 +67,8 @@ public class DebugPageResponse extends ErrorResponse {
try {
Map<Server, Map<String, ConnectionLog.Entry>> logEntries = ConnectionLog.getLogEntries();
content.append("<pre>");
content.append("Server Address | Request Type | Sent | Response<br>")
content.append("<pre>**Connection Log:**<br>");
content.append("Server Address | Request Type | Response | Sent<br>")
.append("-- | -- | -- | --<br>");
for (Map.Entry<Server, Map<String, ConnectionLog.Entry>> entry : logEntries.entrySet()) {
Server server = entry.getKey();
@ -85,6 +86,17 @@ public class DebugPageResponse extends ErrorResponse {
}
content.append("</pre>");
content.append("<pre>**Servers:**<br>");
List<Server> servers = ConnectionSystem.getInstance().getBukkitServers();
content.append("Server Name | Address | UUID <br>")
.append("-- | -- | --<br>");
for (Server server : servers) {
content.append(server.getName()).append(" | ")
.append(server.getWebAddress()).append(" | ")
.append(server.getUuid()).append(" | ").append("<br>");
}
content.append("</pre>");
} catch (Exception e) {
Log.toLog(this.getClass(), e);
}