diff options
author | Manuel Bentele | 2021-05-19 09:34:09 +0200 |
---|---|---|
committer | Manuel Bentele | 2021-05-19 09:34:09 +0200 |
commit | adf39b1279e5ed2d81ddf92df780c5b893dbbba1 (patch) | |
tree | 9d729e1441ffab0d91ebae2424b2a6aa69120dd6 /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) | |
download | tutor-module-adf39b1279e5ed2d81ddf92df780c5b893dbbba1.tar.gz tutor-module-adf39b1279e5ed2d81ddf92df780c5b893dbbba1.tar.xz tutor-module-adf39b1279e5ed2d81ddf92df780c5b893dbbba1.zip |
Merge branch 'refactor/vm-config-transformation-logic'
Diffstat (limited to 'dozentenmodulserver')
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 |