summaryrefslogtreecommitdiffstats
path: root/dozentenmodulserver
diff options
context:
space:
mode:
authorSimon Rettberg2015-09-13 16:37:01 +0200
committerSimon Rettberg2015-09-13 16:37:01 +0200
commitd68ab42fdec2a7263ea4cf9c762a5e7585b7eb40 (patch)
tree5063e70c5441f0d160c1749a300e96d8e0806cf9 /dozentenmodulserver
parent[server] Limit hashqueue length depending on max mem (diff)
downloadtutor-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')
-rw-r--r--dozentenmodulserver/setup/sat-01-schema.sql3
-rw-r--r--dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/App.java6
-rw-r--r--dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbLecture.java1
-rw-r--r--dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbOsVirt.java32
-rw-r--r--dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/web/VmChooserEntryXml.java2
-rw-r--r--dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/web/WebServer.java13
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();