applied the except and raise fixers to the master branch to close the gap with py3
[nepi.git] / src / nepi / resources / omf / application.py
index 6af1d89..03db088 100644 (file)
@@ -3,9 +3,8 @@
 #    Copyright (C) 2013 INRIA
 #
 #    This program is free software: you can redistribute it and/or modify
-#    it under the terms of the GNU General Public License as published by
-#    the Free Software Foundation, either version 3 of the License, or
-#    (at your option) any later version.
+#    it under the terms of the GNU General Public License version 2 as
+#    published by the Free Software Foundation;
 #
 #    This program is distributed in the hope that it will be useful,
 #    but WITHOUT ANY WARRANTY; without even the implied warranty of
 # Author: Alina Quereilhac <alina.quereilhac@inria.fr>
 #         Julien Tribino <julien.tribino@inria.fr>
 
+from __future__ import print_function
+
 import os
 
 from nepi.util.timefuncs import tnow
 from nepi.execution.resource import ResourceManager, clsinit_copy, \
-        ResourceState, reschedule_delay
+        ResourceState
+from nepi.execution.trace import Trace, TraceAttr
 from nepi.execution.attribute import Attribute, Flags 
 from nepi.resources.omf.omf_resource import ResourceGateway, OMFResource
 from nepi.resources.omf.node import OMFNode, confirmation_counter, reschedule_check
@@ -41,8 +43,8 @@ class OMFApplication(OMFResource):
         :type guid: int
 
     """
-    _rtype = "OMFApplication"
-    _authorized_connections = ["OMFNode", "WilabtSfaNode"]
+    _rtype = "omf::Application"
+    _authorized_connections = ["omf::Node", "wilabt::sfa::Node"]
 
     @classmethod
     def _register_attributes(cls):
@@ -181,7 +183,7 @@ class OMFApplication(OMFResource):
         if not self.node or self.node.state < ResourceState.READY:
             self.debug("---- RESCHEDULING DEPLOY ---- node state %s "
                        % self.node.state )
-            self.ec.schedule(reschedule_delay, self.deploy)
+            self.ec.schedule(self.reschedule_delay, self.deploy)
             return
 
         ## For performance test
@@ -200,7 +202,7 @@ class OMFApplication(OMFResource):
         if not self.get('xmppServer'):
             msg = "XmppServer is not initialzed. XMPP Connections impossible"
             self.error(msg)
-            raise RuntimeError, msg
+            raise RuntimeError(msg)
 
         if not (self.get('xmppUser') or self.get('xmppPort') 
                    or self.get('xmppPassword')):
@@ -210,7 +212,7 @@ class OMFApplication(OMFResource):
         if not self.get('command') :
             msg = "Application's Command is not initialized"
             self.error(msg)
-            raise RuntimeError, msg
+            raise RuntimeError(msg)
 
         if not self._omf_api :
             self._omf_api = OMFAPIFactory.get_api(self.get('version'), 
@@ -242,7 +244,7 @@ class OMFApplication(OMFResource):
             if self._create_cnt > confirmation_counter:
                 msg = "Couldn't retrieve the confirmation of the creation"
                 self.error(msg)
-                raise RuntimeError, msg
+                raise RuntimeError(msg)
 
             uid = self.check_deploy(self.create_id)
             if not uid:
@@ -268,42 +270,27 @@ class OMFApplication(OMFResource):
             return uid
         return False
 
-    def trace_filepath(self, filename):
-        return os.path.join('~/', filename)
-
     def trace(self, name, attr = TraceAttr.ALL, block = 512, offset = 0):
         self.info("Retrieving '%s' trace %s " % (name, attr))
+        if name == 'stdout' :
+            suffix = '.out'
+        elif name == 'stderr' :
+            suffix = '.err'
+        else :
+            suffix = '.misc'
 
-        path = self.trace_filepath(str(self.guid) + '_' + name)
-        
-        command = "(test -f %s && echo 'success') || echo 'error'" % path
-        (out, err), proc = self.node.execute(command)
+        trace_path = '/tmp/'+ self._topic_app + suffix
 
-        if (err and proc.poll()) or out.find("error") != -1:
-            msg = " Couldn't find trace %s " % name
-            self.error(msg, out, err)
-            return None
-    
         if attr == TraceAttr.PATH:
-            return path
+            return trace_path
 
         if attr == TraceAttr.ALL:
-            (out, err), proc = self.node.check_output(self.run_home, name)
-            
-            if proc.poll():
-                msg = " Couldn't read trace %s " % name
-                self.error(msg, out, err)
-                return None
-
-            return out
-
-        return out
-
-    def check_output(self, home, filename):
-        """ Retrives content of file """
-        (out, err), proc = self.execute("cat %s" % 
-            os.path.join(home, filename), retry = 1, with_lock = True)
-        return (out, err), proc
+            try:
+                with open(trace_path ,'r') as f:
+                    return f.read()
+            except IOError:
+                print("File with traces has not been found")
+                return False
 
 
     def do_start(self):
@@ -344,7 +331,7 @@ class OMFApplication(OMFResource):
             if self._start_cnt > confirmation_counter:
                 msg = "Couldn't retrieve the confirmation that the application started"
                 self.error(msg)
-                raise RuntimeError, msg
+                raise RuntimeError(msg)
 
             res = self.check_start(self._topic_app)
             if not res:
@@ -373,6 +360,8 @@ class OMFApplication(OMFResource):
         State is set to STOPPED after the message is sent.
 
         """
+
+
         if self.get('version') == 5:
             self._omf_api.exit(self.node.get('hostname'),self.get('appid'))
         super(OMFApplication, self).do_stop()
@@ -415,6 +404,12 @@ class OMFApplication(OMFResource):
                     msg = "Couldn't retrieve the confirmation of the release"
                     self.error(msg)
 
+                # Remove the stdout and stderr of the application
+                try:
+                    os.remove('/tmp/'+self._topic_app +'.out')
+                    os.remove('/tmp/'+self._topic_app +'.err')
+                except OSError:
+                    pass
 
             OMFAPIFactory.release_api(self.get('version'), 
               self.get('xmppServer'), self.get('xmppUser'), self.get('xmppPort'),