X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=src%2Fnepi%2Fresources%2Fomf%2Fchannel.py;h=bac1119e6f8275a91c624e76882ebd43124393ed;hb=6285ca51026efb69642eea9dfc7c480e722d84a9;hp=6a0b02b2f2b62bdbfbf98f9c7b64ae5a39f13753;hpb=ecf2a6a92848c0511f20a57ddab4f36678ea0c5e;p=nepi.git diff --git a/src/nepi/resources/omf/channel.py b/src/nepi/resources/omf/channel.py index 6a0b02b2..bac1119e 100644 --- a/src/nepi/resources/omf/channel.py +++ b/src/nepi/resources/omf/channel.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,12 +17,13 @@ # Author: Alina Quereilhac # Julien Tribino +from nepi.util.timefuncs import tnow from nepi.execution.resource import ResourceManager, clsinit_copy, \ - ResourceState, reschedule_delay + ResourceState from nepi.execution.attribute import Attribute, Flags from nepi.resources.omf.omf_resource import ResourceGateway, OMFResource -from nepi.resources.omf.omf_api import OMFAPIFactory +from nepi.resources.omf.omf_api_factory import OMFAPIFactory @clsinit_copy @@ -39,8 +39,24 @@ class OMFChannel(OMFResource): :type creds: dict """ - _rtype = "OMFChannel" - _authorized_connections = ["OMFWifiInterface", "OMFNode"] + _rtype = "omf::Channel" + _authorized_connections = ["omf::WifiInterface", "omf::Node"] + + ChannelToFreq = dict({ + "1" : "2412", + "2" : "2417", + "3" : "2422", + "4" : "2427", + "5" : "2432", + "6" : "2437", + "7" : "2442", + "8" : "2447", + "9" : "2452", + "10" : "2457", + "11" : "2462", + "12" : "2467", + "13" : "2472", + }) @classmethod def _register_attributes(cls): @@ -61,9 +77,15 @@ class OMFChannel(OMFResource): super(OMFChannel, self).__init__(ec, guid) self._nodes_guid = list() + self.frequency = None self._omf_api = None + # For performance tests + self.perf = True + self.begin_deploy_time = None + + @property def exp_id(self): return self.ec.exp_id @@ -78,17 +100,14 @@ class OMFChannel(OMFResource): """ rm = self.ec.get_resource(guid) - if rm.get_rtype() in self._authorized_connections: msg = "Connection between %s %s and %s %s accepted" % ( self.get_rtype(), self._guid, rm.get_rtype(), guid) self.debug(msg) return True - msg = "Connection between %s %s and %s %s refused" % ( self.get_rtype(), self._guid, rm.get_rtype(), guid) self.debug(msg) - return False def _get_target(self, conn_set): @@ -106,57 +125,76 @@ class OMFChannel(OMFResource): rm_iface = self.ec.get_resource(elt) for conn in rm_iface.connections: rm_node = self.ec.get_resource(conn) - if rm_node.get_rtype() == "OMFNode" and rm_node.get('hostname'): + if rm_node.get_rtype() == "omf::Node" and rm_node.get('hostname'): if rm_iface.state < ResourceState.PROVISIONED or \ rm_node.state < ResourceState.READY: return "reschedule" - couple = [rm_node.get('hostname'), rm_iface.get('alias')] - #print couple + couple = [rm_node.get('hostname'), rm_iface.alias] res.append(couple) return res + def get_frequency(self, channel): + """ Returns the frequency of a specific channel number + + """ + return OMFChannel.ChannelToFreq[channel] + def do_deploy(self): """ Deploy the RM. It means : Get the xmpp client and send messages - using OMF 5.4 protocol to configure the channel. - It becomes DEPLOYED after sending messages to configure the channel + using OMF 5.4 or 6 protocol to configure the channel. - """ - if not (self.get('xmppSlice') and self.get('xmppHost') - and self.get('xmppPort') and self.get('xmppPassword')): - msg = "Credentials are not initialzed. XMPP Connections impossible" - self.error(msg) - raise RuntimeError, msg + """ - if not self._omf_api : - self._omf_api = OMFAPIFactory.get_api(self.get('xmppSlice'), - self.get('xmppHost'), self.get('xmppPort'), - self.get('xmppPassword'), exp_id = self.exp_id) + ## For performance test + if self.perf: + self.begin_deploy_time = tnow() + self.perf = False if not self.get('channel'): msg = "Channel's value is not initialized" self.error(msg) - raise RuntimeError, msg + raise RuntimeError(msg) + + if self.get('version') == "6": + self.frequency = self.get_frequency(self.get('channel')) + super(OMFChannel, self).do_deploy() + return + + if not self.get('xmppServer'): + msg = "XmppServer is not initialzed. XMPP Connections impossible" + self.error(msg) + raise RuntimeError(msg) + + if not (self.get('xmppUser') or self.get('xmppPort') + or self.get('xmppPassword')): + msg = "Credentials are not all initialzed. Default values will be used" + self.warn(msg) + + if not self._omf_api : + self._omf_api = OMFAPIFactory.get_api(self.get('version'), + self.get('xmppServer'), self.get('xmppUser'), self.get('xmppPort'), + self.get('xmppPassword'), exp_id = self.exp_id) self._nodes_guid = self._get_target(self._connections) if self._nodes_guid == "reschedule" : - self.ec.schedule("2s", self.deploy) + self.ec.schedule("1s", self.deploy) else: for couple in self._nodes_guid: attrval = self.get('channel') attrname = "net/%s/%s" % (couple[1], 'channel') self._omf_api.configure(couple[0], attrname, attrval) - super(OMFChannel, self).do_deploy() + super(OMFChannel, self).do_deploy() def do_release(self): """ Clean the RM at the end of the experiment and release the API """ if self._omf_api : - OMFAPIFactory.release_api(self.get('xmppSlice'), - self.get('xmppHost'), self.get('xmppPort'), - self.get('xmppPassword'), exp_id = self.exp_id) + OMFAPIFactory.release_api(self.get('version'), + self.get('xmppServer'), self.get('xmppUser'), self.get('xmppPort'), + self.get('xmppPassword'), exp_id = self.exp_id) super(OMFChannel, self).do_release()