Filter status: All, Available, Unavailable, Unconfigured, Pending, Reserved
[myslice.git] / portal / sliceresourceview.py
index 85bd368..cdd5f13 100644 (file)
@@ -1,16 +1,16 @@
+import json
+
 from django.template                    import RequestContext
 from django.shortcuts                   import render_to_response
+from django.views.generic.base          import TemplateView
+from django.http import HttpResponse
+from django.shortcuts import render
 
 from manifold.core.query                import Query, AnalyzedQuery
 from manifoldapi.manifoldapi            import execute_query
-import json
 
-from django.views.generic.base          import TemplateView
 
 from unfold.loginrequired               import LoginRequiredView
-from django.http import HttpResponse
-from django.shortcuts import render
-
 from unfold.page                        import Page
 
 from myslice.configengine               import ConfigEngine
@@ -22,6 +22,7 @@ from plugins.googlemap                  import GoogleMap
 from plugins.filter_status              import FilterStatusPlugin
 from plugins.testbeds                   import TestbedsPlugin
 from plugins.scheduler2                 import Scheduler2
+from plugins.asap                       import AsapPlugin
 
 # Bristol plugin
 from plugins.univbris                   import Univbris
@@ -30,7 +31,7 @@ from plugins.univbrisfv                 import UnivbrisFv
 from plugins.univbrisfvf                import UnivbrisFvf
 from plugins.univbrisfvfo              import UnivbrisFvfo
 from plugins.univbristopo               import UnivbrisTopo
-from plugins.univbrisvtam                  import UnivbrisVtam as UnivbrisVtamPlugin
+from plugins.univbrisvtam               import UnivbrisVtam as UnivbrisVtamPlugin
 from plugins.univbrisvtamform          import UnivbrisVtamForm
 
 from plugins.columns_editor             import ColumnsEditor
@@ -38,6 +39,7 @@ from plugins.sladialog                  import SlaDialog
 from plugins.lists.simplelist           import SimpleList
 
 from myslice.theme import ThemeView
+from myslice.settings import logger
 
 class SliceResourceView (LoginRequiredView, ThemeView):
     template_name = "slice-resource-view.html"
@@ -60,7 +62,7 @@ class SliceResourceView (LoginRequiredView, ThemeView):
         user_fields = ['user_hrn'] # [column['name'] for column in user_md['column']]
 
         query_resource_all = Query.get('resource').select(resource_fields)
-        page.enqueue_query(query_resource_all)
+        #page.enqueue_query(query_resource_all)
 
         # leases query
         #lease_md = metadata.details_by_object('lease')
@@ -71,11 +73,27 @@ class SliceResourceView (LoginRequiredView, ThemeView):
 
         slice_md = metadata.details_by_object('slice')
         slice_fields = [column['name'] for column in slice_md['column']]
-        print "SLICE RES VIEW fields = %s" % slice_fields
+        logger.debug("SLICE RES VIEW fields = {}".format(slice_fields))
         # 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_fields)
+
+        # Columns shown by default in Query_table plugin
+        page.expose_js_var("QUERYTABLE_MAP","{'Resource name': 'hostname', 'Type': 'type', 'Facility': 'facility_name','Testbed': 'testbed_name', 'Available':'available'}")
+       
+        # Columns checked by default in Columns_selector plugin
+        query_default_fields = ['hostname', 'type', 'facility_name', 'testbed_name', 'available']
+
+        QUERYTABLE_MAP = { 
+            'hostname'      :   'Resource name',
+            'type'          :   'Type',
+            'facility_name' :   'Facility',
+            'testbed_name'  :   'Testbed',
+            'available'     :   'Available',
+        }
+
+
         #        # SLICE
         #        'slice_hrn',
         #        # - The record key is needed otherwise the storage of records
@@ -121,14 +139,16 @@ class SliceResourceView (LoginRequiredView, ThemeView):
         # ALL RESOURCES LIST
         # resources as a list using datatable plugin
  
-        list_resources = QueryTable(
-            page       = page,
-            domid      = 'resources-list',
-            title      = 'List view',
-            query      = sq_resource,
-            query_all  = query_resource_all,
-            init_key   = "urn",
-            checkboxes = True,
+        list_resources     = QueryTable(
+            page           = page,
+            domid          = 'resources-list',
+            title          = 'List view',
+            query          = sq_resource,
+            query_all      = query_resource_all,
+            mapping        = QUERYTABLE_MAP,
+            default_fields = query_default_fields,
+            init_key       = "urn",
+            checkboxes     = True,
             datatables_options = {
                 'iDisplayLength': 25,
                 'bLengthChange' : True,
@@ -179,6 +199,7 @@ class SliceResourceView (LoginRequiredView, ThemeView):
             page  = page,
             query = sq_resource, 
             query_all = query_resource_all,
+            default_fields = query_default_fields,
             title = "Select Columns",
             domid = 'select-columns',
         )
@@ -219,6 +240,20 @@ class SliceResourceView (LoginRequiredView, ThemeView):
             query_lease = sq_lease,
         )
 
+        # --------------------------------------------------------------------------
+        # LEASES Asap Scheduler
+        # Select an end_time for all unconfigured resources
+        # start_time is as soon as possible
+
+        #resources_as_asap = AsapPlugin( 
+        #    page       = page,
+        #    domid      = 'asap',
+        #    title      = 'Asap',
+        #    # this is the query at the core of the slice list
+        #    query = sq_resource,
+        #    query_lease = sq_lease,
+        #)
+
         # --------------------------------------------------------------------------
         # QueryUpdater (Pending Operations)
  
@@ -263,6 +298,7 @@ class SliceResourceView (LoginRequiredView, ThemeView):
             page            = page,
             domid           = "filter-status",
             query           = sq_resource,
+            query_lease     = sq_lease,
         )
         apply = ApplyPlugin(
             page            = page,
@@ -377,42 +413,25 @@ 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)
-
-        # XXX When session has expired, this is None and thus not iterable
-        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"
+        # --------------------------------------------------------------------------
+        # 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,
+        )
         
         template_env = {}
+
+        template_env['request'] = self.request       
+
         template_env['list_resources'] = list_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)
@@ -425,6 +444,7 @@ class SliceResourceView (LoginRequiredView, ThemeView):
 
         template_env['map_resources'] = map_resources.render(self.request)
         template_env['scheduler'] = resources_as_scheduler2.render(self.request)
+        #template_env['asap'] = resources_as_asap.render(self.request)
 
         # Bristol plugin
        # template_env['welcome'] = univbriswelcome.render(self.request)
@@ -436,11 +456,10 @@ class SliceResourceView (LoginRequiredView, ThemeView):
        # template_env['vms_list'] = univbrisvtamplugin.render(self.request)
        # template_env['vm_form'] = univbrisvtamform.render(self.request)
 
-#        template_env['pending_resources'] = pending_resources.render(self.request)
-       # template_env['sla_dialog'] = '' # sla_dialog.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