#import urllib
#import urllib2
from sfa.util.config import Config
-from sfa.planetlab.plxrn import PlXrn
#from sfa.util.xrn import hrn_to_urn, get_authority, Xrn, get_leaf
from sfa.util.sfalogging import logger
-OARIP = '194.199.16.161'
+OARIP = '194.199.16.166'
OAR_REQUEST_POST_URI_DICT = {'POST_job':{'uri': '/oarapi/jobs.json'},
'DELETE_jobs_id':{'uri':'/oarapi/jobs/id.json'},
def GETRequestToOARRestAPI(self, request, strval=None , username = None ):
self.oarserver['uri'] = \
OARGETParser.OARrequests_uri_dict[request]['uri']
+ #Get job details with username
+ if 'owner' in OARGETParser.OARrequests_uri_dict[request] and username:
+ self.oarserver['uri'] += OARGETParser.OARrequests_uri_dict[request]['owner'] + username
headers = {}
data = json.dumps({})
logger.debug("OARrestapi \tGETRequestToOARRestAPI %s" %(request))
logger.log_exc("OARrestapi \tPOSTRequestToOARRestAPI request not \
valid")
return
- #try:
if datadict and 'strval' in datadict:
self.oarserver['uri'] = self.oarserver['uri'].replace("id", \
str(datadict['strval']))
del datadict['strval']
- #except:
- #logger.log_exc("OARrestapi.py POSTRequestToOARRestAPI Error")
- return
data = json.dumps(datadict)
headers = {'X-REMOTE_IDENT':username, \
def AddMobility(tuplelist, value):
- if value :
- tuplelist.append(('mobile', int(value)))
+ if value is 0:
+ tuplelist.append(('mobile', 'False'))
+ else :
+ tuplelist.append(('mobile', 'True'))
def AddPosX(tuplelist, value):
tuplelist.append(('posx', value))
# currently, this function is not used a lot,
#so i have no idea what be usefull to parse,
#returning the full json. NT
- logger.debug("ParseJobsDetails %s " %(self.raw_json))
+ #logger.debug("ParseJobsDetails %s " %(self.raw_json))
return self.raw_json
job_info = self.raw_json
- logger.debug("OARESTAPI ParseJobsIds %s" %(self.raw_json))
+ #logger.debug("OARESTAPI ParseJobsIds %s" %(self.raw_json))
values = []
try:
for k in job_resources:
for resource in self.raw_json['items']:
job_resources.append(resource['id'])
- logger.debug("OARESTAPI \tParseJobsIdResources %s" %(self.raw_json))
+ #logger.debug("OARESTAPI \tParseJobsIdResources %s" %(self.raw_json))
return job_resources
def ParseResources(self) :
""" Parses the json produced by a get_resources request on oar."""
- logger.debug("OARESTAPI \tParseResources " )
+ #logger.debug("OARESTAPI \tParseResources " )
#resources are listed inside the 'items' list from the json
self.raw_json = self.raw_json['items']
self.ParseNodes()
job = {}
#Parse resources info
for json_element in self.raw_json['items']:
- job['t_from'] = json_element['scheduled_start']
- #Get resources id list for the job
- job['resource_ids'] = \
- [ node_dict['id'] for node_dict in json_element['resources'] ]
+ #In case it is a real reservation (not asap case)
+ if json_element['scheduled_start']:
+ job['t_from'] = json_element['scheduled_start']
+ job['t_until'] = int(json_element['scheduled_start']) + \
+ int(json_element['walltime'])
+ #Get resources id list for the job
+ job['resource_ids'] = \
+ [ node_dict['id'] for node_dict in json_element['resources'] ]
+ else:
+ job['t_from'] = "As soon as possible"
+ job['t_until'] = "As soon as possible"
+ job['resource_ids'] = ["Undefined"]
+
job['state'] = json_element['state']
job['lease_id'] = json_element['id']
- job['t_until'] = json_element['scheduled_start'] + \
- json_element['walltime']
+
+
job['user'] = json_element['owner']
- logger.debug("OARRestapi \tParseReservedNodes job %s" %(job))
+ #logger.debug("OARRestapi \tParseReservedNodes job %s" %(job))
reservation_list.append(job)
#reset dict
job = {}
self.node_dictlist[node_id] = dict(self.node_dictlist[node_id])
node_id = None
-
- def hostname_to_hrn(self, root_auth, login_base, hostname):
- return PlXrn(auth = root_auth, \
- hostname = login_base + '_' + hostname).get_hrn()
+ def slab_hostname_to_hrn(self, root_auth, hostname):
+ return root_auth + '.'+ hostname
+
def ParseSites(self):
nodes_per_site = {}
config = Config()
- logger.debug(" OARrestapi.py \tParseSites self.node_dictlist %s"\
- %(self.node_dictlist))
+ #logger.debug(" OARrestapi.py \tParseSites self.node_dictlist %s"\
+ #%(self.node_dictlist))
# Create a list of nodes per site_id
- for node_id in self.node_dictlist.keys():
+ for node_id in self.node_dictlist:
node = self.node_dictlist[node_id]
if node['site'] not in nodes_per_site:
if node['node_id'] not in nodes_per_site[node['site']]:
nodes_per_site[node['site']].append(node['node_id'])
- #Create a site dictionary with key is site_login_base (name of the site)
+ #Create a site dictionary whose key is site_login_base (name of the site)
# and value is a dictionary of properties, including the list
#of the node_ids
- for node_id in self.node_dictlist.keys():
+ for node_id in self.node_dictlist:
node = self.node_dictlist[node_id]
- node.update({'hrn':self.hostname_to_hrn(self.interface_hrn, \
- node['site'],node['hostname'])})
-
+ #node.update({'hrn':self.slab_hostname_to_hrn(self.interface_hrn, \
+ #node['site'],node['hostname'])})
+ node.update({'hrn':self.slab_hostname_to_hrn(self.interface_hrn, node['hostname'])})
self.node_dictlist.update({node_id:node})
if node['site'] not in self.site_dict:
'GET_reserved_nodes':
{'uri':
'/oarapi/jobs/details.json?state=Running,Waiting,Launching',\
+ 'owner':'&user=',
'parse_func':ParseReservedNodes},
+
+
'GET_running_jobs':
{'uri':'/oarapi/jobs/details.json?state=Running',\
'parse_func':ParseRunningJobs},