azkaban-aplcache

let user select UTC and PDT

9/27/2012 1:40:42 AM

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);
 	}
 
 	/**
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>
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();
+		  }
+	    
+	  }
+
+
+}