-from django.contrib.auth import authenticate, login, logout\r
-from django.template import RequestContext\r
-from django.shortcuts import render, render_to_response\r
-\r
-from manifoldapi.manifoldresult import ManifoldResult\r
-from ui.topmenu import topmenu_items, the_user\r
-from myslice.configengine import ConfigEngine\r
-from manifold.core.query import Query\r
-from unfold.page import Page\r
-from manifoldapi.manifoldapi import execute_admin_query, execute_query\r
-from unfold.loginrequired import LoginRequiredAutoLogoutView\r
-\r
-from myslice.theme import ThemeView\r
-import json\r
-import hashlib\r
-import datetime\r
-import urllib2\r
-import ast\r
-from django.views.decorators.csrf import csrf_exempt\r
-from django.http import *\r
-\r
-def response_mimetype(request):\r
- \r
- if "application/json" in request.META['HTTP_ACCEPT']:\r
- return "application/json"\r
- else:\r
- return "text/plain"\r
- \r
-\r
-def json_to_rest(url, data ):\r
- \r
- req = urllib2.Request(url)\r
- req.add_header('Content-Type', 'application/json')\r
- response = urllib2.urlopen(req, json.dumps(data))\r
- \r
- if data == "a":\r
- mylist = ast.literal_eval(response.read())\r
- else:\r
- mylist = response.read().translate(None, '"[]').split(",")\r
- \r
- return (mylist)\r
-\r
-\r
-def unix_to_timestamp(timest):\r
- try:\r
- return datetime.datetime.fromtimestamp(int(timest)).strftime('%Y-%m-%d %H:%M:%S')\r
- except:\r
- return timest\r
-\r
-def timestamp_to_unix(timest):\r
- try:\r
- pass\r
- except:\r
- pass\r
- \r
- \r
-def slice_to_exp(slices_users):\r
- experiments = {}\r
- testbeds = {}\r
- \r
- \r
- for slice in slices_users:\r
- nodes={}\r
- leases = slice['lease']\r
- if leases is not None:\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 testbed in testbeds:\r
- if node not in testbeds[testbed]:\r
- testbeds[testbed].append(node)\r
- else:\r
- testbeds[testbed] = [node]\r
- \r
- #group nodes in consecutive timeslots\r
- if not node in nodes: \r
- nodes[node]={str(start_t):{'start_t':start_t, 'nodes':node, 'end_t':end_t}}\r
- else:\r
- if not str(start_t) in nodes[node]:\r
- f=0\r
- for n in nodes[node]:\r
- if n[str(end_t)] == start_t:\r
- n[str(end_t)] == end_t\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
- #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
- \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
- elif nodes[n][exp]['end_t'] == experiments[key]['end']:\r
- experiments[key]['nodes'].append(nodes[n][exp]['nodes'])\r
- \r
- return (experiments,testbeds)\r
- \r
-class ReputationView (LoginRequiredAutoLogoutView, ThemeView):\r
- template_name = 'reputation.html'\r
- \r
- # expose this so we can mention the backend URL on the welcome page\r
- def default_env (self):\r
- return { \r
- 'MANIFOLD_URL':ConfigEngine().manifold_url(),\r
- }\r
-\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
- \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
- dict_to_send['eid'] = str(request.GET[u'slicedata[id]'])\r
- dict_to_send['slice_hrn'] = str(request.GET[u'slicedata[slice_hrn]'])\r
- dict_to_send['user_hrn'] = str(request.GET[u'slicedata[user_hrn]'])\r
- dict_to_send['start_tunix'] = str(request.GET[u'slicedata[start_tunix]'])\r
- dict_to_send['end_tunix'] = str(request.GET[u'slicedata[end_tunix]'])\r
- dict_to_send['start_t'] = str(request.GET[u'slicedata[start_t]'])\r
- dict_to_send['end_t'] = str(request.GET[u'slicedata[end_t]'])\r
- dict_to_send['testbeds'] = ast.literal_eval(str(request.GET[u'testbeds']))\r
- dict_to_send['user_eval'] = {}\r
- dict_to_send['user_eval']['reuse'] = str(request.GET[u'slicedata[user_eval][reuse]'])\r
- dict_to_send['user_eval']['availability'] = str(request.GET[u'slicedata[user_eval][availability]'])\r
- dict_to_send['user_eval']['pay'] = str(request.GET[u'slicedata[user_eval][pay]'])\r
- dict_to_send['user_eval']['support'] = str(request.GET[u'slicedata[user_eval][support]'])\r
- dict_to_send['user_eval']['overall'] = str(request.GET[u'slicedata[user_eval][overall]'])\r
- dict_to_send['user_eval']['link_quality'] = str(request.GET[u'slicedata[user_eval][link_quality]'])\r
- dict_to_send['user_eval']['problems'] = str(request.GET[u'slicedata[user_eval][problems]'])\r
- dict_to_send['user_eval']['quality'] = str(request.GET[u'slicedata[user_eval][quality]'])\r
- \r
- slicedata_received = json_to_rest('http://survivor.lab.netmode.ntua.gr:4567/reputation/json', dict_to_send )\r
- \r
- return HttpResponse(json.dumps(slicedata_received), content_type = response_mimetype(self.request))\r
-\r
- \r
- slices_users = []\r
- \r
- #get slices\r
- userslice_query = Query().get('slice').select('slice_urn', 'slice_hrn', 'users', 'resource', 'lease')\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
- #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
- users_hrn = {}\r
- for item in user_details:\r
- users_hrn[item['user_email']] = item['user_hrn']\r
- \r
- #get currenct username (email)\r
- if request.user.is_authenticated():\r
- cur_username = request.user.username \r
- \r
- #get a list of all the slices for the logged in user\r
- testbeds = []\r
-\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
- \r
- \r
- env['slices_users'] = slices_users ### For logging\r
- \r
- #####create slicelist for template & JSON\r
- experiments,testbeds = slice_to_exp(slices_users)\r
- \r
- all_exp = []\r
- iddata = []\r
- \r
- for exp in experiments:\r
- experiment = {}\r
- experiment['slice_hrn'] = experiments[exp]['slice_hrn']\r
- experiment['user_hrn'] = users_hrn[cur_username]\r
- experiment['start_tunix'] = experiments[exp]['start']\r
- experiment['end_tunix'] = experiments[exp]['end']\r
- experiment['start_t'] = unix_to_timestamp(experiments[exp]['start'])\r
- experiment['end_t'] = unix_to_timestamp(experiments[exp]['end'])\r
- experiment['testbeds'] = {}\r
- for exp_node in experiments[exp]['nodes']:\r
- list_testbeds = [ key for key,val in testbeds.items()]\r
- for tkey in list_testbeds:\r
- if exp_node in testbeds[tkey]:\r
- if tkey in experiment['testbeds']:\r
- if exp_node not in experiment['testbeds'][tkey]:\r
- experiment['testbeds'][tkey].append(exp_node)\r
- else:\r
- experiment['testbeds'][tkey] = [exp_node]\r
- tempid = hashlib.sha1(str(experiment)).hexdigest() \r
- experiment['id'] = tempid\r
- \r
- iddata.append(tempid)\r
- all_exp.append(experiment)\r
- \r
- \r
- ###### Check which experiments have not been rated yet. Pop from all_exp any experiment that has already been rated\r
- unrated_exp = json_to_rest('http://survivor.lab.netmode.ntua.gr:4567/reputation/qid', iddata) \r
- \r
- for item in all_exp:\r
- if item['id'] in unrated_exp:\r
- pass\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
- \r
- services = []\r
- for item in reps:\r
- for serv in item['services']:\r
- if serv.keys()[0] not in services:\r
- services.append(serv.keys()[0])\r
- \r
- \r
- #in json, sevices are in the form: 'services':[{'serv1':x}, {'serv2':y}], so we transform it to 'services':[x,y] based on\r
- # the services dict above. If for a specific service there is no applicable value, we put N/A \r
- for testbed in reps:\r
- d = list(testbed['services'])\r
- del testbed['services']\r
- testbed['services'] = []\r
- for s in services:\r
- set_v = 0\r
- for i in d:\r
- try:\r
- testbed['services'].append(i[s])\r
- set_v=1\r
- except:\r
- pass\r
- if set_v == 0 :\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['reputation'] = reps\r
- env['rep_serv'] = services\r
- env['slicelist'] = all_exp\r
- env['json_data'] = json.dumps(all_exp, ensure_ascii=False)\r
- \r
- ###### *** Reputation Plugin-specific END *** ############\r
- \r
- \r
- if request.user.is_authenticated(): \r
- env['person'] = self.request.user\r
- else: \r
- env['person'] = None\r
- \r
- env['theme'] = self.theme\r
- #env['user_list']= user_list\r
-\r
- env['username']=the_user(request)\r
- env['topmenu_items'] = topmenu_items(None, request)\r
- if state: env['state'] = state\r
- elif not env['username']: env['state'] = None\r
- # use one or two columns for the layout - not logged in users will see the login prompt\r
- env['layout_1_or_2']="layout-unfold2.html" if not env['username'] else "layout-unfold1.html" \r
- \r
- return render_to_response(self.template, env, context_instance=RequestContext(request))\r
- \r
-\r
-\r
- \r
-\r
- \r
- \r
- \r
- \r
-
\ No newline at end of file
+from django.contrib.auth import authenticate, login, logout
+from django.template import RequestContext
+from django.shortcuts import render, render_to_response
+
+from manifoldapi.manifoldresult import ManifoldResult
+from ui.topmenu import topmenu_items, the_user
+from myslice.configengine import ConfigEngine
+from manifold.core.query import Query
+from unfold.page import Page
+from manifoldapi.manifoldapi import execute_admin_query, execute_query
+from unfold.loginrequired import LoginRequiredAutoLogoutView
+
+from myslice.theme import ThemeView
+import json
+import hashlib
+import datetime
+import urllib2
+import ast
+import time
+
+from django.views.decorators.csrf import csrf_exempt
+from django.http import *
+
+
+def response_content_type(request):
+
+ if "application/json" in request.META['HTTP_ACCEPT']:
+ return "application/json"
+ else:
+ return "text/plain"
+
+
+def json_to_rest(url, data ):
+
+ req = urllib2.Request(url)
+ req.add_header('Content-Type', 'application/json')
+ response = urllib2.urlopen(req, json.dumps(data))
+
+ if data == "a":
+ mylist = ast.literal_eval(response.read())
+ else:
+ mylist = response.read().translate(None, '"[]').split(",")
+
+ return (mylist)
+
+
+def unix_to_timestamp(timest):
+ try:
+ return datetime.datetime.fromtimestamp(int(timest)).strftime('%Y-%m-%d %H:%M:%S')
+ except:
+ return timest
+
+def timestamp_to_unix(timest):
+ try:
+ pass
+ except:
+ pass
+
+
+def slice_to_exp(slices_users):
+ experiments = {}
+ testbeds = {}
+ wildcard_testbeds = {}
+
+
+ for slice in slices_users:
+ nodes={}
+ leases = slice['lease']
+
+ if leases is not None and leases:
+ for lease in leases:
+ resource = lease['resource']
+ start_t = lease['start_time']
+ end_t = lease['end_time']
+
+ testbed_start = resource.index('IDN+')+4
+ testbed_end = resource.index('+node+')
+
+ testbed = resource[testbed_start:testbed_end]
+ node = resource[testbed_end+6:]
+ if 'omf:nitos' in testbed:
+ testbed = 'omf:nitos'
+ if testbed in testbeds:
+ if node not in testbeds[testbed]:
+ testbeds[testbed].append(node)
+ else:
+ testbeds[testbed] = [node]
+
+ #group nodes in consecutive timeslots
+ if not node in nodes:
+ nodes[node]={str(start_t):{'start_t':start_t, 'nodes':node, 'end_t':end_t}}
+ else:
+ if not str(start_t) in nodes[node]:
+ f=0
+ for n in nodes[node]:
+ if n[str(end_t)] == start_t:
+ n[str(end_t)] == end_t
+ f=1
+ if f==0:
+ nodes[node][str(start_t)]={'start_t':start_t, 'nodes':node, 'end_t':end_t}
+
+ ######### FOR PLE LIKE start ##################
+ for resource in slice['resource']:
+ testbed_start = resource.index('IDN+')+4
+ testbed_end = resource.index('+node+')
+ tb = resource[testbed_start:testbed_end]
+ node = resource[testbed_end+6:]
+ if 'ple:' in tb:
+ tb = 'ple'
+ if 'omf:nitos' in tb:
+ tb = 'omf:nitos'
+ if tb not in testbeds:
+ try:
+ if node not in wildcard_testbeds[slice['slice_hrn']][tb]:
+ wildcard_testbeds[slice['slice_hrn']][tb].append([node])
+ except:
+ try:
+ wildcard_testbeds[slice['slice_hrn']][tb] = [node]
+ except:
+ wildcard_testbeds[slice['slice_hrn']]={tb:[node]}
+
+
+ else:
+ s = slice['slice_last_updated']
+ #s_time = int(time.mktime(datetime.datetime.strptime(s, "%Y%m%dT%H:%M:%Ss").timetuple()))
+ s_time = time.mktime(s.timetuple())
+
+ if slice['resource'] is not None:
+
+ for resource in slice['resource']:
+ testbed_start = resource.index('IDN+')+4
+ testbed_end = resource.index('+node+')
+ tb = resource[testbed_start:testbed_end]
+ if 'ple:' in tb:
+ tb = 'ple'
+ if 'omf:nitos' in tb:
+ tb = 'omf:nitos'
+ node = resource[testbed_end+6:]
+
+ if testbed in testbeds:
+ if node not in testbeds[testbed]:
+ testbeds[testbed].append(node)
+ else:
+ testbeds[testbed] = [node]
+
+ if not node in nodes:
+ #nodes[node] = {str(start_t):{'start_t':s_time, 'nodes':node, 'end_t':int(time.time())}}
+ nodes[node] = {str(start_t):{'start_t':s_time, 'nodes':node, 'end_t':s_time}}
+ ######### FOR PLE LIKE end ##################
+
+
+ #group grouped nodes in experiments
+ for n in nodes:
+ for exp in nodes[n]:
+ key = str(exp) + str(nodes[n][exp]['end_t']) + slice['slice_hrn']
+
+ if key not in experiments:
+ experiments[key]={'slice_hrn':slice['slice_hrn'], \
+ 'start':nodes[n][exp]['start_t'], 'end':nodes[n][exp]['end_t'], 'nodes':[nodes[n][exp]['nodes']]}
+
+
+ ######### FOR PLE LIKE start ##################
+ for item in wildcard_testbeds:
+ if item == experiments[key]['slice_hrn']:
+ for testbed in wildcard_testbeds[item]:
+
+ if testbed not in testbeds:
+ testbeds[testbed] = wildcard_testbeds[item][testbed]
+
+ for n in wildcard_testbeds[item][testbed]:
+ if n not in experiments[key]['nodes']:
+ experiments[key]['nodes'].append(n)
+ ######### FOR PLE LIKE end ##################
+
+ elif nodes[n][exp]['end_t'] == experiments[key]['end']:
+ experiments[key]['nodes'].append(nodes[n][exp]['nodes'])
+
+
+ ######### FOR PLE LIKE start ##################
+ for item in wildcard_testbeds:
+ if item == experiments[key]['slice_hrn']:
+ for testbed in wildcard_testbeds[item]:
+
+ if testbed not in testbeds:
+ testbeds[testbed] = wildcard_testbeds[item][testbed]
+
+ for n in wildcard_testbeds[item][testbed]:
+ if n not in experiments[key]['nodes']:
+ experiments[key]['nodes'].append(n)
+ ######### FOR PLE LIKE end ##################
+
+ return (experiments,testbeds)
+
+class ReputationView (LoginRequiredAutoLogoutView, ThemeView):
+ template_name = 'reputation.html'
+
+ # expose this so we can mention the backend URL on the welcome page
+ def default_env (self):
+ return {
+ 'MANIFOLD_URL':ConfigEngine().manifold_url(),
+ }
+
+ def post (self,request):
+ env = self.default_env()
+ env['theme'] = self.theme
+
+ return render_to_response(self.template, env, context_instance=RequestContext(request))
+
+ def get (self, request, state=None):
+ env = self.default_env()
+
+ ##### *** Reputation Plugin-specific START *** ############
+ #The following 'if' is a dirty way for bypassing the JS AJAX cross-domain prevention policy...not pretty
+ if request.GET.has_key(u'slicedata[user_eval][overall]'):
+ dict_to_send = {}
+ dict_to_send['eid'] = str(request.GET[u'slicedata[id]'])
+ dict_to_send['slice_hrn'] = str(request.GET[u'slicedata[slice_hrn]'])
+ dict_to_send['user_hrn'] = str(request.GET[u'slicedata[user_hrn]'])
+ dict_to_send['start_tunix'] = str(request.GET[u'slicedata[start_tunix]'])
+ dict_to_send['end_tunix'] = str(request.GET[u'slicedata[end_tunix]'])
+ dict_to_send['start_t'] = str(request.GET[u'slicedata[start_t]'])
+ dict_to_send['end_t'] = str(request.GET[u'slicedata[end_t]'])
+ dict_to_send['testbeds'] = ast.literal_eval(str(request.GET[u'testbeds']))
+ dict_to_send['user_eval'] = {}
+ dict_to_send['user_eval']['reuse'] = str(request.GET[u'slicedata[user_eval][reuse]'])
+ dict_to_send['user_eval']['availability'] = str(request.GET[u'slicedata[user_eval][availability]'])
+ dict_to_send['user_eval']['pay'] = str(request.GET[u'slicedata[user_eval][pay]'])
+ dict_to_send['user_eval']['support'] = str(request.GET[u'slicedata[user_eval][support]'])
+ dict_to_send['user_eval']['overall'] = str(request.GET[u'slicedata[user_eval][overall]'])
+ dict_to_send['user_eval']['link_quality'] = str(request.GET[u'slicedata[user_eval][link_quality]'])
+ dict_to_send['user_eval']['problems'] = str(request.GET[u'slicedata[user_eval][problems]'])
+ dict_to_send['user_eval']['quality'] = str(request.GET[u'slicedata[user_eval][quality]'])
+
+ slicedata_received = json_to_rest('http://survivor.lab.netmode.ntua.gr:4567/reputation/json', dict_to_send )
+
+ return HttpResponse(json.dumps(slicedata_received), content_type = response_content_type(self.request))
+
+
+ slices_users = []
+
+ #get slices
+ userslice_query = Query().get('slice').select('slice_urn', 'slice_hrn', 'users', 'resource', 'lease', 'slice_last_updated')
+ slice_details = execute_query(self.request, userslice_query)
+
+ #get local users
+ local_user_query = Query().get('local:user').select('email','status','config')
+ local_user_details = execute_admin_query(self.request, local_user_query)
+
+ #get users - create dict[email]=hrn
+ user_query = Query().get('user').select('user_hrn','user_urn','user_email')
+ user_details = execute_admin_query(self.request, user_query)
+ users_hrn = {}
+ for item in user_details:
+ users_hrn[item['user_email']] = item['user_hrn']
+
+ #get currenct username (email)
+ if request.user.is_authenticated():
+ cur_username = request.user.username
+
+ #get a list of all the slices for the logged in user
+ testbeds = []
+ #env['slices_users'] = json.dumps(slice_details, ensure_ascii=False)
+ for slice in slice_details:
+
+ if users_hrn[cur_username] in slice['users']:
+ slices_users.append({'slice_hrn':slice['slice_hrn'], 'user':cur_username, 'user_hrn':users_hrn[cur_username] \
+ , 'resource':slice['resource'], 'lease':slice['lease'], 'slice_last_updated':slice['slice_last_updated'] })
+
+
+ #env['slices_users'] = slices_users ### For logging
+ #####create slicelist for template & JSON
+ experiments,testbeds = slice_to_exp(slices_users)
+
+ all_exp = []
+ iddata = []
+
+ for exp in experiments:
+ experiment = {}
+ experiment['slice_hrn'] = experiments[exp]['slice_hrn']
+ experiment['user_hrn'] = users_hrn[cur_username]
+ experiment['start_tunix'] = experiments[exp]['start']
+ experiment['end_tunix'] = experiments[exp]['end']
+ experiment['start_t'] = unix_to_timestamp(experiments[exp]['start'])
+ experiment['end_t'] = unix_to_timestamp(experiments[exp]['end'])
+ experiment['testbeds'] = {}
+ for exp_node in experiments[exp]['nodes']:
+ list_testbeds = [ key for key,val in testbeds.items()]
+ for tkey in list_testbeds:
+ if exp_node in testbeds[tkey]:
+ if tkey in experiment['testbeds']:
+ if exp_node not in experiment['testbeds'][tkey]:
+ experiment['testbeds'][tkey].append(exp_node)
+ else:
+ experiment['testbeds'][tkey] = [exp_node]
+ tempid = hashlib.sha1(str(experiment)).hexdigest()
+ experiment['id'] = tempid
+
+ iddata.append(tempid)
+ all_exp.append(experiment)
+ env['logging_test'] = json.dumps(all_exp, ensure_ascii=False)
+ env['slices_users'] = json.dumps(all_exp, ensure_ascii=False)
+ ###### Check which experiments have not been rated yet. Pop from all_exp any experiment that has already been rated
+
+ unrated_exp = json_to_rest('http://survivor.lab.netmode.ntua.gr:4567/reputation/qid', iddata)
+
+ for item in all_exp:
+ if item['id'] in unrated_exp:
+ pass
+ else:
+ all_exp.pop(all_exp.index(item))
+
+ ###### Get Reputation values from Reputation DB
+ reps = json_to_rest('http://survivor.lab.netmode.ntua.gr:4567/reputation/showrep', "a")
+ #env['logging_test'] = reps
+
+ #create a services list and a dict containing the services for each testbed
+ serv_per_tb = {}
+ services = []
+ for item in reps:
+ serv_per_tb[item['testbed']]=[]
+ for serv in item['services']:
+ if serv.keys()[0] not in services:
+ services.append(serv.keys()[0])
+ serv_per_tb[item['testbed']].append(serv.keys()[0])
+
+ #in json, sevices are in the form: 'services':[{'serv1':x}, {'serv2':y}], so we transform it to 'services':[x,y] based on
+ # the services dict above. If for a specific service there is no applicable value, we put N/A
+ for testbed in reps:
+ d = list(testbed['services'])
+ del testbed['services']
+ testbed['services'] = []
+ for s in services:
+ set_v = 0
+ for i in d:
+ try:
+ testbed['services'].append(i[s])
+ set_v=1
+ except:
+ pass
+ if set_v == 0 :
+ testbed['services'].append('N/A')
+
+ ###### Pass variables to template
+ #env['logging_test'] = json.dumps(all_exp, ensure_ascii=False)
+ env['serv_per_tb'] = json.dumps(serv_per_tb, ensure_ascii=False)
+ env['reputation'] = reps
+ env['rep_serv'] = services
+ env['slicelist'] = all_exp
+ env['json_data'] = json.dumps(all_exp, ensure_ascii=False)
+
+ ###### *** Reputation Plugin-specific END *** ############
+
+
+ if request.user.is_authenticated():
+ env['person'] = self.request.user
+ else:
+ env['person'] = None
+
+ env['theme'] = self.theme
+ #env['user_list']= user_list
+
+ env['username']=the_user(request)
+ env['topmenu_items'] = topmenu_items(None, request)
+ if state: env['state'] = state
+ elif not env['username']: env['state'] = None
+ # use one or two columns for the layout - not logged in users will see the login prompt
+ env['layout_1_or_2']="layout-unfold2.html" if not env['username'] else "layout-unfold1.html"
+
+ return render_to_response(self.template, env, context_instance=RequestContext(request))
+
+
+
+
+
+
+
+
+
+