You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by sh...@apache.org on 2015/04/27 22:10:48 UTC
airavata git commit: Removed Email Parser Object creation in every
request and add exit status check in UGE Email parser
Repository: airavata
Updated Branches:
refs/heads/master 8ad2e036d -> ee139aeaf
Removed Email Parser Object creation in every request and add exit status check in UGE Email parser
Project: http://git-wip-us.apache.org/repos/asf/airavata/repo
Commit: http://git-wip-us.apache.org/repos/asf/airavata/commit/ee139aea
Tree: http://git-wip-us.apache.org/repos/asf/airavata/tree/ee139aea
Diff: http://git-wip-us.apache.org/repos/asf/airavata/diff/ee139aea
Branch: refs/heads/master
Commit: ee139aeaf1e84d4aa7aacf71003c448598ac2f0e
Parents: 8ad2e03
Author: shamrath <sh...@gmail.com>
Authored: Mon Apr 27 16:10:45 2015 -0400
Committer: shamrath <sh...@gmail.com>
Committed: Mon Apr 27 16:10:45 2015 -0400
----------------------------------------------------------------------
.../gfac/monitor/email/EmailBasedMonitor.java | 40 +++++++++++--------
.../monitor/email/parser/UGEEmailParser.java | 42 ++++++++++++++++----
2 files changed, 57 insertions(+), 25 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/airavata/blob/ee139aea/modules/gfac/gfac-monitor/gfac-email-monitor/src/main/java/org/apache/airavata/gfac/monitor/email/EmailBasedMonitor.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-monitor/gfac-email-monitor/src/main/java/org/apache/airavata/gfac/monitor/email/EmailBasedMonitor.java b/modules/gfac/gfac-monitor/gfac-email-monitor/src/main/java/org/apache/airavata/gfac/monitor/email/EmailBasedMonitor.java
index 4a4e4d54d..1ec0c87 100644
--- a/modules/gfac/gfac-monitor/gfac-email-monitor/src/main/java/org/apache/airavata/gfac/monitor/email/EmailBasedMonitor.java
+++ b/modules/gfac/gfac-monitor/gfac-email-monitor/src/main/java/org/apache/airavata/gfac/monitor/email/EmailBasedMonitor.java
@@ -51,6 +51,7 @@ import javax.mail.search.FlagTerm;
import javax.mail.search.SearchTerm;
import java.util.ArrayList;
import java.util.Date;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
@@ -71,6 +72,7 @@ public class EmailBasedMonitor implements Runnable{
private Map<String, JobExecutionContext> jobMonitorMap = new ConcurrentHashMap<String, JobExecutionContext>();
private String host, emailAddress, password, storeProtocol, folderName ;
private Date monitorStartDate;
+ private Map<ResourceJobManagerType, EmailParser> emailParserMap = new HashMap<ResourceJobManagerType, EmailParser>();
public EmailBasedMonitor(ResourceJobManagerType type) throws AiravataException {
init();
@@ -105,24 +107,28 @@ public class EmailBasedMonitor implements Runnable{
private JobStatusResult parse(Message message) throws MessagingException, AiravataException {
Address fromAddress = message.getFrom()[0];
- EmailParser emailParser;
String addressStr = fromAddress.toString();
ResourceJobManagerType jobMonitorType = getJobMonitorType(addressStr);
- switch (jobMonitorType) {
- case PBS:
- emailParser = new PBSEmailParser();
- break;
- case SLURM:
- emailParser = new SLURMEmailParser();
- break;
- case LSF:
- emailParser = new LSFEmailParser();
- break;
- case UGE:
- emailParser = new UGEEmailParser();
- break;
- default:
- throw new AiravataException("[EJM]: Un-handle resource job manager type: " + jobMonitorType.toString() +" for email monitoring --> " + addressStr);
+ EmailParser emailParser = emailParserMap.get(jobMonitorType);
+ if (emailParser == null) {
+ switch (jobMonitorType) {
+ case PBS:
+ emailParser = new PBSEmailParser();
+ break;
+ case SLURM:
+ emailParser = new SLURMEmailParser();
+ break;
+ case LSF:
+ emailParser = new LSFEmailParser();
+ break;
+ case UGE:
+ emailParser = new UGEEmailParser();
+ break;
+ default:
+ throw new AiravataException("[EJM]: Un-handle resource job manager type: " + jobMonitorType.toString() + " for email monitoring --> " + addressStr);
+ }
+
+ emailParserMap.put(jobMonitorType, emailParser);
}
return emailParser.parseEmail(message);
}
@@ -274,7 +280,7 @@ public class EmailBasedMonitor implements Runnable{
jobMonitorMap.remove(jobStatusResult.getJobId());
runOutHandlers = true;
log.info("[EJM]: Job canceled mail received, removed job from job monitoring. " + jobDetails);
-
+
}
if (runOutHandlers) {
http://git-wip-us.apache.org/repos/asf/airavata/blob/ee139aea/modules/gfac/gfac-monitor/gfac-email-monitor/src/main/java/org/apache/airavata/gfac/monitor/email/parser/UGEEmailParser.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-monitor/gfac-email-monitor/src/main/java/org/apache/airavata/gfac/monitor/email/parser/UGEEmailParser.java b/modules/gfac/gfac-monitor/gfac-email-monitor/src/main/java/org/apache/airavata/gfac/monitor/email/parser/UGEEmailParser.java
index acbb485..bbd81a8 100644
--- a/modules/gfac/gfac-monitor/gfac-email-monitor/src/main/java/org/apache/airavata/gfac/monitor/email/parser/UGEEmailParser.java
+++ b/modules/gfac/gfac-monitor/gfac-email-monitor/src/main/java/org/apache/airavata/gfac/monitor/email/parser/UGEEmailParser.java
@@ -28,6 +28,7 @@ import org.slf4j.LoggerFactory;
import javax.mail.Message;
import javax.mail.MessagingException;
+import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -39,6 +40,8 @@ public class UGEEmailParser implements EmailParser{
public static final String STARTED = "Started";
public static final String COMPLETE = "Complete";
public static final String FAILED = "Failed";
+ private static final String REGEX_EXIT_STATUS = "Exit Status[ ]*=[ ]*(?<" + EXIT_STATUS + ">[\\d]+)";
+
@Override
public JobStatusResult parseEmail(Message message) throws MessagingException, AiravataException {
@@ -47,22 +50,33 @@ public class UGEEmailParser implements EmailParser{
String subject = message.getSubject();
Pattern pattern = Pattern.compile(REGEX);
Matcher matcher = pattern.matcher(subject);
- if (matcher.find()) {
- jobStatusResult.setJobId(matcher.group(JOBID));
- jobStatusResult.setJobName(matcher.group(JOBNAME));
- jobStatusResult.setState(getJobState(matcher.group(STATUS)));
- } else {
- log.error("[EJM]: No matched found for subject => \n" + subject);
+ try {
+ if (matcher.find()) {
+ jobStatusResult.setJobId(matcher.group(JOBID));
+ jobStatusResult.setJobName(matcher.group(JOBNAME));
+ String content = (String) message.getContent();
+ jobStatusResult.setState(getJobState(matcher.group(STATUS), content));
+ } else {
+ log.error("[EJM]: No matched found for subject => \n" + subject);
+ }
+ } catch (IOException e) {
+ throw new AiravataException("[EJM]: Error while reading content of the email message");
}
return jobStatusResult;
}
- private JobState getJobState(String status) {
+ private JobState getJobState(String status, String content) {
switch (status) {
case STARTED:
return JobState.ACTIVE;
case COMPLETE:
- return JobState.COMPLETE;
+ int exitStatus = getExitStatus(content);
+ if (exitStatus == 0) {
+ return JobState.COMPLETE;
+ } else {
+ log.info("[EJM]: Job returns with Exit Status = " + exitStatus + " , Marked as Failed");
+ return JobState.FAILED;
+ }
case FAILED:
return JobState.FAILED;
default:
@@ -70,4 +84,16 @@ public class UGEEmailParser implements EmailParser{
}
}
+
+ private int getExitStatus(String content) {
+ Pattern statusPattern = Pattern.compile(REGEX_EXIT_STATUS);
+ Matcher statusMatcher = statusPattern.matcher(content);
+ if (statusMatcher.find()) {
+ String group = statusMatcher.group(EXIT_STATUS);
+ if (group != null && !group.trim().isEmpty()) {
+ return Integer.valueOf(group.trim());
+ }
+ }
+ return -1;
+ }
}