diff --git a/Plan/common/src/main/java/com/djrapitops/plan/system/info/request/GenerateAnalysisPageRequest.java b/Plan/common/src/main/java/com/djrapitops/plan/system/info/request/GenerateAnalysisPageRequest.java index 423bbb771..1e3b1637d 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/system/info/request/GenerateAnalysisPageRequest.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/system/info/request/GenerateAnalysisPageRequest.java @@ -20,7 +20,9 @@ import com.djrapitops.plan.api.exceptions.connection.BadRequestException; import com.djrapitops.plan.api.exceptions.connection.InternalErrorException; import com.djrapitops.plan.api.exceptions.connection.WebException; import com.djrapitops.plan.system.info.InfoSystem; +import com.djrapitops.plan.system.info.connection.WebExceptionLogger; import com.djrapitops.plan.system.info.server.ServerInfo; +import com.djrapitops.plan.system.processing.Processing; import com.djrapitops.plan.system.webserver.response.DefaultResponses; import com.djrapitops.plan.system.webserver.response.Response; import com.djrapitops.plan.utilities.html.pages.PageFactory; @@ -29,6 +31,7 @@ import com.djrapitops.plugin.utilities.Verify; import java.util.Collections; import java.util.Map; import java.util.UUID; +import java.util.concurrent.atomic.AtomicBoolean; /** * InfoRequest to generate Analysis page HTML at the receiving end. @@ -37,20 +40,26 @@ import java.util.UUID; */ public class GenerateAnalysisPageRequest extends InfoRequestWithVariables implements GenerateRequest { + private final Processing processing; + private final WebExceptionLogger webExceptionLogger; private final InfoRequestFactory infoRequestFactory; private final ServerInfo serverInfo; private final InfoSystem infoSystem; private final PageFactory pageFactory; - private boolean runningAnalysis = false; + private AtomicBoolean runningAnalysis = new AtomicBoolean(false); private UUID serverUUID; GenerateAnalysisPageRequest( + Processing processing, + WebExceptionLogger webExceptionLogger, InfoRequestFactory infoRequestFactory, ServerInfo serverInfo, InfoSystem infoSystem, PageFactory pageFactory ) { + this.processing = processing; + this.webExceptionLogger = webExceptionLogger; this.infoRequestFactory = infoRequestFactory; this.serverInfo = serverInfo; this.infoSystem = infoSystem; @@ -59,11 +68,15 @@ public class GenerateAnalysisPageRequest extends InfoRequestWithVariables implem GenerateAnalysisPageRequest( UUID serverUUID, + Processing processing, + WebExceptionLogger webExceptionLogger, InfoRequestFactory infoRequestFactory, ServerInfo serverInfo, InfoSystem infoSystem, PageFactory pageFactory ) { + this.processing = processing; + this.webExceptionLogger = webExceptionLogger; this.infoRequestFactory = infoRequestFactory; this.serverInfo = serverInfo; this.infoSystem = infoSystem; @@ -86,8 +99,11 @@ public class GenerateAnalysisPageRequest extends InfoRequestWithVariables implem throw new BadRequestException("Requested Analysis page from wrong server."); } - if (!runningAnalysis) { - generateAndCache(serverUUID); + if (!runningAnalysis.get()) { + runningAnalysis.set(true); + processing.submitNonCritical(() -> + webExceptionLogger.logIfOccurs(GenerateAnalysisPageRequest.class, () -> generateAndCache(serverUUID)) + ); } return DefaultResponses.SUCCESS.get(); @@ -108,13 +124,12 @@ public class GenerateAnalysisPageRequest extends InfoRequestWithVariables implem private String analyseAndGetHtml() throws InternalErrorException { try { - runningAnalysis = true; UUID serverUUID = serverInfo.getServerUUID(); return pageFactory.analysisPage(serverUUID).toHtml(); } catch (Exception e) { throw new InternalErrorException("Analysis failed due to exception", e); } finally { - runningAnalysis = false; + runningAnalysis.set(false); } } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/system/info/request/InfoRequestFactory.java b/Plan/common/src/main/java/com/djrapitops/plan/system/info/request/InfoRequestFactory.java index 143924a3d..339042ccb 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/system/info/request/InfoRequestFactory.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/system/info/request/InfoRequestFactory.java @@ -21,6 +21,7 @@ import com.djrapitops.plan.system.export.HtmlExport; import com.djrapitops.plan.system.export.JSONExport; import com.djrapitops.plan.system.info.InfoSystem; import com.djrapitops.plan.system.info.connection.ConnectionSystem; +import com.djrapitops.plan.system.info.connection.WebExceptionLogger; import com.djrapitops.plan.system.info.server.ServerInfo; import com.djrapitops.plan.system.processing.Processing; import com.djrapitops.plan.system.settings.config.PlanConfig; @@ -47,6 +48,7 @@ public class InfoRequestFactory { private final Lazy processing; private final Lazy infoSystem; private final Lazy connectionSystem; + private final Lazy webExceptionLogger; private final Lazy serverInfo; private final Lazy responseFactory; private final Lazy pageFactory; @@ -62,6 +64,7 @@ public class InfoRequestFactory { Lazy processing, Lazy infoSystem, Lazy connectionSystem, + Lazy webExceptionLogger, Lazy serverInfo, Lazy responseFactory, Lazy pageFactory, @@ -75,6 +78,7 @@ public class InfoRequestFactory { this.processing = processing; this.infoSystem = infoSystem; this.connectionSystem = connectionSystem; + this.webExceptionLogger = webExceptionLogger; this.serverInfo = serverInfo; this.responseFactory = responseFactory; this.pageFactory = pageFactory; @@ -107,7 +111,7 @@ public class InfoRequestFactory { } public GenerateRequest generateAnalysisPageRequest(UUID serverUUID) { - return new GenerateAnalysisPageRequest(serverUUID, this, serverInfo.get(), infoSystem.get(), pageFactory.get()); + return new GenerateAnalysisPageRequest(serverUUID, processing.get(), webExceptionLogger.get(), this, serverInfo.get(), infoSystem.get(), pageFactory.get()); } public GenerateRequest generateInspectPageRequest(UUID uuid) { @@ -170,6 +174,8 @@ public class InfoRequestFactory { GenerateRequest generateAnalysisPageRequest() { return new GenerateAnalysisPageRequest( + factory.processing.get(), + factory.webExceptionLogger.get(), factory, factory.serverInfo.get(), factory.infoSystem.get(),