azkaban-aplcache

Merge pull request #273 from hluu/master Need to handle all

7/7/2014 9:33:32 PM

Details

diff --git a/azkaban-execserver/src/main/java/azkaban/execapp/JobRunner.java b/azkaban-execserver/src/main/java/azkaban/execapp/JobRunner.java
index 3d9a0b1..63e139c 100644
--- a/azkaban-execserver/src/main/java/azkaban/execapp/JobRunner.java
+++ b/azkaban-execserver/src/main/java/azkaban/execapp/JobRunner.java
@@ -174,7 +174,7 @@ public class JobRunner extends EventHandler implements Runnable {
   /**
    * Returns a list of jobs that this JobRunner will wait upon to finish before
    * starting. It is only relevant if pipeline is turned on.
-   *
+   * 
    * @return
    */
   public Set<String> getPipelineWatchedJobs() {
@@ -253,7 +253,7 @@ public class JobRunner extends EventHandler implements Runnable {
   /**
    * Used to handle non-ready and special status's (i.e. KILLED). Returns true
    * if they handled anything.
-   *
+   * 
    * @return
    */
   private boolean handleNonReadyStatus() {
@@ -401,7 +401,6 @@ public class JobRunner extends EventHandler implements Runnable {
 
   /**
    * The main run thread.
-   *
    */
   @Override
   public void run() {
@@ -528,7 +527,7 @@ public class JobRunner extends EventHandler implements Runnable {
   private void insertLinks() {
     Props azkProps = AzkabanExecutorServer.getApp().getAzkabanProps();
     String baseURL = azkProps.get("azkaban.webserver.url");
-    if (baseURL == null){
+    if (baseURL == null) {
       return;
     }
 
@@ -540,7 +539,8 @@ public class JobRunner extends EventHandler implements Runnable {
     props.put(CommonJobProperties.JOBEXEC_LINK, String.format(
         "%s/executor?execid=%d&job=%s", baseURL, executionId, jobId));
     props.put(CommonJobProperties.ATTEMPT_LINK, String.format(
-        "%s/executor?execid=%d&job=%s&attempt=%d", baseURL, executionId, jobId, node.getAttempt()));
+        "%s/executor?execid=%d&job=%s&attempt=%d", baseURL, executionId, jobId,
+        node.getAttempt()));
     props.put(CommonJobProperties.WORKFLOW_LINK, String.format(
         "%s/manager?project=%s&flow=%s", baseURL, projectName, flowName));
     props.put(CommonJobProperties.JOB_LINK, String.format(
@@ -551,17 +551,16 @@ public class JobRunner extends EventHandler implements Runnable {
   private void runJob() {
     try {
       job.run();
-    } catch (Exception e) {
-      e.printStackTrace();
+    } catch (Throwable e) {
 
       if (props.getBoolean("job.succeed.on.failure", false)) {
         changeStatus(Status.FAILED_SUCCEEDED);
         logError("Job run failed, but will treat it like success.");
-        logError(e.getMessage() + e.getCause());
+        logError(e.getMessage() + " cause: " + e.getCause(), e);
       } else {
         changeStatus(Status.FAILED);
-        logError("Job run failed!");
-        logError(e.getMessage() + e.getCause());
+        logError("Job run failed!", e);
+        logError(e.getMessage() + " cause: " + e.getCause());
       }
     }
 
@@ -643,6 +642,12 @@ public class JobRunner extends EventHandler implements Runnable {
     }
   }
 
+  private void logError(String message, Throwable t) {
+    if (logger != null) {
+      logger.error(message, t);
+    }
+  }
+
   private void logInfo(String message) {
     if (logger != null) {
       logger.info(message);
@@ -700,4 +705,4 @@ public class JobRunner extends EventHandler implements Runnable {
     return attempt > 0 ? "_job." + executionId + "." + attempt + "." + jobId
         + ".attach" : "_job." + executionId + "." + jobId + ".attach";
   }
-}
+}
\ No newline at end of file
diff --git a/azkaban-webserver/src/main/java/azkaban/webapp/servlet/HistoryServlet.java b/azkaban-webserver/src/main/java/azkaban/webapp/servlet/HistoryServlet.java
index 3a91f6e..a61ff06 100644
--- a/azkaban-webserver/src/main/java/azkaban/webapp/servlet/HistoryServlet.java
+++ b/azkaban-webserver/src/main/java/azkaban/webapp/servlet/HistoryServlet.java
@@ -17,7 +17,6 @@
 package azkaban.webapp.servlet;
 
 import java.io.IOException;
-
 import java.util.HashMap;
 import java.util.List;
 
@@ -38,6 +37,7 @@ import azkaban.webapp.AzkabanWebServer;
 
 public class HistoryServlet extends LoginAbstractAzkabanServlet {
 
+  private static final String FILTER_BY_DATE_PATTERN = "MM/dd/yyyy hh:mm aa";
   private static final long serialVersionUID = 1L;
   private ExecutorManagerAdapter executorManager;
   private ProjectManager projectManager;
@@ -106,12 +106,14 @@ public class HistoryServlet extends LoginAbstractAzkabanServlet {
       String userContain = getParam(req, "usercontain");
       int status = getIntParam(req, "status");
       String begin = getParam(req, "begin");
+
       long beginTime =
-          begin == "" ? -1 : DateTimeFormat.forPattern("MM/dd/yyyy-HH:mm")
+          begin == "" ? -1 : DateTimeFormat.forPattern(FILTER_BY_DATE_PATTERN)
               .parseDateTime(begin).getMillis();
       String end = getParam(req, "end");
+
       long endTime =
-          end == "" ? -1 : DateTimeFormat.forPattern("MM/dd/yyyy-HH:mm")
+          end == "" ? -1 : DateTimeFormat.forPattern(FILTER_BY_DATE_PATTERN)
               .parseDateTime(end).getMillis();
       try {
         history =