Nitos: channels now have component_id (urn), which is used to address them into Lease...
authorMohamed Larabi <mohamed.larabi@inria.fr>
Mon, 16 Sep 2013 13:42:41 +0000 (15:42 +0200)
committerMohamed Larabi <mohamed.larabi@inria.fr>
Mon, 16 Sep 2013 13:56:13 +0000 (15:56 +0200)
sfa/nitos/nitosaggregate.py
sfa/nitos/nitosslices.py
sfa/nitos/nitosxrn.py
sfa/rspecs/elements/channel.py
sfa/rspecs/elements/versions/nitosv1Channel.py
sfa/rspecs/elements/versions/nitosv1Lease.py

index 2e59d2e..edf3d93 100644 (file)
@@ -18,7 +18,7 @@ from sfa.rspecs.elements.granularity import Granularity
 from sfa.rspecs.elements.channel import Channel
 from sfa.rspecs.version_manager import VersionManager
 
-from sfa.nitos.nitosxrn import NitosXrn, hostname_to_urn, hrn_to_nitos_slicename, slicename_to_hrn
+from sfa.nitos.nitosxrn import NitosXrn, hostname_to_urn, hrn_to_nitos_slicename, slicename_to_hrn, channel_to_urn
 from sfa.planetlab.vlink import get_tc_rate
 from sfa.planetlab.topology import Topology
 
@@ -163,6 +163,7 @@ class NitosAggregate:
             rspec_channel['channel_num'] = channel_number
             rspec_channel['start_time'] = channel['start_time']
             rspec_channel['duration'] = (int(channel['end_time']) - int(channel['start_time'])) / int(grain)
+            rspec_channel['component_id'] = channel_to_urn(self.driver.hrn, self.driver.testbedInfo['name'], channel_number)
                  
             # retreive slicename
             for slc in slices:
@@ -238,6 +239,7 @@ class NitosAggregate:
             rspec_channel['channel_num'] = channel['channel']
             rspec_channel['frequency'] = channel['frequency']
             rspec_channel['standard'] = channel['modulation']
+            rspec_channel['component_id'] = channel_to_urn(self.driver.hrn, self.driver.testbedInfo['name'], channel['channel'])
             rspec_channels.append(rspec_channel)
         return rspec_channels
 
index 2edd209..3eac8aa 100644 (file)
@@ -7,7 +7,7 @@ from sfa.util.xrn import Xrn, get_leaf, get_authority, urn_to_hrn
 
 from sfa.rspecs.rspec import RSpec
 
-from sfa.nitos.nitosxrn import NitosXrn, hrn_to_nitos_slicename, xrn_to_hostname
+from sfa.nitos.nitosxrn import NitosXrn, hrn_to_nitos_slicename, xrn_to_hostname, xrn_to_channel
 
 MAXINT =  2L**31-1
 
@@ -96,7 +96,7 @@ class NitosSlices:
              slice_name = hrn_to_nitos_slicename(channel['slice_id'])
              if slice_name != slice['slice_name']:
                  continue
-             channel_num = channel['channel_num']
+             channel_num = xrn_to_channel(channel['component_id'])
              nitos_channel = self.driver.filter_nitos_results(nitos_channels, {'channel': channel_num})[0]
              # fill the requested channel with nitos ids
              requested_channel['slice_id'] = slice['slice_id']
index 442e48b..47d8aad 100644 (file)
@@ -23,6 +23,12 @@ def hrn_to_nitos_authname (hrn):
     return NitosXrn(xrn=hrn,type='any').nitos_authname()
 def xrn_to_hostname(hrn):
     return Xrn.unescape(NitosXrn(xrn=hrn, type='node').get_leaf())
+def channel_to_hrn (auth, login_base, channel):
+    return NitosXrn(auth=auth+'.'+login_base, channel=channel).get_hrn()
+def channel_to_urn (auth, login_base, channel):
+    return NitosXrn(auth=auth+'.'+login_base, channel=channel).get_urn()
+def xrn_to_channel(hrn):
+    return Xrn.unescape(NitosXrn(xrn=hrn, type='channel').get_leaf())
 
 class NitosXrn (Xrn):
 
@@ -30,7 +36,7 @@ class NitosXrn (Xrn):
     def site_hrn (auth, login_base):
         return '.'.join([auth,login_base])
 
-    def __init__ (self, auth=None, hostname=None, slicename=None, email=None, interface=None, **kwargs):
+    def __init__ (self, auth=None, hostname=None, slicename=None, email=None, interface=None, channel=None, **kwargs):
         #def hostname_to_hrn(auth_hrn, login_base, hostname):
         if hostname is not None:
             self.type='node'
@@ -54,6 +60,10 @@ class NitosXrn (Xrn):
             self.type = 'interface'
             self.hrn = auth + '.' + interface
             self.hrn_to_urn()
+        elif channel is not None:
+            self.type='channel'
+            self.hrn=".".join([auth] + [channel])
+            self.hrn_to_urn()
         else:
             Xrn.__init__ (self,**kwargs)
 
index 6ed328e..9668054 100644 (file)
@@ -10,4 +10,5 @@ class Channel(Element):
         'slice_id',
         'start_time',
         'duration',
+        'component_id',
     ]
index 1ebf7ab..60582e3 100644 (file)
@@ -48,7 +48,7 @@ class NITOSv1Channel:
           
         channel_elems = []       
         for channel in channels:
-            channel_fields = ['channel_num', 'frequency', 'standard']
+            channel_fields = ['channel_num', 'frequency', 'standard', 'component_id']
             channel_elem = spectrum_elem.add_instance('channel', channel, channel_fields)
             channel_elems.append(channel_elem)
 
@@ -67,6 +67,7 @@ class NITOSv1Channel:
             channel['channel_num'] = channel_elem.attrib['channel_num']
             channel['frequency'] = channel_elem.attrib['frequency']
             channel['standard'] = channel_elem.attrib['standard']
+            channel['component_id'] = channel_elem.attrib['component_id']
 
             channels.append(channel)
         return channels            
index f5334a7..9b2e803 100644 (file)
@@ -69,7 +69,7 @@ class NITOSv1Lease:
             for channel in channels:
                  channel['start_time'] = datetime_to_string(utcparse(channel['start_time']))
                  if channel['slice_id'] == lease[0]['slice_id'] and channel['start_time'] == lease[0]['start_time'] and channel['duration'] == lease[0]['duration']:
-                     lease_elem.add_instance('channel', channel, ['channel_num'])
+                     lease_elem.add_instance('channel', channel, ['component_id'])
             
 
     @staticmethod
@@ -99,7 +99,8 @@ class NITOSv1Lease:
                  channel['slice_id'] = lease_elem.attrib['slice_id']
                  channel['start_time'] = datetime_to_epoch(utcparse(lease_elem.attrib['start_time']))
                  channel['duration'] = lease_elem.attrib['duration']
-                 channel['channel_num'] = channel_elem.attrib['channel_num']
+                 channel['component_id'] = channel_elem.attrib['component_id']
+                 
                  channels.append(channel)
 
         return (leases, channels)