X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;ds=sidebyside;f=runtime%2Forg.argeo.slc.server%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fweb%2Fmvc%2Fcontrollers%2FProcessController.java;h=bd5fd7b732ace9bc1c0a085d8ec1ac93616c70b9;hb=16e2ffb035a4c41576acc74efb37610c7aec1887;hp=b698f2ffb6174674d04920ef361d3b01c06264a6;hpb=b811ec0603b1e596f26eee8a5378c6294cba495d;p=gpl%2Fargeo-slc.git diff --git a/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/controllers/ProcessController.java b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/controllers/ProcessController.java index b698f2ffb..bd5fd7b73 100644 --- a/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/controllers/ProcessController.java +++ b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/controllers/ProcessController.java @@ -17,6 +17,7 @@ package org.argeo.slc.web.mvc.controllers; import java.io.BufferedReader; +import java.text.SimpleDateFormat; import java.util.Comparator; import java.util.List; import java.util.SortedSet; @@ -24,9 +25,11 @@ import java.util.TreeSet; import java.util.UUID; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.argeo.slc.SlcException; import org.argeo.slc.core.attachment.AttachmentsStorage; import org.argeo.slc.dao.process.SlcExecutionDao; import org.argeo.slc.execution.ExecutionModuleDescriptor; @@ -50,7 +53,6 @@ import org.springframework.xml.transform.StringSource; @Controller public class ProcessController { - public final static String KEY_ANSWER = "__answer"; private final static Log log = LogFactory.getLog(ProcessController.class); private SlcExecutionDao slcExecutionDao; @@ -157,6 +159,94 @@ public class ProcessController { return ExecutionAnswer.ok("Execution completed properly"); } + @RequestMapping("/tailSlcExecutionStepsCount.service") + protected ObjectList tailSlcExecutionSteps(@RequestParam String uuid, + @RequestParam Integer stepCount) { + List list = slcExecutionDao + .tailSteps(uuid, stepCount); + return new ObjectList(list); + } + + @RequestMapping("/tailSlcExecutionStepsOffset.service") + protected ObjectList tailSlcExecutionSteps(@RequestParam String uuid, + @RequestParam String stepOffsetUuid) { + List list = slcExecutionDao.tailSteps(uuid, + stepOffsetUuid); + return new ObjectList(list); + } + + @RequestMapping("/downloadSlcExecution.service") + protected void downloadSlcExecution(@RequestParam String uuid, + @RequestParam String ext, HttpServletResponse response) + throws Exception { + String contentType; + // cf. http://en.wikipedia.org/wikServicei/Internet_media_type + if ("csv".equals(ext)) + contentType = "text/csv"; + else if ("pdf".equals(ext)) + contentType = "application/pdf"; + else if ("zip".equals(ext)) + contentType = "application/zip"; + else if ("html".equals(ext)) + contentType = "application/html"; + else if ("txt".equals(ext) || "log".equals(ext)) + contentType = "text/plain"; + else if ("doc".equals(ext) || "docx".equals(ext)) + contentType = "application/msword"; + else if ("xls".equals(ext) || "xlsx".equals(ext)) + contentType = "application/vnd.ms-excel"; + else if ("xml".equals(ext)) + contentType = "text/xml"; + else + contentType = "Content-Type: application/force-download"; + + String name = "Process-" + uuid + "." + ext; + + SlcExecution process = slcExecutionDao.getSlcExecution(uuid); + + SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); + + // TODO: put it in a separate view + if ("log".equals(ext)) { + StringBuffer buf = new StringBuffer(""); + buf.append("#\n# PROCESS " + process.getUuid() + "\n#\n\n"); + buf + .append("Started at " + df.format(process.getStartDate()) + + "\n"); + buf.append("Ended at " + df.format(process.getEndDate()) + "\n"); + buf.append("On host " + process.getHost() + "\n"); + buf.append("\n# LOG\n\n"); + for (SlcExecutionStep step : process.getSteps()) { + buf.append(df.format(step.getTimestamp())); + buf.append(" "); + for (int i = 0; i < step.getLogLines().size(); i++) { + if (i > 0) + buf.append('\n'); + buf.append(step.getLogLines().get(i)); + } + buf.append(" - "); + buf.append(step.getType()); + buf.append(" - "); + buf.append('[').append(step.getThread()).append(']'); + buf.append('\n'); + } + prepareDownloadResponse(name, contentType, response); + response.getWriter().print(buf); + } else { + throw new SlcException("Unsupported content type " + contentType); + } + } + + protected void prepareDownloadResponse(String name, String contentType, + HttpServletResponse response) { + response.setHeader("Content-Disposition", "attachment; filename=\"" + + name + "\""); + response.setContentType(contentType + ";name=\"" + name + "\""); + response.setHeader("Expires", "0"); + response.setHeader("Cache-Control", "no-cache, must-revalidate"); + response.setHeader("Pragma", "no-cache"); + } + private void initializeSEM() { slcExecutionManager = new SlcExecutionManager(unmarshaller, marshaller, attachmentsStorage);