]> git.argeo.org Git - gpl/argeo-slc.git/commitdiff
Download process log
authorMathieu Baudier <mbaudier@argeo.org>
Wed, 14 Jul 2010 12:02:12 +0000 (12:02 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Wed, 14 Jul 2010 12:02:12 +0000 (12:02 +0000)
git-svn-id: https://svn.argeo.org/slc/trunk@3684 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

demo/site/org.argeo.slc.demo.log4j/log4j.properties
runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/controllers/ProcessController.java
runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/MarshallerMessageConverter.java
runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/log4j/SlcExecutionAppender.java

index 34fe310ae47cab76b6b15d45dd1ce22f3c22561b..6b47f015a02d2a26a78b2babdbd550659af2c1c9 100644 (file)
@@ -7,8 +7,8 @@ log4j.logger.org.argeo.slc.execution.ExecutionContext=DEBUG
 log4j.logger.org.argeo.slc.execution.SimpleExecutionSpec=DEBUG
 log4j.logger.org.argeo.security.mvc.ArgeoRememberMeServices=WARN
 
-log4j.logger.org.argeo.slc.jms.JmsAgentProxy=TRACE
-log4j.logger.org.argeo.slc.jms.JmsAgent=TRACE
+#log4j.logger.org.argeo.slc.jms.JmsAgentProxy=TRACE
+#log4j.logger.org.argeo.slc.jms.JmsAgent=TRACE
 #log4j.logger.org.argeo.server.jcr.mvc.OpenSessionInViewJcrInterceptor=TRACE
 
 #log4j.logger.org.argeo.slc.web.mvc=TRACE
index 49bc069ff35b6125bcdfc53d6d579b04ed7ab62e..8d6d67956c441038ad4fa7a3c0fba1c22291aa05 100644 (file)
@@ -17,6 +17,7 @@
 package org.argeo.slc.web.mvc.controllers;\r
 \r
 import java.io.BufferedReader;\r
+import java.text.SimpleDateFormat;\r
 import java.util.Comparator;\r
 import java.util.List;\r
 import java.util.SortedSet;\r
@@ -24,9 +25,11 @@ import java.util.TreeSet;
 import java.util.UUID;\r
 \r
 import javax.servlet.http.HttpServletRequest;\r
+import javax.servlet.http.HttpServletResponse;\r
 \r
 import org.apache.commons.logging.Log;\r
 import org.apache.commons.logging.LogFactory;\r
+import org.argeo.slc.SlcException;\r
 import org.argeo.slc.core.attachment.AttachmentsStorage;\r
 import org.argeo.slc.dao.process.SlcExecutionDao;\r
 import org.argeo.slc.execution.ExecutionModuleDescriptor;\r
@@ -173,6 +176,78 @@ public class ProcessController {
                return new ObjectList(list);\r
        }\r
 \r
+       @RequestMapping("/downloadSlcExecution.service")\r
+       protected void downloadSlcExecution(@RequestParam String uuid,\r
+                       @RequestParam String ext, HttpServletResponse response)\r
+                       throws Exception {\r
+               String contentType;\r
+               // cf. http://en.wikipedia.org/wikServicei/Internet_media_type\r
+               if ("csv".equals(ext))\r
+                       contentType = "text/csv";\r
+               else if ("pdf".equals(ext))\r
+                       contentType = "application/pdf";\r
+               else if ("zip".equals(ext))\r
+                       contentType = "application/zip";\r
+               else if ("html".equals(ext))\r
+                       contentType = "application/html";\r
+               else if ("txt".equals(ext) || "log".equals(ext))\r
+                       contentType = "text/plain";\r
+               else if ("doc".equals(ext) || "docx".equals(ext))\r
+                       contentType = "application/msword";\r
+               else if ("xls".equals(ext) || "xlsx".equals(ext))\r
+                       contentType = "application/vnd.ms-excel";\r
+               else if ("xml".equals(ext))\r
+                       contentType = "text/xml";\r
+               else\r
+                       contentType = "Content-Type: application/force-download";\r
+\r
+               String name = "Process-" + uuid + "." + ext;\r
+\r
+               SlcExecution process = slcExecutionDao.getSlcExecution(uuid);\r
+\r
+               SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");\r
+\r
+               // TODO: put it in a separate view\r
+               if ("log".equals(ext)) {\r
+                       StringBuffer buf = new StringBuffer("");\r
+                       buf.append("#\n# PROCESS " + process.getUuid() + "\n#\n\n");\r
+                       buf\r
+                                       .append("Started at " + df.format(process.getStartDate())\r
+                                                       + "\n");\r
+                       buf.append("Ended at " + df.format(process.getEndDate()) + "\n");\r
+                       buf.append("On host " + process.getHost() + "\n");\r
+                       buf.append("\n# LOG\n\n");\r
+                       for (SlcExecutionStep step : process.getSteps()) {\r
+                               buf.append(df.format(step.getTimestamp()));\r
+                               buf.append(" ");\r
+                               for (int i = 0; i < step.getLogLines().size(); i++) {\r
+                                       if (i > 0)\r
+                                               buf.append('\n');\r
+                                       buf.append(step.getLogLines().get(i));\r
+                               }\r
+                               buf.append(" - ");\r
+                               buf.append(step.getType());\r
+                               buf.append(" - ");\r
+                               buf.append('[').append(step.getThread()).append(']');\r
+                               buf.append('\n');\r
+                       }\r
+                       prepareDownloadResponse(name, contentType, response);\r
+                       response.getWriter().print(buf);\r
+               } else {\r
+                       throw new SlcException("Unsupported content type " + contentType);\r
+               }\r
+       }\r
+\r
+       protected void prepareDownloadResponse(String name, String contentType,\r
+                       HttpServletResponse response) {\r
+               response.setHeader("Content-Disposition", "attachment; filename=\""\r
+                               + name + "\"");\r
+               response.setContentType(contentType + ";name=\"" + name + "\"");\r
+               response.setHeader("Expires", "0");\r
+               response.setHeader("Cache-Control", "no-cache, must-revalidate");\r
+               response.setHeader("Pragma", "no-cache");\r
+       }\r
+\r
        private void initializeSEM() {\r
                slcExecutionManager = new SlcExecutionManager(unmarshaller, marshaller,\r
                                attachmentsStorage);\r
index d7d3baab07fe252a2c351bbd4b74d381cbf5b6f2..990abf2722db3a9bf014e4762dab303985130b28 100644 (file)
@@ -103,8 +103,8 @@ public class MarshallerMessageConverter implements MessageConverter {
                        msg = session.createTextMessage();
                        ((TextMessage) msg).setText(result.toString());
                }
-               if (log.isDebugEnabled())
-                       log.debug("To message in " + (System.currentTimeMillis() - begin)
+               if (log.isTraceEnabled())
+                       log.trace("To message in " + (System.currentTimeMillis() - begin)
                                        + " ms");
                return msg;
        }
index 2968253337c74bde90f0f7c02ee612d76a6667cc..4193fd925ba9c85c144cef6e60cde0af5efc1d01 100644 (file)
@@ -45,7 +45,7 @@ public class SlcExecutionAppender extends AppenderSkeleton implements
 
        private Layout layout = null;
        private String pattern = "%m - %c%n";
-       private Boolean onlyExecutionThread = true;
+       private Boolean onlyExecutionThread = false;
 
        public void afterPropertiesSet() {
                if (layout != null)