added GuiServiceInfo
This commit is contained in:
parent
343643b331
commit
2bea1f25c6
7 changed files with 118 additions and 28 deletions
|
@ -22,13 +22,16 @@ public class GuiInit implements ApplicationListener<ApplicationReadyEvent> {
|
||||||
|
|
||||||
private final SEBServerInit sebServerInit;
|
private final SEBServerInit sebServerInit;
|
||||||
private final Environment environment;
|
private final Environment environment;
|
||||||
|
private final GuiServiceInfo guiServiceInfo;
|
||||||
|
|
||||||
protected GuiInit(
|
protected GuiInit(
|
||||||
final SEBServerInit sebServerInit,
|
final SEBServerInit sebServerInit,
|
||||||
final Environment environment) {
|
final Environment environment,
|
||||||
|
final GuiServiceInfo guiServiceInfo) {
|
||||||
|
|
||||||
this.sebServerInit = sebServerInit;
|
this.sebServerInit = sebServerInit;
|
||||||
this.environment = environment;
|
this.environment = environment;
|
||||||
|
this.guiServiceInfo = guiServiceInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -47,8 +50,18 @@ public class GuiInit implements ApplicationListener<ApplicationReadyEvent> {
|
||||||
final String webServiceAddress = this.environment.getRequiredProperty("sebserver.gui.webservice.address");
|
final String webServiceAddress = this.environment.getRequiredProperty("sebserver.gui.webservice.address");
|
||||||
final String webServicePort = this.environment.getProperty("sebserver.gui.webservice.port", "80");
|
final String webServicePort = this.environment.getProperty("sebserver.gui.webservice.port", "80");
|
||||||
|
|
||||||
SEBServerInit.INIT_LOGGER.info("----> Webservice connection: " + webServiceProtocol + "://" + webServiceAddress
|
SEBServerInit.INIT_LOGGER
|
||||||
+ ":" + webServicePort);
|
.info("----> Webservice connection: " + webServiceProtocol + "://" + webServiceAddress
|
||||||
|
+ ":" + webServicePort);
|
||||||
|
SEBServerInit.INIT_LOGGER.info(
|
||||||
|
"----> GUI service internal connection : "
|
||||||
|
+ this.guiServiceInfo.getInternalServerURIBuilder().toUriString());
|
||||||
|
SEBServerInit.INIT_LOGGER.info(
|
||||||
|
"----> GUI service external connection : "
|
||||||
|
+ this.guiServiceInfo.getExternalServerURIBuilder().toUriString());
|
||||||
|
SEBServerInit.INIT_LOGGER.info(
|
||||||
|
"----> GUI service endpoint : "
|
||||||
|
+ this.guiServiceInfo.getEntryPoint());
|
||||||
|
|
||||||
final String webServiceAdminAPIEndpoint =
|
final String webServiceAdminAPIEndpoint =
|
||||||
this.environment.getRequiredProperty("sebserver.gui.webservice.apipath");
|
this.environment.getRequiredProperty("sebserver.gui.webservice.apipath");
|
||||||
|
|
85
src/main/java/ch/ethz/seb/sebserver/gui/GuiServiceInfo.java
Normal file
85
src/main/java/ch/ethz/seb/sebserver/gui/GuiServiceInfo.java
Normal file
|
@ -0,0 +1,85 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2020 ETH Zürich, Educational Development and Technology (LET)
|
||||||
|
*
|
||||||
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package ch.ethz.seb.sebserver.gui;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.web.util.UriComponentsBuilder;
|
||||||
|
|
||||||
|
import ch.ethz.seb.sebserver.gbl.profile.GuiProfile;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
@GuiProfile
|
||||||
|
public class GuiServiceInfo {
|
||||||
|
|
||||||
|
private final String externalScheme;
|
||||||
|
private final String internalServer;
|
||||||
|
private final String externalServer;
|
||||||
|
private final String internalPort;
|
||||||
|
private final String externalPort;
|
||||||
|
private final String entryPoint;
|
||||||
|
private final UriComponentsBuilder internalServerURIBuilder;
|
||||||
|
private final UriComponentsBuilder externalServerURIBuilder;
|
||||||
|
|
||||||
|
public GuiServiceInfo(
|
||||||
|
@Value("${sebserver.gui.http.external.scheme:https}") final String externalScheme,
|
||||||
|
@Value("${server.address}") final String internalServer,
|
||||||
|
@Value("${sebserver.gui.http.external.servername}") final String externalServer,
|
||||||
|
@Value("${server.port}") final String internalPort,
|
||||||
|
@Value("${sebserver.webservice.http.external.port}") final String externalPort,
|
||||||
|
@Value("${sebserver.gui.entrypoint:/gui}") final String entryPoint) {
|
||||||
|
|
||||||
|
this.externalScheme = externalScheme;
|
||||||
|
this.internalServer = internalServer;
|
||||||
|
this.externalServer = StringUtils.isNotBlank(externalServer) ? externalServer : internalServer;
|
||||||
|
this.internalPort = internalPort;
|
||||||
|
this.externalPort = externalPort;
|
||||||
|
this.entryPoint = entryPoint;
|
||||||
|
this.internalServerURIBuilder = UriComponentsBuilder
|
||||||
|
.fromHttpUrl("http://" + this.internalServer)
|
||||||
|
.port(this.internalPort);
|
||||||
|
this.externalServerURIBuilder = UriComponentsBuilder
|
||||||
|
.fromHttpUrl(this.externalScheme + "://" + this.externalServer)
|
||||||
|
.port(this.externalPort);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getExternalScheme() {
|
||||||
|
return this.externalScheme;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getInternalServer() {
|
||||||
|
return this.internalServer;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getExternalServer() {
|
||||||
|
return this.externalServer;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getInternalPort() {
|
||||||
|
return this.internalPort;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getExternalPort() {
|
||||||
|
return this.externalPort;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getEntryPoint() {
|
||||||
|
return this.entryPoint;
|
||||||
|
}
|
||||||
|
|
||||||
|
public UriComponentsBuilder getInternalServerURIBuilder() {
|
||||||
|
return this.internalServerURIBuilder.cloneBuilder();
|
||||||
|
}
|
||||||
|
|
||||||
|
public UriComponentsBuilder getExternalServerURIBuilder() {
|
||||||
|
return this.externalServerURIBuilder.cloneBuilder();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -35,6 +35,7 @@ import ch.ethz.seb.sebserver.gbl.model.session.ExtendedClientEvent;
|
||||||
import ch.ethz.seb.sebserver.gbl.model.user.UserRole;
|
import ch.ethz.seb.sebserver.gbl.model.user.UserRole;
|
||||||
import ch.ethz.seb.sebserver.gbl.profile.GuiProfile;
|
import ch.ethz.seb.sebserver.gbl.profile.GuiProfile;
|
||||||
import ch.ethz.seb.sebserver.gbl.util.Utils;
|
import ch.ethz.seb.sebserver.gbl.util.Utils;
|
||||||
|
import ch.ethz.seb.sebserver.gui.GuiServiceInfo;
|
||||||
import ch.ethz.seb.sebserver.gui.ProctoringServlet;
|
import ch.ethz.seb.sebserver.gui.ProctoringServlet;
|
||||||
import ch.ethz.seb.sebserver.gui.content.action.ActionDefinition;
|
import ch.ethz.seb.sebserver.gui.content.action.ActionDefinition;
|
||||||
import ch.ethz.seb.sebserver.gui.service.ResourceService;
|
import ch.ethz.seb.sebserver.gui.service.ResourceService;
|
||||||
|
@ -95,6 +96,7 @@ public class MonitoringClientConnection implements TemplateComposer {
|
||||||
private final I18nSupport i18nSupport;
|
private final I18nSupport i18nSupport;
|
||||||
private final InstructionProcessor instructionProcessor;
|
private final InstructionProcessor instructionProcessor;
|
||||||
private final SEBClientEventDetailsPopup sebClientLogDetailsPopup;
|
private final SEBClientEventDetailsPopup sebClientLogDetailsPopup;
|
||||||
|
private final GuiServiceInfo guiServiceInfo;
|
||||||
private final long pollInterval;
|
private final long pollInterval;
|
||||||
private final int pageSize;
|
private final int pageSize;
|
||||||
|
|
||||||
|
@ -107,6 +109,7 @@ public class MonitoringClientConnection implements TemplateComposer {
|
||||||
final PageService pageService,
|
final PageService pageService,
|
||||||
final InstructionProcessor instructionProcessor,
|
final InstructionProcessor instructionProcessor,
|
||||||
final SEBClientEventDetailsPopup sebClientLogDetailsPopup,
|
final SEBClientEventDetailsPopup sebClientLogDetailsPopup,
|
||||||
|
final GuiServiceInfo guiServiceInfo,
|
||||||
@Value("${sebserver.gui.webservice.poll-interval:500}") final long pollInterval,
|
@Value("${sebserver.gui.webservice.poll-interval:500}") final long pollInterval,
|
||||||
@Value("${sebserver.gui.list.page.size:20}") final Integer pageSize) {
|
@Value("${sebserver.gui.list.page.size:20}") final Integer pageSize) {
|
||||||
|
|
||||||
|
@ -115,6 +118,7 @@ public class MonitoringClientConnection implements TemplateComposer {
|
||||||
this.resourceService = pageService.getResourceService();
|
this.resourceService = pageService.getResourceService();
|
||||||
this.i18nSupport = this.resourceService.getI18nSupport();
|
this.i18nSupport = this.resourceService.getI18nSupport();
|
||||||
this.instructionProcessor = instructionProcessor;
|
this.instructionProcessor = instructionProcessor;
|
||||||
|
this.guiServiceInfo = guiServiceInfo;
|
||||||
this.pollInterval = pollInterval;
|
this.pollInterval = pollInterval;
|
||||||
this.sebClientLogDetailsPopup = sebClientLogDetailsPopup;
|
this.sebClientLogDetailsPopup = sebClientLogDetailsPopup;
|
||||||
this.pageSize = pageSize;
|
this.pageSize = pageSize;
|
||||||
|
@ -305,12 +309,12 @@ public class MonitoringClientConnection implements TemplateComposer {
|
||||||
ProctoringServlet.SESSION_ATTR_PROCTORING_DATA,
|
ProctoringServlet.SESSION_ATTR_PROCTORING_DATA,
|
||||||
proctoringConnectionData);
|
proctoringConnectionData);
|
||||||
|
|
||||||
final String webserviceServerAddress = this.pageService.getAuthorizationContextHolder()
|
|
||||||
.getWebserviceURIService()
|
|
||||||
.getExternalServerURL();
|
|
||||||
|
|
||||||
final JavaScriptExecutor javaScriptExecutor = RWT.getClient().getService(JavaScriptExecutor.class);
|
final JavaScriptExecutor javaScriptExecutor = RWT.getClient().getService(JavaScriptExecutor.class);
|
||||||
final String script = String.format(OPEN_SINGEL_ROOM_SCRIPT, roomName, webserviceServerAddress, roomName);
|
final String script = String.format(
|
||||||
|
OPEN_SINGEL_ROOM_SCRIPT,
|
||||||
|
roomName,
|
||||||
|
this.guiServiceInfo.getExternalServerURIBuilder().toUriString(),
|
||||||
|
roomName);
|
||||||
javaScriptExecutor.execute(script);
|
javaScriptExecutor.execute(script);
|
||||||
return action;
|
return action;
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,7 +14,6 @@ import org.springframework.web.util.UriComponentsBuilder;
|
||||||
|
|
||||||
import ch.ethz.seb.sebserver.gbl.api.API;
|
import ch.ethz.seb.sebserver.gbl.api.API;
|
||||||
import ch.ethz.seb.sebserver.gbl.profile.GuiProfile;
|
import ch.ethz.seb.sebserver.gbl.profile.GuiProfile;
|
||||||
import io.micrometer.core.instrument.util.StringUtils;
|
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
|
@ -23,15 +22,13 @@ public class WebserviceURIService {
|
||||||
private final String servletContextPath;
|
private final String servletContextPath;
|
||||||
private final String webserviceServerAddress;
|
private final String webserviceServerAddress;
|
||||||
private final UriComponentsBuilder webserviceURIBuilder;
|
private final UriComponentsBuilder webserviceURIBuilder;
|
||||||
private final UriComponentsBuilder externaGUIURIBuilder;
|
|
||||||
|
|
||||||
public WebserviceURIService(
|
public WebserviceURIService(
|
||||||
@Value("${sebserver.gui.webservice.protocol}") final String webserviceProtocol,
|
@Value("${sebserver.gui.webservice.protocol}") final String webserviceProtocol,
|
||||||
@Value("${sebserver.gui.webservice.address}") final String webserviceServerAddress,
|
@Value("${sebserver.gui.webservice.address}") final String webserviceServerAddress,
|
||||||
@Value("${sebserver.gui.webservice.port}") final String webserviceServerPort,
|
@Value("${sebserver.gui.webservice.port}") final String webserviceServerPort,
|
||||||
@Value("${server.servlet.context-path}") final String servletContextPath,
|
@Value("${server.servlet.context-path}") final String servletContextPath,
|
||||||
@Value("${sebserver.gui.webservice.apipath}") final String webserviceAPIPath,
|
@Value("${sebserver.gui.webservice.apipath}") final String webserviceAPIPath) {
|
||||||
@Value("${sebserver.gui.webservice.address.external}") final String externalServerName) {
|
|
||||||
|
|
||||||
this.servletContextPath = servletContextPath;
|
this.servletContextPath = servletContextPath;
|
||||||
this.webserviceServerAddress =
|
this.webserviceServerAddress =
|
||||||
|
@ -41,19 +38,6 @@ public class WebserviceURIService {
|
||||||
.port(webserviceServerPort)
|
.port(webserviceServerPort)
|
||||||
.path(servletContextPath)
|
.path(servletContextPath)
|
||||||
.path(webserviceAPIPath);
|
.path(webserviceAPIPath);
|
||||||
if (StringUtils.isNotBlank(externalServerName)) {
|
|
||||||
this.externaGUIURIBuilder = UriComponentsBuilder
|
|
||||||
.fromHttpUrl(webserviceProtocol + "://" + externalServerName)
|
|
||||||
.port(webserviceServerPort);
|
|
||||||
} else {
|
|
||||||
this.externaGUIURIBuilder = UriComponentsBuilder
|
|
||||||
.fromHttpUrl(webserviceProtocol + "://" + webserviceServerAddress)
|
|
||||||
.port(webserviceServerPort);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getExternalServerURL() {
|
|
||||||
return this.externaGUIURIBuilder.toUriString();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getWebserviceServerAddress() {
|
public String getWebserviceServerAddress() {
|
||||||
|
|
|
@ -13,10 +13,12 @@ sebserver.gui.supported.languages=en
|
||||||
sebserver.gui.date.displayformat=de
|
sebserver.gui.date.displayformat=de
|
||||||
|
|
||||||
# GUI API
|
# GUI API
|
||||||
|
sebserver.gui.http.external.scheme=https
|
||||||
|
sebserver.gui.http.external.servername=
|
||||||
|
sebserver.webservice.http.external.port=
|
||||||
sebserver.gui.entrypoint=/gui
|
sebserver.gui.entrypoint=/gui
|
||||||
sebserver.gui.webservice.protocol=http
|
sebserver.gui.webservice.protocol=http
|
||||||
sebserver.gui.webservice.address=localhost
|
sebserver.gui.webservice.address=localhost
|
||||||
sebserver.gui.webservice.address.external=${sebserver.webservice.http.external.servername}
|
|
||||||
sebserver.gui.webservice.port=8080
|
sebserver.gui.webservice.port=8080
|
||||||
sebserver.gui.webservice.apipath=${sebserver.webservice.api.admin.endpoint}
|
sebserver.gui.webservice.apipath=${sebserver.webservice.api.admin.endpoint}
|
||||||
# defines the polling interval that is used to poll the webservice for client connection data on a monitored exam page
|
# defines the polling interval that is used to poll the webservice for client connection data on a monitored exam page
|
||||||
|
|
|
@ -19,8 +19,10 @@
|
||||||
|
|
||||||
<root level="DEBUG" additivity="true">
|
<root level="DEBUG" additivity="true">
|
||||||
<appender-ref ref="STDOUT" />
|
<appender-ref ref="STDOUT" />
|
||||||
<appender-ref ref="FILE" />
|
|
||||||
</root>
|
</root>
|
||||||
|
<Logger name="ch.ethz.seb.SEB_SERVER_INIT" level="INFO" additivity="false">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</Logger>
|
||||||
|
|
||||||
</springProfile>
|
</springProfile>
|
||||||
|
|
||||||
|
|
|
@ -71,7 +71,7 @@ public abstract class GuiIntegrationTest {
|
||||||
|
|
||||||
final HttpSession sessionMock = Mockito.mock(HttpSession.class);
|
final HttpSession sessionMock = Mockito.mock(HttpSession.class);
|
||||||
final WebserviceURIService webserviceURIService = new WebserviceURIService(
|
final WebserviceURIService webserviceURIService = new WebserviceURIService(
|
||||||
"http", "localhost", "8080", "/", this.endpoint, "localhost");
|
"http", "localhost", "8080", "/", this.endpoint);
|
||||||
|
|
||||||
final ClientHttpRequestFactoryService clientHttpRequestFactoryService = Mockito
|
final ClientHttpRequestFactoryService clientHttpRequestFactoryService = Mockito
|
||||||
.mock(ClientHttpRequestFactoryService.class);
|
.mock(ClientHttpRequestFactoryService.class);
|
||||||
|
|
Loading…
Add table
Reference in a new issue