Fixed SLA-Collector requests
[unfold.git] / portal / sliceresourceview.py
index 520a72e..5b8ce0f 100644 (file)
@@ -11,15 +11,18 @@ from django.http import HttpResponse
 from django.shortcuts import render
 
 from unfold.page                     import Page
 from django.shortcuts import render
 
 from unfold.page                     import Page
-from manifold.core.query             import Query, AnalyzedQuery
-from manifoldapi.manifoldapi         import execute_query
 
 from myslice.configengine            import ConfigEngine
 from plugins.querytable              import QueryTable
 from plugins.googlemap               import GoogleMap
 from plugins.queryupdater            import QueryUpdater
 
 from myslice.configengine            import ConfigEngine
 from plugins.querytable              import QueryTable
 from plugins.googlemap               import GoogleMap
 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 theme import ThemeView
+from myslice.theme import ThemeView
 
 class SliceResourceView (LoginRequiredView, ThemeView):
     template_name = "slice-resource-view.html"
 
 class SliceResourceView (LoginRequiredView, ThemeView):
     template_name = "slice-resource-view.html"
@@ -42,14 +45,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
         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',
         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;
                 #'application.measurement_point.counter'
         )
         # for internal use in the querytable plugin;
@@ -57,13 +63,23 @@ class SliceResourceView (LoginRequiredView, ThemeView):
         main_query_init_key = 'urn'
         aq = AnalyzedQuery(main_query, metadata=metadata)
         page.enqueue_query(main_query, analyzed_query=aq)
         main_query_init_key = 'urn'
         aq = AnalyzedQuery(main_query, metadata=metadata)
         page.enqueue_query(main_query, analyzed_query=aq)
+        sq_resource    = aq.subquery('resource')
+        sq_lease       = aq.subquery('lease')
 
         query_resource_all = Query.get('resource').select(resource_fields)
         page.enqueue_query(query_resource_all)
 
 
         query_resource_all = Query.get('resource').select(resource_fields)
         page.enqueue_query(query_resource_all)
 
-        sq_resource    = aq.subquery('resource')
-        sq_lease       = aq.subquery('lease')
+        # leases query
+        lease_md = metadata.details_by_object('lease')
+        lease_fields = [column['name'] for column in lease_md['column']]
 
 
+        query_lease_all = Query.get('lease').select(lease_fields)
+        page.enqueue_query(query_lease_all)
+
+        # --------------------------------------------------------------------------
+        # ALL RESOURCES LIST
+        # resources as a list using datatable plugin
         list_resources = QueryTable(
             page       = page,
             domid      = 'resources-list',
         list_resources = QueryTable(
             page       = page,
             domid      = 'resources-list',
@@ -79,8 +95,55 @@ class SliceResourceView (LoginRequiredView, ThemeView):
                 },
         )
 
                 },
         )
 
+
         # --------------------------------------------------------------------------
         # --------------------------------------------------------------------------
-        # RESOURCES
+        # RESERVED RESOURCES LIST
+        # resources as a list using datatable plugin
+        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 
+        # this will add/remove columns in QueryTable plugin
+        filter_column_editor = ColumnsEditor(
+            page  = page,
+            query = sq_resource, 
+            query_all = query_resource_all,
+            title = "Select Columns",
+            domid = 'select-columns',
+        )
+
+        # --------------------------------------------------------------------------
+        # RESOURCES MAP
         # the resources part is made of a Tabs (Geographic, List), 
 
         map_resources  = GoogleMap(
         # the resources part is made of a Tabs (Geographic, List), 
 
         map_resources  = GoogleMap(
@@ -99,7 +162,22 @@ class SliceResourceView (LoginRequiredView, ThemeView):
             # center on Paris
             latitude   = 49.,
             longitude  = 9,
             # center on Paris
             latitude   = 49.,
             longitude  = 9,
-            zoom       = 4,
+            zoom       = 8,
+        )
+
+        # --------------------------------------------------------------------------
+        # LEASES Nitos Scheduler
+        # Display the leases reservation timeslots of the resources
+
+        resources_as_scheduler2 = Scheduler2( 
+            page       = page,
+            domid      = 'scheduler',
+            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_all_leases = query_lease_all,
         )
 
         # --------------------------------------------------------------------------
         )
 
         # --------------------------------------------------------------------------
@@ -109,17 +187,67 @@ class SliceResourceView (LoginRequiredView, ThemeView):
             page                = page,
             title               = 'Pending operations',
             query               = main_query,
             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,
             # start turned off, it will open up itself when stuff comes in
             toggled             = False,
             domid               = 'pending',
             outline_complete    = True,
+            username            = request.user,
+        )
+
+        # --------------------------------------------------------------------------
+        # NETWORKS
+        # testbeds as a list of filters 
+
+        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)
+
+        filter_testbeds = TestbedsPlugin(
+            page          = page,
+            domid         = 'testbeds-filter',
+            title         = 'Filter by testbeds',
+            query         = sq_resource,
+            query_all     = query_resource_all,
+            #query_network = query_network,
+            init_key      = "network_hrn",
+            checkboxes    = True,
+            datatables_options = {
+                'iDisplayLength': 25,
+                'bLengthChange' : True,
+                'bAutoWidth'    : True,
+                },
+        )
+
+        # --------------------------------------------------------------------------
+        # 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['list_resources'] = list_resources.render(self.request)
         )
 
         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_leases'] = list_reserved_leases.render(self.request)
+
+        template_env['columns_editor'] = filter_column_editor.render(self.request)
+
+        template_env['filter_testbeds'] = filter_testbeds.render(self.request)
         template_env['map_resources'] = map_resources.render(self.request)
         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['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["slice"] = slicename
         template_env["theme"] = self.theme
         template_env["username"] = request.user
         template_env["slice"] = slicename