import sys
import subprocess
-import datetime
-from time import gmtime, strftime
+
+from datetime import datetime
+from dateutil import tz
+from time import strftime,gmtime
from sfa.util.faults import MissingSfaInfo , SliverDoesNotExist
from sfa.util.sfalogging import logger
sl = self.GetSlices(slice_filter= slice_hrn, filter_type = 'slice_hrn')
- if len(slices) is 0:
+ if len(sl) is 0:
raise SliverDoesNotExist("%s slice_hrn" % (slice_hrn))
- #sl = slices[0]
- print >>sys.stderr, "\r\n \r\n_____________ Sliver status urn %s hrn %s slices %s \r\n " %(slice_urn,slice_hrn,slices)
+
+ print >>sys.stderr, "\r\n \r\n_____________ Sliver status urn %s hrn %s sl %s \r\n " %(slice_urn,slice_hrn,sl)
if sl['oar_job_id'] is not -1:
# report about the local nodes only
- nodes = self.GetNodes({'hostname':sl['node_ids']},
- ['node_id', 'hostname','site_login_base','boot_state'])
+ nodes_all = self.GetNodes({'hostname':sl['node_ids']},
+ ['node_id', 'hostname','site','boot_state'])
+ nodeall_byhostname = dict([(n['hostname'], n) for n in nodes_all])
+ nodes = sl['node_ids']
if len(nodes) is 0:
raise SliverDoesNotExist("No slivers allocated ")
- site_logins = [node['site_login_base'] for node in nodes]
+
result = {}
top_level_status = 'unknown'
if nodes:
top_level_status = 'ready'
result['geni_urn'] = slice_urn
- result['slab_login'] = sl['job_user']
+ result['pl_login'] = sl['job_user']
+ #result['slab_login'] = sl['job_user']
- timestamp = float(sl['startTime']) + float(sl['walltime'])
- result['slab_expires'] = strftime(self.time_format, gmtime(float(timestamp)))
+ timestamp = float(sl['startTime']) + float(sl['walltime'])
+ result['pl_expires'] = strftime(self.time_format, gmtime(float(timestamp)))
+ #result['slab_expires'] = strftime(self.time_format, gmtime(float(timestamp)))
resources = []
for node in nodes:
res = {}
- res['slab_hostname'] = node['hostname']
- res['slab_boot_state'] = node['boot_state']
+ #res['slab_hostname'] = node['hostname']
+ #res['slab_boot_state'] = node['boot_state']
- sliver_id = urn_to_sliver_id(slice_urn, sl['record_id_slice'], node['node_id'])
- res['geni_urn'] = sliver_id
- if node['boot_state'] == 'Alive':
+ res['pl_hostname'] = nodeall_byhostname[node]['hostname']
+ res['pl_boot_state'] = nodeall_byhostname[node]['boot_state']
+ res['pl_last_contact'] = strftime(self.time_format, gmtime(float(timestamp)))
+ sliver_id = urn_to_sliver_id(slice_urn, sl['record_id_slice'],nodeall_byhostname[node]['node_id'] )
+ res['geni_urn'] = sliver_id
+ if nodeall_byhostname[node]['boot_state'] == 'Alive':
+ #if node['boot_state'] == 'Alive':
res['geni_status'] = 'ready'
else:
res['geni_status'] = 'failed'
return return_person_list
def GetTimezone(self):
- time = self.oar.parser.SendRequest("GET_timezone")
- return time
+ server_timestamp,server_tz = self.oar.parser.SendRequest("GET_timezone")
+ return server_timestamp,server_tz
def DeleteJobs(self, job_id, username):
node_hostname_list.append(node['hostname'])
node_dict = dict(zip(node_hostname_list,node_list))
- #print>>sys.stderr, "\r\n \r\n \r\n \r\n \r\n \t\t GetJobs GetNODES %s " %(node_list)
+
try :
-
- #for n in job_info[node_list]:
- #n = str(self.root_auth) + str(n)
+
liste =job_info[node_list_k]
print>>sys.stderr, "\r\n \r\n \t\t GetJobs resources job_info liste%s" %(liste)
job_info[node_list_k][k] = node_dict[job_info[node_list_k][k]]['hostname']
print>>sys.stderr, "\r\n \r\n \t\t YYYYYYYYYYYYGetJobs resources job_info %s" %(job_info)
+ #Replaces the previous entry "assigned_network_address" / "reserved_resources"
+ #with "node_ids"
job_info.update({'node_ids':job_info[node_list_k]})
del job_info[node_list_k]
return job_info
def GetSlices(self,slice_filter = None, filter_type = None, return_fields=None):
return_slice_list = []
slicerec = {}
+ rec = {}
ftypes = ['slice_hrn', 'record_id_user']
if filter_type and filter_type in ftypes:
if filter_type == 'slice_hrn':
slicerec = slab_dbsession.query(SliceSenslab).filter_by(slice_hrn = slice_filter).first()
if filter_type == 'record_id_user':
slicerec = slab_dbsession.query(SliceSenslab).filter_by(record_id_user = slice_filter).first()
+
if slicerec:
rec = slicerec.dumpquerytodict()
login = slicerec.slice_hrn.split(".")[1].split("_")[0]
#If GetJobs is empty, this means the job is now in the 'Terminated' state
#Update the slice record
else :
- self.db.update_job(slice_filter, job_id = '-1')
- rec['oar_job_id'] = '-1'
+ self.db.update_job(slice_filter, job_id = -1)
+ rec['oar_job_id'] = -1
rec.update({'hrn':str(rec['slice_hrn'])})
- print >>sys.stderr, " \r\n \r\n \tSLABDRIVER.PY GetSlices rec %s" %(rec)
+ print >>sys.stderr, " \r\n \r\n \tSLABDRIVER.PY GetSlices rec %s" %(rec)
+
return rec
reqdict['type'] = "deploy"
reqdict['directory']= ""
reqdict['name']= "TestSandrine"
- timestamp = self.GetTimezone()
+ # reservations are performed in the oar server timebase, so :
+ # 1- we get the server time(in UTC tz )/server timezone
+ # 2- convert the server UTC time in its timezone
+ # 3- add a custom delay to this time
+ # 4- convert this time to a readable form and it for the reservation request.
+ server_timestamp,server_tz = self.GetTimezone()
+ s_tz=tz.gettz(server_tz)
+ UTC_zone = tz.gettz("UTC")
+ #weird... datetime.fromtimestamp should work since we do from datetime import datetime
+ utc_server= datetime.datetime.fromtimestamp(float(server_timestamp)+20,UTC_zone)
+ server_localtime=utc_server.astimezone(s_tz)
+
print>>sys.stderr, "\r\n \r\n AddSliceToNodes slice_name %s added_nodes %s username %s reqdict %s " %(slice_name,added_nodes,slice_user, reqdict)
- 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+ 3620 #Add 3 min to server time
- readable_time = strftime(self.time_format, gmtime(float(timestamp)))
+ readable_time = server_localtime.strftime(self.time_format)
- print >>sys.stderr," \r\n \r\n \t\t\t\tAPRES ParseTimezone readable_time %s timestanp %s " %(readable_time , timestamp)
+ print >>sys.stderr," \r\n \r\n \t\t\t\tAPRES ParseTimezone readable_time %s timestanp %s " %(readable_time ,server_timestamp)
reqdict['reservation'] = readable_time
# first step : start the OAR job