import datetime\r
import urllib2\r
import ast\r
+import time\r
+\r
from django.views.decorators.csrf import csrf_exempt\r
from django.http import *\r
\r
+\r
def response_mimetype(request):\r
\r
if "application/json" in request.META['HTTP_ACCEPT']:\r
def slice_to_exp(slices_users):\r
experiments = {}\r
testbeds = {}\r
+ wildcard_testbeds = {}\r
+ \r
\r
- \r
- for slice in slices_users:\r
+ for slice in slices_users: \r
nodes={}\r
leases = slice['lease']\r
- if leases is not None:\r
+ \r
+ if leases is not None and leases:\r
for lease in leases:\r
resource = lease['resource']\r
start_t = lease['start_time']\r
end_t = lease['end_time']\r
- #node = lease['resource']\r
\r
testbed_start = resource.index('IDN+')+4\r
testbed_end = resource.index('+node+')\r
\r
testbed = resource[testbed_start:testbed_end]\r
node = resource[testbed_end+6:]\r
- \r
+ if 'omf:nitos' in testbed:\r
+ testbed = 'omf:nitos'\r
if testbed in testbeds:\r
if node not in testbeds[testbed]:\r
testbeds[testbed].append(node)\r
f=1\r
if f==0:\r
nodes[node][str(start_t)]={'start_t':start_t, 'nodes':node, 'end_t':end_t}\r
+\r
+ ######### FOR PLE LIKE start ##################\r
+ for resource in slice['resource']:\r
+ testbed_start = resource.index('IDN+')+4\r
+ testbed_end = resource.index('+node+')\r
+ tb = resource[testbed_start:testbed_end]\r
+ node = resource[testbed_end+6:]\r
+ if 'ple:' in tb:\r
+ tb = 'ple'\r
+ if 'omf:nitos' in tb:\r
+ tb = 'omf:nitos'\r
+ if tb not in testbeds:\r
+ try:\r
+ if node not in wildcard_testbeds[slice['slice_hrn']][tb]:\r
+ wildcard_testbeds[slice['slice_hrn']][tb].append([node])\r
+ except:\r
+ try:\r
+ wildcard_testbeds[slice['slice_hrn']][tb] = [node]\r
+ except:\r
+ wildcard_testbeds[slice['slice_hrn']]={tb:[node]}\r
+ \r
+ \r
+ else:\r
+ s = slice['slice_last_updated']\r
+ #s_time = int(time.mktime(datetime.datetime.strptime(s, "%Y%m%dT%H:%M:%Ss").timetuple()))\r
+ s_time = time.mktime(s.timetuple()) \r
+ \r
+ if slice['resource'] is not None:\r
+ \r
+ for resource in slice['resource']:\r
+ testbed_start = resource.index('IDN+')+4\r
+ testbed_end = resource.index('+node+')\r
+ tb = resource[testbed_start:testbed_end]\r
+ if 'ple:' in tb:\r
+ tb = 'ple'\r
+ if 'omf:nitos' in tb:\r
+ tb = 'omf:nitos'\r
+ node = resource[testbed_end+6:]\r
+ \r
+ if testbed in testbeds:\r
+ if node not in testbeds[testbed]:\r
+ testbeds[testbed].append(node)\r
+ else:\r
+ testbeds[testbed] = [node] \r
+ \r
+ if not node in nodes: \r
+ #nodes[node] = {str(start_t):{'start_t':s_time, 'nodes':node, 'end_t':int(time.time())}} \r
+ nodes[node] = {str(start_t):{'start_t':s_time, 'nodes':node, 'end_t':s_time}} \r
+ ######### FOR PLE LIKE end ##################\r
+ \r
\r
#group grouped nodes in experiments\r
for n in nodes:\r
for exp in nodes[n]:\r
- key = str(exp) + str(nodes[n][exp]['end_t'])\r
+ key = str(exp) + str(nodes[n][exp]['end_t']) + slice['slice_hrn']\r
\r
if key not in experiments:\r
experiments[key]={'slice_hrn':slice['slice_hrn'], \\r
'start':nodes[n][exp]['start_t'], 'end':nodes[n][exp]['end_t'], 'nodes':[nodes[n][exp]['nodes']]} \r
+ \r
+ \r
+ ######### FOR PLE LIKE start ##################\r
+ for item in wildcard_testbeds:\r
+ if item == experiments[key]['slice_hrn']:\r
+ for testbed in wildcard_testbeds[item]:\r
+ \r
+ if testbed not in testbeds:\r
+ testbeds[testbed] = wildcard_testbeds[item][testbed] \r
+ \r
+ for n in wildcard_testbeds[item][testbed]:\r
+ if n not in experiments[key]['nodes']:\r
+ experiments[key]['nodes'].append(n) \r
+ ######### FOR PLE LIKE end ##################\r
+ \r
elif nodes[n][exp]['end_t'] == experiments[key]['end']:\r
experiments[key]['nodes'].append(nodes[n][exp]['nodes'])\r
\r
+ \r
+ ######### FOR PLE LIKE start ##################\r
+ for item in wildcard_testbeds:\r
+ if item == experiments[key]['slice_hrn']:\r
+ for testbed in wildcard_testbeds[item]:\r
+ \r
+ if testbed not in testbeds:\r
+ testbeds[testbed] = wildcard_testbeds[item][testbed] \r
+ \r
+ for n in wildcard_testbeds[item][testbed]:\r
+ if n not in experiments[key]['nodes']:\r
+ experiments[key]['nodes'].append(n) \r
+ ######### FOR PLE LIKE end ##################\r
+ \r
return (experiments,testbeds)\r
\r
class ReputationView (LoginRequiredAutoLogoutView, ThemeView):\r
def post (self,request):\r
env = self.default_env()\r
env['theme'] = self.theme\r
- \r
- \r
- \r
- with open('/home/coyiotis/testlog.log') as f:\r
- f.write(str('test'))\r
- \r
\r
- return render_to_response(self.template, env, context_instance=RequestContext(request))\r
-\r
-\r
- \r
+ return render_to_response(self.template, env, context_instance=RequestContext(request)) \r
\r
def get (self, request, state=None):\r
env = self.default_env()\r
\r
##### *** Reputation Plugin-specific START *** ############\r
- with open('/home/coyiotis/testlog.log', 'w') as f:\r
- f.write(str(request.GET))\r
- for key in request.GET:\r
- f.write('\n')\r
- f.write(str(request.GET[key]))\r
- \r
#The following 'if' is a dirty way for bypassing the JS AJAX cross-domain prevention policy...not pretty\r
if request.GET.has_key(u'slicedata[user_eval][overall]'):\r
dict_to_send = {}\r
slices_users = []\r
\r
#get slices\r
- userslice_query = Query().get('slice').select('slice_urn', 'slice_hrn', 'users', 'resource', 'lease')\r
+ userslice_query = Query().get('slice').select('slice_urn', 'slice_hrn', 'users', 'resource', 'lease', 'slice_last_updated')\r
slice_details = execute_query(self.request, userslice_query)\r
\r
#get local users\r
local_user_query = Query().get('local:user').select('email','status','config')\r
local_user_details = execute_admin_query(self.request, local_user_query)\r
- \r
+ \r
#get users - create dict[email]=hrn\r
user_query = Query().get('user').select('user_hrn','user_urn','user_email')\r
user_details = execute_admin_query(self.request, user_query)\r
\r
#get a list of all the slices for the logged in user\r
testbeds = []\r
-\r
+ #env['slices_users'] = json.dumps(slice_details, ensure_ascii=False)\r
for slice in slice_details:\r
\r
if users_hrn[cur_username] in slice['users']:\r
slices_users.append({'slice_hrn':slice['slice_hrn'], 'user':cur_username, 'user_hrn':users_hrn[cur_username] \\r
- , 'resource':slice['resource'], 'lease':slice['lease'] }) \r
+ , 'resource':slice['resource'], 'lease':slice['lease'], 'slice_last_updated':slice['slice_last_updated'] }) \r
\r
\r
- env['slices_users'] = slices_users ### For logging\r
- \r
+ #env['slices_users'] = slices_users ### For logging\r
#####create slicelist for template & JSON\r
experiments,testbeds = slice_to_exp(slices_users)\r
- \r
+ \r
all_exp = []\r
iddata = []\r
\r
\r
iddata.append(tempid)\r
all_exp.append(experiment)\r
- \r
- \r
+ env['logging_test'] = json.dumps(all_exp, ensure_ascii=False)\r
+ env['slices_users'] = json.dumps(all_exp, ensure_ascii=False)\r
###### Check which experiments have not been rated yet. Pop from all_exp any experiment that has already been rated\r
+ \r
unrated_exp = json_to_rest('http://survivor.lab.netmode.ntua.gr:4567/reputation/qid', iddata) \r
\r
for item in all_exp:\r
else:\r
all_exp.pop(all_exp.index(item))\r
\r
-\r
-\r
###### Get Reputation values from Reputation DB\r
reps = json_to_rest('http://survivor.lab.netmode.ntua.gr:4567/reputation/showrep', "a")\r
#env['logging_test'] = reps \r
testbed['services'].append('N/A')\r
\r
###### Pass variables to template\r
- env['logging_test'] = json.dumps(all_exp, ensure_ascii=False)\r
+ #env['logging_test'] = json.dumps(all_exp, ensure_ascii=False)\r
env['serv_per_tb'] = json.dumps(serv_per_tb, ensure_ascii=False)\r
env['reputation'] = reps\r
env['rep_serv'] = services\r