From 96b5152a80ed097112c698c4f24e796fed56e122 Mon Sep 17 00:00:00 2001 From: Loic Baron Date: Thu, 27 Mar 2014 11:45:09 +0100 Subject: [PATCH] Scheduler2 from Nitos integration into the slice view --- plugins/scheduler2/__init__.py | 5 +++- plugins/scheduler2/static/js/scheduler2.js | 25 +++++++++------- portal/sliceresourceview.py | 33 ++++++++++++++++++---- portal/templates/slice-resource-view.html | 2 +- 4 files changed, 48 insertions(+), 17 deletions(-) diff --git a/plugins/scheduler2/__init__.py b/plugins/scheduler2/__init__.py index a1057a4c..0be022cf 100755 --- a/plugins/scheduler2/__init__.py +++ b/plugins/scheduler2/__init__.py @@ -11,8 +11,11 @@ class Scheduler2 (Plugin): self.query=query self.query_all_resources = query_all_resources self.query_all_resources_uuid = query_all_resources.query_uuid + self.query_lease = query_lease - query_lease.query_uuid if query_lease else None + self.query_lease_uuid = query_lease.query_uuid + + #query_lease.query_uuid if query_lease else None #granularity in minutes granularity = 10 diff --git a/plugins/scheduler2/static/js/scheduler2.js b/plugins/scheduler2/static/js/scheduler2.js index dd0c8f8a..7c6c323d 100755 --- a/plugins/scheduler2/static/js/scheduler2.js +++ b/plugins/scheduler2/static/js/scheduler2.js @@ -48,6 +48,7 @@ var schdlr_PartsInOneHour = 6; * applied, which allows to maintain chainability of calls */ init: function (options, element) { + this.classname="scheduler2"; // Call the parent constructor, see FAQ when forgotten this._super(options, element); @@ -113,18 +114,21 @@ var schdlr_PartsInOneHour = 6; var totalCell = ""; for (var i = 0; i < totalColums; i++) totalCell +=""; var srt_body = ""; - + $.each(SchedulerResources, function (i, group) { + console.log(group.groupName); //var groupTR = $("#ShedulerNodes tbody").html('
' + group.groupName + '
'); - var groupTR = $("#ShedulerNodes tbody").html('
' + group.groupName + '
'); + //var groupTR = $("#ShedulerNodes tbody").html('
' + group.groupName + '
'); + var groupTR = $("#ShedulerNodes tbody").html(''); - $.each(group.resources.slice(0,30), function (i, resource) { + //$.each(group.resources.slice(0,30), function (i, resource) { + $.each(group.resources, function (i, resource) { if (i == 0) { //$("#ShedulerNodes tbody tr:first").append('' + resource.hostname + ''); - $(groupTR).find("#schdlr_frstTD").html(resource.hostname); + $(groupTR).find("#schdlr_frstTD").html(resource.urn); //$(srt_body).html("" + totalCell + ""); } else { - $(groupTR).find("tr:last").after('' + resource.hostname + ''); + $(groupTR).find("tr:last").after('' + resource.urn + ''); //$(srt_body).find("tr:last").after("" + totalCell + ""); } srt_body += "" + totalCell + ""; @@ -181,6 +185,7 @@ var schdlr_PartsInOneHour = 6; //data is empty on load }, on_all_resources_new_record: function (data) { + //console.log(data); var tmpGroup = lookup(SchedulerResources, 'groupName', data.type); if (tmpGroup == null) { tmpGroup = { groupName: data.type, resources: [] }; @@ -204,12 +209,12 @@ var schdlr_PartsInOneHour = 6; }, /* all_resources QUERY HANDLERS End */ /* lease QUERY HANDLERS Start */ - on_lease_clear_records: function (data) { alert('clear_records'); }, - on_lease_query_in_progress: function (data) { alert('query_in_progress'); }, - on_lease_new_record: function (data) { alert('new_record'); }, - on_lease_query_done: function (data) { alert('query_done'); }, + on_lease_clear_records: function (data) { console.log('clear_records'); }, + on_lease_query_in_progress: function (data) { console.log('lease_query_in_progress'); }, + on_lease_new_record: function (data) { console.log('lease_new_record'); }, + on_lease_query_done: function (data) { console.log('lease_query_done'); }, //another plugin has modified something, that requires you to update your display. - on_lease_field_state_changed: function (data) { alert('query_done'); }, + on_lease_field_state_changed: function (data) { console.log('lease_field_state_changed'); }, /* lease QUERY HANDLERS End */ diff --git a/portal/sliceresourceview.py b/portal/sliceresourceview.py index afd95312..3ba1084c 100644 --- a/portal/sliceresourceview.py +++ b/portal/sliceresourceview.py @@ -17,6 +17,7 @@ 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 theme import ThemeView @@ -56,15 +57,23 @@ 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_all_lease = Query.get('lease').select(lease_fields) + page.enqueue_query(query_all_lease) + + print "!!!!!!!!!! query leases = ",query_all_lease # -------------------------------------------------------------------------- - # RESOURCES + # RESOURCES LIST # resources as a list using datatable plugin list_resources = QueryTable( @@ -83,7 +92,7 @@ class SliceResourceView (LoginRequiredView, ThemeView): ) # -------------------------------------------------------------------------- - # RESOURCES + # RESOURCES MAP # the resources part is made of a Tabs (Geographic, List), map_resources = GoogleMap( @@ -105,6 +114,20 @@ class SliceResourceView (LoginRequiredView, ThemeView): zoom = 4, ) + # -------------------------------------------------------------------------- + # 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_all_resources = query_resource_all, + query_lease = query_all_lease, + ) + # -------------------------------------------------------------------------- # QueryUpdater (Pending Operations) @@ -125,7 +148,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) @@ -150,6 +172,7 @@ class SliceResourceView (LoginRequiredView, ThemeView): template_env['list_resources'] = list_resources.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 diff --git a/portal/templates/slice-resource-view.html b/portal/templates/slice-resource-view.html index 1c00cb8a..9200f001 100644 --- a/portal/templates/slice-resource-view.html +++ b/portal/templates/slice-resource-view.html @@ -63,7 +63,7 @@ {{map_resources}}