azkaban-developers

Added parsing of memory (-Xms, -Xmx) properties and environment

12/4/2013 7:14:19 PM

Details

diff --git a/src/java/azkaban/utils/LogSummary.java b/src/java/azkaban/utils/LogSummary.java
index 8a561b0..c9e5495 100644
--- a/src/java/azkaban/utils/LogSummary.java
+++ b/src/java/azkaban/utils/LogSummary.java
@@ -4,6 +4,7 @@ import azkaban.utils.FileIOUtils.LogData;
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -30,9 +31,7 @@ public class LogSummary {
 	);
 	
 	private String jobType = null;
-	private String command = null;
-	private List<String> classpath = new ArrayList<String>();
-	private List<String> params = new ArrayList<String>();
+	private List<Pair<String,String>> commandProperties = new ArrayList<Pair<String,String>>();
 	
 	private String[] pigStatTableHeaders = null;
 	private List<String[]> pigStatTableData = new ArrayList<String[]>();
@@ -92,20 +91,49 @@ public class LogSummary {
 		}
 		
 		if (commandStartIndex != -1) {
-			command = lines[commandStartIndex].substring(9);
+			String command = lines[commandStartIndex].substring(9);
+			commandProperties.add(new Pair<String,String>("Command", command));
 			
 			// Parse classpath
 			Pattern p = Pattern.compile("(?:-cp|-classpath)\\s+(\\S+)");
 			Matcher m = p.matcher(command);
+			StringBuilder sb = new StringBuilder();
 			if (m.find()) {
-				classpath = Arrays.asList(m.group(1).split(":"));
+				sb.append(StringUtils.join((Collection<String>)Arrays.asList(m.group(1).split(":")), "<br/>"));
+				commandProperties.add(new Pair<String,String>("Classpath", sb.toString()));
+			}
+			
+			// Parse environment variables
+			p = Pattern.compile("-D(\\S+)");
+			m = p.matcher(command);
+			sb = new StringBuilder();
+			while (m.find()) {
+				sb.append(m.group(1) + "<br/>");
+			}
+			if (sb.length() > 0) {
+				commandProperties.add(new Pair<String,String>("-D", sb.toString()));
+			}
+			
+			// Parse memory settings
+			p = Pattern.compile("(-Xm\\S+)");
+			m = p.matcher(command);
+			sb = new StringBuilder();
+			while (m.find()) {
+				sb.append(m.group(1) + "<br/>");
+			}
+			if (sb.length() > 0) {
+				commandProperties.add(new Pair<String,String>("Memory Settings", sb.toString()));
 			}
 			
 			// Parse Pig params
 			p = Pattern.compile("-param\\s+(\\S+)");
 			m = p.matcher(command);
+			sb = new StringBuilder();
 			while (m.find()) {
-				params.add(m.group(1));
+				sb.append(m.group(1) + "<br/>");
+			}
+			if (sb.length() > 0) {
+				commandProperties.add(new Pair<String,String>("Params", sb.toString()));
 			}
 			
 			return true;
@@ -307,16 +335,8 @@ public class LogSummary {
 		return jobType;
 	}
 	
-	public String getCommand() {
-		return command;
-	}
-
-	public List<String> getClasspath() {
-		return classpath;
-	}
-
-	public List<String> getParams() {
-		return params;
+	public List<Pair<String,String>> getCommandProperties() {
+		return commandProperties;
 	}
 
 	public List<String> getHiveQueries() {
diff --git a/src/java/azkaban/webapp/servlet/ExecutorServlet.java b/src/java/azkaban/webapp/servlet/ExecutorServlet.java
index e45dcc7..ad572ed 100644
--- a/src/java/azkaban/webapp/servlet/ExecutorServlet.java
+++ b/src/java/azkaban/webapp/servlet/ExecutorServlet.java
@@ -476,9 +476,7 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
 			LogData data = executorManager.getExecutionJobLog(exFlow, jobId, 0, Integer.MAX_VALUE, attempt);
 			
 			LogSummary summary = new LogSummary(data);
-			ret.put("command", summary.getCommand());
-			ret.put("classpath", summary.getClasspath());
-			ret.put("params", summary.getParams());
+			ret.put("commandProperties", summary.getCommandProperties());
 			
 			String jobType = summary.getJobType();
 			
diff --git a/src/web/js/azkaban.jobdetails.view.js b/src/web/js/azkaban.jobdetails.view.js
index a47487c..a24943d 100644
--- a/src/web/js/azkaban.jobdetails.view.js
+++ b/src/web/js/azkaban.jobdetails.view.js
@@ -136,7 +136,7 @@ azkaban.JobSummaryView = Backbone.View.extend({
 					console.log(data.error);
 				}
 				else {
-					self.renderCommandTable(data.command, data.classpath, data.params);
+					self.renderCommandTable(data.commandProperties);
 					self.renderJobTable(data.summaryTableHeaders, data.summaryTableData, "summary");
 					self.renderJobTable(data.statTableHeaders, data.statTableData, "stats");
 					self.renderHiveTable(data.hiveQueries, data.hiveQueryJobs);
@@ -144,48 +144,19 @@ azkaban.JobSummaryView = Backbone.View.extend({
 			}
 		});
 	},
-	renderCommandTable: function(command, classpath, params) {
-		if (command) {
+	renderCommandTable: function(commandProperties) {
+		if (commandProperties) {
 			var commandTable = $("#commandTable");
-			var i;
-			
-			// Add row for command
-			var tr = document.createElement("tr");
-			var td = document.createElement("td");
-			$(td).append("<b>Command</b>");
-			$(tr).append(td);
-			td = document.createElement("td");
-			$(td).text(command);
-			$(tr).append(td);
-			commandTable.append(tr);
-			
-			// Add row for classpath
-			if (classpath && classpath.length > 0) {
-				tr = document.createElement("tr");
-				td = document.createElement("td");
-				$(td).append("<b>Classpath</b>");
-				$(tr).append(td);
-				td = document.createElement("td");
-				$(td).append(classpath[0]);
-				for (i = 1; i < classpath.length; i++) {
-					$(td).append("<br/>" + classpath[i]);
-				}
-				$(tr).append(td);
-				commandTable.append(tr);
-			}
 			
-			// Add row for params
-			if (params && params.length > 0) {
-				tr = document.createElement("tr");
-				td = document.createElement("td");
-				$(td).append("<b>Params</b>");
-				$(tr).append(td);
-				td = document.createElement("td");
-				$(td).append(params[0]);
-				for (i = 1; i < params.length; i++) {
-					$(td).append("<br/>" + params[i]);
-				}
-				$(tr).append(td);
+			for (var i = 0; i < commandProperties.length; i++) {
+				var prop = commandProperties[i];
+				var tr = document.createElement("tr");
+				var name = document.createElement("td");
+				var value = document.createElement("td");
+				$(name).html("<b>" + prop.first + "</b>");
+				$(value).html(prop.second);
+				$(tr).append(name);
+				$(tr).append(value);
 				commandTable.append(tr);
 			}
 		}
@@ -245,7 +216,7 @@ azkaban.JobSummaryView = Backbone.View.extend({
 				// new query
 				tr = document.createElement("tr");
 				var td = document.createElement("td");
-				$(td).html(queries[i]);
+				$(td).html("<b>" + queries[i] + "</b>");
 				$(tr).append(td);
 				
 				var jobs = queryJobs[i];