From df39fa1f9d2ee1677c643f71c202535a0e773482 Mon Sep 17 00:00:00 2001
From: Jorrit Schaap <schaap@astron.nl>
Date: Fri, 21 Jul 2017 14:05:16 +0000
Subject: [PATCH] Task #11090: faster smaller loads. most recent data first

---
 .../chartresourceusagecontroller.js           | 12 ++++++-
 .../static/app/controllers/datacontroller.js  | 35 +++++++------------
 2 files changed, 24 insertions(+), 23 deletions(-)

diff --git a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/chartresourceusagecontroller.js b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/chartresourceusagecontroller.js
index de53c893545..9b5ff75aba5 100644
--- a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/chartresourceusagecontroller.js
+++ b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/chartresourceusagecontroller.js
@@ -86,6 +86,17 @@ chartResourceUsageControllerMod.controller('ChartResourceUsageController', ['$sc
         }
 
         var selected_resource_id = $scope.dataService.selected_resource_id;
+        if(selected_resource_id === undefined) {
+            //try to select first storage resource as default selected_resource_id
+            var storageResources = $scope.dataService.resources.filter(function(r) { return r.type_name == 'storage'; });
+            if(storageResources.length > 0) {
+                $scope.dataService.selected_resource_id = storageResources[0].id;
+            } else {
+                //else, just the first resource
+                $scope.dataService.selected_resource_id = self.resources[0].id;
+            }
+        }
+
         if(selected_resource_id === undefined)
             return;
 
@@ -246,7 +257,6 @@ chartResourceUsageControllerMod.controller('ChartResourceUsageController', ['$sc
         }
     };
 
-    $scope.$watch('dataService.selected_resource_id', updateChartDataAsync);
     $scope.$watch('dataService.resourceUsagesForSelectedResource', updateChartDataAsync);
     $scope.$watch('dataService.viewTimeSpan', updateChartDataAsync, true);
     $scope.$watch('$parent.enabled', function() { setTimeout(updateChartDataAsync, 500); } );
diff --git a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/datacontroller.js b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/datacontroller.js
index c4f6bbc54d0..672853acfe8 100644
--- a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/datacontroller.js
+++ b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/datacontroller.js
@@ -222,28 +222,31 @@ angular.module('raeApp').factory("dataService", ['$http', '$q', function($http,
         //only keep the currently loading chunks
         self.loadingChunksQueue = self.loadingChunksQueue.filter(function(c) { return c.loading; });
 
-        var chunkFactor = self.projectMode ? 7 : 1;
+        var chunkFactor = self.projectMode ? 4 : 1;
         var hourInmsec = 3600000;
-        var dayInmsec = 24*hourInmsec;
+        var quartDayInmsec = 6*hourInmsec;
 
         for (var timestamp = lowerTS; timestamp < upperTS; ) {
             if(self.loadedHours.hasOwnProperty(timestamp)) {
                 timestamp += hourInmsec;
             }
             else {
-                var chuckUpperLimit = Math.min(upperTS, timestamp + chunkFactor*dayInmsec);
+                var chuckUpperLimit = Math.min(upperTS, timestamp + chunkFactor*quartDayInmsec);
                 for (var chunkTimestamp = timestamp; chunkTimestamp < chuckUpperLimit; chunkTimestamp += hourInmsec) {
                     if(self.loadedHours.hasOwnProperty(chunkTimestamp))
                         break;
-
-                    self.loadedHours[chunkTimestamp] = true;
                 }
 
                 var hourLower = new Date(timestamp);
                 var hourUpper = new Date(chunkTimestamp);
                 if(hourUpper > hourLower) {
                     var chunk = { lower: hourLower, upper: hourUpper, loaded: false, loading: false };
-                    self.loadingChunksQueue.push(chunk);
+                    if(hourLower < self.lofarTime) {
+                        //prepend at beginning of queue, so we load most recent data first
+                        self.loadingChunksQueue.unshift(chunk);
+                    } else {
+                        self.loadingChunksQueue.push(chunk);
+                    }
                 }
                 timestamp = chunkTimestamp;
             }
@@ -282,6 +285,10 @@ angular.module('raeApp').factory("dataService", ['$http', '$q', function($http,
                 self.nrOfLoadingChunks -= 1;
                 self.nrOfLoadedChunks += 1;
 
+                for (var timestamp = chunk.lower.getTime(); timestamp < chunk.upper.getTime(); timestamp += 3600000) {
+                    self.loadedHours[timestamp] = true;
+                }
+
                 self.loadNextChunk();
             });
         } else {
@@ -632,15 +639,6 @@ angular.module('raeApp').factory("dataService", ['$http', '$q', function($http,
             self.resources = result.resources;
             self.resourceDict = self.toIdBasedDict(self.resources);
 
-            //try to select first storage resource as default selected_resource_id
-            var storageResources = self.resources.filter(function(r) { return r.type_name == 'storage'; });
-            if(storageResources.length > 0) {
-                self.selected_resource_id = storageResources[0].id;
-            } else {
-                //else, just the first resource
-                self.selected_resource_id = self.resources[0].id;
-            }
-
             defer.resolve();
         });
 
@@ -1377,13 +1375,6 @@ dataControllerMod.controller('DataController',
         }
     });
 
-    $scope.$watch('dataService.claimChangeCntr', function() {
-        $scope.$evalAsync(function() {
-            $scope.dataService.getUsagesForSelectedResource();
-            $scope.dataService.getResource($scope.dataService.selected_resource_id);
-        });
-    });
-
     $scope.$watch('dataService.selected_resource_id', function() {
         $scope.$evalAsync(function() {
             $scope.dataService.getUsagesForSelectedResource();
-- 
GitLab