X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=portal%2Fsliceresourceview.py;h=cdd5f1359794e7a3d3687d7835a90c1d366554b4;hb=d035a1f93e4acbeee79b7c8200264687d940ccc2;hp=5b8ce0f731604fe9796f3d1e1f871062ed93dfa7;hpb=6e24f5c8289f13a60d28a86543e8a84db63f4426;p=myslice.git diff --git a/portal/sliceresourceview.py b/portal/sliceresourceview.py index 5b8ce0f7..cdd5f135 100644 --- a/portal/sliceresourceview.py +++ b/portal/sliceresourceview.py @@ -1,28 +1,45 @@ -from django.template import RequestContext -from django.shortcuts import render_to_response +import json -from manifold.core.query import Query, AnalyzedQuery -from manifoldapi.manifoldapi import execute_query - -from django.views.generic.base import TemplateView - -from unfold.loginrequired import LoginRequiredView +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 unfold.page import Page +from manifold.core.query import Query, AnalyzedQuery +from manifoldapi.manifoldapi import execute_query + + +from unfold.loginrequired import LoginRequiredView +from unfold.page import Page + +from myslice.configengine import ConfigEngine + +from plugins.apply import ApplyPlugin +from plugins.querytable import QueryTable +from plugins.googlemap import GoogleMap +# from plugins.queryupdater import QueryUpdaterPlugin +from plugins.filter_status import FilterStatusPlugin +from plugins.testbeds import TestbedsPlugin +from plugins.scheduler2 import Scheduler2 +from plugins.asap import AsapPlugin -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 +# Bristol plugin +from plugins.univbris import Univbris +from plugins.univbrisfoam import UnivbrisFoam +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.univbrisvtamform import UnivbrisVtamForm + +from plugins.columns_editor import ColumnsEditor +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" @@ -44,20 +61,70 @@ class SliceResourceView (LoginRequiredView, ThemeView): user_md = metadata.details_by_object('user') 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) + + # 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) + + slice_md = metadata.details_by_object('slice') + slice_fields = [column['name'] for column in slice_md['column']] + 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_hrn', - 'resource.urn', - 'resource.hostname', 'resource.type', - 'resource.network_hrn', - 'lease.resource', - 'lease.start_time', - 'lease.end_time', - #'user.user_hrn', - #'application.measurement_point.counter' - ) + 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 + # # bugs ! + # 'slice_urn', + # # RESOURCES + # 'resource', + # 'lease', + # 'resource.urn', + # 'resource.hostname', 'resource.type', + # # - The facility_name and testbed_name are required for the + # # testbeds plugin to properly work. + # 'resource.facility_name', + # 'resource.testbed_name', + # # LEASES + # 'lease.resource', + # 'lease.start_time', + # 'lease.end_time', + # # - The lease_id is important for NITOS identify already existing + # # leases + # 'lease.lease_id', + + # # FLOWSPACE + # #'flowspace', + # # VMS + # #'vms', + + + # #'user.user_hrn', + # #'application.measurement_point.counter' + #) # for internal use in the querytable plugin; # needs to be a unique column present for each returned record main_query_init_key = 'urn' @@ -65,29 +132,23 @@ class SliceResourceView (LoginRequiredView, ThemeView): 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) - - # 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) + #sq_flowspace = aq.subquery('flowspace') + #sq_vms = aq.subquery('vms') # -------------------------------------------------------------------------- # 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, @@ -138,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', ) @@ -153,16 +215,16 @@ class SliceResourceView (LoginRequiredView, ThemeView): # tab's sons preferably turn this off togglable = False, query = sq_resource, - query_all = query_resource_all, # this key is the one issued by google googlemap_api_key = ConfigEngine().googlemap_api_key(), # the key to use at init-time init_key = main_query_init_key, checkboxes = True, - # center on Paris - latitude = 49., - longitude = 9, - zoom = 8, + + # To center around Europe : 53,9 / 3 + latitude = 53., + longitude = 9., + zoom = 3, ) # -------------------------------------------------------------------------- @@ -176,24 +238,36 @@ class SliceResourceView (LoginRequiredView, ThemeView): # 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, ) + # -------------------------------------------------------------------------- + # 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) - pending_resources = QueryUpdater( - page = page, - title = 'Pending operations', - query = main_query, - togglable = False, - # start turned off, it will open up itself when stuff comes in - toggled = False, - domid = 'pending', - outline_complete = True, - username = request.user, - ) +# pending_resources = QueryUpdaterPlugin( +# page = page, +# title = 'Pending operations', +# query = main_query, +# togglable = False, +# # start turned off, it will open up itself when stuff comes in +# toggled = False, +# domid = 'pending', +# outline_complete = True, +# username = request.user, +# ) # -------------------------------------------------------------------------- # NETWORKS @@ -202,41 +276,162 @@ 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_networks = Query.get('network').select(network_fields) + #page.enqueue_query(query_networks) 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, - }, + page = page, + domid = 'testbeds-filter', + title = 'Filter by testbeds', + query = sq_resource, + #query_networks = query_networks, + #init_key = "network_hrn", + #checkboxes = True, + #datatables_options = { + # 'iDisplayLength': 25, + # 'bLengthChange' : True, + # 'bAutoWidth' : True, + # }, ) + filter_status = FilterStatusPlugin( + page = page, + domid = "filter-status", + query = sq_resource, + query_lease = sq_lease, + ) + apply = ApplyPlugin( + page = page, + domid = "apply", + query = main_query, + username = request.user, + ) + + # -------------------------------------------------------------------------- + # Ofelia OpenFlow Plugin + # Bristol plugin + + # plugin which display a "gathering resources" message + # waiting for all resources to be returned by manifold + # univbriswelcome = Univbris( + # page = page, + # title = 'univbris_welcome', + # domid = 'univbris_welcome', + # query = query_resource_all, + # ) + + # univbrisfoamlist = UnivbrisFoam( + # page = page, + # title = 'univbris_foam_ports_selection', + # domid = 'univbris_foam_ports_selection', + # query = query_resource_all, + # query_all = query_resource_all, + # checkboxes = False, + # datatables_options = { + # 'iDisplayLength': 10, + # 'bLengthChange' : True, + # 'bAutoWidth' : True, + # }, + # ) + + # #plugin which manages the different flowspaces that the user creates, and also sends flowspaces to manifold + # univbrisfvlist = UnivbrisFv( + # page = page, + # title = 'univbris_flowspace_selection', + # domid = 'univbris_flowspace_selection', + # query = sq_flowspace, + # query_all = query_resource_all, + # datatables_options = { + # 'iDisplayLength': 5, + # 'bLengthChange' : True, + # 'bAutoWidth' : True, + # }, + # ) + + # #plugin which allows the definition of a single flowspace + # univbrisfvform = UnivbrisFvf( + # page = page, + # title = 'univbris_flowspace_form', + # domid = 'univbris_flowspace_form', + # query = query_resource_all, + # query_all = None, + # datatables_options = { + # 'iDisplayLength': 3, + # 'bLengthChange' : True, + # 'bAutoWidth' : True, + # }, + # ) + + # #plugin which allows the definition the match criteria on a single OPTICAL flowspace + # univbrisofvform = UnivbrisFvfo( + # page = page, + # title = 'univbris_oflowspace_form', + # domid = 'univbris_oflowspace_form', + # query = None, + # query_all = None, + # datatables_options = { + # 'iDisplayLength': 3, + # 'bLengthChange' : True, + # 'bAutoWidth' : True, + # }, + # ) + + # #plugin which display the gathered topology + # univbristopology = UnivbrisTopo( + # page = page, + # title = 'univbris_topology', + # domid = 'univbris_topology', + # query = query_resource_all, + # ) + + # # -------------------------------------------------------------------------- + # # Ofelia VTAM Plugin + # # Bristol Plugin + + # #plugin which display a table where an experimenter will add VMs to according to his needs + # # responsible to send the data to Manifold + # univbrisvtamplugin = UnivbrisVtamPlugin( + # page = page, + # title = 'univbris_vtam', + # domid = 'univbris_vtam', + # query = sq_vms, + # #query = sq_resource, + # ) + + # #plugin which display a form where an experimenter will specify + # # in which testbed and which physical server to setup the VM + # univbrisvtamform = UnivbrisVtamForm( + # page = page, + # title = 'univbris_vtam_form', + # domid = 'univbris_vtam_form', + # query = query_resource_all, + # query_all = None, + # datatables_options = { + # 'iDisplayLength': 3, + # '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, + 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) @@ -244,9 +439,24 @@ class SliceResourceView (LoginRequiredView, ThemeView): template_env['columns_editor'] = filter_column_editor.render(self.request) template_env['filter_testbeds'] = filter_testbeds.render(self.request) + template_env['filter_status'] = filter_status.render(self.request) + template_env['apply'] = apply.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['asap'] = resources_as_asap.render(self.request) + + # Bristol plugin + # template_env['welcome'] = univbriswelcome.render(self.request) + # template_env['resources'] = univbrisfoamlist.render(self.request) + # template_env['flowspaces'] = univbrisfvlist.render(self.request) + # template_env['oflowspaces_form'] = univbrisofvform.render(self.request) + # template_env['flowspaces_form'] = univbrisfvform.render(self.request) + # template_env['topology'] = univbristopology.render(self.request) + # 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["theme"] = self.theme template_env["username"] = request.user