mirror of
https://github.com/plan-player-analytics/Plan.git
synced 2024-12-30 21:17:49 +01:00
Simplified connection attempts
This commit is contained in:
parent
b3ac110dfe
commit
a55b17246a
@ -4,6 +4,7 @@
|
|||||||
*/
|
*/
|
||||||
package com.djrapitops.plan.system.info;
|
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.api.exceptions.connection.WebException;
|
||||||
import com.djrapitops.plan.system.info.connection.BukkitConnectionSystem;
|
import com.djrapitops.plan.system.info.connection.BukkitConnectionSystem;
|
||||||
import com.djrapitops.plan.system.info.request.CacheNetworkPageContentRequest;
|
import com.djrapitops.plan.system.info.request.CacheNetworkPageContentRequest;
|
||||||
@ -26,7 +27,7 @@ public class BukkitInfoSystem extends InfoSystem {
|
|||||||
@Override
|
@Override
|
||||||
public void runLocally(InfoRequest infoRequest) throws WebException {
|
public void runLocally(InfoRequest infoRequest) throws WebException {
|
||||||
if (infoRequest instanceof SetupRequest) {
|
if (infoRequest instanceof SetupRequest) {
|
||||||
return;
|
throw new NoServersException("Set-up requests can not be run locally.");
|
||||||
}
|
}
|
||||||
infoRequest.runLocally();
|
infoRequest.runLocally();
|
||||||
}
|
}
|
||||||
|
@ -30,7 +30,7 @@ public class BungeeInfoSystem extends InfoSystem {
|
|||||||
@Override
|
@Override
|
||||||
public void runLocally(InfoRequest infoRequest) throws WebException {
|
public void runLocally(InfoRequest infoRequest) throws WebException {
|
||||||
// runLocally is called when ConnectionSystem has no servers.
|
// 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
|
@Override
|
||||||
|
@ -66,10 +66,16 @@ public abstract class InfoSystem implements SubSystem {
|
|||||||
try {
|
try {
|
||||||
if (!connectionSystem.isServerAvailable()) {
|
if (!connectionSystem.isServerAvailable()) {
|
||||||
runLocally(infoRequest);
|
runLocally(infoRequest);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
connectionSystem.sendInfoRequest(infoRequest);
|
connectionSystem.sendInfoRequest(infoRequest);
|
||||||
} catch (NoServersException e) {
|
} catch (WebException original) {
|
||||||
|
try {
|
||||||
|
// Attempt to run locally.
|
||||||
runLocally(infoRequest);
|
runLocally(infoRequest);
|
||||||
|
} catch (NoServersException e2) {
|
||||||
|
throw original;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -17,8 +17,6 @@ import com.djrapitops.plan.system.webserver.WebServerSystem;
|
|||||||
import com.djrapitops.plan.utilities.MiscUtils;
|
import com.djrapitops.plan.utilities.MiscUtils;
|
||||||
import com.djrapitops.plugin.api.TimeAmount;
|
import com.djrapitops.plugin.api.TimeAmount;
|
||||||
import com.djrapitops.plugin.api.utility.log.Log;
|
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.Optional;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
@ -39,7 +37,7 @@ public class BukkitConnectionSystem extends ConnectionSystem {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void refreshServerMap() {
|
private void refreshServerMap() {
|
||||||
if (latestServerMapRefresh < MiscUtils.getTime() - TimeAmount.MINUTE.ms() * 2L) {
|
if (latestServerMapRefresh < MiscUtils.getTime() - TimeAmount.SECOND.ms() * 15L) {
|
||||||
try {
|
try {
|
||||||
Database database = Database.getActive();
|
Database database = Database.getActive();
|
||||||
Optional<Server> bungeeInformation = database.fetch().getBungeeInformation();
|
Optional<Server> bungeeInformation = database.fetch().getBungeeInformation();
|
||||||
@ -57,7 +55,7 @@ public class BukkitConnectionSystem extends ConnectionSystem {
|
|||||||
refreshServerMap();
|
refreshServerMap();
|
||||||
|
|
||||||
if (mainServer == null && bukkitServers.isEmpty()) {
|
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;
|
Server server = null;
|
||||||
@ -81,7 +79,7 @@ public class BukkitConnectionSystem extends ConnectionSystem {
|
|||||||
@Override
|
@Override
|
||||||
public void sendWideInfoRequest(WideRequest infoRequest) throws NoServersException {
|
public void sendWideInfoRequest(WideRequest infoRequest) throws NoServersException {
|
||||||
if (bukkitServers.isEmpty()) {
|
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()) {
|
for (Server server : bukkitServers.values()) {
|
||||||
WebExceptionLogger.logIfOccurs(this.getClass(), () -> sendInfoRequest(infoRequest, server));
|
WebExceptionLogger.logIfOccurs(this.getClass(), () -> sendInfoRequest(infoRequest, server));
|
||||||
@ -90,7 +88,7 @@ public class BukkitConnectionSystem extends ConnectionSystem {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isServerAvailable() {
|
public boolean isServerAvailable() {
|
||||||
return ConnectionLog.hasConnectionSucceeded(mainServer);
|
return mainServer != null && Settings.BUNGEE_OVERRIDE_STANDALONE_MODE.isFalse();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -102,12 +100,6 @@ public class BukkitConnectionSystem extends ConnectionSystem {
|
|||||||
@Override
|
@Override
|
||||||
public void enable() {
|
public void enable() {
|
||||||
refreshServerMap();
|
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 usingBungeeWebServer = ConnectionSystem.getInstance().isServerAvailable();
|
||||||
boolean usingAlternativeIP = Settings.SHOW_ALTERNATIVE_IP.isTrue();
|
boolean usingAlternativeIP = Settings.SHOW_ALTERNATIVE_IP.isTrue();
|
||||||
|
@ -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.database.databases.Database;
|
||||||
import com.djrapitops.plan.system.info.request.*;
|
import com.djrapitops.plan.system.info.request.*;
|
||||||
import com.djrapitops.plan.system.info.server.Server;
|
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.system.webserver.WebServerSystem;
|
||||||
import com.djrapitops.plan.utilities.MiscUtils;
|
import com.djrapitops.plan.utilities.MiscUtils;
|
||||||
import com.djrapitops.plugin.api.TimeAmount;
|
import com.djrapitops.plugin.api.TimeAmount;
|
||||||
import com.djrapitops.plugin.api.utility.log.Log;
|
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.Optional;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
@ -34,7 +31,7 @@ public class BungeeConnectionSystem extends ConnectionSystem {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void refreshServerMap() {
|
private void refreshServerMap() {
|
||||||
if (latestServerMapRefresh < MiscUtils.getTime() - TimeAmount.MINUTE.ms() * 2L) {
|
if (latestServerMapRefresh < MiscUtils.getTime() - TimeAmount.SECOND.ms() * 15L) {
|
||||||
try {
|
try {
|
||||||
bukkitServers = Database.getActive().fetch().getBukkitServers();
|
bukkitServers = Database.getActive().fetch().getBukkitServers();
|
||||||
latestServerMapRefresh = MiscUtils.getTime();
|
latestServerMapRefresh = MiscUtils.getTime();
|
||||||
@ -46,6 +43,7 @@ public class BungeeConnectionSystem extends ConnectionSystem {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Server selectServerForRequest(InfoRequest infoRequest) throws NoServersException {
|
protected Server selectServerForRequest(InfoRequest infoRequest) throws NoServersException {
|
||||||
|
refreshServerMap();
|
||||||
Server server = null;
|
Server server = null;
|
||||||
if (infoRequest instanceof CacheRequest) {
|
if (infoRequest instanceof CacheRequest) {
|
||||||
throw new NoServersException("Bungee should not send Cache requests.");
|
throw new NoServersException("Bungee should not send Cache requests.");
|
||||||
@ -55,7 +53,7 @@ public class BungeeConnectionSystem extends ConnectionSystem {
|
|||||||
} else if (infoRequest instanceof GenerateInspectPageRequest) {
|
} else if (infoRequest instanceof GenerateInspectPageRequest) {
|
||||||
Optional<UUID> serverUUID = getServerWherePlayerIsOnline((GenerateInspectPageRequest) infoRequest);
|
Optional<UUID> serverUUID = getServerWherePlayerIsOnline((GenerateInspectPageRequest) infoRequest);
|
||||||
if (serverUUID.isPresent()) {
|
if (serverUUID.isPresent()) {
|
||||||
server = bukkitServers.getOrDefault(serverUUID.get(), ServerInfo.getServer());
|
server = bukkitServers.getOrDefault(serverUUID.get(), getOneBukkitServer());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (server == null) {
|
if (server == null) {
|
||||||
@ -64,10 +62,16 @@ public class BungeeConnectionSystem extends ConnectionSystem {
|
|||||||
return server;
|
return server;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Server getOneBukkitServer() {
|
||||||
|
Optional<Server> first = bukkitServers.values().stream().findAny();
|
||||||
|
return first.orElse(null);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendWideInfoRequest(WideRequest infoRequest) throws NoServersException {
|
public void sendWideInfoRequest(WideRequest infoRequest) throws NoServersException {
|
||||||
|
refreshServerMap();
|
||||||
if (bukkitServers.isEmpty()) {
|
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()) {
|
for (Server server : bukkitServers.values()) {
|
||||||
WebExceptionLogger.logIfOccurs(this.getClass(), () -> sendInfoRequest(infoRequest, server));
|
WebExceptionLogger.logIfOccurs(this.getClass(), () -> sendInfoRequest(infoRequest, server));
|
||||||
@ -87,12 +91,6 @@ public class BungeeConnectionSystem extends ConnectionSystem {
|
|||||||
@Override
|
@Override
|
||||||
public void enable() {
|
public void enable() {
|
||||||
refreshServerMap();
|
refreshServerMap();
|
||||||
RunnableFactory.createNew("Server List Update Task", new AbsRunnable() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
refreshServerMap();
|
|
||||||
}
|
|
||||||
}).runTaskTimerAsynchronously(TimeAmount.SECOND.ticks() * 30L, TimeAmount.MINUTE.ticks() * 5L);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -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.request.InfoRequest;
|
||||||
import com.djrapitops.plan.system.info.server.Server;
|
import com.djrapitops.plan.system.info.server.Server;
|
||||||
import com.djrapitops.plan.utilities.MiscUtils;
|
import com.djrapitops.plan.utilities.MiscUtils;
|
||||||
import com.djrapitops.plugin.utilities.Verify;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -37,35 +36,6 @@ public class ConnectionLog {
|
|||||||
log.put(toServer, requestMap);
|
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() {
|
private static ConnectionLog getInstance() {
|
||||||
return ConnectionSystem.getInstance().getConnectionLog();
|
return ConnectionSystem.getInstance().getConnectionLog();
|
||||||
}
|
}
|
||||||
|
@ -17,10 +17,7 @@ import com.djrapitops.plan.system.info.server.ServerInfo;
|
|||||||
import com.djrapitops.plan.utilities.NullCheck;
|
import com.djrapitops.plan.utilities.NullCheck;
|
||||||
import com.djrapitops.plugin.api.utility.log.Log;
|
import com.djrapitops.plugin.api.utility.log.Log;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.*;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Optional;
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ConnectionSystem manages out- and inbound InfoRequest connections.
|
* ConnectionSystem manages out- and inbound InfoRequest connections.
|
||||||
@ -121,4 +118,8 @@ public abstract class ConnectionSystem implements SubSystem {
|
|||||||
putRequest(requests, SendDBSettingsRequest.createHandler());
|
putRequest(requests, SendDBSettingsRequest.createHandler());
|
||||||
return requests;
|
return requests;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<Server> getBukkitServers() {
|
||||||
|
return new ArrayList<>(bukkitServers.values());
|
||||||
|
}
|
||||||
}
|
}
|
@ -87,10 +87,10 @@ public class ResponseHandler extends TreePageHandler {
|
|||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
return getResponse(request, targetString, target);
|
return getResponse(request, targetString, target);
|
||||||
|
} catch (NoServersException | NotFoundException e) {
|
||||||
|
return new NotFoundResponse(e.getMessage());
|
||||||
} catch (WebUserAuthException e) {
|
} catch (WebUserAuthException e) {
|
||||||
return PromptAuthorizationResponse.getBasicAuthResponse(e);
|
return PromptAuthorizationResponse.getBasicAuthResponse(e);
|
||||||
} catch (NotFoundException e) {
|
|
||||||
return new NotFoundResponse(e.getMessage());
|
|
||||||
} catch (ForbiddenException e) {
|
} catch (ForbiddenException e) {
|
||||||
return new ForbiddenResponse(e.getMessage());
|
return new ForbiddenResponse(e.getMessage());
|
||||||
} catch (BadRequestException e) {
|
} catch (BadRequestException e) {
|
||||||
|
@ -2,11 +2,14 @@ package com.djrapitops.plan.system.webserver.response.pages;
|
|||||||
|
|
||||||
import com.djrapitops.plan.api.exceptions.connection.WebException;
|
import com.djrapitops.plan.api.exceptions.connection.WebException;
|
||||||
import com.djrapitops.plan.system.info.InfoSystem;
|
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.processing.Processor;
|
||||||
import com.djrapitops.plan.system.webserver.response.Response;
|
import com.djrapitops.plan.system.webserver.response.Response;
|
||||||
import com.djrapitops.plan.system.webserver.response.errors.ErrorResponse;
|
import com.djrapitops.plan.system.webserver.response.errors.ErrorResponse;
|
||||||
import com.djrapitops.plugin.api.utility.log.Log;
|
import com.djrapitops.plugin.api.utility.log.Log;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Rsl1122
|
* @author Rsl1122
|
||||||
* @since 3.5.2
|
* @since 3.5.2
|
||||||
@ -14,9 +17,13 @@ import com.djrapitops.plugin.api.utility.log.Log;
|
|||||||
public class AnalysisPageResponse extends Response {
|
public class AnalysisPageResponse extends Response {
|
||||||
|
|
||||||
public static AnalysisPageResponse refreshNow() {
|
public static AnalysisPageResponse refreshNow() {
|
||||||
|
return refreshNow(ServerInfo.getServerUUID());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static AnalysisPageResponse refreshNow(UUID serverUUID) {
|
||||||
Processor.queue(() -> {
|
Processor.queue(() -> {
|
||||||
try {
|
try {
|
||||||
InfoSystem.getInstance().generateAnalysisPageOfThisServer();
|
InfoSystem.getInstance().generateAnalysisPage(serverUUID);
|
||||||
} catch (WebException e) {
|
} catch (WebException e) {
|
||||||
// TODO Exception handling
|
// TODO Exception handling
|
||||||
Log.toLog(AnalysisPageResponse.class, e);
|
Log.toLog(AnalysisPageResponse.class, e);
|
||||||
|
@ -8,6 +8,7 @@ import com.djrapitops.plan.PlanPlugin;
|
|||||||
import com.djrapitops.plan.system.database.databases.Database;
|
import com.djrapitops.plan.system.database.databases.Database;
|
||||||
import com.djrapitops.plan.system.database.databases.sql.SQLDB;
|
import com.djrapitops.plan.system.database.databases.sql.SQLDB;
|
||||||
import com.djrapitops.plan.system.info.connection.ConnectionLog;
|
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.Server;
|
||||||
import com.djrapitops.plan.system.info.server.ServerInfo;
|
import com.djrapitops.plan.system.info.server.ServerInfo;
|
||||||
import com.djrapitops.plan.system.info.server.ServerProperties;
|
import com.djrapitops.plan.system.info.server.ServerProperties;
|
||||||
@ -66,8 +67,8 @@ public class DebugPageResponse extends ErrorResponse {
|
|||||||
try {
|
try {
|
||||||
Map<Server, Map<String, ConnectionLog.Entry>> logEntries = ConnectionLog.getLogEntries();
|
Map<Server, Map<String, ConnectionLog.Entry>> logEntries = ConnectionLog.getLogEntries();
|
||||||
|
|
||||||
content.append("<pre>");
|
content.append("<pre>**Connection Log:**<br>");
|
||||||
content.append("Server Address | Request Type | Sent | Response<br>")
|
content.append("Server Address | Request Type | Response | Sent<br>")
|
||||||
.append("-- | -- | -- | --<br>");
|
.append("-- | -- | -- | --<br>");
|
||||||
for (Map.Entry<Server, Map<String, ConnectionLog.Entry>> entry : logEntries.entrySet()) {
|
for (Map.Entry<Server, Map<String, ConnectionLog.Entry>> entry : logEntries.entrySet()) {
|
||||||
Server server = entry.getKey();
|
Server server = entry.getKey();
|
||||||
@ -85,6 +86,17 @@ public class DebugPageResponse extends ErrorResponse {
|
|||||||
}
|
}
|
||||||
content.append("</pre>");
|
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) {
|
} catch (Exception e) {
|
||||||
Log.toLog(this.getClass(), e);
|
Log.toLog(this.getClass(), e);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user