azkaban-uncached
Changes
src/web/js/azkaban.jobsummary.view.js 97(+43 -54)
Details
diff --git a/src/java/azkaban/webapp/servlet/ExecutorServlet.java b/src/java/azkaban/webapp/servlet/ExecutorServlet.java
index 151b59e..7355adf 100644
--- a/src/java/azkaban/webapp/servlet/ExecutorServlet.java
+++ b/src/java/azkaban/webapp/servlet/ExecutorServlet.java
@@ -45,6 +45,7 @@ import azkaban.user.User;
import azkaban.user.Permission.Type;
import azkaban.utils.FileIOUtils.JobMetaData;
import azkaban.utils.FileIOUtils.LogData;
+import azkaban.utils.LogSummary;
import azkaban.webapp.AzkabanWebServer;
import azkaban.webapp.session.Session;
@@ -502,9 +503,6 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
return;
}
- int offset = this.getIntParam(req, "offset");
- int length = this.getIntParam(req, "length");
-
String jobId = this.getParam(req, "jobId");
resp.setCharacterEncoding("utf-8");
@@ -516,17 +514,10 @@ public class ExecutorServlet extends LoginAbstractAzkabanServlet {
}
int attempt = this.getIntParam(req, "attempt", node.getAttempt());
- LogData data = executorManager.getExecutionJobLog(exFlow, jobId, offset, length, attempt);
- if (data == null) {
- ret.put("length", 0);
- ret.put("offset", offset);
- ret.put("data", "");
- }
- else {
- ret.put("length", data.getLength());
- ret.put("offset", data.getOffset());
- ret.put("data", data.getData());
- }
+ LogData data = executorManager.getExecutionJobLog(exFlow, jobId, 0, Integer.MAX_VALUE, attempt);
+ LogSummary summary = new LogSummary(data);
+ ret.put("statTableHeaders", summary.getStatTableHeaders());
+ ret.put("statTableData", summary.getStatTableData());
} catch (ExecutorManagerException e) {
throw new ServletException(e);
}
diff --git a/src/java/azkaban/webapp/servlet/velocity/jobsummarypage.vm b/src/java/azkaban/webapp/servlet/velocity/jobsummarypage.vm
index 349a1e3..24f99ce 100644
--- a/src/java/azkaban/webapp/servlet/velocity/jobsummarypage.vm
+++ b/src/java/azkaban/webapp/servlet/velocity/jobsummarypage.vm
@@ -76,9 +76,12 @@
<div id="jobSummaryView" class="summaryView">
<div class="summaryHeader"><div class="summaryButtonRow"><div id="updateSummaryBtn" class="btn7">Refresh</div></div></div>
- <div class="summaryViewer">
- <pre id="summarySection" class="summary"></pre>
- </div>
+ <table>
+ <thead id="summaryHeader">
+ </thead>
+ <tbody id="summaryBody">
+ </tbody>
+ </table>
</div>
#end
src/web/js/azkaban.jobsummary.view.js 97(+43 -54)
diff --git a/src/web/js/azkaban.jobsummary.view.js b/src/web/js/azkaban.jobsummary.view.js
index 79caaad..a67636f 100644
--- a/src/web/js/azkaban.jobsummary.view.js
+++ b/src/web/js/azkaban.jobsummary.view.js
@@ -25,67 +25,56 @@ azkaban.JobSummaryView = Backbone.View.extend({
"click #updateSummaryBtn" : "handleUpdate"
},
initialize: function(settings) {
- this.model.set({"offset": 0});
this.handleUpdate();
},
handleUpdate: function(evt) {
var requestURL = contextURL + "/executor";
var model = this.model;
- var finished = false;
+ var self = this;
- var date = new Date();
- var startTime = date.getTime();
-
- while(!finished) {
- var offset = this.model.get("offset");
- $.ajax({
- url: requestURL,
- type: "get",
- async: false,
- dataType: "json",
- data: {"execid": execId, "jobId": jobId, "ajax":"fetchExecJobSummary", "offset": offset, "length": 50000, "attempt": attempt},
- error: function(data) {
- console.log(data);
- finished = true;
- },
- success: function(data) {
- console.log("fetchSummary");
- if (data.error) {
- console.log(data.error);
- finished = true;
- }
- else if (data.length == 0) {
- finished = true;
- }
- else {
- var date = new Date();
- var endTime = date.getTime();
- if ((endTime - startTime) > 10000) {
- finished = true;
- showDialog("Alert","The summary is taking a long time to finish loading. Azkaban has stopped loading them. Please click Refresh to restart the load.");
- }
-
- var re = /(https?:\/\/(([-\w\.]+)+(:\d+)?(\/([\w/_\.]*(\?\S+)?)?)?))/g;
- var summary = $("#summarySection").text();
- if (!summary) {
- summary = data.data;
- }
- else {
- summary += data.data;
- }
-
- var newOffset = data.offset + data.length;
-
- $("#summarySection").text(summary);
- summary = $("#summarySection").html();
- summary = summary.replace(re, "<a href=\"$1\" title=\"\">$1</a>");
- $("#summarySection").html(summary);
-
- model.set({"offset": newOffset, "summary": summary});
- $(".summaryViewer").scrollTop(9999);
- }
+ $.ajax({
+ url: requestURL,
+ dataType: "json",
+ data: {"execid": execId, "jobId": jobId, "ajax":"fetchExecJobSummary", "attempt": attempt},
+ error: function(data) {
+ console.log(data);
+ },
+ success: function(data) {
+ console.log("fetchSummary");
+ if (data.error) {
+ console.log(data.error);
}
- });
+ else {
+ self.renderStatTable(data.statTableHeaders, data.statTableData);
+ }
+ }
+ });
+ },
+ renderStatTable: function(headers, data) {
+ if (headers) {
+ // Add table headers
+ var summaryHeader = $("#summaryHeader");
+ var tr = document.createElement("tr");
+ var i;
+ for (i = 0; i < headers.length; i++) {
+ var th = document.createElement("th");
+ $(th).text(headers[i]);
+ $(tr).append(th);
+ }
+ summaryHeader.append(tr);
+
+ // Add table body
+ var summaryBody = $("#summaryBody");
+ for (i = 0; i < data.length; i++) {
+ tr = document.createElement("tr");
+ var row = data[i];
+ for (var j = 0; j < headers.length; j++) {
+ var td = document.createElement("td");
+ $(td).text(row[j]);
+ $(tr).append(td);
+ }
+ summaryBody.append(tr);
+ }
}
}
});