From c9bda06ba879bace5ed82bd188ac562c35163acf Mon Sep 17 00:00:00 2001
From: Loic Baron <loic.baron@lip6.fr>
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 @@
 			</div>
 			<div id="reserved" class="panel" style="height:370px;display:none;">
                 {{list_reserved_resources}}
+			</div>
+			<div id="pending" class="panel" style="height:370px;display:none;">
+                {{pending_resources}}
 			</div>
 			<div id="map" class="panel" style="height:370px;display:none;">
                 {{map_resources}}
@@ -87,9 +90,6 @@
 			<div id="scheduler-tab" class="panel" style="height:370px;display:none;">
                 {{scheduler}}
 			</div>
-			<div id="pending" class="panel" style="height:370px;display:none;">
-                {{pending_resources}}
-			</div>
 		</div>
 	</div>
 {% endblock %}
-- 
2.47.0