X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=portal%2Fsliceresourceview.py;h=f99c7d986da9a6589e6c5b30b0127f31fda6da9b;hb=0361b6aee2d576761a379ec0c50f2397f903de76;hp=bdffa3fed829c4bfe00f8d0ddcaa16388e29a457;hpb=5a40dbe074a307538769ae873e446323d6a75f39;p=myslice.git diff --git a/portal/sliceresourceview.py b/portal/sliceresourceview.py index bdffa3fe..f99c7d98 100644 --- a/portal/sliceresourceview.py +++ b/portal/sliceresourceview.py @@ -17,6 +17,9 @@ 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.lists.simplelist import SimpleList from myslice.theme import ThemeView @@ -41,14 +44,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; @@ -56,15 +62,21 @@ class SliceResourceView (LoginRequiredView, ThemeView): 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) - 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) # -------------------------------------------------------------------------- - # RESOURCES + # ALL RESOURCES LIST # resources as a list using datatable plugin list_resources = QueryTable( @@ -82,8 +94,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( @@ -102,7 +161,22 @@ class SliceResourceView (LoginRequiredView, ThemeView): # 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, ) # -------------------------------------------------------------------------- @@ -112,7 +186,7 @@ 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', @@ -125,7 +199,6 @@ class SliceResourceView (LoginRequiredView, ThemeView): network_md = metadata.details_by_object('network') network_fields = [column['name'] for column in network_md['column']] - print "sliceresourceview.py ====> ",network_fields query_network = Query.get('network').select(network_fields) page.enqueue_query(query_network) @@ -148,8 +221,14 @@ class SliceResourceView (LoginRequiredView, ThemeView): 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['scheduler'] = resources_as_scheduler2.render(self.request) template_env['pending_resources'] = pending_resources.render(self.request) template_env["theme"] = self.theme template_env["username"] = request.user