azkaban-developers
Changes
src/java/azkaban/utils/LogSummary.java 52(+36 -16)
src/web/js/azkaban.jobdetails.view.js 55(+13 -42)
Details
src/java/azkaban/utils/LogSummary.java 52(+36 -16)
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();
src/web/js/azkaban.jobdetails.view.js 55(+13 -42)
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];