X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Fiotlab%2Fiotlabapi.py;h=ab271694cb87704a0c9bb70d189a4bd7a6b86c05;hb=fb2a9c62881c0550924aabb7c1a81b9e53c931a6;hp=bbae92b218644f91b98e6cef50d152ca27a9d00e;hpb=66be8bb9e8f140b123ca5ddb81b965757b01d547;p=sfa.git diff --git a/sfa/iotlab/iotlabapi.py b/sfa/iotlab/iotlabapi.py index bbae92b2..ab271694 100644 --- a/sfa/iotlab/iotlabapi.py +++ b/sfa/iotlab/iotlabapi.py @@ -26,7 +26,7 @@ from sfa.iotlab.iotlabaggregate import iotlab_xrn_object class IotlabTestbedAPI(): """ Class enabled to use LDAP and OAR api calls. """ - _MINIMUM_DURATION = 600 + _MINIMUM_DURATION = 10 # 10 units of granularity 60 s, 10 mins def __init__(self, config): """Creates an instance of OARrestapi and LDAPapi which will be used to @@ -42,7 +42,7 @@ class IotlabTestbedAPI(): self.ldap = LDAPapi() self.time_format = "%Y-%m-%d %H:%M:%S" self.root_auth = config.SFA_REGISTRY_ROOT_AUTH - self.grain = 1 # 10 mins lease minimum, 1 sec granularity + self.grain = 60 # 10 mins lease minimum, 60 sec granularity #import logging, logging.handlers #from sfa.util.sfalogging import _SfaLogger #sql_logger = _SfaLogger(loggername = 'sqlalchemy.engine', \ @@ -50,7 +50,7 @@ class IotlabTestbedAPI(): return @staticmethod - def GetMinExperimentDurationInSec(): + def GetMinExperimentDurationInGranularity(): """ Returns the minimum allowed duration for an experiment on the testbed. In seconds. @@ -69,8 +69,7 @@ class IotlabTestbedAPI(): existing_records = {} existing_hrns_by_types = {} - logger.debug("IOTLAB_API \tGetPeers peer_filter %s, \ - " %(peer_filter)) + logger.debug("IOTLAB_API \tGetPeers peer_filter %s " % (peer_filter)) all_records = dbsession.query(RegRecord).filter(RegRecord.type.like('%authority%')).all() for record in all_records: @@ -80,20 +79,20 @@ class IotlabTestbedAPI(): else: existing_hrns_by_types[record.type].append(record.hrn) - - logger.debug("IOTLAB_API \tGetPeer\texisting_hrns_by_types %s "\ - %( existing_hrns_by_types)) + logger.debug("IOTLAB_API \tGetPeer\texisting_hrns_by_types %s " + % (existing_hrns_by_types)) records_list = [] try: if peer_filter: - records_list.append(existing_records[(peer_filter,'authority')]) + records_list.append(existing_records[(peer_filter, + 'authority')]) else: for hrn in existing_hrns_by_types['authority']: - records_list.append(existing_records[(hrn,'authority')]) + records_list.append(existing_records[(hrn, 'authority')]) - logger.debug("IOTLAB_API \tGetPeer \trecords_list %s " \ - %(records_list)) + logger.debug("IOTLAB_API \tGetPeer \trecords_list %s " + % (records_list)) except KeyError: pass @@ -112,10 +111,11 @@ class IotlabTestbedAPI(): If a filter is specified, looks for the user whose properties match the filter, otherwise returns the whole enabled users'list. - :param person_filter: Must be a list of dictionnaries - with users properties when not set to None. - :param person_filter: list of dict - :returns:Returns a list of users whose accounts are enabled + :param person_filter: Must be a list of dictionnaries with users + properties when not set to None. + :type person_filter: list of dict + + :returns: Returns a list of users whose accounts are enabled found in ldap. :rtype: list of dicts @@ -910,6 +910,30 @@ class IotlabTestbedAPI(): # return + @staticmethod + def filter_lease_name(reservation_list, filter_value): + filtered_reservation_list = list(reservation_list) + logger.debug("IOTLAB_API \t filter_lease_name reservation_list %s" \ + % (reservation_list)) + for reservation in reservation_list: + if 'slice_hrn' in reservation and \ + reservation['slice_hrn'] != filter_value: + filtered_reservation_list.remove(reservation) + + logger.debug("IOTLAB_API \t filter_lease_name filtered_reservation_list %s" \ + % (filtered_reservation_list)) + return filtered_reservation_list + + @staticmethod + def filter_lease_start_time(reservation_list, filter_value): + filtered_reservation_list = list(reservation_list) + + for reservation in reservation_list: + if 't_from' in reservation and \ + reservation['t_from'] > filter_value: + filtered_reservation_list.remove(reservation) + + return filtered_reservation_list def GetLeases(self, lease_filter_dict=None, login=None): """ @@ -930,7 +954,7 @@ class IotlabTestbedAPI(): """ - unfiltered_reservation_list = self.GetReservedNodes() + unfiltered_reservation_list = self.GetReservedNodes(login) reservation_list = [] #Find the slice associated with this user iotlab ldap uid @@ -959,7 +983,7 @@ class IotlabTestbedAPI(): if resa['lease_id'] in jobs_psql_dict: job_info = jobs_psql_dict[resa['lease_id']] logger.debug("IOTLAB_API \tGetLeases job_info %s" - % (job_info)) + % (job_info)) resa['slice_hrn'] = job_info['slice_hrn'] resa['slice_id'] = hrn_to_urn(resa['slice_hrn'], 'slice') @@ -976,12 +1000,33 @@ class IotlabTestbedAPI(): iotlab_xrn = iotlab_xrn_object(self.root_auth, node) resa['component_id_list'].append(iotlab_xrn.urn) - if lease_filter_dict: - logger.debug("IOTLAB_API \tGetLeases resa_ %s \ - \r\n leasefilter %s" % (resa, lease_filter_dict)) + if lease_filter_dict: + logger.debug("IOTLAB_API \tGetLeases \ + \r\n leasefilter %s" % ( lease_filter_dict)) + + filter_dict_functions = { + 'slice_hrn' : IotlabTestbedAPI.filter_lease_name, + 't_from' : IotlabTestbedAPI.filter_lease_start_time + } + reservation_list = list(unfiltered_reservation_list) + for filter_type in lease_filter_dict: + logger.debug("IOTLAB_API \tGetLeases reservation_list %s" \ + % (reservation_list)) + reservation_list = filter_dict_functions[filter_type](\ + reservation_list,lease_filter_dict[filter_type] ) + + # Filter the reservation list with a maximum timespan so that the + # leases and jobs running after this timestamp do not appear + # in the result leases. + # if 'start_time' in : + # if resa['start_time'] < lease_filter_dict['start_time']: + # reservation_list.append(resa) + + + # if 'name' in lease_filter_dict and \ + # lease_filter_dict['name'] == resa['slice_hrn']: + # reservation_list.append(resa) - if lease_filter_dict['name'] == resa['slice_hrn']: - reservation_list.append(resa) if lease_filter_dict is None: reservation_list = unfiltered_reservation_list