azkaban-aplcache
Details
diff --git a/src/java/azkaban/scheduler/ScheduledFlow.java b/src/java/azkaban/scheduler/ScheduledFlow.java
index 20a22b8..54a7211 100644
--- a/src/java/azkaban/scheduler/ScheduledFlow.java
+++ b/src/java/azkaban/scheduler/ScheduledFlow.java
@@ -103,7 +103,7 @@ public class ScheduledFlow {
DateTime firstSchedTime,
ReadablePeriod period)
{
- this(scheduleId, projectId, flowId, user, userSubmit, submitTime, firstSchedTime, new DateTime(), period);
+ this(scheduleId, projectId, flowId, user, userSubmit, submitTime, firstSchedTime, new DateTime().withZone(firstSchedTime.getZone()), period);
}
public ScheduledFlow(
@@ -115,7 +115,7 @@ public class ScheduledFlow {
DateTime submitTime,
DateTime firstSchedTime)
{
- this(scheduleId, projectId, flowId, user, userSubmit, submitTime, firstSchedTime, new DateTime(), null);
+ this(scheduleId, projectId, flowId, user, userSubmit, submitTime, firstSchedTime, new DateTime().withZone(firstSchedTime.getZone()), null);
}
/**
src/java/azkaban/utils/Mailman.java 76(+60 -16)
diff --git a/src/java/azkaban/utils/Mailman.java b/src/java/azkaban/utils/Mailman.java
index 38e812b..c91252d 100644
--- a/src/java/azkaban/utils/Mailman.java
+++ b/src/java/azkaban/utils/Mailman.java
@@ -17,9 +17,14 @@
package azkaban.utils;
import java.util.List;
+import java.util.Properties;
+import javax.mail.Message;
import javax.mail.MessagingException;
+import javax.mail.Session;
import javax.mail.internet.AddressException;
+import javax.mail.internet.InternetAddress;
+import javax.mail.internet.MimeMessage;
import org.apache.commons.mail.EmailException;
@@ -27,6 +32,8 @@ import org.apache.commons.mail.SimpleEmail;
import org.apache.log4j.Logger;
+import com.sun.mail.smtp.SMTPTransport;
+
/**
* The mailman send you mail, if you ask him
*
@@ -39,6 +46,8 @@ public class Mailman {
private final String _mailUser;
private final String _mailPassword;
private final String _mailSender;
+
+ private final String protocol = "smtp";
public Mailman(String mailHost, String mailUser, String mailPassword,
String mailSender) {
@@ -50,26 +59,61 @@ public class Mailman {
public void sendEmail(String fromAddress, List<String> toAddress,
String subject, String body) throws MessagingException {
- SimpleEmail email = new SimpleEmail();
+ //session
+ Properties props = new Properties();
+ props.put("mail." + protocol + ".host", _mailHost);
+ props.put("mail." + protocol + ".auth", "true");
+
+ Session session = Session.getInstance(props, null);
+ session.setDebug(true);
+
+ //email message
+ Message msg = new MimeMessage(session);
+ msg.setFrom(new InternetAddress(fromAddress));
+ for(String str : toAddress) {
+ msg.addRecipients(Message.RecipientType.TO, InternetAddress.parse(str));
+ }
+
+ msg.setSubject(subject);
+ msg.setText(body);
+
+ //transport
+ SMTPTransport t = (SMTPTransport)session.getTransport(protocol);
+
try {
- email.setHostName(_mailHost);
-
- for (String addr : toAddress) {
- email.addTo(addr);
- }
-
- email.setFrom(fromAddress);
- email.setSubject(subject);
-
- email.setMsg(body);
- email.setDebug(true);
- email.send();
- } catch (EmailException e) {
- logger.error(e);
- } catch (Exception e) {
+ t.connect(_mailHost, _mailUser, _mailPassword);
+ t.sendMessage(msg, msg.getAllRecipients());
+ }
+ catch (Exception e) {
logger.error(e);
}
+ finally {
+ t.close();
+ }
+
+
+
+// SimpleEmail email = new SimpleEmail();
+//
+// try {
+// email.setHostName(_mailHost);
+//
+// for (String addr : toAddress) {
+// email.addTo(addr);
+// }
+//
+// email.setFrom(fromAddress);
+// email.setSubject(subject);
+//
+// email.setMsg(body);
+// email.setDebug(true);
+// email.send();
+// } catch (EmailException e) {
+// logger.error(e);
+// } catch (Exception e) {
+// logger.error(e);
+// }
}
diff --git a/src/java/azkaban/webapp/servlet/ScheduleServlet.java b/src/java/azkaban/webapp/servlet/ScheduleServlet.java
index bafb86b..211ea49 100644
--- a/src/java/azkaban/webapp/servlet/ScheduleServlet.java
+++ b/src/java/azkaban/webapp/servlet/ScheduleServlet.java
@@ -12,6 +12,7 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
import org.joda.time.Months;
import org.joda.time.Weeks;
import org.joda.time.Days;
@@ -144,6 +145,8 @@ public class ScheduleServlet extends LoginAbstractAzkabanServlet {
int hour = getIntParam(req, "hour");
int minutes = getIntParam(req, "minutes");
boolean isPm = getParam(req, "am_pm").equalsIgnoreCase("pm");
+
+ DateTimeZone timezone = getParam(req, "timezone").equals("UTC") ? DateTimeZone.UTC : DateTimeZone.forID("America/Los_Angeles");
String scheduledDate = req.getParameter("date");
@@ -152,7 +155,7 @@ public class ScheduleServlet extends LoginAbstractAzkabanServlet {
day = new LocalDateTime().toDateTime();
} else {
try {
- day = DateTimeFormat.forPattern("MM/dd/yyyy").parseDateTime(scheduledDate);
+ day = DateTimeFormat.forPattern("MM/dd/yyyy").withZone(timezone).parseDateTime(scheduledDate);
} catch(IllegalArgumentException e) {
ret.put("error", "Invalid date: '" + scheduledDate + "'");
return;
@@ -175,7 +178,7 @@ public class ScheduleServlet extends LoginAbstractAzkabanServlet {
String userSubmit = user.getUserId();
String userExec = userSubmit;//getParam(req, "userExec");
String scheduleId = projectId + "." + flowId;
- DateTime submitTime = new DateTime();
+ DateTime submitTime = new DateTime().withZone(timezone);
DateTime firstSchedTime = day.withHourOfDay(hour).withMinuteOfHour(minutes).withSecondOfMinute(0);
ScheduledFlow schedFlow = scheduleManager.schedule(scheduleId, projectId, flowId, userExec, userSubmit, submitTime, firstSchedTime, thePeriod);
diff --git a/src/java/azkaban/webapp/servlet/velocity/flowpage.vm b/src/java/azkaban/webapp/servlet/velocity/flowpage.vm
index 57d0b4c..3e316a2 100644
--- a/src/java/azkaban/webapp/servlet/velocity/flowpage.vm
+++ b/src/java/azkaban/webapp/servlet/velocity/flowpage.vm
@@ -144,7 +144,10 @@
<option>pm</option>
<option>am</option>
</select>
- $timezone
+ <select id="timezone">
+ <option>PDT</option>
+ <option>UTC</option>
+ </select>
on
<br>
<p>Date: <input type="text" id="datepicker"></p>
src/web/js/azkaban.flow.view.js 2(+2 -0)
diff --git a/src/web/js/azkaban.flow.view.js b/src/web/js/azkaban.flow.view.js
index 9555055..ed7cbbd 100644
--- a/src/web/js/azkaban.flow.view.js
+++ b/src/web/js/azkaban.flow.view.js
@@ -871,6 +871,7 @@ azkaban.ScheduleFlowView = Backbone.View.extend({
var hourVal = $('#hour').val();
var minutesVal = $('#minutes').val();
var ampmVal = $('#am_pm').val();
+ var timezoneVal = $('#timezone').val();
var dateVal = $('#datepicker').val();
var is_recurringVal = $('#is_recurring').val();
var periodVal = $('#period').val();
@@ -890,6 +891,7 @@ azkaban.ScheduleFlowView = Backbone.View.extend({
hour:hourVal,
minutes:minutesVal,
am_pm:ampmVal,
+ timezone:timezoneVal,
date:dateVal,
userExec:"dummy",
is_recurring:is_recurringVal,
diff --git a/unit/java/azkaban/test/utils/MailmanTest.java b/unit/java/azkaban/test/utils/MailmanTest.java
new file mode 100644
index 0000000..3406114
--- /dev/null
+++ b/unit/java/azkaban/test/utils/MailmanTest.java
@@ -0,0 +1,58 @@
+package azkaban.test.utils;
+
+import static org.junit.Assert.*;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.log4j.Logger;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+import azkaban.utils.Mailman;
+
+
+public class MailmanTest {
+
+ private Mailman mailer;
+
+ private String user = "cyu";
+ private String password;
+ private String host = "email.corp.linkedin.com";
+ private String mailSender = "cyu@linkedin.com";
+
+ private Logger logger = Logger.getLogger(Mailman.class);
+
+ @Before
+ public void setUp() {
+
+ mailer = new Mailman(host, user, password, mailSender);
+
+
+ }
+
+ @Test
+ public void testSendEmail() {
+
+ String fromAddress = "cyu@linkedin.com";
+ List<String> toAddress = new ArrayList<String>();
+ //toAddress.add("cyu@linkedin.com");
+ toAddress.add("azkaban-test@linkedin.com");
+
+ String subject = "Azkaban Test email subject";
+ String body = "Azkaban Test email body";
+
+ try {
+ mailer.sendEmail(fromAddress, toAddress, subject, body);
+ }
+ catch (Exception e) {
+ Assert.assertTrue(true);
+ //please check email to see if this works
+ e.printStackTrace();
+ }
+
+ }
+
+
+}