fix: hide management section for non pi users
[myslice.git] / portal / sliceresourceview.py
index 762b568..f6d29db 100644 (file)
@@ -3,6 +3,7 @@ from django.shortcuts                import render_to_response
 
 from manifold.core.query             import Query, AnalyzedQuery
 from manifoldapi.manifoldapi         import execute_query
+import json
 
 from django.views.generic.base      import TemplateView
 
@@ -19,6 +20,8 @@ from plugins.queryupdater            import QueryUpdater
 from plugins.testbeds                import TestbedsPlugin
 from plugins.scheduler2              import Scheduler2
 from plugins.columns_editor          import ColumnsEditor
+from plugins.sladialog               import SlaDialog
+from plugins.lists.simplelist        import SimpleList
 
 from myslice.theme import ThemeView
 
@@ -43,14 +46,17 @@ class SliceResourceView (LoginRequiredView, ThemeView):
         user_fields = ['user_hrn'] # [column['name'] for column in user_md['column']]
 
         # TODO The query to run is embedded in the URL
+        # Example: select slice_hrn, resource.urn, lease.resource, lease.start_time, lease.end_time from slice where slice_hrn == "ple.upmc.myslicedemo"
         main_query = Query.get('slice').filter_by('slice_hrn', '=', slicename)
         main_query.select(
                 'slice_hrn',
                 'resource.urn', 
                 'resource.hostname', 'resource.type',
                 'resource.network_hrn',
-                'lease.urn',
-                'user.user_hrn',
+                'lease.resource',
+                'lease.start_time',
+                'lease.end_time',
+                #'user.user_hrn',
                 #'application.measurement_point.counter'
         )
         # for internal use in the querytable plugin;
@@ -68,8 +74,8 @@ class SliceResourceView (LoginRequiredView, ThemeView):
         lease_md = metadata.details_by_object('lease')
         lease_fields = [column['name'] for column in lease_md['column']]
 
-        query_all_lease = Query.get('lease').select(lease_fields)
-        page.enqueue_query(query_all_lease)
+        query_lease_all = Query.get('lease').select(lease_fields)
+        page.enqueue_query(query_lease_all)
 
         # --------------------------------------------------------------------------
         # ALL RESOURCES LIST
@@ -95,21 +101,35 @@ class SliceResourceView (LoginRequiredView, ThemeView):
         # RESERVED RESOURCES LIST
         # resources as a list using datatable plugin
  
-        list_reserved_resources = QueryTable(
-            page       = page,
-            domid      = 'resources-reserved-list',
-            title      = 'List view',
-            query      = sq_resource,
-            query_all  = sq_resource,
-            init_key   = "urn",
-            checkboxes = True,
-            datatables_options = {
-                'iDisplayLength': 25,
-                'bLengthChange' : True,
-                'bAutoWidth'    : True,
-                },
+        list_reserved_resources = SimpleList(
+            title = None,
+            page  = page,
+            key   = 'urn',
+            query = sq_resource,
+        )
+
+        list_reserved_leases = SimpleList(
+            title = None,
+            page  = page,
+            key   = 'resource',
+            query = sq_lease,
         )
 
+#        list_reserved_resources = QueryTable(
+#            page       = page,
+#            domid      = 'resources-reserved-list',
+#            title      = 'List view',
+#            query      = sq_resource,
+#            query_all  = sq_resource,
+#            init_key   = "urn",
+#            checkboxes = True,
+#            datatables_options = {
+#                'iDisplayLength': 25,
+#                'bLengthChange' : True,
+#                'bAutoWidth'    : True,
+#                },
+#        )
+
         # --------------------------------------------------------------------------
         # COLUMNS EDITOR
         # list of fields to be applied on the query 
@@ -143,7 +163,7 @@ class SliceResourceView (LoginRequiredView, ThemeView):
             # center on Paris
             latitude   = 49.,
             longitude  = 9,
-            zoom       = 4,
+            zoom       = 8,
         )
 
         # --------------------------------------------------------------------------
@@ -156,8 +176,9 @@ class SliceResourceView (LoginRequiredView, ThemeView):
             title      = 'Scheduler',
             # this is the query at the core of the slice list
             query = sq_resource,
+            query_lease = sq_lease,
             query_all_resources = query_resource_all,
-            query_lease = query_all_lease,
+            query_all_leases = query_lease_all,
         )
 
         # --------------------------------------------------------------------------
@@ -167,11 +188,12 @@ class SliceResourceView (LoginRequiredView, ThemeView):
             page                = page,
             title               = 'Pending operations',
             query               = main_query,
-            togglable           = True,
+            togglable           = False,
             # start turned off, it will open up itself when stuff comes in
             toggled             = False,
             domid               = 'pending',
             outline_complete    = True,
+            username            = request.user,
         )
 
         # --------------------------------------------------------------------------
@@ -181,8 +203,8 @@ class SliceResourceView (LoginRequiredView, ThemeView):
         network_md = metadata.details_by_object('network')
         network_fields = [column['name'] for column in network_md['column']]
 
-        query_network = Query.get('network').select(network_fields)
-        page.enqueue_query(query_network)
+        #query_network = Query.get('network').select(network_fields)
+        #page.enqueue_query(query_network)
 
         filter_testbeds = TestbedsPlugin(
             page          = page,
@@ -190,7 +212,7 @@ class SliceResourceView (LoginRequiredView, ThemeView):
             title         = 'Filter by testbeds',
             query         = sq_resource,
             query_all     = query_resource_all,
-            query_network = query_network,
+            #query_network = query_network,
             init_key      = "network_hrn",
             checkboxes    = True,
             datatables_options = {
@@ -200,9 +222,43 @@ class SliceResourceView (LoginRequiredView, ThemeView):
                 },
         )
 
+        # --------------------------------------------------------------------------
+        # SLA View and accept dialog
+        
+        sla_dialog = SlaDialog(
+            page                = page,
+            title               = 'sla dialog',
+            query               = main_query,
+            togglable           = False,
+            # start turned off, it will open up itself when stuff comes in
+            toggled             = True,
+            domid               = 'sla_dialog',
+            outline_complete    = True,
+            username            = request.user,
+        )
+        
+        ## check user is pi or not
+        platform_query  = Query().get('local:platform').select('platform_id','platform','gateway_type','disabled')
+        account_query  = Query().get('local:account').select('user_id','platform_id','auth_type','config')
+        platform_details = execute_query(self.request, platform_query)
+        account_details = execute_query(self.request, account_query)
+        for platform_detail in platform_details:
+            for account_detail in account_details:
+                if platform_detail['platform_id'] == account_detail['platform_id']:
+                    if 'config' in account_detail and account_detail['config'] is not '':
+                        account_config = json.loads(account_detail['config'])
+                        if 'myslice' in platform_detail['platform']:
+                            acc_auth_cred = account_config.get('delegated_authority_credentials','N/A')
+        # assigning values
+        if acc_auth_cred == {} or acc_auth_cred == 'N/A':
+            pi = "is_not_pi"
+        else:
+            pi = "is_pi"
+        
         template_env = {}
         template_env['list_resources'] = list_resources.render(self.request)
-#         template_env['list_reserved_resources'] = list_reserved_resources.render(self.request)
+        template_env['list_reserved_resources'] = list_reserved_resources.render(self.request)
+        template_env['list_reserved_leases'] = list_reserved_leases.render(self.request)
 
         template_env['columns_editor'] = filter_column_editor.render(self.request)
 
@@ -210,8 +266,10 @@ class SliceResourceView (LoginRequiredView, ThemeView):
         template_env['map_resources'] = map_resources.render(self.request)
         template_env['scheduler'] = resources_as_scheduler2.render(self.request)
         template_env['pending_resources'] = pending_resources.render(self.request)
+        template_env['sla_dialog'] = sla_dialog.render(self.request)
         template_env["theme"] = self.theme
         template_env["username"] = request.user
+        template_env["pi"] = pi
         template_env["slice"] = slicename
         template_env["section"] = "resources"
         template_env["msg"] = msg