From c9bda06ba879bace5ed82bd188ac562c35163acf Mon Sep 17 00:00:00 2001 From: Loic Baron Date: Thu, 15 May 2014 18:27:28 +0200 Subject: [PATCH] Scheduler2 plugin: Queries handled by the plugin = query (resource in slice), query_lease (lease in slice), query_all_resources, query_all_leases --- .../queryupdater/static/js/queryupdater.js | 3 ++ plugins/scheduler2/__init__.py | 7 +++- .../scheduler2/static/js/scheduler-helpers.js | 4 +- .../static/js/scheduler-table-selector.js | 1 - plugins/scheduler2/static/js/scheduler2.js | 37 ++++++++++--------- portal/sliceresourceview.py | 7 ++-- portal/templates/slice-resource-view.html | 6 +-- 7 files changed, 38 insertions(+), 27 deletions(-) diff --git a/plugins/queryupdater/static/js/queryupdater.js b/plugins/queryupdater/static/js/queryupdater.js index 89afdf3d..e4b3f9ce 100644 --- a/plugins/queryupdater/static/js/queryupdater.js +++ b/plugins/queryupdater/static/js/queryupdater.js @@ -169,10 +169,13 @@ var status = msg + status; + + // find line // if no, create it, else replace it // XXX it's not just about adding lines, but sometimes removing some // XXX how do we handle status reset ? + data.value = JSON.stringify(data.value); row = this.find_row(data.value); newline = [ action, diff --git a/plugins/scheduler2/__init__.py b/plugins/scheduler2/__init__.py index 02765a3e..040b2740 100755 --- a/plugins/scheduler2/__init__.py +++ b/plugins/scheduler2/__init__.py @@ -5,13 +5,16 @@ from datetime import timedelta class Scheduler2 (Plugin): - def __init__ (self, query, query_all_resources, query_lease = None, **settings): + def __init__ (self, query, query_lease, query_all_resources, query_all_leases, **settings): Plugin.__init__ (self, **settings) self.query=query self.query_all_resources = query_all_resources self.query_all_resources_uuid = query_all_resources.query_uuid + self.query_all_leases = query_all_leases + self.query_all_leases_uuid = query_all_leases.query_uuid + self.query_lease = query_lease self.query_lease_uuid = query_lease.query_uuid @@ -51,7 +54,7 @@ class Scheduler2 (Plugin): # query_uuid will pass self.query results to the javascript # and will be available as "record" in : # on_new_record: function(record) - return ['plugin_uuid', 'domid', 'query_uuid', 'time_slots', 'nodes', 'query_lease_uuid', 'query_all_resources_uuid'] + return ['plugin_uuid', 'domid', 'query_uuid', 'time_slots', 'nodes', 'query_lease_uuid', 'query_all_resources_uuid', 'query_all_leases_uuid'] def export_json_settings (self): diff --git a/plugins/scheduler2/static/js/scheduler-helpers.js b/plugins/scheduler2/static/js/scheduler-helpers.js index d6f32247..c55c6356 100755 --- a/plugins/scheduler2/static/js/scheduler-helpers.js +++ b/plugins/scheduler2/static/js/scheduler-helpers.js @@ -127,6 +127,7 @@ function schedulerFindDuration(startTime, endTime, granularity) { // // Set Select - Free Slots *******Start function schedulerSelectSlot(slotId, rowIndex, resourceIndex) { + console.log('timeslot selected'); _schedulerSetStatusSlot(slotId, rowIndex, resourceIndex, 'selected'); } function schedulerFreeSlot(slotId, rowIndex, resourceIndex) { @@ -136,6 +137,7 @@ function schedulerFreeSlot(slotId, rowIndex, resourceIndex) { function _schedulerSetStatusSlot(slotId, rowIndex, resourceIndex, classText) { var tmpVS = SchedulerDataViewData[rowIndex].leases[slotId]; // for the display var tmpS = SchedulerData[resourceIndex].leases[slotId]; // for the data + console.log(SchedulerData[resourceIndex].id); tmpVS.status = classText; tmpS.status = classText; //select other from the group in the same granularity @@ -196,4 +198,4 @@ function schedulerCompareOnDay(dateOne, dateTwo) { return 0; } -} \ No newline at end of file +} diff --git a/plugins/scheduler2/static/js/scheduler-table-selector.js b/plugins/scheduler2/static/js/scheduler-table-selector.js index abd8a69f..d69a2d45 100755 --- a/plugins/scheduler2/static/js/scheduler-table-selector.js +++ b/plugins/scheduler2/static/js/scheduler-table-selector.js @@ -181,7 +181,6 @@ function selectRange(isTemp) { $("#tblReservation td:not([class='info'])").slice(dragStart, dragEnd).addClass('selected'); }*/ - if (SchedulerData) console.timeEnd("mouse:---selectRange"); } diff --git a/plugins/scheduler2/static/js/scheduler2.js b/plugins/scheduler2/static/js/scheduler2.js index 8fe408fe..e1c6f3f0 100755 --- a/plugins/scheduler2/static/js/scheduler2.js +++ b/plugins/scheduler2/static/js/scheduler2.js @@ -93,10 +93,10 @@ var tmpSchedulerLeases = []; /* Listening to queries */ this.listen_query(options.query_uuid); - this.listen_query(options.query_all_uuid, 'all'); + //this.listen_query(options.query_all_uuid, 'all'); this.listen_query(options.query_all_resources_uuid, 'all_resources'); this.listen_query(options.query_lease_uuid, 'lease'); - //this.listen_query(options.query_lease_uuid, 'lease'); + this.listen_query(options.query_all_leases_uuid, 'all_leases'); if (schedulerDebug) console.timeEnd("Listening_to_queries"); }, @@ -160,7 +160,7 @@ var tmpSchedulerLeases = []; /* lease QUERY HANDLERS Start */ 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) { + on_all_leases_new_record: function(data) { if (data.resource.indexOf("nitos") > -1) { tmpSchedulerLeases.push({ id: schedulerGetSlotId(data.start_time, data.duration, data.granularity), @@ -180,7 +180,7 @@ var tmpSchedulerLeases = []; } //console.log(data.toSource()); console.log('lease_new_record'); }, - on_lease_query_done: function(data) { + on_all_leases_query_done: function(data) { _leasesDone = true; this._initScheduler(); // console.log('lease_query_done'); @@ -242,7 +242,7 @@ var tmpSchedulerLeases = []; } }, - on_lease_filter_added: function(filter) { + on_all_leases_filter_added: function(filter) { console.log("Filter on Leases added !"); }, @@ -297,12 +297,12 @@ var tmpSchedulerLeases = []; console.log(tomorrow.getTime()/1000); // Remove previous date interval - manifold.raise_event(scheduler2Instance.options.query_lease_uuid, FILTER_REMOVED, ['start_time', '>']); - manifold.raise_event(scheduler2Instance.options.query_lease_uuid, FILTER_REMOVED, ['start_time', '<']); + manifold.raise_event(scheduler2Instance.options.query_all_leases_uuid, FILTER_REMOVED, ['start_time', '>']); + manifold.raise_event(scheduler2Instance.options.query_all_leases_uuid, FILTER_REMOVED, ['start_time', '<']); // Add new date interval - manifold.raise_event(scheduler2Instance.options.query_lease_uuid, FILTER_ADDED, ['start_time', '>', SchedulerDateSelected.getTime()/1000]); - manifold.raise_event(scheduler2Instance.options.query_lease_uuid, FILTER_ADDED, ['start_time', '<', tomorrow.getTime()/1000]); + manifold.raise_event(scheduler2Instance.options.query_all_leases_uuid, FILTER_ADDED, ['start_time', '>', SchedulerDateSelected.getTime()/1000]); + manifold.raise_event(scheduler2Instance.options.query_all_leases_uuid, FILTER_ADDED, ['start_time', '<', tomorrow.getTime()/1000]); } else { alert("Please select a date, so the scheduler can reserve leases."); } @@ -338,12 +338,14 @@ var tmpSchedulerLeases = []; //btn Submit leases $('#btnSchedulerSubmit').click(function () { + console.log("click btnSchedulerSubmit"); var leasesForCommit = new Array(); - var newLeaseStarted = false; var tmpDateTime = SchedulerDateSelected; + console.log(SchedulerData); for (var i = 0; i < SchedulerData.length; i++) { var tpmR = SchedulerData[i]; + var newLeaseStarted = false; for (var j = 0; j < tpmR.leases.length; j++) { var tpmL = tpmR.leases[j]; if (newLeaseStarted == false && tpmL.status == 'selected') { @@ -353,13 +355,14 @@ var tmpSchedulerLeases = []; //add lease object leasesForCommit.push({ resource: tpmR.id, - granularity: tpmR.granularity, - lease_type: null, - slice: null, + //granularity: tpmR.granularity, + //lease_type: null, + //slice: null, start_time: unixStartTime, end_time: null, - duration: null + //duration: null }); + console.log(tpmR.id); newLeaseStarted = true; } else if (newLeaseStarted == true && tpmL.status != 'selected') { //get date of the slot @@ -368,14 +371,14 @@ var tmpSchedulerLeases = []; //upate end_time var tmpCL = leasesForCommit[leasesForCommit.length - 1]; tmpCL.end_time = unixEndTime; - tmpCL.duration = schedulerFindDuration(tmpCL.start_time, tmpCL.end_time, tmpCL.granularity); + //tmpCL.duration = schedulerFindDuration(tmpCL.start_time, tmpCL.end_time, tmpCL.granularity); newLeaseStarted = false; } } } - + console.log(leasesForCommit); for (var i = 0; i < leasesForCommit.length; i++) { - //manifold.raise_event(scheduler.options.query_lease_uuid, SET_ADD, leasesForCommit[i]); + manifold.raise_event(scheduler2Instance.options.query_lease_uuid, SET_ADD, leasesForCommit[i]); } }); // diff --git a/portal/sliceresourceview.py b/portal/sliceresourceview.py index b02b0cac..6fc384a4 100644 --- a/portal/sliceresourceview.py +++ b/portal/sliceresourceview.py @@ -68,8 +68,8 @@ class SliceResourceView (LoginRequiredView, ThemeView): 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) + query_lease_all = Query.get('lease').select(lease_fields) + page.enqueue_query(query_lease_all) # -------------------------------------------------------------------------- # ALL RESOURCES LIST @@ -156,8 +156,9 @@ class SliceResourceView (LoginRequiredView, ThemeView): 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_lease = query_all_lease, + query_all_leases = query_lease_all, ) # -------------------------------------------------------------------------- diff --git a/portal/templates/slice-resource-view.html b/portal/templates/slice-resource-view.html index 556db48f..707fa364 100644 --- a/portal/templates/slice-resource-view.html +++ b/portal/templates/slice-resource-view.html @@ -80,6 +80,9 @@ + {% endblock %} -- 2.47.0