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/05 16:30:37 UTC
airavata git commit: Move email based monitoring to bfac-core as it
introduce cyclic dependency if it was in gfac-hpc-monitor
Repository: airavata
Updated Branches:
refs/heads/emailMonitoring b368cb088 -> 9a34ebc10
Move email based monitoring to bfac-core as it introduce cyclic dependency if it was in gfac-hpc-monitor
Project: http://git-wip-us.apache.org/repos/asf/airavata/repo
Commit: http://git-wip-us.apache.org/repos/asf/airavata/commit/9a34ebc1
Tree: http://git-wip-us.apache.org/repos/asf/airavata/tree/9a34ebc1
Diff: http://git-wip-us.apache.org/repos/asf/airavata/diff/9a34ebc1
Branch: refs/heads/emailMonitoring
Commit: 9a34ebc1059207f4195abb88f27ef73cb13fe3c8
Parents: b368cb0
Author: shamrath <sh...@gmail.com>
Authored: Sun Apr 5 10:31:19 2015 -0400
Committer: shamrath <sh...@gmail.com>
Committed: Sun Apr 5 10:31:19 2015 -0400
----------------------------------------------------------------------
.../airavata/common/utils/ServerSettings.java | 27 +++
.../main/resources/airavata-server.properties | 6 +-
.../airavata/gfac/core/cpi/BetterGfacImpl.java | 1 +
.../core/monitor/mail/EmailBasedMonitor.java | 192 +++++++++++++++++++
.../gfac/core/monitor/mail/JobStatusResult.java | 44 +++++
.../core/monitor/mail/parser/EmailParser.java | 32 ++++
.../monitor/mail/parser/PBSEmailParser.java | 119 ++++++++++++
.../monitor/mail/parser/SLURMEmailParser.java | 101 ++++++++++
.../gfac/core/utils/OutHandlerWorker.java | 15 +-
.../monitor/impl/mail/EmailBasedMonitor.java | 88 ---------
.../monitor/impl/mail/parser/EmailParser.java | 29 ---
.../impl/mail/parser/PBSEmailParser.java | 102 ----------
.../impl/mail/parser/SlurmEmailParser.java | 72 -------
.../gfac/ssh/provider/impl/SSHProvider.java | 14 +-
14 files changed, 543 insertions(+), 299 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/airavata/blob/9a34ebc1/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/ServerSettings.java
----------------------------------------------------------------------
diff --git a/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/ServerSettings.java b/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/ServerSettings.java
index 1c338d4..1e50c62 100644
--- a/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/ServerSettings.java
+++ b/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/ServerSettings.java
@@ -66,6 +66,13 @@ public class ServerSettings extends ApplicationSettings {
private static final int DEFAULT_ENACTMENT_THREAD_POOL_SIZE = 10;
private static final String WORKFLOW_PARSER = "workflow.parser";
+ // email based monitoring configurations
+ private static final String EMAIL_BASED_MONITOR_HOST = "email.based.monitor.host";
+ private static final String EMAIL_BASED_MONITOR_ADDRESS = "email.based.monitor.address";
+ private static final String EMAIL_BASED_MONITOR_PASSWORD = "email.based.monitor.password";
+ private static final String EMAIL_BASED_MONITOR_FOLDER_NAME = "email.based.monitor.folder.name";
+ private static final String EMAIL_BASED_MONITOR_STORE_PROTOCOL = "email.based.monitor.store.protocol";
+
private static boolean stopAllThreads = false;
@@ -207,4 +214,24 @@ public class ServerSettings extends ApplicationSettings {
public static String getWorkflowParser() throws ApplicationSettingsException {
return getSetting(WORKFLOW_PARSER);
}
+
+ public static String getEmailBasedMonitorHost() throws ApplicationSettingsException {
+ return getSetting(EMAIL_BASED_MONITOR_HOST);
+ }
+
+ public static String getEmailBasedMonitorAddress() throws ApplicationSettingsException {
+ return getSetting(EMAIL_BASED_MONITOR_ADDRESS);
+ }
+
+ public static String getEmailBasedMonitorPassword() throws ApplicationSettingsException {
+ return getSetting(EMAIL_BASED_MONITOR_PASSWORD);
+ }
+
+ public static String getEmailBasedMonitorFolderName() throws ApplicationSettingsException {
+ return getSetting(EMAIL_BASED_MONITOR_FOLDER_NAME);
+ }
+
+ public static String getEmailBasedMonitorStoreProtocol() throws ApplicationSettingsException {
+ return getSetting(EMAIL_BASED_MONITOR_STORE_PROTOCOL);
+ }
}
http://git-wip-us.apache.org/repos/asf/airavata/blob/9a34ebc1/modules/configuration/server/src/main/resources/airavata-server.properties
----------------------------------------------------------------------
diff --git a/modules/configuration/server/src/main/resources/airavata-server.properties b/modules/configuration/server/src/main/resources/airavata-server.properties
index 7410d7f..af14c0e 100644
--- a/modules/configuration/server/src/main/resources/airavata-server.properties
+++ b/modules/configuration/server/src/main/resources/airavata-server.properties
@@ -195,7 +195,11 @@ host.scheduler=org.apache.airavata.gfac.core.scheduler.impl.SimpleHostScheduler
#mechanisms and one would be able to start a monitor
monitors=org.apache.airavata.gfac.monitor.impl.pull.qstat.QstatMonitor,org.apache.airavata.gfac.monitor.impl.LocalJobMonitor
-
+email.based.monitor.host=imap.gmail.com
+email.based.monitor.address=test@scigap.com
+email.based.monitor.password=changeme
+email.based.monitor.folder.name=INBOX
+email.based.monitor.store.protocol=imaps
###########################################################################
# AMQP Notification Configuration
###########################################################################
http://git-wip-us.apache.org/repos/asf/airavata/blob/9a34ebc1/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/cpi/BetterGfacImpl.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/cpi/BetterGfacImpl.java b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/cpi/BetterGfacImpl.java
index 8d09a09..1d9008b 100644
--- a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/cpi/BetterGfacImpl.java
+++ b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/cpi/BetterGfacImpl.java
@@ -305,6 +305,7 @@ public class BetterGfacImpl implements GFac,Watcher {
jobExecutionContext.setGfac(this);
jobExecutionContext.setZk(zk);
jobExecutionContext.setCredentialStoreToken(AiravataZKUtils.getExpTokenId(zk, experimentID, taskID));
+ jobExecutionContext.setProperty("MonitorPublisher", monitorPublisher);
// handle job submission protocol
List<JobSubmissionInterface> jobSubmissionInterfaces = computeResource.getJobSubmissionInterfaces();
http://git-wip-us.apache.org/repos/asf/airavata/blob/9a34ebc1/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/mail/EmailBasedMonitor.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/mail/EmailBasedMonitor.java b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/mail/EmailBasedMonitor.java
new file mode 100644
index 0000000..f798b2f
--- /dev/null
+++ b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/mail/EmailBasedMonitor.java
@@ -0,0 +1,192 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+package org.apache.airavata.gfac.core.monitor.mail;
+
+import org.apache.airavata.common.exception.AiravataException;
+import org.apache.airavata.common.exception.ApplicationSettingsException;
+import org.apache.airavata.common.utils.MonitorPublisher;
+import org.apache.airavata.common.utils.ServerSettings;
+import org.apache.airavata.gfac.core.context.JobExecutionContext;
+import org.apache.airavata.gfac.core.utils.GFacThreadPoolExecutor;
+import org.apache.airavata.gfac.core.utils.OutHandlerWorker;
+import org.apache.airavata.gfac.core.monitor.mail.parser.EmailParser;
+import org.apache.airavata.gfac.core.monitor.mail.parser.PBSEmailParser;
+import org.apache.airavata.gfac.core.monitor.mail.parser.SLURMEmailParser;
+import org.apache.airavata.model.workspace.experiment.JobStatus;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.mail.Address;
+import javax.mail.Flags;
+import javax.mail.Folder;
+import javax.mail.Message;
+import javax.mail.MessagingException;
+import javax.mail.Session;
+import javax.mail.Store;
+import javax.mail.search.FlagTerm;
+import java.util.Map;
+import java.util.Properties;
+import java.util.concurrent.ConcurrentHashMap;
+
+public class EmailBasedMonitor implements Runnable{
+
+ private static final Logger log = LoggerFactory.getLogger(EmailBasedMonitor.class);
+
+ private static final String PBS_CONSULT_SDSC_EDU = "pbsconsult@sdsc.edu";
+ private static final String SLURM_BATCH_STAMPEDE = "slurm@batch1.stampede.tacc.utexas.edu";
+ private static EmailBasedMonitor emailBasedMonitor;
+ private final MonitorPublisher monitorPublisher;
+
+ private Session session ;
+ private Store store;
+ private Folder emailFolder;
+ private String host, emailAddress, password, folderName, mailStoreProtocol;
+ private Properties properties;
+
+ private Map<String, JobExecutionContext> jobMonitorMap = new ConcurrentHashMap<String, JobExecutionContext>();
+
+ private EmailBasedMonitor(MonitorPublisher monitorPublisher) throws ApplicationSettingsException {
+ this.monitorPublisher = monitorPublisher;
+ init();
+ }
+
+ private void init() throws ApplicationSettingsException {
+ host = ServerSettings.getEmailBasedMonitorHost();
+ emailAddress = ServerSettings.getEmailBasedMonitorAddress();
+ password = ServerSettings.getEmailBasedMonitorPassword();
+ folderName = ServerSettings.getEmailBasedMonitorFolderName();
+ mailStoreProtocol = ServerSettings.getEmailBasedMonitorStoreProtocol();
+
+ properties = new Properties();
+ properties.put("mail.store.protocol", mailStoreProtocol);
+
+ }
+
+ public static EmailBasedMonitor getInstant(MonitorPublisher monitorPublisher) throws ApplicationSettingsException {
+ if (emailBasedMonitor == null) {
+ synchronized (EmailBasedMonitor.class) {
+ if (emailBasedMonitor == null) {
+ emailBasedMonitor = new EmailBasedMonitor(monitorPublisher);
+ Thread thread = new Thread(emailBasedMonitor);
+ thread.start();
+ }
+ }
+ }
+
+ return emailBasedMonitor;
+ }
+
+ public void addToJobMonitorMap(JobExecutionContext jobExecutionContext) {
+ addToJobMonitorMap(jobExecutionContext.getJobDetails().getJobID(), jobExecutionContext);
+ }
+
+ public void addToJobMonitorMap(String jobId, JobExecutionContext jobExecutionContext) {
+ jobMonitorMap.put(jobId, jobExecutionContext);
+ }
+
+ private JobStatusResult parse(Message message) throws MessagingException, AiravataException {
+ Address fromAddress = message.getFrom()[0];
+ EmailParser emailParser;
+ String addressStr = fromAddress.toString();
+ switch (addressStr) {
+ case PBS_CONSULT_SDSC_EDU:
+ emailParser = new PBSEmailParser();
+ break;
+ case SLURM_BATCH_STAMPEDE:
+ emailParser = new SLURMEmailParser();
+ break;
+ default:
+ throw new AiravataException("Un-handle address type for email monitoring --> " + addressStr);
+ }
+ return emailParser.parseEmail(message);
+ }
+
+ @Override
+ public void run() {
+ try {
+ session = Session.getDefaultInstance(properties);
+ store = session.getStore(mailStoreProtocol);
+ store.connect(host, emailAddress, password);
+ while (!ServerSettings.isStopAllThreads()) {
+ if (!store.isConnected()) {
+ store.connect();
+ }
+ Thread.sleep(2000);
+ emailFolder = store.getFolder(folderName);
+ emailFolder.open(Folder.READ_WRITE);
+ Message[] searchMessages = emailFolder.search(new FlagTerm(new Flags(Flags.Flag.SEEN), false));
+ for (Message message : searchMessages) {
+ try {
+ JobStatusResult jobStatusResult = parse(message);
+ updateJobStatus(jobStatusResult);
+ } catch (AiravataException e) {
+ log.error("Error parsing email message =====================================>");
+ try {
+ writeEnvelopeOnError(message);
+ } catch (MessagingException e1) {
+ log.error("Error printing envelop of the email");
+ }
+
+ }
+ }
+ emailFolder.setFlags(searchMessages, new Flags(Flags.Flag.SEEN), true);
+ emailFolder.close(false);
+ }
+
+ } catch (MessagingException e) {
+ log.error("Couldn't connect to the store ", e);
+ } catch (InterruptedException e) {
+ log.error("Interrupt exception while sleep ", e);
+ } finally {
+ try {
+ store.close();
+ } catch (MessagingException e) {
+ log.error("Store close operation failed, couldn't close store", e);
+ }
+ }
+ }
+
+ private void updateJobStatus(JobStatusResult jobStatusResult) throws AiravataException {
+ JobExecutionContext jEC = jobMonitorMap.remove(jobStatusResult.getJobId());
+ if (jEC == null) {
+ throw new AiravataException("JobExecutionContext is not found for job Id " + jobStatusResult.getJobId());
+ }
+ jEC.getJobDetails().setJobStatus(new JobStatus(jobStatusResult.getState()));
+ GFacThreadPoolExecutor.getFixedThreadPool().submit(new OutHandlerWorker(jEC, monitorPublisher));
+ }
+
+ private void writeEnvelopeOnError(Message m) throws MessagingException {
+ Address[] a;
+ // FROM
+ if ((a = m.getFrom()) != null) {
+ for (int j = 0; j < a.length; j++)
+ log.error("FROM: " + a[j].toString());
+ }
+ // TO
+ if ((a = m.getRecipients(Message.RecipientType.TO)) != null) {
+ for (int j = 0; j < a.length; j++)
+ log.error("TO: " + a[j].toString());
+ }
+ // SUBJECT
+ if (m.getSubject() != null)
+ log.error("SUBJECT: " + m.getSubject());
+ }
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/9a34ebc1/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/mail/JobStatusResult.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/mail/JobStatusResult.java b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/mail/JobStatusResult.java
new file mode 100644
index 0000000..0c549a6
--- /dev/null
+++ b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/mail/JobStatusResult.java
@@ -0,0 +1,44 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+package org.apache.airavata.gfac.core.monitor.mail;
+
+import org.apache.airavata.model.workspace.experiment.JobState;
+
+public class JobStatusResult {
+ private JobState state;
+ private String jobId;
+
+ public JobState getState() {
+ return state;
+ }
+
+ public void setState(JobState state) {
+ this.state = state;
+ }
+
+ public String getJobId() {
+ return jobId;
+ }
+
+ public void setJobId(String jobId) {
+ this.jobId = jobId;
+ }
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/9a34ebc1/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/mail/parser/EmailParser.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/mail/parser/EmailParser.java b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/mail/parser/EmailParser.java
new file mode 100644
index 0000000..d35e6b7
--- /dev/null
+++ b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/mail/parser/EmailParser.java
@@ -0,0 +1,32 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+package org.apache.airavata.gfac.core.monitor.mail.parser;
+
+import org.apache.airavata.common.exception.AiravataException;
+import org.apache.airavata.gfac.core.monitor.mail.JobStatusResult;
+
+import javax.mail.Message;
+import javax.mail.MessagingException;
+
+public interface EmailParser {
+
+ JobStatusResult parseEmail(Message message) throws MessagingException, AiravataException;
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/9a34ebc1/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/mail/parser/PBSEmailParser.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/mail/parser/PBSEmailParser.java b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/mail/parser/PBSEmailParser.java
new file mode 100644
index 0000000..64c78c1
--- /dev/null
+++ b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/mail/parser/PBSEmailParser.java
@@ -0,0 +1,119 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+package org.apache.airavata.gfac.core.monitor.mail.parser;
+
+import org.apache.airavata.common.exception.AiravataException;
+import org.apache.airavata.gfac.core.monitor.mail.JobStatusResult;
+import org.apache.airavata.model.workspace.experiment.JobState;
+import org.slf4j.Logger;
+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;
+
+public class PBSEmailParser implements EmailParser {
+
+ private static final Logger log = LoggerFactory.getLogger(PBSEmailParser.class);
+
+ private static final String STATUS = "status";
+ private static final String JOBID = "jobId";
+ private static final String REGEX = "[a-zA-Z: ]*(?<" + JOBID + ">[a-zA-Z0-9-\\.]*)\\s+.*\\s+.*\\s+(?<"
+ + STATUS + ">[a-zA-Z\\ ]*)";
+
+ @Override
+ public JobStatusResult parseEmail(Message message) throws MessagingException, AiravataException {
+ try {
+ String content = ((String) message.getContent());
+ Pattern pattern = Pattern.compile(REGEX);
+ Matcher matcher = pattern.matcher(content);
+ JobStatusResult jobStatusResult = new JobStatusResult();
+ if (matcher.find()) {
+ jobStatusResult.setJobId(matcher.group(JOBID));
+ String statusLine = matcher.group(STATUS);
+ jobStatusResult.setState(getJobState(statusLine));
+ return jobStatusResult;
+ } else {
+ log.error("No matched found for content => \n" + content);
+ }
+
+ } catch (IOException e) {
+ throw new AiravataException("Error while reading content of the email message");
+ }
+ return null;
+ }
+
+ private JobState getJobState(String statusLine) {
+ switch (statusLine) {
+ case "Begun execution":
+ return JobState.QUEUED;
+ case "Execution terminated":
+ return JobState.COMPLETE;
+ default:
+ return JobState.UNKNOWN;
+ }
+ }
+
+
+
+/* -----------------------
+ This is the message envelope
+ ---------------------------
+ FROM: pbsconsult@sdsc.edu
+ TO: shameera@scigap.org
+ SUBJECT: PBS JOB 2556782.trestles-fe1.local
+ ----------------------------
+ CONTENT-TYPE: TEXT/PLAIN
+ This is plain text
+ ---------------------------
+ PBS Job Id: 2556782.trestles-fe1.local
+ Job Name: A1182004055
+ Exec host: trestles-1-12/0+trestles-1-12/1+trestles-1-12/2+trestles-1-12/3
+ Begun execution
+ */
+/*
+ -----------------------
+ This is the message envelope
+ ---------------------------
+ FROM: pbsconsult@sdsc.edu
+ TO: shameera@scigap.org
+ SUBJECT: PBS JOB 2556782.trestles-fe1.local
+ ----------------------------
+ CONTENT-TYPE: TEXT/PLAIN
+ This is plain text
+ ---------------------------
+ PBS Job Id: 2556782.trestles-fe1.local
+ Job Name: A1182004055
+ Exec host: trestles-1-12/0+trestles-1-12/1+trestles-1-12/2+trestles-1-12/3
+ Execution terminated
+ Exit_status=0
+ resources_used.cput=00:14:31
+ resources_used.mem=124712kb
+ resources_used.vmem=3504116kb
+ resources_used.walltime=00:04:10
+ Error_Path: trestles-login2.sdsc.edu:/oasis/scratch/trestles/ogce/temp_project/gta-work-dirs/MonitorTest_9169517d-e2d9-4ff5-bed5-dee6eb3eebb2/Amber_Sander.stderr
+ Output_Path: trestles-login2.sdsc.edu:/oasis/scratch/trestles/ogce/temp_project/gta-work-dirs/MonitorTest_9169517d-e2d9-4ff5-bed5-dee6eb3eebb2/Amber_Sander.stdout
+ */
+
+
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/9a34ebc1/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/mail/parser/SLURMEmailParser.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/mail/parser/SLURMEmailParser.java b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/mail/parser/SLURMEmailParser.java
new file mode 100644
index 0000000..8c6dbed
--- /dev/null
+++ b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/mail/parser/SLURMEmailParser.java
@@ -0,0 +1,101 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+package org.apache.airavata.gfac.core.monitor.mail.parser;
+
+import org.apache.airavata.common.exception.AiravataException;
+import org.apache.airavata.gfac.core.monitor.mail.JobStatusResult;
+import org.apache.airavata.model.workspace.experiment.JobState;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.mail.Message;
+import javax.mail.MessagingException;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class SLURMEmailParser implements EmailParser {
+
+ private static final Logger log = LoggerFactory.getLogger(SLURMEmailParser.class);
+
+ private static final String JOBID = "jobId";
+ private static final String STATUS = "status";
+ private static final String REGEX = "[A-Z]*\\s[a-zA-Z]*_[a-z]*=(?<" + JOBID
+ + ">\\d*)\\s[a-zA-Z]*=[a-zA-Z0-9-]*\\s(?<" + STATUS + ">[]a-zA-Z]*),.*";
+
+ @Override
+ public JobStatusResult parseEmail(Message message) throws MessagingException, AiravataException{
+ String subject = message.getSubject();
+ Pattern pattern = Pattern.compile(REGEX);
+ Matcher matcher = pattern.matcher(subject);
+ JobStatusResult jobStatusResult = new JobStatusResult();
+ if (matcher.find()) {
+ jobStatusResult.setJobId(matcher.group(JOBID));
+ jobStatusResult.setState(getJobState(matcher.group(STATUS)));
+ // TODO remove following test lines
+ String jobId = matcher.group(JOBID);
+ String status = matcher.group(STATUS);
+ log.info("SLURM " + status + " message received -> " + jobId);
+ return jobStatusResult;
+ } else {
+ log.error("No matched found for subject -> " + subject);
+ }
+ return null;
+ }
+
+ private JobState getJobState(String state) {
+ switch (state) {
+ case "Began":
+ return JobState.QUEUED;
+ case "Ended":
+ return JobState.COMPLETE;
+ case "Failed":
+ return JobState.FAILED;
+ default:
+ log.error("Job State " + state + " isn't handle by SLURM parser");
+ return JobState.UNKNOWN;
+
+ }
+ }
+
+
+
+/* -----------------------
+ This is the message envelope
+ ---------------------------
+ FROM: slurm@batch1.stampede.tacc.utexas.edu
+ TO: shameera@scigap.org
+ SUBJECT: SLURM Job_id=5055468 Name=A433255759 Began, Queued time 00:00:01
+ ----------------------------
+ CONTENT-TYPE: TEXT/PLAIN; charset=us-ascii
+ This is plain text
+ ---------------------------*/
+
+/* -----------------------
+ This is the message envelope
+ ---------------------------
+ FROM: slurm@batch1.stampede.tacc.utexas.edu
+ TO: shameera@scigap.org
+ SUBJECT: SLURM Job_id=5055468 Name=A433255759 Ended, Run time 00:02:40
+ ----------------------------
+ CONTENT-TYPE: TEXT/PLAIN; charset=us-ascii
+ This is plain text
+ ---------------------------*/
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/9a34ebc1/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/utils/OutHandlerWorker.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/utils/OutHandlerWorker.java b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/utils/OutHandlerWorker.java
index 08fa9a4..217dc25 100644
--- a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/utils/OutHandlerWorker.java
+++ b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/utils/OutHandlerWorker.java
@@ -22,6 +22,7 @@ package org.apache.airavata.gfac.core.utils;
import org.apache.airavata.common.utils.MonitorPublisher;
import org.apache.airavata.gfac.GFacException;
+import org.apache.airavata.gfac.core.context.JobExecutionContext;
import org.apache.airavata.gfac.core.cpi.GFac;
import org.apache.airavata.gfac.core.monitor.MonitorID;
import org.apache.airavata.model.messaging.event.TaskIdentifier;
@@ -40,6 +41,7 @@ public class OutHandlerWorker implements Runnable {
private MonitorID monitorID;
private MonitorPublisher monitorPublisher;
+ private JobExecutionContext jEC;
public OutHandlerWorker(GFac gfac, MonitorID monitorID,MonitorPublisher monitorPublisher) {
this.gfac = gfac;
@@ -47,10 +49,17 @@ public class OutHandlerWorker implements Runnable {
this.monitorPublisher = monitorPublisher;
}
+ public OutHandlerWorker(JobExecutionContext jEC, MonitorPublisher monitorPublisher) {
+ this.jEC = jEC;
+ this.gfac = jEC.getGfac();
+ this.monitorPublisher = monitorPublisher;
+ }
+
@Override
public void run() {
try {
- gfac.invokeOutFlowHandlers(monitorID.getJobExecutionContext());
+// gfac.invokeOutFlowHandlers(monitorID.getJobExecutionContext());
+ gfac.invokeOutFlowHandlers(jEC);
} catch (GFacException e) {
TaskIdentifier taskIdentifier = new TaskIdentifier(monitorID.getTaskID(), monitorID.getWorkflowNodeID(),monitorID.getExperimentID(), monitorID.getJobExecutionContext().getGatewayID());
//FIXME this is a case where the output retrieving fails even if the job execution was a success. Thus updating the task status
@@ -64,6 +73,8 @@ public class OutHandlerWorker implements Runnable {
// Save error details to registry
}
- monitorPublisher.publish(monitorID.getStatus());
+// monitorPublisher.publish(monitorID.getStatus());
+ monitorPublisher.publish(jEC.getJobDetails().getJobStatus());
+
}
}
http://git-wip-us.apache.org/repos/asf/airavata/blob/9a34ebc1/modules/gfac/gfac-monitor/src/main/java/org/apache/airavata/gfac/monitor/impl/mail/EmailBasedMonitor.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-monitor/src/main/java/org/apache/airavata/gfac/monitor/impl/mail/EmailBasedMonitor.java b/modules/gfac/gfac-monitor/src/main/java/org/apache/airavata/gfac/monitor/impl/mail/EmailBasedMonitor.java
deleted file mode 100644
index 740b087..0000000
--- a/modules/gfac/gfac-monitor/src/main/java/org/apache/airavata/gfac/monitor/impl/mail/EmailBasedMonitor.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-package org.apache.airavata.gfac.monitor.impl.mail;
-
-import org.apache.airavata.common.exception.AiravataException;
-import org.apache.airavata.common.utils.ServerSettings;
-import org.apache.airavata.gfac.monitor.core.Monitor;
-import org.apache.airavata.gfac.monitor.impl.mail.parser.EmailParser;
-import org.apache.airavata.gfac.monitor.impl.mail.parser.PBSEmailParser;
-import org.apache.airavata.gfac.monitor.impl.mail.parser.SLURMEmailParser;
-
-import javax.mail.Address;
-import javax.mail.Flags;
-import javax.mail.Folder;
-import javax.mail.Message;
-import javax.mail.MessagingException;
-import javax.mail.NoSuchProviderException;
-import javax.mail.Session;
-import javax.mail.Store;
-import javax.mail.search.FlagTerm;
-import java.util.Properties;
-
-public class EmailBasedMonitor implements Monitor {
-
- private static final String PBS_CONSULT_SDSC_EDU = "pbsconsult@sdsc.edu";
- private static final String SLURM_BATCH_STAMPEDE = "slurm@batch1.stampede.tacc.utexas.edu";
-
- private Session session ;
- private Store store;
- private Folder emailFolder;
-
- public void monitorEmails(String host, String username, String password ) throws MessagingException,
- InterruptedException, AiravataException {
- Properties properties = new Properties();
- properties.put("mail.store.protocol", "imaps");
- session = Session.getDefaultInstance(properties);
- store = session.getStore("imaps");
- store.connect(host, username, password);
- while (!ServerSettings.isStopAllThreads()) {
- Thread.sleep(2000);
- emailFolder = store.getFolder("TEST");
- emailFolder.open(Folder.READ_WRITE);
- Message[] searchMessages = emailFolder.search(new FlagTerm(new Flags(Flags.Flag.SEEN), false));
- for (Message message : searchMessages) {
- parse(message);
- }
- emailFolder.setFlags(searchMessages, new Flags(Flags.Flag.SEEN), true);
- emailFolder.close(false);
- }
- store.close();
- }
-
- private void parse(Message message) throws MessagingException, AiravataException {
- Address fromAddress = message.getFrom()[0];
- EmailParser emailParser;
- String addressStr = fromAddress.toString();
- switch (addressStr) {
- case PBS_CONSULT_SDSC_EDU:
- emailParser = new PBSEmailParser();
- break;
- case SLURM_BATCH_STAMPEDE:
- emailParser = new SLURMEmailParser();
- break;
- default:
- throw new AiravataException("Un-handle address type for email monitoring --> " + addressStr);
- }
- emailParser.parseEmail(message);
- }
-
-}
http://git-wip-us.apache.org/repos/asf/airavata/blob/9a34ebc1/modules/gfac/gfac-monitor/src/main/java/org/apache/airavata/gfac/monitor/impl/mail/parser/EmailParser.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-monitor/src/main/java/org/apache/airavata/gfac/monitor/impl/mail/parser/EmailParser.java b/modules/gfac/gfac-monitor/src/main/java/org/apache/airavata/gfac/monitor/impl/mail/parser/EmailParser.java
deleted file mode 100644
index d0789c4..0000000
--- a/modules/gfac/gfac-monitor/src/main/java/org/apache/airavata/gfac/monitor/impl/mail/parser/EmailParser.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-package org.apache.airavata.gfac.monitor.impl.mail.parser;
-
-import javax.mail.Message;
-import javax.mail.MessagingException;
-
-public interface EmailParser {
-
- void parseEmail(Message message) throws MessagingException;
-}
http://git-wip-us.apache.org/repos/asf/airavata/blob/9a34ebc1/modules/gfac/gfac-monitor/src/main/java/org/apache/airavata/gfac/monitor/impl/mail/parser/PBSEmailParser.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-monitor/src/main/java/org/apache/airavata/gfac/monitor/impl/mail/parser/PBSEmailParser.java b/modules/gfac/gfac-monitor/src/main/java/org/apache/airavata/gfac/monitor/impl/mail/parser/PBSEmailParser.java
deleted file mode 100644
index b243cc4..0000000
--- a/modules/gfac/gfac-monitor/src/main/java/org/apache/airavata/gfac/monitor/impl/mail/parser/PBSEmailParser.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-package org.apache.airavata.gfac.monitor.impl.mail.parser;
-
-import javax.mail.Message;
-import javax.mail.MessagingException;
-import java.io.IOException;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-public class PBSEmailParser implements EmailParser {
-
- private static final String STATUS = "status";
- private static final String JOBID = "jobId";
- private static final String REGEX = "[a-zA-Z: ]*(?<" + JOBID + ">[a-zA-Z0-9-\\.]*)\\s+.*\\s+.*\\s+(?<" + STATUS + ">[a-zA-Z\\ ]*)";
-
- @Override
- public void parseEmail(Message message) throws MessagingException {
- try {
- String content = ((String) message.getContent());
- Pattern pattern = Pattern.compile(REGEX);
- Matcher matcher = pattern.matcher(content);
- if (matcher.find()) {
- String statusLine = matcher.group(STATUS);
- String jobId = matcher.group(JOBID);
- switch (statusLine) {
- case "Begun execution":
- System.out.println("Begun execution -> " + jobId);
- break;
- case "Execution terminated":
- System.out.println("Execution terminated -> " + jobId);
- break;
- default:
- System.out.println("Un-handle status change -> " + jobId);
- break;
- }
- }
-
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-
-/* -----------------------
- This is the message envelope
- ---------------------------
- FROM: pbsconsult@sdsc.edu
- TO: shameera@scigap.org
- SUBJECT: PBS JOB 2556782.trestles-fe1.local
- ----------------------------
- CONTENT-TYPE: TEXT/PLAIN
- This is plain text
- ---------------------------
- PBS Job Id: 2556782.trestles-fe1.local
- Job Name: A1182004055
- Exec host: trestles-1-12/0+trestles-1-12/1+trestles-1-12/2+trestles-1-12/3
- Begun execution
- */
-/*
- -----------------------
- This is the message envelope
- ---------------------------
- FROM: pbsconsult@sdsc.edu
- TO: shameera@scigap.org
- SUBJECT: PBS JOB 2556782.trestles-fe1.local
- ----------------------------
- CONTENT-TYPE: TEXT/PLAIN
- This is plain text
- ---------------------------
- PBS Job Id: 2556782.trestles-fe1.local
- Job Name: A1182004055
- Exec host: trestles-1-12/0+trestles-1-12/1+trestles-1-12/2+trestles-1-12/3
- Execution terminated
- Exit_status=0
- resources_used.cput=00:14:31
- resources_used.mem=124712kb
- resources_used.vmem=3504116kb
- resources_used.walltime=00:04:10
- Error_Path: trestles-login2.sdsc.edu:/oasis/scratch/trestles/ogce/temp_project/gta-work-dirs/MonitorTest_9169517d-e2d9-4ff5-bed5-dee6eb3eebb2/Amber_Sander.stderr
- Output_Path: trestles-login2.sdsc.edu:/oasis/scratch/trestles/ogce/temp_project/gta-work-dirs/MonitorTest_9169517d-e2d9-4ff5-bed5-dee6eb3eebb2/Amber_Sander.stdout
- */
-
-
-}
http://git-wip-us.apache.org/repos/asf/airavata/blob/9a34ebc1/modules/gfac/gfac-monitor/src/main/java/org/apache/airavata/gfac/monitor/impl/mail/parser/SlurmEmailParser.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-monitor/src/main/java/org/apache/airavata/gfac/monitor/impl/mail/parser/SlurmEmailParser.java b/modules/gfac/gfac-monitor/src/main/java/org/apache/airavata/gfac/monitor/impl/mail/parser/SlurmEmailParser.java
deleted file mode 100644
index 51bd407..0000000
--- a/modules/gfac/gfac-monitor/src/main/java/org/apache/airavata/gfac/monitor/impl/mail/parser/SlurmEmailParser.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-package org.apache.airavata.gfac.monitor.impl.mail.parser;
-
-import javax.mail.Message;
-import javax.mail.MessagingException;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-public class SLURMEmailParser implements EmailParser {
-
- private static final String JOBID = "jobId";
- private static final String STATUS = "status";
- private static final String REGEX = "[A-Z]*\\s[a-zA-Z]*_[a-z]*=(?<" + JOBID
- + ">\\d*)\\s[a-zA-Z]*=[a-zA-Z0-9-]*\\s(?<" + STATUS + ">[]a-zA-Z]*),.*";
-
- @Override
- public void parseEmail(Message message) throws MessagingException {
- String subject = message.getSubject();
- Pattern pattern = Pattern.compile(REGEX);
- Matcher matcher = pattern.matcher(subject);
- if (matcher.find()) {
- String jobId = matcher.group(JOBID);
- String status = matcher.group(STATUS);
- System.out.println("SLURM " + status + " message received -> " + jobId);
- } else {
- System.out.println("No matches found ");
- }
- }
-
-
-
-/* -----------------------
- This is the message envelope
- ---------------------------
- FROM: slurm@batch1.stampede.tacc.utexas.edu
- TO: shameera@scigap.org
- SUBJECT: SLURM Job_id=5055468 Name=A433255759 Began, Queued time 00:00:01
- ----------------------------
- CONTENT-TYPE: TEXT/PLAIN; charset=us-ascii
- This is plain text
- ---------------------------*/
-
-/* -----------------------
- This is the message envelope
- ---------------------------
- FROM: slurm@batch1.stampede.tacc.utexas.edu
- TO: shameera@scigap.org
- SUBJECT: SLURM Job_id=5055468 Name=A433255759 Ended, Run time 00:02:40
- ----------------------------
- CONTENT-TYPE: TEXT/PLAIN; charset=us-ascii
- This is plain text
- ---------------------------*/
-}
http://git-wip-us.apache.org/repos/asf/airavata/blob/9a34ebc1/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/provider/impl/SSHProvider.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/provider/impl/SSHProvider.java b/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/provider/impl/SSHProvider.java
index 4c3abde..f628b4e 100644
--- a/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/provider/impl/SSHProvider.java
+++ b/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/provider/impl/SSHProvider.java
@@ -22,18 +22,17 @@
package org.apache.airavata.gfac.ssh.provider.impl;
import org.apache.airavata.common.exception.ApplicationSettingsException;
+import org.apache.airavata.common.utils.MonitorPublisher;
import org.apache.airavata.gfac.Constants;
-import org.apache.airavata.gfac.ExecutionMode;
import org.apache.airavata.gfac.GFacException;
import org.apache.airavata.gfac.core.context.JobExecutionContext;
import org.apache.airavata.gfac.core.context.MessageContext;
-import org.apache.airavata.gfac.core.cpi.BetterGfacImpl;
import org.apache.airavata.gfac.core.handler.GFacHandlerException;
-import org.apache.airavata.gfac.core.handler.ThreadedHandler;
import org.apache.airavata.gfac.core.notification.events.StartExecutionEvent;
import org.apache.airavata.gfac.core.provider.AbstractProvider;
import org.apache.airavata.gfac.core.provider.GFacProviderException;
import org.apache.airavata.gfac.core.utils.GFacUtils;
+import org.apache.airavata.gfac.core.monitor.mail.EmailBasedMonitor;
import org.apache.airavata.gfac.ssh.security.SSHSecurityContext;
import org.apache.airavata.gfac.ssh.util.GFACSSHUtils;
import org.apache.airavata.gsi.ssh.api.Cluster;
@@ -135,7 +134,7 @@ public class SSHProvider extends AbstractProvider {
// GFacUtils.updateJobStatus(details, JobState.COMPLETE);
} catch (Exception e) {
throw new GFacProviderException(e.getMessage(), e);
- }
+ }
} else {
try {
jobExecutionContext.getNotifier().publish(new StartExecutionEvent());
@@ -368,7 +367,7 @@ public class SSHProvider extends AbstractProvider {
}
public void delegateToMonitorHandlers(JobExecutionContext jobExecutionContext) throws GFacHandlerException {
- List<ThreadedHandler> daemonHandlers = BetterGfacImpl.getDaemonHandlers();
+ /*List<ThreadedHandler> daemonHandlers = BetterGfacImpl.getDaemonHandlers();
if (daemonHandlers == null) {
daemonHandlers = BetterGfacImpl.getDaemonHandlers();
}
@@ -384,6 +383,11 @@ public class SSHProvider extends AbstractProvider {
if (pullMonitorHandler == null && pushMonitorHandler == null && ExecutionMode.ASYNCHRONOUS.equals(jobExecutionContext.getGFacConfiguration().getExecutionMode())) {
log.error("No Daemon handler is configured in gfac-config.xml, either pull or push, so monitoring will not invoked" +
", execution is configured as asynchronous, so Outhandler will not be invoked");
+ }*/
+ try {
+ EmailBasedMonitor.getInstant(((MonitorPublisher) jobExecutionContext.getProperty("MonitorPubliser")));
+ } catch (ApplicationSettingsException e) {
+ throw new GFacHandlerException("Error while delegating job execution context to email based monitor");
}
}