azkaban-uncached

Details

diff --git a/src/web/js/azkaban.exflow.view.js b/src/web/js/azkaban.exflow.view.js
index d9481ec..377703b 100644
--- a/src/web/js/azkaban.exflow.view.js
+++ b/src/web/js/azkaban.exflow.view.js
@@ -647,10 +647,12 @@ var exNodeClickCallback = function(event) {
 	console.log("Node clicked callback");
 	var jobId = event.currentTarget.jobid;
 	var requestURL = contextURL + "/manager?project=" + projectName + "&flow=" + flowId + "&job=" + jobId;
+	var visualizerURL = contextURL + "/pigvisualizer?execid=" + execId + "&jobid=" + jobId;
 
 	var menu = [	
-			{title: "Open Job...", callback: function() {window.location.href=requestURL;}},
-			{title: "Open Job in New Window...", callback: function() {window.open(requestURL);}}
+			{title: "Open Job...", callback: function() {window.location.href = requestURL;}},
+			{title: "Open Job in New Window...", callback: function() {window.open(requestURL);}},
+			{title: "Visualize Job...", callback: function() {window.location.href = visualizerURL;}}
 	];
 
 	contextMenuView.show(event, menu);
@@ -660,10 +662,12 @@ var exJobClickCallback = function(event) {
 	console.log("Node clicked callback");
 	var jobId = event.currentTarget.jobid;
 	var requestURL = contextURL + "/manager?project=" + projectName + "&flow=" + flowId + "&job=" + jobId;
+	var visualizerURL = contextURL + "/pigvisualizer?execid=" + execId + "&jobid=" + jobId;
 
 	var menu = [	
-			{title: "Open Job...", callback: function() {window.location.href=requestURL;}},
-			{title: "Open Job in New Window...", callback: function() {window.open(requestURL);}}
+			{title: "Open Job...", callback: function() {window.location.href = requestURL;}},
+			{title: "Open Job in New Window...", callback: function() {window.open(requestURL);}},
+			{title: "Visualize Job...", callback: function() {window.location.href = visualizerURL;}}
 	];
 
 	contextMenuView.show(event, menu);
diff --git a/src/web/js/graph/azkaban.svg.graph.helper.js b/src/web/js/graph/azkaban.svg.graph.helper.js
index 2b7b376..76c7833 100644
--- a/src/web/js/graph/azkaban.svg.graph.helper.js
+++ b/src/web/js/graph/azkaban.svg.graph.helper.js
@@ -49,31 +49,31 @@ var openJobDisplayCallback = function(nodeId, flowId, evt) {
 }
 
 var createModelFromAjaxCall = function(data, model) {
-	  var nodes = {};
-  	  for (var i=0; i < data.nodes.length; ++i) {
-  	  	var node = data.nodes[i];
-  	  	nodes[node.id] = node;
-  	  }
-  	  for (var i=0; i < data.edges.length; ++i) {
-  	  	var edge = data.edges[i];
-  	  	var fromNode = nodes[edge.from];
-  	  	var toNode = nodes[edge.target];
-  	  	
-  	  	if (!fromNode.outNodes) {
-  	  		fromNode.outNodes = {};
-  	  	}
-  	  	fromNode.outNodes[toNode.id] = toNode;
-  	  	
-  	  	if (!toNode.inNodes) {
-  	  		toNode.inNodes = {};
-  	  	}
-  	  	toNode.inNodes[fromNode.id] = fromNode;
-  	  }
-  
-      console.log("data fetched");
-      model.set({data: data});
-      model.set({nodes: nodes});
-      model.set({disabled: {}});
+	var nodes = {};
+	for (var i = 0; i < data.nodes.length; ++i) {
+		var node = data.nodes[i];
+		nodes[node.id] = node;
+	}
+	for (var i = 0; i < data.edges.length; ++i) {
+		var edge = data.edges[i];
+		var fromNode = nodes[edge.from];
+		var toNode = nodes[edge.target];
+		
+		if (!fromNode.outNodes) {
+			fromNode.outNodes = {};
+		}
+		fromNode.outNodes[toNode.id] = toNode;
+		
+		if (!toNode.inNodes) {
+			toNode.inNodes = {};
+		}
+		toNode.inNodes[fromNode.id] = fromNode;
+	}
+
+	console.log("data fetched");
+	model.set({data: data});
+	model.set({nodes: nodes});
+	model.set({disabled: {}});
 }
 
 var nodeClickCallback = function(event, model, type) {
diff --git a/src/web/js/graph/azkaban.svg.graph.view.js b/src/web/js/graph/azkaban.svg.graph.view.js
index ed1bb04..b7c2286 100644
--- a/src/web/js/graph/azkaban.svg.graph.view.js
+++ b/src/web/js/graph/azkaban.svg.graph.view.js
@@ -324,7 +324,12 @@ azkaban.SvgGraphView = Backbone.View.extend({
 			var centerY = node.centerY;
 			
 			gNode.setAttribute("transform", "translate(" + node.x + "," + node.y + ")");
-			this.addBounds(bounds, {minX:node.x - centerX, minY: node.y - centerY, maxX: node.x + centerX, maxY: node.y + centerY});
+			this.addBounds(bounds, {
+				minX: node.x - centerX, 
+				minY: node.y - centerY, 
+				maxX: node.x + centerX, 
+				maxY: node.y + centerY
+			});
 		}
 	},
 	drawFlowNode: function(self, node) {
@@ -441,7 +446,12 @@ azkaban.SvgGraphView = Backbone.View.extend({
 		text.setAttribute("y", 6);
 		text.setAttribute("height", 10); 
 
-		//this.addBounds(bounds, {minX:node.x - xOffset, minY: node.y - yOffset, maxX: node.x + xOffset, maxY: node.y + yOffset});
+		/*this.addBounds(bounds, {
+			minX: node.x - xOffset, 
+			minY: node.y - yOffset, 
+			maxX: node.x + xOffset, 
+			maxY: node.y + yOffset
+		});*/
 
 		innerG.appendChild(rect);
 		innerG.appendChild(text);
@@ -507,7 +517,12 @@ azkaban.SvgGraphView = Backbone.View.extend({
 		text.setAttribute("x", 0);
 		text.setAttribute("y", 0);
 				
-		this.addBounds(bounds, {minX:node.x - xOffset, minY: node.y - yOffset, maxX: node.x + xOffset, maxY: node.y + yOffset});
+		this.addBounds(bounds, {
+			minX: node.x - xOffset, 
+			minY: node.y - yOffset, 
+			maxX: node.x + xOffset, 
+			maxY: node.y + yOffset
+		});
 		
 		var backRect = document.createElementNS(svgns, 'rect');
 		backRect.setAttribute("x", 0);
@@ -542,7 +557,13 @@ azkaban.SvgGraphView = Backbone.View.extend({
 	},
 	resetPanZoom : function(duration) {
 		var bounds = this.graphBounds;
-		var param = {x: bounds.minX, y: bounds.minY, width: (bounds.maxX - bounds.minX), height: (bounds.maxY - bounds.minY), duration: duration };
+		var param = {
+			x: bounds.minX, 
+			y: bounds.minY, 
+			width: (bounds.maxX - bounds.minX), 
+			height: (bounds.maxY - bounds.minY), 
+			duration: duration 
+		};
 
 		this.panZoom(param);
 	},