azkaban-uncached

Redesign schedule panel to use time picker. Still need to correctly

12/25/2013 11:55:57 PM

Details

ISSUES 3(+2 -1)

diff --git a/ISSUES b/ISSUES
index 706c515..c15dc3f 100644
--- a/ISSUES
+++ b/ISSUES
@@ -6,5 +6,6 @@
  - Fix sidebar on graph views.
  - Unify error messages.
  - Change chevron on My Projects list to proper expanders.
- - Redesign Project Page flows list.
  - Fix dependency hovering for job list on flows page
+ - Fix bootstrap-datetimepicker to support picking time durations
+ - Properly connect values of new datetimepickers with back-end
diff --git a/src/java/azkaban/webapp/servlet/velocity/flowexecutionpanel.vm b/src/java/azkaban/webapp/servlet/velocity/flowexecutionpanel.vm
index 038dcc4..2863c89 100644
--- a/src/java/azkaban/webapp/servlet/velocity/flowexecutionpanel.vm
+++ b/src/java/azkaban/webapp/servlet/velocity/flowexecutionpanel.vm
@@ -198,7 +198,7 @@
 #end
 *#
 							<button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
-							<button type="button" class="btn btn-primary" id="execute-btn">Execute</button>
+							<button type="button" class="btn btn-success" id="execute-btn">Execute</button>
 						</div><!-- /modal-footer -->
 					</div><!-- /modal-content -->
 				</div><!-- /modal-dialog -->
diff --git a/src/java/azkaban/webapp/servlet/velocity/jobpage.vm b/src/java/azkaban/webapp/servlet/velocity/jobpage.vm
index 3ee11c4..b2da81d 100644
--- a/src/java/azkaban/webapp/servlet/velocity/jobpage.vm
+++ b/src/java/azkaban/webapp/servlet/velocity/jobpage.vm
@@ -56,7 +56,7 @@
           </div>
           <div class="col-lg-6">
             <div class="pull-right az-page-header-form">
-              <a href="${context}/manager?project=${project.name}&job=$jobid&history" class="btn btn-default btn-sm">History</a>
+              <a href="${context}/manager?project=${project.name}&job=$jobid&history" class="btn btn-info btn-sm">History</a>
             </div>
             <div class="clearfix"></div>
           </div>
diff --git a/src/java/azkaban/webapp/servlet/velocity/projectlogpage.vm b/src/java/azkaban/webapp/servlet/velocity/projectlogpage.vm
index bec33e7..ebdf2dc 100644
--- a/src/java/azkaban/webapp/servlet/velocity/projectlogpage.vm
+++ b/src/java/azkaban/webapp/servlet/velocity/projectlogpage.vm
@@ -68,7 +68,17 @@
 							</div>
 							Audit Logs
 						</div>
-						<table class="table table-striped" id="logTable">
+            <table class="table table-striped" id="logTable">
+              <thead>
+                <tr>
+                  <th>Time</th>
+                  <th>User</th>
+                  <th>Type</th>
+                  <th>Message</th>
+                </tr>
+              </thead>
+              <tbody>
+              </tbody>
 						</table>
 					</div>
 				</div>
diff --git a/src/java/azkaban/webapp/servlet/velocity/projectpage.vm b/src/java/azkaban/webapp/servlet/velocity/projectpage.vm
index b1b1a5d..e2d0b5a 100644
--- a/src/java/azkaban/webapp/servlet/velocity/projectpage.vm
+++ b/src/java/azkaban/webapp/servlet/velocity/projectpage.vm
@@ -73,7 +73,7 @@
                 <div class="panel-heading flow-expander" id="${flow.id}">
 			#if (${exec})
                 <div class="pull-right">
-                  <button type="button" class="btn btn-xs btn-primary execute-flow" flowId="${flow.id}">Execute Flow</button>
+                  <button type="button" class="btn btn-xs btn-success execute-flow" flowId="${flow.id}">Execute Flow</button>
                   <a href="${context}/manager?project=${project.name}&flow=${flow.id}#executions" class="btn btn-info btn-xs">Executions</a>
                   <a href="${context}/manager?project=${project.name}&flow=${flow.id}#summary" class="btn btn-info btn-xs">Summary</a>
                 </div>
diff --git a/src/java/azkaban/webapp/servlet/velocity/schedulepanel.vm b/src/java/azkaban/webapp/servlet/velocity/schedulepanel.vm
index 7fc469c..b0e58e8 100644
--- a/src/java/azkaban/webapp/servlet/velocity/schedulepanel.vm
+++ b/src/java/azkaban/webapp/servlet/velocity/schedulepanel.vm
@@ -25,60 +25,51 @@
 							<h4 class="modal-title">Schedule Flow Options</h4>
 						</div><!-- /modal-header -->
 						<div class="modal-body">
-							<fieldset>
+							<fieldset class="form-horizontal">
 								<div class="form-group">
-									<label>Schedule Time</label>
-									<div class="form-inline">
-										<div class="form-group">
-											<input id="hour" type="text" size="2" value="12" class="form-control">
-										</div>
-										<div class="form-group">
-											<input id="minutes" type="text" size="2" value="00" class="form-control">
-										</div>
-										<div class="form-group">
-											<select id="am_pm" class="form-control">
-												<option>pm</option>
-												<option>am</option>
-											</select>
-										</div>
-										<div class="form-group">
-											<select id="timezone" class="form-control">
-												<option>${timezone}</option>
-												<option>UTC</option>
-											</select>
-										</div>
-									</div>
+                  <label class="col-sm-2 control-label">Time</label>
+                  <div class="col-sm-8">
+                    <input type="text" id="timepicker" class="form-control">
+                  </div>
+                  <div class="col-sm-2">
+                    <select id="timezone" class="form-control">
+                      <option>${timezone}</option>
+                      <option>UTC</option>
+                    </select>
+                  </div>
 								</div>
 								<div class="form-group">
-									<label>Schedule Date</label>
-									<input type="text" id="datepicker" class="form-control">
+                  <label class="col-sm-2 control-label">Date</label>
+                  <div class="col-sm-10">
+                    <input type="text" id="datepicker" class="form-control">
+                  </div>
 								</div>
 								<div class="form-group">
-									<label>Recurrence</label>
-									<div class="form-inline">
-										<div class="checkbox">
-											<input id="is_recurring" type="checkbox" checked="checked">
-											<label>repeat every</label>
-										</div>
-										<div class="form-group">
-											<input id="period" type="text" size="2" value="1" class="form-control">
-										</div>
-										<div class="form-group">
-											<select id="period_units" class="form-control">
-												<option value="d">Days</option>
-												<option value="h">Hours</option>
-												<option value="m">Minutes</option>
-												<option value="M">Months</option>
-												<option value="w">Weeks</option>
-											</select>
-										</div>
-									</div>
+                  <label class="col-sm-2">Recurrence</label>
+                  <div class="col-sm-3">
+                    <div class="checkbox">
+                      <input id="is_recurring" type="checkbox" checked="checked">
+                      <label>repeat every</label>
+                    </div>
+                  </div>
+                  <div class="col-sm-2">
+                    <input id="period" type="text" size="2" value="1" class="form-control">
+                  </div>
+                  <div class="col-sm-2">
+                    <select id="period_units" class="form-control">
+                      <option value="d">Days</option>
+                      <option value="h">Hours</option>
+                      <option value="m">Minutes</option>
+                      <option value="M">Months</option>
+                      <option value="w">Weeks</option>
+                    </select>
+                  </div>
 								</div>
 							</fieldset>
 						</div>
 						<div class="modal-footer">
 							<button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
-							<button type="button" class="btn btn-primary" id="schedule-button">Schedule</button>
+							<button type="button" class="btn btn-success" id="schedule-button">Schedule</button>
 						</div>
 					</div>
 				</div>
diff --git a/src/web/js/azkaban.projectlog.view.js b/src/web/js/azkaban.projectlog.view.js
index 79c257a..0653146 100644
--- a/src/web/js/azkaban.projectlog.view.js
+++ b/src/web/js/azkaban.projectlog.view.js
@@ -35,74 +35,78 @@ var typeMapping = {
 var projectLogView;
 azkaban.ProjectLogView = Backbone.View.extend({
 	events: {
-		"click #updateLogBtn" : "handleUpdate"
+		"click #updateLogBtn": "handleUpdate"
 	},
-	initialize: function(settings) {
+	
+  initialize: function(settings) {
 		this.model.set({"current": 0});
 		this.handleUpdate();
 	},
-	handleUpdate: function(evt) {
+	
+  handleUpdate: function(evt) {
 		var current = this.model.get("current");
 		var requestURL = contextURL + "/manager"; 
 		var model = this.model;
+    var requestData = {
+      "project": projectName, 
+      "ajax": "fetchProjectLogs", 
+      "size": 1000, 
+      "skip": 0 
+    };
 
-		$.get(
-			requestURL,
-			{"project": projectName, "ajax":"fetchProjectLogs", "size": 1000, "skip": 0 },
-			function(data) {
+		var successHandler = function(data) {
 			console.log("fetchLogs");
-	          	if (data.error) {
-	          		showDialog("Error", data.error);
-	          	}
-	          	else {
-	          		// Get the columns to map to the values.
-	          		var columns = data.columns;
-	          		var columnMap = {};
-	          		for (var i =0; i < columns.length; ++i) {
-	          			columnMap[columns[i]] = i;
-	          		}
-	          		var logSection = $("#logTable");
-	          		$(logSection).empty();
-	          		var logData = data.logData;
-	          		for (var i = 0; i < logData.length; ++i) {
-	          			var event = logData[i];
-	          			var user = event[columnMap['user']];
-	          			var time = event[columnMap['time']];
-	          			var type = event[columnMap['type']];
-	          			var message = event[columnMap['message']];
-	          			
-	          			var containerEvent = document.createElement("tr");
-	          			$(containerEvent).addClass("projectEvent");
-	          			
-	          			var containerTime = document.createElement("td");
-	          			$(containerTime).addClass("time");
-	          			$(containerTime).text(getDateFormat(new Date(time)));
-	          			
-	          			var containerUser = document.createElement("td");
-	          			$(containerUser).addClass("user");
-	          			$(containerUser).text(user);
-	          			
-	          			var containerType = document.createElement("td");
-	          			$(containerType).addClass("type");
-	          			$(containerType).addClass(type);
-	          			$(containerType).text(typeMapping[type] ? typeMapping[type] : type);
-	          		
-	          			var containerMessage = document.createElement("td");
-	          			$(containerMessage).addClass("message");
-	          			$(containerMessage).text(message);
-	          			
-	          			$(containerEvent).append(containerTime);
-	          			$(containerEvent).append(containerUser);
-	          			$(containerEvent).append(containerType);
-	          			$(containerEvent).append(containerMessage);
-	          			
-	          			$(logSection).append(containerEvent);
-	          		}
-	          		
-	          		model.set({"log": data});
-	          	}
-	         }
-		);
+      if (data.error) {
+        showDialog("Error", data.error);
+        return;
+      }
+      // Get the columns to map to the values.
+      var columns = data.columns;
+      var columnMap = {};
+      for (var i =0; i < columns.length; ++i) {
+        columnMap[columns[i]] = i;
+      }
+      var logSection = $("#logTable").find("tbody")[0];
+      $(logSection).empty();
+      var logData = data.logData;
+      for (var i = 0; i < logData.length; ++i) {
+        var event = logData[i];
+        var user = event[columnMap['user']];
+        var time = event[columnMap['time']];
+        var type = event[columnMap['type']];
+        var message = event[columnMap['message']];
+        
+        var containerEvent = document.createElement("tr");
+        $(containerEvent).addClass("projectEvent");
+        
+        var containerTime = document.createElement("td");
+        $(containerTime).addClass("time");
+        $(containerTime).text(getDateFormat(new Date(time)));
+        
+        var containerUser = document.createElement("td");
+        $(containerUser).addClass("user");
+        $(containerUser).text(user);
+        
+        var containerType = document.createElement("td");
+        $(containerType).addClass("type");
+        $(containerType).addClass(type);
+        $(containerType).text(typeMapping[type] ? typeMapping[type] : type);
+      
+        var containerMessage = document.createElement("td");
+        $(containerMessage).addClass("message");
+        $(containerMessage).text(message);
+        
+        $(containerEvent).append(containerTime);
+        $(containerEvent).append(containerUser);
+        $(containerEvent).append(containerType);
+        $(containerEvent).append(containerMessage);
+        
+        $(logSection).append(containerEvent);
+      }
+      
+      model.set({"log": data});
+    };
+		$.get(requestURL, requestData, successHandler);
 	}
 });
 
@@ -112,16 +116,16 @@ var showDialog = function(title, message) {
   $('#messageBox').text(message);
 
   $('#messageDialog').modal({
-      closeHTML: "<a href='#' title='Close' class='modal-close'>x</a>",
-      position: ["20%",],
-      containerId: 'confirm-container',
-      containerCss: {
-        'height': '220px',
-        'width': '565px'
-      },
-      onShow: function (dialog) {
-      }
-    });
+	  closeHTML: "<a href='#' title='Close' class='modal-close'>x</a>",
+	  position: ["20%",],
+	  containerId: 'confirm-container',
+	  containerCss: {
+		'height': '220px',
+		'width': '565px'
+	  },
+	  onShow: function (dialog) {
+	  }
+	});
 }
 
 
diff --git a/src/web/js/azkaban.schedule.panel.view.js b/src/web/js/azkaban.schedule.panel.view.js
index 1541fbb..bcd8ccd 100644
--- a/src/web/js/azkaban.schedule.panel.view.js
+++ b/src/web/js/azkaban.schedule.panel.view.js
@@ -23,7 +23,7 @@ azkaban.SchedulePanelView = Backbone.View.extend({
 	},
 
 	initialize: function(settings) {
-		$("#datepicker").css("backgroundColor", "transparent");
+		$("#timepicker").datetimepicker({pickDate: false});
 		$("#datepicker").datetimepicker({pickTime: false});
 	},
 
@@ -75,11 +75,9 @@ azkaban.SchedulePanelView = Backbone.View.extend({
 			}
 			else {
 				schedulePanelView.hideSchedulePanel();
-				messageDialogView.show("Flow Scheduled", data.message,
-					function() {
-						window.location.href = scheduleURL;
-					}
-				);
+				messageDialogView.show("Flow Scheduled", data.message, function() {
+          window.location.href = scheduleURL;
+        });
 			}
 		};