azkaban-aplcache

rebased to master

7/15/2014 6:03:10 PM

Details

diff --git a/azkaban-common/src/main/java/azkaban/jobExecutor/utils/process/AzkabanProcess.java b/azkaban-common/src/main/java/azkaban/jobExecutor/utils/process/AzkabanProcess.java
index dd7dd57..9c3f092 100644
--- a/azkaban-common/src/main/java/azkaban/jobExecutor/utils/process/AzkabanProcess.java
+++ b/azkaban-common/src/main/java/azkaban/jobExecutor/utils/process/AzkabanProcess.java
@@ -34,8 +34,8 @@ import azkaban.utils.LogGobbler;
 import com.google.common.base.Joiner;
 
 /**
- * A less shitty version of java.lang.Process.
- *
+ * An improved version of java.lang.Process.
+ * 
  * Output is read by separate threads to avoid deadlock and logged to log4j
  * loggers.
  */
@@ -72,6 +72,7 @@ public class AzkabanProcess {
     ProcessBuilder builder = new ProcessBuilder(cmd);
     builder.directory(new File(workingDir));
     builder.environment().putAll(env);
+    builder.redirectErrorStream(true);
     this.process = builder.start();
     try {
       this.processId = processId(process);
@@ -116,7 +117,7 @@ public class AzkabanProcess {
 
   /**
    * Await the completion of this process
-   *
+   * 
    * @throws InterruptedException if the thread is interrupted while waiting.
    */
   public void awaitCompletion() throws InterruptedException {
@@ -125,7 +126,7 @@ public class AzkabanProcess {
 
   /**
    * Await the start of this process
-   *
+   * 
    * @throws InterruptedException if the thread is interrupted while waiting.
    */
   public void awaitStartup() throws InterruptedException {
@@ -134,7 +135,7 @@ public class AzkabanProcess {
 
   /**
    * Get the process id for this process, if it has started.
-   *
+   * 
    * @return The process id or -1 if it cannot be fetched
    */
   public int getProcessId() {
@@ -144,7 +145,7 @@ public class AzkabanProcess {
 
   /**
    * Attempt to kill the process, waiting up to the given time for it to die
-   *
+   * 
    * @param time The amount of time to wait
    * @param unit The time unit
    * @return true iff this soft kill kills the process in the given wait time.
@@ -183,7 +184,7 @@ public class AzkabanProcess {
 
   /**
    * Attempt to get the process id for this process
-   *
+   * 
    * @param process The process to get the id from
    * @return The id of the process
    */
diff --git a/azkaban-common/src/main/java/azkaban/utils/ThreadPoolExecutingListener.java b/azkaban-common/src/main/java/azkaban/utils/ThreadPoolExecutingListener.java
index 52e7074..a7c85a4 100644
--- a/azkaban-common/src/main/java/azkaban/utils/ThreadPoolExecutingListener.java
+++ b/azkaban-common/src/main/java/azkaban/utils/ThreadPoolExecutingListener.java
@@ -26,4 +26,4 @@ public interface ThreadPoolExecutingListener {
   public void beforeExecute(Runnable r);
 
   public void afterExecute(Runnable r);
-}
+}
\ No newline at end of file
diff --git a/azkaban-execserver/src/main/java/azkaban/execapp/FlowRunnerManager.java b/azkaban-execserver/src/main/java/azkaban/execapp/FlowRunnerManager.java
index 0edad7b..54d82e8 100644
--- a/azkaban-execserver/src/main/java/azkaban/execapp/FlowRunnerManager.java
+++ b/azkaban-execserver/src/main/java/azkaban/execapp/FlowRunnerManager.java
@@ -841,4 +841,4 @@ public class FlowRunnerManager implements EventListener,
     submittedFlows.remove(r);
   }
 
-}
+}
\ No newline at end of file
diff --git a/azkaban-execserver/src/main/java/azkaban/execapp/jmx/JmxFlowRunnerManager.java b/azkaban-execserver/src/main/java/azkaban/execapp/jmx/JmxFlowRunnerManager.java
index 02ab2be..3437065 100644
--- a/azkaban-execserver/src/main/java/azkaban/execapp/jmx/JmxFlowRunnerManager.java
+++ b/azkaban-execserver/src/main/java/azkaban/execapp/jmx/JmxFlowRunnerManager.java
@@ -79,4 +79,4 @@ public class JmxFlowRunnerManager implements JmxFlowRunnerManagerMBean {
   public int getTotalNumExecutedFlows() {
     return manager.getTotalNumExecutedFlows();
   }
-}
+}
\ No newline at end of file
diff --git a/azkaban-execserver/src/main/java/azkaban/execapp/jmx/JmxFlowRunnerManagerMBean.java b/azkaban-execserver/src/main/java/azkaban/execapp/jmx/JmxFlowRunnerManagerMBean.java
index 71212a8..41f8f04 100644
--- a/azkaban-execserver/src/main/java/azkaban/execapp/jmx/JmxFlowRunnerManagerMBean.java
+++ b/azkaban-execserver/src/main/java/azkaban/execapp/jmx/JmxFlowRunnerManagerMBean.java
@@ -52,4 +52,4 @@ public interface JmxFlowRunnerManagerMBean {
   @DisplayName("OPERATION: getTotalNumExecutedFlows")
   public int getTotalNumExecutedFlows();
 
-}
+}
\ No newline at end of file
diff --git a/azkaban-webserver/src/main/java/azkaban/webapp/servlet/ExecutorServlet.java b/azkaban-webserver/src/main/java/azkaban/webapp/servlet/ExecutorServlet.java
index 21319d7..c5ae77c 100644
--- a/azkaban-webserver/src/main/java/azkaban/webapp/servlet/ExecutorServlet.java
+++ b/azkaban-webserver/src/main/java/azkaban/webapp/servlet/ExecutorServlet.java
@@ -27,14 +27,12 @@ import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
-import org.apache.log4j.Logger;
-
 import azkaban.executor.ExecutableFlow;
 import azkaban.executor.ExecutableFlowBase;
 import azkaban.executor.ExecutableNode;
 import azkaban.executor.ExecutionOptions;
-import azkaban.executor.ExecutionOptions.FailureAction;
 import azkaban.executor.ExecutorManagerAdapter;
+import azkaban.executor.ExecutionOptions.FailureAction;
 import azkaban.executor.ExecutorManagerException;
 import azkaban.executor.Status;
 import azkaban.flow.Flow;
@@ -46,8 +44,8 @@ import azkaban.scheduler.ScheduleManagerException;
 import azkaban.server.HttpRequestUtils;
 import azkaban.server.session.Session;
 import azkaban.user.Permission;
-import azkaban.user.Permission.Type;
 import azkaban.user.User;
+import azkaban.user.Permission.Type;
 import azkaban.utils.FileIOUtils.LogData;
 import azkaban.webapp.AzkabanWebServer;
 import azkaban.webapp.plugin.PluginRegistry;
@@ -55,9 +53,6 @@ import azkaban.webapp.plugin.ViewerPlugin;
 
 public class ExecutorServlet extends LoginAbstractAzkabanServlet {
   private static final long serialVersionUID = 1L;
-
-  private static final Logger logger = Logger.getLogger(ExecutorServlet.class);
-
   private ProjectManager projectManager;
   private ExecutorManagerAdapter executorManager;
   private ScheduleManager scheduleManager;
@@ -354,7 +349,7 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
 
   /**
    * Gets the logs through plain text stream to reduce memory overhead.
-   * 
+   *
    * @param req
    * @param resp
    * @param user
@@ -394,7 +389,7 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
 
   /**
    * Gets the logs through ajax plain text stream to reduce memory overhead.
-   * 
+   *
    * @param req
    * @param resp
    * @param user
@@ -714,7 +709,7 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
       HttpServletResponse resp, HashMap<String, Object> ret, User user,
       ExecutableFlow exFlow) throws ServletException {
     Long lastUpdateTime = Long.parseLong(getParam(req, "lastUpdateTime"));
-    logger.info("Fetching " + exFlow.getExecutionId());
+    System.out.println("Fetching " + exFlow.getExecutionId());
 
     Project project =
         getProjectAjaxByPermission(ret, exFlow.getProjectId(), user, Type.READ);
@@ -734,7 +729,7 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
   private void ajaxFetchExecutableFlow(HttpServletRequest req,
       HttpServletResponse resp, HashMap<String, Object> ret, User user,
       ExecutableFlow exFlow) throws ServletException {
-    logger.info("Fetching " + exFlow.getExecutionId());
+    System.out.println("Fetching " + exFlow.getExecutionId());
 
     Project project =
         getProjectAjaxByPermission(ret, exFlow.getProjectId(), user, Type.READ);
diff --git a/azkaban-webserver/src/main/resources/azkaban/webapp/servlet/velocity/executionspage.vm b/azkaban-webserver/src/main/resources/azkaban/webapp/servlet/velocity/executionspage.vm
index 288b5e6..49d1085 100644
--- a/azkaban-webserver/src/main/resources/azkaban/webapp/servlet/velocity/executionspage.vm
+++ b/azkaban-webserver/src/main/resources/azkaban/webapp/servlet/velocity/executionspage.vm
@@ -22,12 +22,19 @@
 #parse("azkaban/webapp/servlet/velocity/javascript.vm")
 
     <script type="text/javascript" src="${context}/js/azkaban/view/executions.js"></script>
+    <script type="text/javascript" src="${context}/js/jquery/jquery.tablesorter.js"></script>
     <script type="text/javascript">
       var contextURL = "${context}";
       var currentTime = ${currentTime};
       var timezone = "${timezone}";
       var errorMessage = null;
       var successMessage = null;
+      
+      
+      $(document).ready(function () {
+        var jobTable = $("#executingJobs");
+        jobTable.tablesorter();
+      });
     </script>
   </head>
   <body>
@@ -59,6 +66,7 @@
           <table id="executingJobs" class="table table-striped table-bordered table-hover table-condensed executions-table">
             <thead>
               <tr>
+                <th>#</th>
                 <th class="execid">Execution Id</th>
                 <th>Flow</th>
                 <th>Project</th>
@@ -75,6 +83,9 @@
 #if ($runningFlows)
   #foreach ($flow in $runningFlows)
               <tr>
+                 <td class="tb-name">
+                   $velocityCount
+                </td>
                 <td class="tb-name">
                   <a href="${context}/executor?execid=${flow.executionId}">${flow.executionId}</a>
                 </td>
@@ -106,6 +117,7 @@
           <table id="recentlyFinished" class="table table-striped table-bordered table-hover table-condensed executions-table">
             <thead>
               <tr>
+                <th>#</th>
                 <th class="execid">Execution Id</th>
                 <th>Flow</th>
                 <th>Project</th>
@@ -122,6 +134,9 @@
 #if ($recentlyFinished.isEmpty())
   #foreach ($flow in $recentlyFinished)
               <tr>
+                <td class="tb-name">
+                   $velocityCount
+                </td>
                 <td class="tb-name execId">
                   <a href="${context}/executor?execid=${flow.executionId}">${flow.executionId}</a>
                 </td>
diff --git a/azkaban-webserver/src/main/resources/azkaban/webapp/servlet/velocity/historypage.vm b/azkaban-webserver/src/main/resources/azkaban/webapp/servlet/velocity/historypage.vm
index 16d4c87..548460c 100644
--- a/azkaban-webserver/src/main/resources/azkaban/webapp/servlet/velocity/historypage.vm
+++ b/azkaban-webserver/src/main/resources/azkaban/webapp/servlet/velocity/historypage.vm
@@ -26,10 +26,16 @@
     <script type="text/javascript" src="${context}/js/moment.min.js"></script>
     <script type="text/javascript" src="${context}/js/bootstrap-datetimepicker.min.js"></script>
     <script type="text/javascript" src="${context}/js/azkaban/view/history.js"></script>
+    <script type="text/javascript" src="${context}/js/jquery/jquery.tablesorter.js"></script>
     <script type="text/javascript">
       var contextURL = "${context}";
       var currentTime = ${currentTime};
       var timezone = "${timezone}";
+      
+      $(document).ready(function () {
+        var jobTable = $("#executingJobs");
+        jobTable.tablesorter();
+      });
     </script>
   </head>
   <body>
@@ -76,6 +82,7 @@
           <table id="executingJobs" class="table table-striped table-bordered table-hover table-condensed executions-table">
             <thead>
               <tr>
+              	<th>#</th>
                 <th class="execid">Execution Id</th>
                 <th>Flow</th>
                 <th>Project</th>
@@ -91,6 +98,9 @@
   #if (!$flowHistory.isEmpty())
     #foreach ($flow in $flowHistory)
               <tr>
+                <td class="tb-name">
+                   $velocityCount
+                </td>
                 <td class="tb-name execId">
                   <a href="${context}/executor?execid=${flow.executionId}">${flow.executionId}</a>
                 </td>
diff --git a/azkaban-webserver/src/main/resources/azkaban/webapp/servlet/velocity/scheduledflowpage.vm b/azkaban-webserver/src/main/resources/azkaban/webapp/servlet/velocity/scheduledflowpage.vm
index 6e7c61b..6657fb1 100644
--- a/azkaban-webserver/src/main/resources/azkaban/webapp/servlet/velocity/scheduledflowpage.vm
+++ b/azkaban-webserver/src/main/resources/azkaban/webapp/servlet/velocity/scheduledflowpage.vm
@@ -29,12 +29,18 @@
     <script type="text/javascript" src="${context}/js/azkaban/view/schedule-sla.js"></script>
     <script type="text/javascript" src="${context}/js/azkaban/view/scheduled.js"></script>
     <script type="text/javascript" src="${context}/js/azkaban/util/schedule.js"></script>
+    <script type="text/javascript" src="${context}/js/jquery/jquery.tablesorter.js"></script>
     <script type="text/javascript">
       var contextURL = "${context}";
       var currentTime = ${currentTime};
       var timezone = "${timezone}";
       var errorMessage = null;
       var successMessage = null;
+      
+      $(document).ready(function () {
+        var flowTable = $("#scheduledFlowsTbl");
+        flowTable.tablesorter();
+      });
     </script>
   </head>
   <body>
@@ -66,6 +72,7 @@
             <thead>
               <tr>
                 <!--th class="execid">Execution Id</th-->
+                <th>#</th>
                 <th>ID</th>
                 <th>Flow</th>
                 <th>Project</th>
@@ -81,6 +88,9 @@
   #if(!$schedules.isEmpty())
     #foreach($sched in $schedules)
               <tr>
+                <td class="tb-name">
+                   $velocityCount
+                </td>
                 <td>${sched.scheduleId}</td>
                 <td class="tb-name">
                   <a href="${context}/manager?project=${sched.projectName}&flow=${sched.flowName}">${sched.flowName}</a>