azkaban-aplcache
Changes
src/java/azkaban/utils/WebUtils.java 52(+51 -1)
src/java/azkaban/webapp/servlet/ScheduleServlet.java 123(+95 -28)
src/web/js/azkaban.flow.view.js 3(+2 -1)
Details
src/java/azkaban/utils/WebUtils.java 52(+51 -1)
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);
src/java/azkaban/webapp/servlet/ScheduleServlet.java 123(+95 -28)
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");
src/web/js/azkaban.flow.view.js 3(+2 -1)
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 ;