package services; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.io.PrintWriter; import java.text.ParseException; import java.util.Date; import org.molgenis.framework.db.DatabaseException; import org.molgenis.framework.server.MolgenisContext; import org.molgenis.framework.server.MolgenisRequest; import org.molgenis.framework.server.MolgenisResponse; import org.molgenis.framework.server.MolgenisService; import app.servlet.UsedMolgenisOptions; public class getlogs implements MolgenisService { private MolgenisContext mc; String appName; public getlogs(MolgenisContext mc) { this.mc = mc; this.appName = new UsedMolgenisOptions().appName; } @Override public void handleRequest(MolgenisRequest request, MolgenisResponse response) throws ParseException, DatabaseException, IOException { PrintWriter out = response.getResponse().getWriter(); response.getResponse().setContentType("text/html"); out.println("<html><head></head><body>"); out.println("<div style=\"font-family: Courier, 'Courier New', monospace\">"); try { if (request.getString("file") == null) { if (request.getInt("job") == null) { // show root dir listing File workingDir = new File("."); listDir("", workingDir, out, -1); } else { // special: filter root dir with job id File workingDir = new File("."); listDir("", workingDir, out, request.getInt("job").intValue()); } } else { String filePath = request.getString("file"); if (filePath.endsWith("/")) { // show dir listing String path = filePath.substring(0, (filePath.lastIndexOf('/') + 1)); File listDir = new File(filePath.substring(0, filePath.length() - 1)); listDir(path, listDir, out, -1); } else { // show file BufferedReader br = new BufferedReader(new FileReader(new File(filePath))); String sCurrentLine; while ((sCurrentLine = br.readLine()) != null) { out.println(sCurrentLine + "<br>"); } } } out.println("</div>"); out.println("</body></html>"); } catch (Exception e) { e.printStackTrace(out); } finally { out.close(); } } public void listDir(String path, File dir, PrintWriter out, int listJob) { for (File f : dir.listFiles()) { Date lastMod = new Date(f.lastModified()); if (listJob != -1) { if (f.getName().startsWith("runmij" + listJob) || f.getName().startsWith("subjob") || f.getName().equals("download.Rout") || f.getName().equals("ESTtime.Rout")) { out.println("file: <a href=\"/" + appName + "/getlogs?file=" + path + f.getName() + "\">" + f.getName() + "</a> / size (bytes): " + f.length() + " / lastmod: " + lastMod + "<br><br>"); } else if ((f.isDirectory() && f.getName().startsWith("run" + listJob))) { out.println("dir > <a href=\"/" + appName + "/getlogs?file=" + path + f.getName() + "/" + "\">" + f.getName() + "</a> / size (bytes): " + f.length() + " / lastmod: " + lastMod + "<br><br>"); } } else { if (f.getName().endsWith(".Rout") || f.getName().endsWith(".R") || f.getName().endsWith(".sh") || f.getName().endsWith(".RData")) { out.println("file: <a href=\"/" + appName + "/getlogs?file=" + path + f.getName() + "\">" + f.getName() + "</a> / size (bytes): " + f.length() + " / lastmod: " + lastMod + "<br><br>"); } else if ((f.isDirectory() && f.getName().startsWith("run"))) { out.println("dir > <a href=\"/" + appName + "/getlogs?file=" + path + f.getName() + "/" + "\">" + f.getName() + "</a> / size (bytes): " + f.length() + " / lastmod: " + lastMod + "<br><br>"); } } } } }