dos2unix'ed
authorThierry Parmentelat <thierry.parmentelat@inria.fr>
Sun, 22 Mar 2015 12:24:11 +0000 (13:24 +0100)
committerThierry Parmentelat <thierry.parmentelat@inria.fr>
Sun, 22 Mar 2015 12:24:11 +0000 (13:24 +0100)
portal/reputationview.py

index f160d7d..fcc5ff0 100644 (file)
-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
-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
-        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
-    wildcard_testbeds = {}\r
-   \r
-    \r
-    for slice in slices_users:  \r
-        nodes={}\r
-        leases = slice['lease']\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
-                \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
-                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
-                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
-            ######### 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']) + 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
-    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
-        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
-        #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', '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
-        #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
-        #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'], 'slice_last_updated':slice['slice_last_updated']  })  \r
-                \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
-        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
-            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
-            if item['id'] in unrated_exp:\r
-                pass\r
-            else:\r
-                all_exp.pop(all_exp.index(item))\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
-        #create a services list and a dict containing the services for each testbed\r
-        serv_per_tb = {}\r
-        services = []\r
-        for item in reps:\r
-            serv_per_tb[item['testbed']]=[]\r
-            for serv in item['services']:\r
-                if serv.keys()[0] not in services:\r
-                    services.append(serv.keys()[0])\r
-                    serv_per_tb[item['testbed']].append(serv.keys()[0])        \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['serv_per_tb'] = json.dumps(serv_per_tb, 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
+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_mimetype(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_mimetype(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))
+    
+
+
+    
+
+                    
+                    
+                    
+                    
             
\ No newline at end of file