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");
         }
     }