azkaban-developers

Added "Job Type" to Job Summary page; also fixed potential infinite

1/16/2014 6:20:24 PM

Details

diff --git a/src/java/azkaban/webapp/servlet/velocity/jobdetailspage.vm b/src/java/azkaban/webapp/servlet/velocity/jobdetailspage.vm
index 50858db..077c9ab 100644
--- a/src/java/azkaban/webapp/servlet/velocity/jobdetailspage.vm
+++ b/src/java/azkaban/webapp/servlet/velocity/jobdetailspage.vm
@@ -120,6 +120,11 @@
             </div>
           </h3>
 
+          <div id="jobType">
+            <table id="jobTypeTable" class="table table-striped table-bordered table-hover">
+            </table>
+          </div>
+
           <div id="command-summary">
             <h4>Command Summary</h4>
             <table id="commandTable" class="table table-striped table-bordered table-hover">
diff --git a/src/web/js/azkaban/model/log-data.js b/src/web/js/azkaban/model/log-data.js
index 2fe3ac5..f250c11 100644
--- a/src/web/js/azkaban/model/log-data.js
+++ b/src/web/js/azkaban/model/log-data.js
@@ -92,13 +92,16 @@ azkaban.LogDataModel = Backbone.Model.extend({
 
         if (this.parseCommand(lines)) {
             this.parseJobTrackerUrls(lines);
+            this.parseJobType(lines);
 
-            var jobType = this.parseJobType(lines);
-            if (jobType.indexOf("pig") !== -1) {
-                this.parsePigTable(lines, "pigSummary", this.PIG_JOB_SUMMARY_START, "", 0);
-                this.parsePigTable(lines, "pigStats", this.PIG_JOB_STATS_START, "", 1);
-            } else if (jobType.indexOf("hive") !== -1) {
-                this.parseHiveQueries(lines);
+            var jobType = this.get("jobType");
+            if (jobType) {
+                if (jobType.indexOf("pig") !== -1) {
+                    this.parsePigTable(lines, "pigSummary", this.PIG_JOB_SUMMARY_START, "", 0);
+                    this.parsePigTable(lines, "pigStats", this.PIG_JOB_STATS_START, "", 1);
+                } else if (jobType.indexOf("hive") !== -1) {
+                    this.parseHiveQueries(lines);
+                }
             }
         }
     },
@@ -166,13 +169,12 @@ azkaban.LogDataModel = Backbone.Model.extend({
     parseJobType: function(lines) {
         var numLines = lines.length;
         var match;
-        for (var i = 0; numLines; i++) {
+        for (var i = 0; i < numLines; i++) {
             if (match = this.JOB_TYPE_REGEX.exec(lines[i])) {
-                return match[1];
+                this.set("jobType", match[1]);
+                break;
             }
         }
-        
-        return null;
     },
 
     parsePigTable: function(lines, tableName, startPattern, endPattern, linesToSkipAfterStart) {
diff --git a/src/web/js/azkaban/view/job-details.js b/src/web/js/azkaban/view/job-details.js
index ab77045..3bac395 100644
--- a/src/web/js/azkaban/view/job-details.js
+++ b/src/web/js/azkaban/view/job-details.js
@@ -45,11 +45,13 @@ azkaban.JobSummaryView = Backbone.View.extend({
 	},
 
 	initialize: function(settings) {
+		$("#jobType").hide();
 		$("#commandSummary").hide();
 		$("#pigJobSummary").hide();
 		$("#pigJobStats").hide();
 		$("#hiveJobSummary").hide();
 
+		this.listenTo(this.model, "change:jobType", this.renderJobTypeTable);
 		this.listenTo(this.model, "change:commandProperties", this.renderCommandTable);
 		this.listenTo(this.model, "change:pigSummary", this.renderPigSummaryTable);
 		this.listenTo(this.model, "change:pigStats", this.renderPigStatsTable);
@@ -65,6 +67,24 @@ azkaban.JobSummaryView = Backbone.View.extend({
 		renderJobTable(jobSummary.statTableHeaders, jobSummary.statTableData, "stats");
 		renderHiveTable(jobSummary.hiveQueries, jobSummary.hiveQueryJobs);
 	},
+
+	renderJobTypeTable: function() {
+		var jobTypeTable = $("#jobTypeTable");
+		var jobType = this.model.get("jobType");
+
+		var tr = document.createElement("tr");
+		var td = document.createElement("td");
+		$(td).html("<b>Job Type</b>");
+		$(tr).append(td);
+		td = document.createElement("td");
+		$(td).html(jobType);
+		$(tr).append(td);
+
+		jobTypeTable.append(tr);
+
+		$("#jobType").show();
+	},
+
 	renderCommandTable: function() {
 		var commandTable = $("#commandTable");
 		var commandProperties = this.model.get("commandProperties");