azkaban-aplcache

Details

diff --git a/src/java/azkaban/scheduler/LocalFileScheduleLoader.java b/src/java/azkaban/scheduler/LocalFileScheduleLoader.java
index a81f27f..64d7654 100644
--- a/src/java/azkaban/scheduler/LocalFileScheduleLoader.java
+++ b/src/java/azkaban/scheduler/LocalFileScheduleLoader.java
@@ -13,8 +13,11 @@ import java.util.List;
 import org.apache.log4j.Logger;
 import org.joda.time.DateTime;
 import org.joda.time.DateTimeZone;
-import org.joda.time.Days;
+
 import org.joda.time.DurationFieldType;
+import org.joda.time.Months;
+import org.joda.time.Weeks;
+import org.joda.time.Days;
 import org.joda.time.Hours;
 import org.joda.time.Minutes;
 import org.joda.time.ReadablePeriod;
@@ -272,6 +275,12 @@ public class LocalFileScheduleLoader implements ScheduleLoader {
 
         int periodInt = Integer.parseInt(periodStr.substring(0, periodStr.length() - 1));
         switch (periodUnit) {
+        	case 'M':
+        		period = Months.months(periodInt);
+        		break;
+        	case 'w':
+        		period = Weeks.weeks(periodInt);
+        		break;
             case 'd':
                 period = Days.days(periodInt);
                 break;
@@ -299,7 +308,15 @@ public class LocalFileScheduleLoader implements ScheduleLoader {
             return "n";
         }
 
-        if (period.get(DurationFieldType.days()) > 0) {
+        if (period.get(DurationFieldType.months()) > 0) {
+            int months = period.get(DurationFieldType.months());
+            periodStr = months + "M";
+        }
+        else if (period.get(DurationFieldType.weeks()) > 0) {
+            int weeks = period.get(DurationFieldType.weeks());
+            periodStr = weeks + "w";
+        }
+        else if (period.get(DurationFieldType.days()) > 0) {
             int days = period.get(DurationFieldType.days());
             periodStr = days + "d";
         }
diff --git a/src/java/azkaban/scheduler/ScheduledFlow.java b/src/java/azkaban/scheduler/ScheduledFlow.java
index 25b80f4..0b1f486 100644
--- a/src/java/azkaban/scheduler/ScheduledFlow.java
+++ b/src/java/azkaban/scheduler/ScheduledFlow.java
@@ -236,7 +236,7 @@ public class ScheduledFlow {
         return "ScheduledFlow{" +
 //        	   "scheduleStatus=" + schedStatus +
                "nextExecTime=" + nextExecTime +
-               ", period=" + period +
+               ", period=" + period.toString() +
                ", firstSchedTime=" + firstSchedTime +
                ", submitTime=" + submitTime +
                ", userSubmit=" + userSubmit +
diff --git a/src/java/azkaban/webapp/servlet/ScheduleServlet.java b/src/java/azkaban/webapp/servlet/ScheduleServlet.java
index b000573..e165df2 100644
--- a/src/java/azkaban/webapp/servlet/ScheduleServlet.java
+++ b/src/java/azkaban/webapp/servlet/ScheduleServlet.java
@@ -11,6 +11,8 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 import org.joda.time.DateTime;
+import org.joda.time.Months;
+import org.joda.time.Weeks;
 import org.joda.time.Days;
 import org.joda.time.Hours;
 import org.joda.time.LocalDateTime;
@@ -111,9 +113,8 @@ public class ScheduleServlet extends LoginAbstractAzkabanServlet {
 		int hour = getIntParam(req, "hour");
 		int minutes = getIntParam(req, "minutes");
 		boolean isPm = getParam(req, "am_pm").equalsIgnoreCase("pm");
-//		int hour = 0;
-//		int minutes = 0;
-//		boolean isPm = false;
+
+
 		String scheduledDate = req.getParameter("date");
 		DateTime day = null;
 		if(scheduledDate == null || scheduledDate.trim().length() == 0) {
@@ -128,15 +129,20 @@ public class ScheduleServlet extends LoginAbstractAzkabanServlet {
 		}
 
 		ReadablePeriod thePeriod = null;
-		if(hasParam(req, "is_recurring"))
-		    thePeriod = parsePeriod(req);
+		try {
+			if(hasParam(req, "is_recurring"))
+			    thePeriod = parsePeriod(req);	
+		}
+		catch(Exception e){
+			ret.put("error", e.getMessage());
+		}
 
 		if(isPm && hour < 12)
 		    hour += 12;
 		hour %= 24;
 
 		String userSubmit = user.getUserId();
-		String userExec = getParam(req, "userExec");
+		String userExec = userSubmit;//getParam(req, "userExec");
 		String scheduleId = projectId + "." + flowId;
 		DateTime submitTime = new DateTime();
 		DateTime firstSchedTime = day.withHourOfDay(hour).withMinuteOfHour(minutes).withSecondOfMinute(0);
@@ -155,7 +161,11 @@ public class ScheduleServlet extends LoginAbstractAzkabanServlet {
 	private ReadablePeriod parsePeriod(HttpServletRequest req) throws ServletException {
 			int period = getIntParam(req, "period");
 			String periodUnits = getParam(req, "period_units");
-			if("d".equals(periodUnits))
+			if("M".equals(periodUnits))
+				return Months.months(period);
+			else if("w".equals(periodUnits))
+				return Weeks.weeks(period);
+			else if("d".equals(periodUnits))
 				return Days.days(period);
 			else if("h".equals(periodUnits))
 				return Hours.hours(period);
diff --git a/src/java/azkaban/webapp/servlet/velocity/flowpage.vm b/src/java/azkaban/webapp/servlet/velocity/flowpage.vm
index aa5f899..3e2c673 100644
--- a/src/java/azkaban/webapp/servlet/velocity/flowpage.vm
+++ b/src/java/azkaban/webapp/servlet/velocity/flowpage.vm
@@ -118,7 +118,7 @@
                         <h3>Schedulemm A Flow</h3>
                         <div id="errorMsg" class="box-error-message">$errorMsg</div>
 
-                        <div class="message">
+                        <!--div class="message">
                                 <fieldset>
                                         <dl>
                                                 <dt><label for="path">Project Name</label></dt>
@@ -130,13 +130,13 @@
                                                 <input name="redirect" type="hidden" value="$!context/" />
                                         </dl>
                                 </fieldset>
-                        </div>
+                        </div-->
 
 						<div class="box">
                                         <form id="sched-form" method="post" action="${context}/">
                                                 <div class="sched-form">
                                                   <div>
-                                                    <!input type="hidden" name="action" value="schedule"/-->
+                                                    <!--input type="hidden" name="action" value="schedule"/-->
                                                     Schedule to run at
                                                     <input id="hour" type="text" size="2" value="12"/> :
                                                     <input id="minutes" type="text" size="2" value="00"/>
@@ -155,6 +155,8 @@
                                                     repeat every
                                                     <input id="period" type="text" size="2" value="1"/>
                                                     <select id="period_units">
+                                                      <option value="M">Months</option>
+                                                      <option value="w">Weeks</option>
                                                       <option value="d">Days</option>
                                                       <option value="h">Hours</option>
                                                       <option value="m">Minutes</option>
diff --git a/src/web/js/azkaban.flow.view.js b/src/web/js/azkaban.flow.view.js
index 85165de..891bda0 100644
--- a/src/web/js/azkaban.flow.view.js
+++ b/src/web/js/azkaban.flow.view.js
@@ -904,6 +904,7 @@ azkaban.ScheduleFlowView = Backbone.View.extend({
                         }
 			else{
 				$("#errorMsg").text("Flow " + projectName + "." + flowName + " scheduled!" );			
+				alert("Flow " + projectName + "." + flowName + " scheduled!");
  				window.location = contextURL + "/manager?project=" + projectName + "&flow=" + flowName ; 
 			}
                 }