azkaban-aplcache

Show queued jobs in the execution list (#607) The PR fixes

10/10/2017 8:19:51 PM

Details

diff --git a/azkaban-web-server/src/main/less/flow.less b/azkaban-web-server/src/main/less/flow.less
index 351bf8a..2b4a595 100644
--- a/azkaban-web-server/src/main/less/flow.less
+++ b/azkaban-web-server/src/main/less/flow.less
@@ -165,6 +165,10 @@ td {
     &.FAILED_SUCCEEDED {
       background-color: @flow-failed-succeeded-color;
     }
+
+    &.QUEUED {
+      background-color: @flow-queued-color;
+    }
   }
 }
 
diff --git a/azkaban-web-server/src/web/js/azkaban/view/exflow.js b/azkaban-web-server/src/web/js/azkaban/view/exflow.js
index cae3c45..3ad9fa7 100644
--- a/azkaban-web-server/src/web/js/azkaban/view/exflow.js
+++ b/azkaban-web-server/src/web/js/azkaban/view/exflow.js
@@ -421,12 +421,45 @@ var updateStatus = function (updateTime) {
   ajaxCall(requestURL, requestData, successHandler);
 }
 
+function updatePastAttempts(data, update) {
+	if (!update.pastAttempts) {
+	    return;
+	}
+
+	if (data.pastAttempts) {
+		for (var i = 0; i < update.pastAttempts.length; ++i) {
+			var updatedAttempt = update.pastAttempts[i];
+			var found = false;
+			for (var j = 0; j < data.pastAttempts.length; ++j) {
+				var attempt = data.pastAttempts[j];
+				if (attempt.attempt == updatedAttempt.attempt) {
+					attempt.startTime = updatedAttempt.startTime;
+					attempt.endTime = updatedAttempt.endTime;
+					attempt.status = updatedAttempt.status;
+					found = true;
+					break;
+				}
+			}
+
+			if (!found) {
+				data.pastAttempts.push(updatedAttempt);
+			}
+		}
+	}
+	else {
+		data.pastAttempts = update.pastAttempts;
+	}
+}
+
 var updateGraph = function (data, update) {
   var nodeMap = data.nodeMap;
   data.startTime = update.startTime;
   data.endTime = update.endTime;
   data.updateTime = update.updateTime;
   data.status = update.status;
+
+  updatePastAttempts(data, update);
+
   update.changedNode = data;
 
   if (update.nodes) {
diff --git a/azkaban-web-server/src/web/js/azkaban/view/flow-execution-list.js b/azkaban-web-server/src/web/js/azkaban/view/flow-execution-list.js
index ff6acff..3e26410 100644
--- a/azkaban-web-server/src/web/js/azkaban/view/flow-execution-list.js
+++ b/azkaban-web-server/src/web/js/azkaban/view/flow-execution-list.js
@@ -95,9 +95,11 @@ azkaban.ExecutionListView = Backbone.View.extend({
     for (var i = 0; i < nodes.length; ++i) {
       var node = nodes[i].changedNode ? nodes[i].changedNode : nodes[i];
 
-      if (node.startTime < 0) {
+
+      if (node.status == 'READY') {
         continue;
       }
+
       //var nodeId = node.id.replace(".", "\\\\.");
       var row = node.joblistrow;
       if (!row) {
@@ -110,8 +112,13 @@ azkaban.ExecutionListView = Backbone.View.extend({
       $(statusDiv).attr("class", "status " + node.status);
 
       var startTimeTd = $(row).find("> td.startTime");
-      var startdate = new Date(node.startTime);
-      $(startTimeTd).text(getDateFormat(startdate));
+      if (node.startTime == -1) {
+          $(startTimeTd).text("-");
+      }
+      else {
+          var startdate = new Date(node.startTime);
+          $(startTimeTd).text(getDateFormat(startdate));
+      }
 
       var endTimeTd = $(row).find("> td.endTime");
       if (node.endTime == -1) {
@@ -173,10 +180,6 @@ azkaban.ExecutionListView = Backbone.View.extend({
   },
 
   updateProgressBar: function (data, flowStartTime, flowLastTime) {
-    if (data.startTime == -1) {
-      return;
-    }
-
     var outerWidth = $(".flow-progress").css("width");
     if (outerWidth) {
       if (outerWidth.substring(outerWidth.length - 2, outerWidth.length)
@@ -243,10 +246,13 @@ azkaban.ExecutionListView = Backbone.View.extend({
 
       var nodeLastTime = node.endTime == -1 ? (new Date()).getTime()
           : node.endTime;
-      var left = Math.max((node.startTime - parentStartTime) * factor,
+      var nodeStartTime = node.startTime == -1 ? (new Date()).getTime()
+          : node.startTime;
+      var left = Math.max((nodeStartTime - parentStartTime) * factor,
           minOffset);
       var margin = left - offsetLeft;
-      var width = Math.max((nodeLastTime - node.startTime) * factor, 3);
+      var width = Math.max((nodeLastTime - nodeStartTime) * factor, 3);
+
       width = Math.min(width, outerWidth);
 
       progressBar.css("margin-left", left)