azkaban-aplcache

scheduled page is now functional

9/11/2012 3:44:09 PM

Details

diff --git a/src/java/azkaban/utils/WebUtils.java b/src/java/azkaban/utils/WebUtils.java
index b5aa5c0..b84c27a 100644
--- a/src/java/azkaban/utils/WebUtils.java
+++ b/src/java/azkaban/utils/WebUtils.java
@@ -1,11 +1,20 @@
 package azkaban.utils;
 
+import org.joda.time.DateTime;
+import org.joda.time.Days;
+import org.joda.time.DurationFieldType;
+import org.joda.time.Hours;
+import org.joda.time.Minutes;
+import org.joda.time.Months;
+import org.joda.time.ReadablePeriod;
+import org.joda.time.Seconds;
+import org.joda.time.Weeks;
 import org.joda.time.format.DateTimeFormat;
 
 import azkaban.executor.ExecutableFlow.Status;
 
 public class WebUtils {
-	public static final String DATE_TIME_STRING = "YYYY-MM-dd HH:MM:ss";
+	public static final String DATE_TIME_STRING = "YYYY-MM-dd HH:mm:ss";
 	
 	public String formatDate(long timeMS) {
 		if (timeMS == -1) {
@@ -74,6 +83,47 @@ public class WebUtils {
 		return "Unknown";
 	}
 	
+	public String formatDateTime(DateTime dt)
+	{
+		return DateTimeFormat.forPattern(DATE_TIME_STRING).print(dt);
+	}
+	
+	public String formatPeriod(ReadablePeriod period)
+	{
+        String periodStr = "n";
+
+        if (period == null) {
+            return periodStr;
+        }
+
+        if (period.get(DurationFieldType.months()) > 0) {
+            int months = period.get(DurationFieldType.months());
+            periodStr = months + " month(s)";
+        }
+        else if (period.get(DurationFieldType.weeks()) > 0) {
+            int weeks = period.get(DurationFieldType.weeks());
+            periodStr = weeks + " week(s)";
+        }
+        else if (period.get(DurationFieldType.days()) > 0) {
+            int days = period.get(DurationFieldType.days());
+            periodStr = days + " day(s)";
+        }
+        else if (period.get(DurationFieldType.hours()) > 0) {
+            int hours = period.get(DurationFieldType.hours());
+            periodStr = hours + " hour(s)";
+        }
+        else if (period.get(DurationFieldType.minutes()) > 0) {
+            int minutes = period.get(DurationFieldType.minutes());
+            periodStr = minutes + " minute(s)";
+        }
+        else if (period.get(DurationFieldType.seconds()) > 0) {
+            int seconds = period.get(DurationFieldType.seconds());
+            periodStr = seconds + " second(s)";
+        }
+        
+        return periodStr;
+	}
+	
 	public String extractNumericalId(String execId) {
 		int index = execId.indexOf('.');
 		int index2 = execId.indexOf('.', index+1);
diff --git a/src/java/azkaban/webapp/servlet/ScheduleServlet.java b/src/java/azkaban/webapp/servlet/ScheduleServlet.java
index e165df2..cb4f200 100644
--- a/src/java/azkaban/webapp/servlet/ScheduleServlet.java
+++ b/src/java/azkaban/webapp/servlet/ScheduleServlet.java
@@ -3,6 +3,7 @@ package azkaban.webapp.servlet;
 import java.io.IOException;
 import java.io.Writer;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 import javax.servlet.ServletConfig;
@@ -21,14 +22,17 @@ import org.joda.time.ReadablePeriod;
 import org.joda.time.Seconds;
 import org.joda.time.format.DateTimeFormat;
 
+import azkaban.executor.ExecutorManager.ExecutionReference;
 import azkaban.flow.Flow;
 import azkaban.project.Project;
 import azkaban.project.ProjectManager;
 import azkaban.project.ProjectManagerException;
 import azkaban.user.User;
 import azkaban.user.Permission.Type;
+import azkaban.webapp.servlet.HistoryServlet.PageSelection;
 import azkaban.webapp.session.Session;
 import azkaban.scheduler.ScheduleManager;
+import azkaban.scheduler.ScheduledFlow;
 
 public class ScheduleServlet extends LoginAbstractAzkabanServlet {
 	private static final long serialVersionUID = 1L;
@@ -42,15 +46,89 @@ public class ScheduleServlet extends LoginAbstractAzkabanServlet {
 		scheduleManager = this.getApplication().getScheduleManager();
 	}
 
+//	public class PageSelection {
+//		private int page;
+//		private int size;
+//		private boolean disabled;
+//		private boolean selected;
+//		
+//		public PageSelection(int page, int size, boolean disabled, boolean selected) {
+//			this.page = page;
+//			this.size = size;
+//			this.disabled = disabled;
+//			this.setSelected(selected);
+//		}
+//		
+//		public int getPage() {
+//			return page;
+//		}
+//		
+//		public int getSize() {
+//			return size;
+//		}
+//		
+//		public boolean getDisabled() {
+//			return disabled;
+//		}
+//
+//		public boolean isSelected() {
+//			return selected;
+//		}
+//
+//		public void setSelected(boolean selected) {
+//			this.selected = selected;
+//		}
+//	}
+	
 	@Override
-	protected void handleGet(HttpServletRequest req, HttpServletResponse resp, Session session) throws ServletException, IOException {
-		if (hasParam(req, "ajax")) {
-			handleAJAXAction(req, resp, session);
-		}
-//		else if (hasParam(req, "execid")) {
-//			handleExecutionFlowPage(req, resp, session);
+	protected void handleGet(HttpServletRequest req, HttpServletResponse resp,
+			Session session) throws ServletException, IOException {
+		Page page = newPage(req, resp, session, "azkaban/webapp/servlet/velocity/scheduledflowpage.vm");
+//		int pageNum = getIntParam(req, "page", 1);
+//		int pageSize = getIntParam(req, "size", 16);
+		
+//		if (pageNum < 0) {
+//			pageNum = 1;
+//		}
+		
+		List<ScheduledFlow> schedules = scheduleManager.getSchedule();
+		page.add("schedules", schedules);
+//		page.add("size", pageSize);
+//		page.add("page", pageNum);
+		
+//		if (pageNum == 1) {
+//			page.add("previous", new PageSelection(1, pageSize, true, false));
+//		}
+//		page.add("next", new PageSelection(pageNum + 1, pageSize, false, false));
+		// Now for the 5 other values.
+//		int pageStartValue = 1;
+//		if (pageNum > 3) {
+//			pageStartValue = pageNum - 2;
 //		}
+//		
+//		page.add("page1", new PageSelection(pageStartValue, pageSize, false, pageStartValue == pageNum));
+//		pageStartValue++;
+//		page.add("page2", new PageSelection(pageStartValue, pageSize, false, pageStartValue == pageNum));
+//		pageStartValue++;
+//		page.add("page3", new PageSelection(pageStartValue, pageSize, false, pageStartValue == pageNum));
+//		pageStartValue++;
+//		page.add("page4", new PageSelection(pageStartValue, pageSize, false, pageStartValue == pageNum));
+//		pageStartValue++;
+//		page.add("page5", new PageSelection(pageStartValue, pageSize, false, pageStartValue == pageNum));
+//		pageStartValue++;
+//		
+		page.render();
 	}
+	
+//	@Override
+//	protected void handleGet(HttpServletRequest req, HttpServletResponse resp, Session session) throws ServletException, IOException {
+//		if (hasParam(req, "ajax")) {
+//			handleAJAXAction(req, resp, session);
+//		}
+////		else if (hasParam(req, "execid")) {
+////			handleExecutionFlowPage(req, resp, session);
+////		}
+//	}
 
 	@Override
 	protected void handlePost(HttpServletRequest req, HttpServletResponse resp, Session session) throws ServletException, IOException {
@@ -64,26 +142,17 @@ public class ScheduleServlet extends LoginAbstractAzkabanServlet {
 		this.writeJSON(resp, ret);
 	}
 
-	private void handleAJAXAction(HttpServletRequest req, HttpServletResponse resp, Session session) throws ServletException, IOException {
-		HashMap<String, Object> ret = new HashMap<String, Object>();
-		String ajaxName = getParam(req, "ajax");
-		
-////		if (hasParam(req, "execid")) {
-////			if (ajaxName.equals("fetchexecflow")) {
-////				ajaxFetchExecutableFlow(req, resp, ret, session.getUser());
-////			}
-//////			else if (ajaxName.equals("fetchexecflowupdate")) {
-//////				ajaxFetchExecutableFlowUpdate(req, resp, ret, session.getUser());
-//////			}
+//	private void handleAJAXAction(HttpServletRequest req, HttpServletResponse resp, Session session) throws ServletException, IOException {
+//		HashMap<String, Object> ret = new HashMap<String, Object>();
+//		String ajaxName = getParam(req, "ajax");
+//		
+//		if (ajaxName.equals("scheduleFlow")) {
+//				ajaxScheduleFlow(req, ret, session.getUser());
 //		}
-//		if(hasParam(req, "schedule")) {
-		
-		if (ajaxName.equals("scheduleFlow")) {
-				ajaxScheduleFlow(req, ret, session.getUser());
-		}
-//		}
-		this.writeJSON(resp, ret);
-	}
+////		}
+//		this.writeJSON(resp, ret);
+//	}
+//	
 	
 	private void ajaxScheduleFlow(HttpServletRequest req, Map<String, Object> ret, User user) throws ServletException {
 		String projectId = getParam(req, "projectId");
@@ -155,9 +224,7 @@ public class ScheduleServlet extends LoginAbstractAzkabanServlet {
 		ret.put("message", scheduleId + " scheduled.");
 	
 	}
-			
-	
-	
+				
 	private ReadablePeriod parsePeriod(HttpServletRequest req) throws ServletException {
 			int period = getIntParam(req, "period");
 			String periodUnits = getParam(req, "period_units");
diff --git a/src/web/js/azkaban.flow.view.js b/src/web/js/azkaban.flow.view.js
index 891bda0..c204351 100644
--- a/src/web/js/azkaban.flow.view.js
+++ b/src/web/js/azkaban.flow.view.js
@@ -876,7 +876,7 @@ azkaban.ScheduleFlowView = Backbone.View.extend({
      var periodVal = $('#period').val();
      var periodUnits = $('#period_units').val();
 
-     console.log("Creating schedule");
+     console.log("Creating schedule for "+projectName+"."+flowName);
      $.ajax({
         async: "false",
         url: "schedule",
@@ -898,6 +898,7 @@ azkaban.ScheduleFlowView = Backbone.View.extend({
 		},
         success: function(data) {
                 if (data.status == "success") {
+			console.log("Successfully scheduled for "+projectName+"."+flowName);
                         if (data.action == "redirect") {
                                 //window.location = data.path;
                                 window.loaction = contextURL + "/manager?project=" + projectName + "&flow=" + flowName ;