import sys
import httplib
import json
+import datetime
+from time import gmtime, strftime
from sfa.senslab.parsing import *
from sfa.senslab.SenslabImportUsers import *
import urllib
from sfa.util.config import Config
from sfa.util.plxrn import PlXrn
from sfa.util.xrn import hrn_to_urn, get_authority,Xrn,get_leaf
+
#OARIP='10.127.255.254'
OARIP='192.168.0.109'
self.oarserver['port'] = 80
self.oarserver['uri'] = None
self.oarserver['postformat'] = 'json'
+
+ self.jobstates = ["Terminated", "Running", "Error", "Waiting", "Launching","Hold"]
+
self.parser = OARGETParser(self)
def GETRequestToOARRestAPI(self, request, strval=None ):
self.oarserver['uri'] = OARrequests_get_uri_dict[request]
+ #if request is "GET_jobs_details":
+ #data = json.dumps([])
+ #else:
data = json.dumps({})
if strval:
self.oarserver['uri'] = self.oarserver['uri'].replace("id",str(strval))
raise ServerError("GET_OAR_SRVR : Could not reach OARserver")
try:
js = json.loads(resp)
+
if strval:
print>>sys.stderr, " \r\n \r\n \t GETRequestToOARRestAPI strval %s js %s" %(strval,js)
return js
except ValueError:
raise ServerError("Failed to parse Server Response:" + js)
+
-
- def POSTRequestToOARRestAPI(self, request, datadict, username):
+ def POSTRequestToOARRestAPI(self, request, datadict, username=None):
#first check that all params for are OK
+
print>>sys.stderr, " \r\n \r\n POSTRequestToOARRestAPI username",username
try:
self.oarserver['uri'] = OARrequest_post_uri_dict[request]
def ParseTimezone(self) :
- print " ParseTimezone"
+ api_timestamp=self.raw_json['api_timestamp']
+ #readable_time = strftime("%Y-%m-%d %H:%M:%S", gmtime(float(api_timestamp)))
+
+ return api_timestamp
def ParseJobs(self) :
self.jobs_list = []
print "ParseJobsTable"
def ParseJobsDetails (self):
- print "ParseJobsDetails"
+
+ print >>sys.stderr,"ParseJobsDetails %s " %(self.raw_json)
def ParseJobsIds(self):
print>>sys.stderr, "\r\n OARGetParse __init__ : ERROR_REQUEST " ,request
+
\ No newline at end of file
import sys
import subprocess
+import datetime
+from time import gmtime, strftime
+
from sfa.util.faults import MissingSfaInfo
from sfa.util.sfalogging import logger
from sfa.storage.table import SfaTable
print>>sys.stderr, " \r\n GetPersons person_filter %s return_fields %s return_person_list %s " %(person_filter,return_fields,return_person_list)
return return_person_list
+ def GetTimezone(self):
+ time = self.oar.parser.SendRequest("GET_timezone")
+ return time
+
- def GetJobs(self,job_id= None, resources=True,return_fields=None, details = None):
+
+ def GetJobs(self,job_id= None, resources=True,return_fields=None):
#job_resources=['reserved_resources', 'assigned_resources','job_id', 'job_uri', 'assigned_nodes',\
#'api_timestamp']
#assigned_res = ['resource_id', 'resource_uri']
if job_id and resources is False:
req = "GET_jobs_id"
node_list_k = 'assigned_network_address'
+
if job_id and resources :
req = "GET_jobs_id_resources"
- node_list_k = 'reserverd_resources'
-
+ node_list_k = 'reserved_resources'
+
+
+
#Get job info from OAR
job_info = self.oar.parser.SendRequest(req, job_id)
- if job_info['state'] == 'Terminated':
- print>>sys.stderr, "\r\n \r\n \t\t GetJobs TERMINELEBOUSIN "
- return None
- if job_info['state'] == 'Error':
- print>>sys.stderr, "\r\n \r\n \t\t GetJobs ERROR "
- return None
+ print>>sys.stderr, "\r\n \r\n \t\t GetJobs %s " %(job_info)
+
+ if 'state' in job_info :
+ if job_info['state'] == 'Terminated':
+ print>>sys.stderr, "\r\n \r\n \t\t GetJobs TERMINELEBOUSIN "
+ return None
+ if job_info['state'] == 'Error':
+ print>>sys.stderr, "\r\n \r\n \t\t GetJobs ERROR message %s " %(job_info)
+ return None
#Get a dict of nodes . Key :hostname of the node
node_list = self.GetNodes()
reqdict['property'] = reqdict['property'][0: len( reqdict['property'])-2] +")"
reqdict['resource'] ="network_address="+ str(len(nodeid_list))
reqdict['resource']+= ",walltime=" + str(00) + ":" + str(05) + ":" + str(00)
- reqdict['script_path'] = "/bin/sleep 320"
- reqdict['type'] = "deploy"
+ reqdict['script_path'] = "/bin/sleep 400"
+ reqdict['type'] = "deploy"
+ timestamp = self.GetTimezone()
+
+ readable_time = strftime(self.time_format, gmtime(float(timestamp)))
+ print >>sys.stderr," \r\n \r\n \t\t\t\t AVANT ParseTimezone readable_time %s timestanp %s " %(readable_time, timestamp )
+ timestamp = timestamp+ 3780 #Add 3 min to server time
+ readable_time = strftime(self.time_format, gmtime(float(timestamp)))
+
+ print >>sys.stderr," \r\n \r\n \t\t\t\tAPRES ParseTimezone readable_time %s timestanp %s " %(readable_time , timestamp)
+ reqdict['reservation'] = readable_time
# first step : start the OAR job
print>>sys.stderr, "\r\n \r\n AddSliceToNodes reqdict %s \r\n site_list %s" %(reqdict,site_list)
self.db.update('slice',['oar_job_id'], [answer['id']], 'slice_hrn', slice_name)
jobid=answer['id']
+ print>>sys.stderr, "\r\n \r\n AddSliceToNodes jobid %s added_nodes %s" %(jobid,added_nodes)
# second step : configure the experiment
# we need to store the nodes in a yaml (well...) file like this :
# [1,56,23,14,45,75] with name /tmp/sfa<jobid>.json
from sfa.rspecs.rspec import RSpec
from sfa.plc.vlink import VLink
from sfa.util.xrn import Xrn
+from sfa.util.sfalogging import logger
MAXINT = 2L**31-1
tmp= slice['PI'][0].split(".")
username = tmp[(len(tmp)-1)]
self.driver.AddSliceToNodes(slice['name'], added_nodes, username)
+
if deleted_nodes:
self.driver.DeleteSliceFromNodes(slice['name'], deleted_nodes)
except:
- self.logger.log_exc('Failed to add/remove slice from nodes')
+ logger.log_exc('Failed to add/remove slice from nodes')
def free_egre_key(self):
used = set()
self.driver.BindObjectToPeer( 'key', key['key_id'], peer['shortname'], remote_key_id)
except:
self.driver.DeleteKey(key['key_id'])
- self.logger("failed to bind key: %s to peer: %s " % (key['key_id'], peer['shortname']))
+ logger("failed to bind key: %s to peer: %s " % (key['key_id'], peer['shortname']))
except Exception,e:
self.driver.DeletePerson(person['person_id'])
raise e