azkaban-uncached
Changes
src/java/azkaban/utils/LogSummary.java 56(+47 -9)
src/web/js/azkaban.jobsummary.view.js 13(+7 -6)
Details
src/java/azkaban/utils/LogSummary.java 56(+47 -9)
diff --git a/src/java/azkaban/utils/LogSummary.java b/src/java/azkaban/utils/LogSummary.java
index 708e3bd..181442f 100644
--- a/src/java/azkaban/utils/LogSummary.java
+++ b/src/java/azkaban/utils/LogSummary.java
@@ -9,33 +9,55 @@ public class LogSummary {
private String[] statTableHeaders = null;
private List<String[]> statTableData = new ArrayList<String[]>();
+ private String[] summaryTableHeaders = null;
+ private List<String[]> summaryTableData = new ArrayList<String[]>();
+
public LogSummary(LogData log) {
if (log != null) {
parseLogData(log.getData());
}
}
- public String[] getStatTableHeaders() {
- return statTableHeaders;
- }
-
- public List<String[]> getStatTableData() {
- return statTableData;
- }
-
private void parseLogData(String data) {
data = data.replaceAll(".*? - ", "");
String[] lines = data.split("\n");
+ parseJobSummary(lines);
+ parseJobStats(lines);
+ }
+
+ private void parseJobSummary(String[] lines) {
+ int jobSummaryStartIndex = -1;
+ for (int i = 0; i < lines.length; i++) {
+ if (lines[i].startsWith("HadoopVersion")) {
+ jobSummaryStartIndex = i;
+ break;
+ }
+ }
+
+ if (jobSummaryStartIndex != -1) {
+ String headerLine = lines[jobSummaryStartIndex];
+ summaryTableHeaders = headerLine.split("\t");
+
+ int tableRowIndex = jobSummaryStartIndex + 1;
+ String line;
+ while (!(line = lines[tableRowIndex]).equals("")) {
+ summaryTableData.add(line.split("\t"));
+ tableRowIndex++;
+ }
+ }
+ }
+
+ private void parseJobStats(String[] lines) {
int jobStatsStartIndex = -1;
for (int i = 0; i < lines.length; i++) {
if (lines[i].startsWith("Job Stats (time in seconds):")) {
jobStatsStartIndex = i+1;
+ break;
}
}
if (jobStatsStartIndex != -1) {
-
String headerLine = lines[jobStatsStartIndex];
statTableHeaders = headerLine.split("\t");
@@ -47,4 +69,20 @@ public class LogSummary {
}
}
}
+
+ public String[] getStatTableHeaders() {
+ return statTableHeaders;
+ }
+
+ public List<String[]> getStatTableData() {
+ return statTableData;
+ }
+
+ public String[] getSummaryTableHeaders() {
+ return summaryTableHeaders;
+ }
+
+ public List<String[]> getSummaryTableData() {
+ return summaryTableData;
+ }
}
diff --git a/src/java/azkaban/webapp/servlet/ExecutorServlet.java b/src/java/azkaban/webapp/servlet/ExecutorServlet.java
index 7355adf..bfceaf7 100644
--- a/src/java/azkaban/webapp/servlet/ExecutorServlet.java
+++ b/src/java/azkaban/webapp/servlet/ExecutorServlet.java
@@ -515,7 +515,10 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
int attempt = this.getIntParam(req, "attempt", node.getAttempt());
LogData data = executorManager.getExecutionJobLog(exFlow, jobId, 0, Integer.MAX_VALUE, attempt);
+
LogSummary summary = new LogSummary(data);
+ ret.put("summaryTableHeaders", summary.getSummaryTableHeaders());
+ ret.put("summaryTableData", summary.getSummaryTableData());
ret.put("statTableHeaders", summary.getStatTableHeaders());
ret.put("statTableData", summary.getStatTableData());
} catch (ExecutorManagerException e) {
diff --git a/src/java/azkaban/webapp/servlet/velocity/jobsummarypage.vm b/src/java/azkaban/webapp/servlet/velocity/jobsummarypage.vm
index 24f99ce..ce11145 100644
--- a/src/java/azkaban/webapp/servlet/velocity/jobsummarypage.vm
+++ b/src/java/azkaban/webapp/servlet/velocity/jobsummarypage.vm
@@ -75,13 +75,26 @@
</div>
<div id="jobSummaryView" class="summaryView">
- <div class="summaryHeader"><div class="summaryButtonRow"><div id="updateSummaryBtn" class="btn7">Refresh</div></div></div>
- <table>
- <thead id="summaryHeader">
- </thead>
- <tbody id="summaryBody">
- </tbody>
- </table>
+ <br/>
+ <p>Job Summary
+ <table>
+ <thead id="summaryHeader">
+ </thead>
+ <tbody id="summaryBody">
+ </tbody>
+ </table>
+ </p>
+
+ <br/>
+
+ <p>Job Stats
+ <table>
+ <thead id="statsHeader">
+ </thead>
+ <tbody id="statsBody">
+ </tbody>
+ </table>
+ </p>
</div>
#end
src/web/js/azkaban.jobsummary.view.js 13(+7 -6)
diff --git a/src/web/js/azkaban.jobsummary.view.js b/src/web/js/azkaban.jobsummary.view.js
index a67636f..99a832e 100644
--- a/src/web/js/azkaban.jobsummary.view.js
+++ b/src/web/js/azkaban.jobsummary.view.js
@@ -45,15 +45,16 @@ azkaban.JobSummaryView = Backbone.View.extend({
console.log(data.error);
}
else {
- self.renderStatTable(data.statTableHeaders, data.statTableData);
+ self.renderTable(data.summaryTableHeaders, data.summaryTableData, "summary");
+ self.renderTable(data.statTableHeaders, data.statTableData, "stats");
}
}
});
},
- renderStatTable: function(headers, data) {
+ renderTable: function(headers, data, prefix) {
if (headers) {
// Add table headers
- var summaryHeader = $("#summaryHeader");
+ var header = $("#" + prefix + "Header");
var tr = document.createElement("tr");
var i;
for (i = 0; i < headers.length; i++) {
@@ -61,10 +62,10 @@ azkaban.JobSummaryView = Backbone.View.extend({
$(th).text(headers[i]);
$(tr).append(th);
}
- summaryHeader.append(tr);
+ header.append(tr);
// Add table body
- var summaryBody = $("#summaryBody");
+ var body = $("#" + prefix + "Body");
for (i = 0; i < data.length; i++) {
tr = document.createElement("tr");
var row = data[i];
@@ -73,7 +74,7 @@ azkaban.JobSummaryView = Backbone.View.extend({
$(td).text(row[j]);
$(tr).append(td);
}
- summaryBody.append(tr);
+ body.append(tr);
}
}
}