diff options
Diffstat (limited to 'dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/web/WebServer.java')
-rw-r--r-- | dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/web/WebServer.java | 60 |
1 files changed, 37 insertions, 23 deletions
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 a3d9d293..43e56137 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 @@ -41,9 +41,9 @@ import fi.iki.elonen.NanoHTTPD; public class WebServer extends NanoHTTPD { private static final Logger LOGGER = Logger.getLogger(WebServer.class); - - private static final ThreadPoolExecutor tpe = - new GrowingThreadPoolExecutor(1, 8, 1, TimeUnit.MINUTES, new LinkedBlockingQueue<Runnable>(16)); + + private static final ThreadPoolExecutor tpe = new GrowingThreadPoolExecutor(1, 8, 1, TimeUnit.MINUTES, + new LinkedBlockingQueue<Runnable>(16)); private static final Serializer serializer = new Persister(); @@ -93,12 +93,20 @@ public class WebServer extends NanoHTTPD { return serveMetaData(parts[2]); if (parts[3].equals("netrules")) return serveLectureNetRules(parts[2]); + if (parts[3].equals("imagemeta")) + return serveContainerImageMetaData(parts[2]); } return notFound(); } if (uri.startsWith("/bwlp/container/clusterimages")) { return serverContainerImages(); } + if (uri.startsWith("/image/container/")) { + if (parts.length < 4) + return badRequest("Bad Request"); + if (parts[3].equals("metadata")) + return serveContainerImageMetaData(parts[2]); + } if (uri.startsWith("/status/fileserver")) { return serveStatus(); @@ -120,16 +128,14 @@ public class WebServer extends NanoHTTPD { return new NanoHTTPD.Response(NanoHTTPD.Response.Status.OK, "application/json; charset=utf-8", Json.serialize(FileServer.instance().getStatus())); } - - private static void tarPutFile(TarOutputStream output, String fileName, String data) throws IOException - { + + private static void tarPutFile(TarOutputStream output, String fileName, String data) throws IOException { if (data == null) return; tarPutFile(output, fileName, data.getBytes(StandardCharsets.UTF_8)); } - - private static void tarPutFile(TarOutputStream output, String fileName, byte[] data) throws IOException - { + + private static void tarPutFile(TarOutputStream output, String fileName, byte[] data) throws IOException { if (data == null) return; output.putNextEntry(new TarEntry(TarHeader.createHeader(fileName, data.length, Util.unixTime(), false, 0644))); @@ -166,8 +172,7 @@ public class WebServer extends NanoHTTPD { if (ld.runScript != null) { int cnt = 0; for (RunScript rs : ld.runScript) { - tarPutFile(output, String.format("adminrun/%04d-%d-%d.%s", - cnt++, rs.visibility, + tarPutFile(output, String.format("adminrun/%04d-%d-%d.%s", cnt++, rs.visibility, rs.passCreds ? 1 : 0, rs.extension), rs.content); } } @@ -185,10 +190,9 @@ public class WebServer extends NanoHTTPD { LOGGER.warn("Server overloaded; rejecting VM Metadata request", e2); return internalServerError(); } - return new NanoHTTPD.Response(NanoHTTPD.Response.Status.OK, "application/gzip", - sink); + return new NanoHTTPD.Response(NanoHTTPD.Response.Status.OK, "application/gzip", sink); } - + private Response serveLectureNetRules(String lectureId) { List<NetRule> list = new ArrayList<>(); boolean defaultAllowed; @@ -217,13 +221,12 @@ public class WebServer extends NanoHTTPD { sb.append("IN * 0 REJECT\n"); sb.append("OUT * 0 REJECT\n"); } - return new NanoHTTPD.Response(NanoHTTPD.Response.Status.OK, "text/plain; charset=utf-8", - sb.toString()); + return new NanoHTTPD.Response(NanoHTTPD.Response.Status.OK, "text/plain; charset=utf-8", sb.toString()); } private String serializeNetShares(List<NetShare> list) { // openslx.exe expects shares in the following format - // <path> <letter> <shortcut> <username> <password> + // <path> <letter> <shortcut> <username> <password> // letter is either a drive letter for Windows VMs, // or a mount point for Linux VMs. StringBuilder sb = new StringBuilder(); @@ -270,13 +273,13 @@ public class WebServer extends NanoHTTPD { /** * Helper for returning "Internal Server Error" Status - * @param body Message + * + * @param body Message */ public static Response internalServerError(String body) { - return new NanoHTTPD.Response(NanoHTTPD.Response.Status.INTERNAL_ERROR, "text/plain", - body); + return new NanoHTTPD.Response(NanoHTTPD.Response.Status.INTERNAL_ERROR, "text/plain", body); } - + public static Response internalServerError() { return internalServerError("Internal Server Error"); } @@ -299,9 +302,10 @@ public class WebServer extends NanoHTTPD { } /** - * create a json response with information about existing container images in bwlehrpool + * create a json response with information about existing container images in + * bwlehrpool */ - private Response serverContainerImages () { + private Response serverContainerImages() { try { return new Response(Response.Status.OK, "application/json; charset=utf-8", Json.serialize(DbImage.getContainerImageCluster())); @@ -310,4 +314,14 @@ public class WebServer extends NanoHTTPD { return internalServerError(); } } + + private Response serveContainerImageMetaData(String imageBaseId) { + try { + return new Response(Response.Status.OK, "application/json; charset=utf-8", + DbImage.getContainerImageMetadata(imageBaseId)); + } catch (SQLException e) { + LOGGER.error("error -- could not server container image", e); + return internalServerError(); + } + } } |