diff options
author | Simon Rettberg | 2015-09-13 16:37:01 +0200 |
---|---|---|
committer | Simon Rettberg | 2015-09-13 16:37:01 +0200 |
commit | d68ab42fdec2a7263ea4cf9c762a5e7585b7eb40 (patch) | |
tree | 5063e70c5441f0d160c1749a300e96d8e0806cf9 /dozentenmodulserver | |
parent | [server] Limit hashqueue length depending on max mem (diff) | |
download | tutor-module-d68ab42fdec2a7263ea4cf9c762a5e7585b7eb40.tar.gz tutor-module-d68ab42fdec2a7263ea4cf9c762a5e7585b7eb40.tar.xz tutor-module-d68ab42fdec2a7263ea4cf9c762a5e7585b7eb40.zip |
[server] Minor tweaks and fixes
- Logging format
- Catch unchecked exceptions in web server and return internal server error
- fix: insert os-virt-mappings to db
Diffstat (limited to 'dozentenmodulserver')
6 files changed, 47 insertions, 10 deletions
diff --git a/dozentenmodulserver/setup/sat-01-schema.sql b/dozentenmodulserver/setup/sat-01-schema.sql index c6caef39..eadd5e4d 100644 --- a/dozentenmodulserver/setup/sat-01-schema.sql +++ b/dozentenmodulserver/setup/sat-01-schema.sql @@ -75,7 +75,7 @@ CREATE TABLE IF NOT EXISTS `imageversion` ( `isprocessed` tinyint(1) NOT NULL, `mastersha1` binary(20) DEFAULT NULL, `virtualizerconfig` blob NULL DEFAULT NULL COMMENT 'Specific configuration of the virtualizer for this image. For vmware, this is basically a dump of the *.vmx.', - `deletestate` ENUM( 'KEEP', 'SHOULD_DELETE', 'WANT_DELETE' ) CHARACTER SET ascii COLLATE ascii_bin NOT NULL DEFAULT 'KEEP' + `deletestate` ENUM( 'KEEP', 'SHOULD_DELETE', 'WANT_DELETE' ) CHARACTER SET ascii COLLATE ascii_bin NOT NULL DEFAULT 'KEEP', PRIMARY KEY (`imageversionid`), KEY `version_access` (`imagebaseid`,`isvalid`,`createtime`), KEY `fk_imageversion_2_idx` (`uploaderid`), @@ -116,6 +116,7 @@ CREATE TABLE IF NOT EXISTS `lecture` ( `nics` VARCHAR(200) CHARACTER SET ascii COLLATE ascii_bin NULL COMMENT 'Freeform text field for future extendability. Format is specified at application layer.', `netrules` text DEFAULT NULL COMMENT 'user defined firewall rules, applied at the linux base system.', `isexam` tinyint(1) NOT NULL, + `iswhitelistonly` tinyint(1) NOT NULL DEFAULT '0', `hasinternetaccess` tinyint(1) NOT NULL, `caneditdefault` tinyint(1) NOT NULL, `canadmindefault` tinyint(1) NOT NULL, 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 93f3a0d1..34f0bf38 100644 --- a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/App.java +++ b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/App.java @@ -12,7 +12,9 @@ import java.util.Set; import javax.net.ssl.SSLContext; import org.apache.log4j.BasicConfigurator; +import org.apache.log4j.ConsoleAppender; import org.apache.log4j.Logger; +import org.apache.log4j.PatternLayout; import org.apache.thrift.transport.TTransportException; import org.openslx.bwlp.sat.database.Database; import org.openslx.bwlp.sat.database.mappers.DbImage; @@ -24,6 +26,7 @@ import org.openslx.bwlp.sat.maintenance.SendExpireWarning; import org.openslx.bwlp.sat.thrift.BinaryListener; import org.openslx.bwlp.sat.thrift.cache.OperatingSystemList; import org.openslx.bwlp.sat.thrift.cache.OrganizationList; +import org.openslx.bwlp.sat.thrift.cache.VirtualizerList; import org.openslx.bwlp.sat.util.Configuration; import org.openslx.bwlp.sat.util.Identity; import org.openslx.bwlp.sat.web.WebServer; @@ -48,7 +51,7 @@ public class App { public static void main(String[] args) throws TTransportException, NoSuchAlgorithmException, IOException, KeyManagementException { //get going and show basic information in log file - BasicConfigurator.configure(); + BasicConfigurator.configure(new ConsoleAppender(new PatternLayout("%-5p [%t] %C{1} - %m%n"))); if (args.length != 0 && args[0].equals("debug")) { DEBUG = true; } @@ -103,6 +106,7 @@ public class App { Configuration.getMasterServerPort(), 30000); // Load useful things from master server + VirtualizerList.get(); OrganizationList.get(); OperatingSystemList.get(); 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 7ca7a0fd..af350a9b 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 @@ -466,6 +466,7 @@ public class DbLecture { } meta.addHddTemplate("%VM_DISK_PATH%", "%VM_DISK_MODE%", "%VM_DISK_REDOLOGDIR%"); meta.addEthernet(EthernetType.NAT); // TODO: Use config + meta.disableSuspend(); // Everything worked so far, update statistics counters MysqlStatement upStmt = connection.prepareStatement("UPDATE" + " lecture SET lastused = UNIX_TIMESTAMP(), usecount = usecount + 1" diff --git a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbOsVirt.java b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbOsVirt.java index c34e5d72..a6491993 100644 --- a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbOsVirt.java +++ b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbOsVirt.java @@ -6,6 +6,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import org.apache.log4j.Logger; import org.openslx.bwlp.sat.database.Database; @@ -20,18 +21,35 @@ public class DbOsVirt { public static void storeOsList(List<OperatingSystem> list) throws SQLException { try (MysqlConnection connection = Database.getConnection()) { - MysqlStatement stmt = connection.prepareStatement("INSERT INTO operatingsystem" + MysqlStatement osGeneralStmt = connection.prepareStatement("INSERT INTO operatingsystem" + " (osid, displayname, architecture, maxmem, maxcpu) VALUES" + " (:osid, :displayname, :architecture, :maxmem, :maxcpu)" + " ON DUPLICATE KEY UPDATE displayname = VALUES(displayname), architecture = VALUES(architecture)," + " maxmem = VALUES(maxmem), maxcpu = VALUES(maxcpu)"); for (OperatingSystem os : list) { - stmt.setInt("osid", os.osId); - stmt.setString("displayname", os.osName); - stmt.setString("architecture", os.architecture); - stmt.setInt("maxmem", os.maxMemMb); - stmt.setInt("maxcpu", os.maxCores); - stmt.executeUpdate(); + osGeneralStmt.setInt("osid", os.osId); + osGeneralStmt.setString("displayname", os.osName); + osGeneralStmt.setString("architecture", os.architecture); + osGeneralStmt.setInt("maxmem", os.maxMemMb); + osGeneralStmt.setInt("maxcpu", os.maxCores); + osGeneralStmt.executeUpdate(); + } + connection.commit(); + MysqlStatement virtStmt = connection.prepareStatement("INSERT IGNORE INTO os_x_virt" + + " (osid, virtid, virtoskeyword) VALUES" + + " (:osid, :virtid, :virtoskeyword)" + + " ON DUPLICATE KEY UPDATE virtoskeyword = VALUES(virtoskeyword)"); + for (OperatingSystem os : list) { + if (os.virtualizerOsId == null) { + LOGGER.warn("OS " + os.osName + " (" + os.osId + ") has no virtualizerkeys"); + } else { + virtStmt.setInt("osid", os.osId); + for (Entry<String, String> virtkey : os.virtualizerOsId.entrySet()) { + virtStmt.setString("virtid", virtkey.getKey()); + virtStmt.setString("virtoskeyword", virtkey.getValue()); + virtStmt.executeUpdate(); + } + } } connection.commit(); } catch (SQLException e) { diff --git a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/web/VmChooserEntryXml.java b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/web/VmChooserEntryXml.java index 1e5725fb..fdf27653 100644 --- a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/web/VmChooserEntryXml.java +++ b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/web/VmChooserEntryXml.java @@ -48,7 +48,7 @@ public class VmChooserEntryXml { private static class VmChooserParamXml { - @Attribute + @Attribute(required = false) private String param; public VmChooserParamXml(String value) { 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 765587e9..146f6f5e 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 @@ -46,6 +46,19 @@ public class WebServer extends NanoHTTPD { return internalServerError(); } + // Sanitize + if (uri.contains("//")) { + uri = uri.replaceAll("//+", "/"); + } + + try { + return handle(session, uri); + } catch (Throwable t) { + return internalServerError(); + } + } + + private Response handle(IHTTPSession session, String uri) { // Our special stuff if (uri.startsWith("/vmchooser/list")) { return serveVmChooserList(); |