azkaban-memoizeit
Changes
src/tl/flowsummary.tl 56(+13 -43)
src/tl/flowsummary-last-run.tl 4(+4 -0)
src/tl/flowsummary-no-data.tl 4(+4 -0)
src/web/js/azkaban.flow.view.js 53(+44 -9)
Details
diff --git a/src/java/azkaban/webapp/servlet/velocity/flowpage.vm b/src/java/azkaban/webapp/servlet/velocity/flowpage.vm
index bd22907..1759fa2 100644
--- a/src/java/azkaban/webapp/servlet/velocity/flowpage.vm
+++ b/src/java/azkaban/webapp/servlet/velocity/flowpage.vm
@@ -26,6 +26,8 @@
<script type="text/javascript" src="${context}/js/dust-core-2.2.2.min.js"></script>
<script type="text/javascript" src="${context}/js/flowsummary.js"></script>
+ <script type="text/javascript" src="${context}/js/flowsummary-no-data.js"></script>
+ <script type="text/javascript" src="${context}/js/flowsummary-last-run.js"></script>
<script type="text/javascript" src="${context}/js/azkaban.date.utils.js"></script>
<script type="text/javascript" src="${context}/js/azkaban.ajax.utils.js"></script>
src/tl/flowsummary.tl 56(+13 -43)
diff --git a/src/tl/flowsummary.tl b/src/tl/flowsummary.tl
index 10a0680..492f0ba 100644
--- a/src/tl/flowsummary.tl
+++ b/src/tl/flowsummary.tl
@@ -1,5 +1,5 @@
- <div class="col-lg-12">
- <table class="table table-bordered table-condensed table-striped">
+ <div class="col-xs-12">
+ <table class="table table-bordered table-condensed">
<tbody>
<tr>
<td class="property-key">Flow name</td>
@@ -26,7 +26,7 @@
{/schedule}
</div>
{?schedule}
- <table class="table table-condensed table-bordered table-striped">
+ <table class="table table-condensed table-bordered">
<tbody>
<tr>
<td class="property-key">Schedule ID</td>
@@ -60,52 +60,22 @@
{:else}
<div class="panel-body">
<div class="alert alert-info">
- <h4>No Schedule</h4>
+ <h4>None</h4>
<p>This flow has not been scheduled.</p>
</div>
</div>
{/schedule}
</div>
+ </div>
- <div class="panel panel-default">
- <div class="panel-heading">Last Run Stats</div>
- {?lastRun}
- <table class="table table-bordered table-condensed table-striped">
- <tbody>
- <tr>
- <td class="property-key">Max Map Slots from Largest Job</td>
- <td>{lastRun.maxMapSlots}</td>
- </tr>
- <tr>
- <td class="property-key">Max Reduce Slots from Largest Job</td>
- <td>{lastRun.maxReduceSlots}</td>
- </tr>
- <tr>
- <td class="property-key">Total Map Slots from All Jobs</td>
- <td>{lastRun.totalMapSlots}</td>
- </tr>
- <tr>
- <td class="property-key">Total Reduce Slots from All Jobs</td>
- <td>{lastRun.totalReduceSlots}</td>
- </tr>
- <tr>
- <td class="property-key">Total Number of Jobs</td>
- <td>{lastRun.numJobs}</td>
- </tr>
- <tr>
- <td class="property-key">Longest Task Time</td>
- <td>{lastRun.longestTaskTime}</td>
- </tr>
- </tbody>
- </table>
- {:else}
- <div class="panel-body">
- <div class="alert alert-info">
- <h4>No last run stats available</h4>
- <p>Last run stats requires at least one successful run of the flow.</p>
- </div>
- </div>
- {/lastRun}
+ <div class="col-xs-12" id="last-run-container">
+ <div class="alert alert-info" id="analyze-last-run">
+ <h4>Analyze last run</h4>
+ <p>Analyze the last run for aggregate performance statistics.</p>
+ <p><strong>Note:</strong> this may take a few minutes, especially if your flow is large.</p>
+ <p>
+ <button type="button" id="analyze-btn" class="btn btn-primary">Analyze</button>
+ </p>
</div>
</div><!-- /.col-lg-12 -->
src/tl/flowsummary-last-run.tl 4(+4 -0)
diff --git a/src/tl/flowsummary-last-run.tl b/src/tl/flowsummary-last-run.tl
new file mode 100644
index 0000000..fc3ba7f
--- /dev/null
+++ b/src/tl/flowsummary-last-run.tl
@@ -0,0 +1,4 @@
+ <div class="panel panel-default">
+ <div class="panel-heading">Last Run</div>
+ <div class="panel-body">Last run blerb</div>
+ </div>
src/tl/flowsummary-no-data.tl 4(+4 -0)
diff --git a/src/tl/flowsummary-no-data.tl b/src/tl/flowsummary-no-data.tl
new file mode 100644
index 0000000..ec3f4f6
--- /dev/null
+++ b/src/tl/flowsummary-no-data.tl
@@ -0,0 +1,4 @@
+ <div class="alert alert-info">
+ <h4>No Last Run Data</h4>
+ <p>{message}</p>
+ </div>
src/web/js/azkaban.flow.view.js 53(+44 -9)
diff --git a/src/web/js/azkaban.flow.view.js b/src/web/js/azkaban.flow.view.js
index 2e33ddb..462e903 100644
--- a/src/web/js/azkaban.flow.view.js
+++ b/src/web/js/azkaban.flow.view.js
@@ -295,6 +295,7 @@ azkaban.ExecutionsView = Backbone.View.extend({
var summaryView;
azkaban.SummaryView = Backbone.View.extend({
events: {
+ 'click #analyze-btn': 'analyzeLastRun'
},
initialize: function(settings) {
@@ -303,7 +304,6 @@ azkaban.SummaryView = Backbone.View.extend({
this.fetchDetails();
this.fetchSchedule();
- this.fetchLastRun();
this.model.trigger('render');
},
@@ -316,10 +316,7 @@ azkaban.SummaryView = Backbone.View.extend({
};
var model = this.model;
var successHandler = function(data) {
- console.log(data);
- model.set({
- 'jobTypes': data.jobTypes
- });
+ model.set({ 'jobTypes': data.jobTypes });
model.trigger('render');
};
$.get(requestURL, requestData, successHandler, 'json');
@@ -340,10 +337,50 @@ azkaban.SummaryView = Backbone.View.extend({
$.get(requestURL, requestData, successHandler, 'json');
},
- fetchLastRun: function() {
-
+ analyzeLastRun: function() {
+ var requestURL = contextURL + "/executor";
+ var requestData = {
+ 'ajax': 'fetchLastRunStats',
+ 'project': projectName,
+ 'flow': flowId
+ };
+ var view = this;
+ var successHandler = function(data) {
+ data = {
+ success: false,
+ message: "No last run data available. This flow has not been run yet.",
+ warnings: {},
+ jobs: {}
+ };
+ view.renderLastRun(data);
+ };
+ $.get(requestURL, requestData, successHandler, 'json');
},
+ renderLastRun: function(data) {
+ var view = this;
+ if (data == null || data.success == null || data.message == null) {
+ var msg = { message: "Error retrieving last run data."};
+ dust.render("flowsummary-no-data", msg, function(err, out) {
+ view.displayLastRun(out);
+ });
+ }
+ else if (data.success == false) {
+ dust.render("flowsummary-no-data", data, function(err, out) {
+ view.displayLastRun(out);
+ });
+ }
+ else {
+ dust.render("flowsummary-last-run", data, function(err, out) {
+ view.displayLastRun(out);
+ });
+ }
+ },
+
+ displayLastRun: function(out) {
+ $('#last-run-container').html(out);
+ },
+
handleChangeView: function(evt) {
},
@@ -352,9 +389,7 @@ azkaban.SummaryView = Backbone.View.extend({
projectName: projectName,
flowName: flowId,
jobTypes: this.model.get('jobTypes'),
- general: this.model.get('general'),
schedule: this.model.get('schedule'),
- lastRun: this.model.get('lastRun')
};
dust.render("flowsummary", data, function(err, out) {
$('#summary-view-content').html(out);