X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=src%2Fnepi%2Fresources%2Fomf%2Fapplication.py;h=03db08892ae220a49b3666d4fa771cd436b053ee;hb=6285ca51026efb69642eea9dfc7c480e722d84a9;hp=92e3fd40fa849b42b56bd7da34fa41c2740e14d9;hpb=6ae37d3b3849c36a7e505e6fb21915e29d1527d3;p=nepi.git diff --git a/src/nepi/resources/omf/application.py b/src/nepi/resources/omf/application.py index 92e3fd40..03db0889 100644 --- a/src/nepi/resources/omf/application.py +++ b/src/nepi/resources/omf/application.py @@ -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 @@ -18,11 +17,14 @@ # Author: Alina Quereilhac # Julien Tribino +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,6 +270,29 @@ class OMFApplication(OMFResource): return uid return False + 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' + + trace_path = '/tmp/'+ self._topic_app + suffix + + if attr == TraceAttr.PATH: + return trace_path + + if attr == TraceAttr.ALL: + 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): """ Start the RM. It means : Send Xmpp Message Using OMF protocol to execute the application. @@ -306,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: @@ -335,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() @@ -377,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'),