summaryrefslogtreecommitdiffstats
path: root/dozentenmodulserver
diff options
context:
space:
mode:
authorManuel Bentele2021-05-19 09:34:09 +0200
committerManuel Bentele2021-05-19 09:34:09 +0200
commitadf39b1279e5ed2d81ddf92df780c5b893dbbba1 (patch)
tree9d729e1441ffab0d91ebae2424b2a6aa69120dd6 /dozentenmodulserver
parent[build] Remove needless build settings in Maven's root configuration (diff)
parent[client] Remove start command pane on QEMU VM upload page (diff)
downloadtutor-module-adf39b1279e5ed2d81ddf92df780c5b893dbbba1.tar.gz
tutor-module-adf39b1279e5ed2d81ddf92df780c5b893dbbba1.tar.xz
tutor-module-adf39b1279e5ed2d81ddf92df780c5b893dbbba1.zip
Merge branch 'refactor/vm-config-transformation-logic'
Diffstat (limited to 'dozentenmodulserver')
-rw-r--r--dozentenmodulserver/pom.xml8
-rw-r--r--dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/App.java19
-rw-r--r--dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbLecture.java55
-rw-r--r--dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/web/WebServer.java2
-rw-r--r--dozentenmodulserver/src/main/properties/log4j.properties9
5 files changed, 57 insertions, 36 deletions
diff --git a/dozentenmodulserver/pom.xml b/dozentenmodulserver/pom.xml
index 2cfe9db3..6c22666f 100644
--- a/dozentenmodulserver/pom.xml
+++ b/dozentenmodulserver/pom.xml
@@ -149,6 +149,14 @@
</configuration>
</plugin>
</plugins>
+ <resources>
+ <resource>
+ <directory>src/main/properties</directory>
+ <includes>
+ <include>*.properties</include>
+ </includes>
+ </resource>
+ </resources>
</build>
<dependencies>
diff --git a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/App.java b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/App.java
index da9cfe68..2023d6b8 100644
--- a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/App.java
+++ b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/App.java
@@ -10,9 +10,8 @@ import java.util.Set;
import javax.net.ssl.SSLContext;
import org.apache.log4j.BasicConfigurator;
-import org.apache.log4j.ConsoleAppender;
+import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
-import org.apache.log4j.PatternLayout;
import org.apache.thrift.TException;
import org.apache.thrift.transport.TTransportException;
import org.openslx.bwlp.sat.database.Updater;
@@ -41,20 +40,16 @@ public class App {
private static Logger LOGGER = Logger.getLogger(App.class);
- public static boolean DEBUG = false;
-
private static final Set<String> failFastMethods = new HashSet<>();
public static void main(String[] args) throws TTransportException, NoSuchAlgorithmException, IOException,
- KeyManagementException {
- // get going and show basic information in log file
- // don't add date/time to log output - will be done by syslog
- ConsoleAppender appender = new ConsoleAppender(new PatternLayout("%-5p [%t] %C{1} - %m%n"));
- appender.setEncoding("UTF-8");
- BasicConfigurator.configure(appender);
- if (args.length != 0 && args[0].equals("debug")) {
- DEBUG = true;
+ KeyManagementException
+ {
+ // setup basic logging appender to log output on console if no external appender (log4j.properties) is configured
+ if (LogManager.getRootLogger().getAllAppenders() == null) {
+ BasicConfigurator.configure();
}
+
LOGGER.info("****************************************************************");
LOGGER.info("******************* Starting Application ***********************");
LOGGER.info("****************************************************************");
diff --git a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbLecture.java b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbLecture.java
index fb69feac..4b327ac9 100644
--- a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbLecture.java
+++ b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbLecture.java
@@ -30,8 +30,10 @@ import org.openslx.bwlp.thrift.iface.TNotFoundException;
import org.openslx.bwlp.thrift.iface.UserInfo;
import org.openslx.util.Json;
import org.openslx.util.Util;
-import org.openslx.vm.VmMetaData;
-import org.openslx.vm.VmMetaData.UsbSpeed;
+import org.openslx.virtualization.configuration.VirtualizationConfiguration;
+import org.openslx.virtualization.configuration.data.ConfigurationDataDozModServerToStatelessClient;
+import org.openslx.virtualization.configuration.logic.ConfigurationLogicDozModServerToStatelessClient;
+import org.openslx.virtualization.configuration.transformation.TransformationException;
import com.google.gson.JsonParseException;
@@ -555,10 +557,7 @@ public class DbLecture {
TNotFoundException {
LaunchData retval = new LaunchData();
byte[] config;
- String lectureName;
- String osKeyword;
- boolean usbAccess;
- VmMetaData<?, ?, ?, ?, ?> meta = null;
+
try (MysqlConnection connection = Database.getConnection()) {
// Get required data about lecture and used image
MysqlStatement stmt = connection.prepareStatement("SELECT"
@@ -575,23 +574,42 @@ public class DbLecture {
|| rs.getLong("endtime") < now) {
throw new TNotFoundException();
}
+
config = rs.getBytes("virtualizerconfig");
if (config == null) {
return null;
}
+
+ final String lectureName = rs.getString("lecturename");
+ final String osKeyword = rs.getString("virtoskeyword");
+ final boolean usbAccess = rs.getBoolean("hasusbaccess");
+
+ // prepare virtualization configuration as part of the launch data
+ VirtualizationConfiguration<?, ?, ?, ?> virtualizationConfig = null;
try {
- meta = VmMetaData.getInstance(OperatingSystemList.get(), config, config.length);
+ virtualizationConfig = VirtualizationConfiguration.getInstance(OperatingSystemList.get(), config, config.length);
} catch (Exception e) {
- LOGGER.error("meta could not be initialized", e);
+ LOGGER.error("Virtualization configuration could not be initialized", e);
return null;
}
- lectureName = rs.getString("lecturename");
- osKeyword = rs.getString("virtoskeyword");
- usbAccess = rs.getBoolean("hasusbaccess");
- retval.vmx = meta;
+
+ // modify virtualization configuration
+ String configuration = null;
+ try {
+ final ConfigurationLogicDozModServerToStatelessClient downloadLogic = new ConfigurationLogicDozModServerToStatelessClient();
+ downloadLogic.apply(virtualizationConfig,
+ new ConfigurationDataDozModServerToStatelessClient(lectureName, osKeyword, usbAccess));
+ configuration = virtualizationConfig.getConfigurationAsString();
+ } catch (TransformationException e) {
+ LOGGER.error("Virtualization configuration could not be modified", e);
+ return null;
+ }
+
+ retval.configuration = configuration;
retval.legacyRunScript = rs.getString("runscript");
retval.netShares = DbLectureNetshare.getCombinedForLecture(connection, lectureId);
retval.runScript = DbRunScript.getRunScriptsForLaunch(connection, lectureId, rs.getInt("osid"));
+
// Everything worked so far, update statistics counters
MysqlStatement upStmt = connection.prepareStatement("UPDATE"
+ " lecture SET lastused = UNIX_TIMESTAMP(), usecount = usecount + 1"
@@ -603,16 +621,7 @@ public class DbLecture {
LOGGER.error("Query failed in DbLecture.getClientLaunchData()", e);
throw e;
}
- meta.addDisplayName(lectureName);
- if (osKeyword != null) {
- meta.setOs(osKeyword);
- }
- meta.addHddTemplate("%VM_DISK_PATH%", "%VM_DISK_MODE%", "%VM_DISK_REDOLOGDIR%");
- meta.addEthernet(VmMetaData.EtherType.NAT); // TODO: Use config
- if (!usbAccess) {
- meta.setMaxUsbSpeed(UsbSpeed.NONE);
- }
- meta.tweakForNonPersistent();
+
return retval;
}
@@ -709,7 +718,7 @@ public class DbLecture {
}
public static class LaunchData {
- public VmMetaData<?, ?, ?, ?, ?> vmx;
+ public String configuration;
public List<NetShare> netShares;
public String legacyRunScript;
public List<RunScript> runScript;
diff --git a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/web/WebServer.java b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/web/WebServer.java
index b6e0592c..e9394b5e 100644
--- a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/web/WebServer.java
+++ b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/web/WebServer.java
@@ -154,7 +154,7 @@ public class WebServer extends NanoHTTPD {
@Override
public void run() {
try {
- tarPutFile(output, "vmx", ld.vmx.getFilteredDefinitionArray());
+ tarPutFile(output, "vmx", ld.configuration);
tarPutFile(output, "runscript", ld.legacyRunScript);
tarPutFile(output, "netshares", serializeNetShares(ld.netShares));
if (ld.runScript != null) {
diff --git a/dozentenmodulserver/src/main/properties/log4j.properties b/dozentenmodulserver/src/main/properties/log4j.properties
new file mode 100644
index 00000000..0973166a
--- /dev/null
+++ b/dozentenmodulserver/src/main/properties/log4j.properties
@@ -0,0 +1,9 @@
+# root level logging configuration
+log4j.rootLogger=ALL, console
+
+# configuration for console output
+log4j.appender.console=org.apache.log4j.ConsoleAppender
+log4j.appender.console.layout=org.apache.log4j.PatternLayout
+log4j.appender.console.layout.ConversionPattern=[%t] %-5p %F - %m%n
+log4j.appender.console.encoding=UTF-8
+log4j.appender.console.Threshold=INFO