diff --git a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/fakedata.py b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/fakedata.py index b7aa095810db0cca6408d4f424ec5cac53da4580..bf257ceeac23b65a306257c1a50febce4bbd4574 100644 --- a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/fakedata.py +++ b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/fakedata.py @@ -23,13 +23,13 @@ from datetime import datetime from datetime import timedelta numProjects = 5 -numObsPerProject = 2 -numPipelinesPerObs = 3 +numObsPerProject = 3 +numPipelinesPerObs = 5 numCoreStations = 20 -numRemoteStations = 15 +numRemoteStations = 25 numCobaltNodes = 8 numComputeNodes = 50 -numIngestNodes = 4 +numIngestNodes = 2 _taskIdCntr = 0 diff --git a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/datacontroller.js b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/datacontroller.js index 63247e47743da243e6acbe75edd77a9f31260154..6201fef33428b321accd06b4c09e4a83d50dc714 100644 --- a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/datacontroller.js +++ b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/datacontroller.js @@ -19,6 +19,9 @@ angular.module('raeApp').factory("dataService", function(){ self.resourcesWithClaims = []; + self.filteredTasks = []; + self.filteredTaskDict = {}; + return self; }); @@ -66,6 +69,9 @@ dataControllerMod.controller('DataController', $http.get('/rest/tasks').success(function(result) { self.dataService.tasks = result.tasks; self.dataService.taskDict = toIdBasedDict(self.dataService.tasks); + + self.dataService.filteredTasks = self.dataService.tasks; + self.dataService.filteredTaskDict = self.dataService.taskDict; }); }; diff --git a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/ganttcontroller.js b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/ganttcontroller.js index 3e8f84409b1bca8bc89b04d1f29a2a711448d128..148cae104676ca82e24c151f18982315745ab2df 100644 --- a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/ganttcontroller.js +++ b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/ganttcontroller.js @@ -18,6 +18,9 @@ var ganttControllerMod = angular.module('GanttControllerMod', [ ganttControllerMod.controller('GanttController', ['$scope', 'dataService', function($scope, dataService) { + var self = this; + self.doInitialCollapse = true; + $scope.dataService = dataService; $scope.ganttData = [] @@ -61,7 +64,7 @@ ganttControllerMod.controller('GanttController', ['$scope', 'dataService', funct var numResources = resources.length; var resourceGroupsDict = $scope.dataService.resourceGroupsDict; - var taskDict = $scope.dataService.taskDict; + var taskDict = $scope.dataService.filteredTaskDict; var resourceGroupClaims = $scope.dataService.resourceGroupClaims; var numResourceGroupClaims = resourceGroupClaims.length; @@ -122,16 +125,19 @@ ganttControllerMod.controller('GanttController', ['$scope', 'dataService', funct var groupClaim = resourceGroupClaims[i]; var task = taskDict[groupClaim.taskId]; - var groupClaimTask = { - name: task ? task.name : '<unknown>', - 'from': groupClaim.startTime, - 'to': groupClaim.endTime - }; + if(task) + { + var groupClaimTask = { + name: task ? task.name : '<unknown>', + 'from': groupClaim.startTime, + 'to': groupClaim.endTime + }; - var groupRowId = 'group_' + groupClaim.resourceGroupId; - var ganntGroupRow = ganntRowsDict[groupRowId]; - if(ganntGroupRow) - ganntGroupRow.tasks.push(groupClaimTask); + var groupRowId = 'group_' + groupClaim.resourceGroupId; + var ganntGroupRow = ganntRowsDict[groupRowId]; + if(ganntGroupRow) + ganntGroupRow.tasks.push(groupClaimTask); + } } //and assign each resourceclaim to its resource in each group @@ -139,29 +145,42 @@ ganttControllerMod.controller('GanttController', ['$scope', 'dataService', funct var claim = resourceClaims[i]; var task = taskDict[claim.taskId]; - var groupIds = resourceIdToGroupIdsDict[claim.resourceId]; - var numGroups = groupIds.length; - - var claimTask = { - name: task ? task.name : '<unknown>', - 'from': claim.startTime, - 'to': claim.endTime - }; - - if(numGroups > 0) { - for(var j = 0; j < numGroups; j++) { - var resourceRowId = 'group_' + groupIds[j] + '_resource_' + claim.resourceId; + if(task) + { + var groupIds = resourceIdToGroupIdsDict[claim.resourceId]; + var numGroups = groupIds.length; + + if(numGroups > 0) { + for(var j = 0; j < numGroups; j++) { + var resourceRowId = 'group_' + groupIds[j] + '_resource_' + claim.resourceId; + var ganntRow = ganntRowsDict[resourceRowId]; + if(ganntRow) + { + var claimTask = { + name: task ? task.name : '<unknown>', + 'from': claim.startTime, + 'to': claim.endTime + }; + + ganntRow.tasks.push(claimTask); + } + } + } + else { + var resourceRowId = 'resource_' + claim.resourceId; var ganntRow = ganntRowsDict[resourceRowId]; if(ganntRow) + { + var claimTask = { + name: task ? task.name : '<unknown>', + 'from': claim.startTime, + 'to': claim.endTime + }; + ganntRow.tasks.push(claimTask); + } } } - else { - var resourceRowId = 'resource_' + claim.resourceId; - var ganntRow = ganntRowsDict[resourceRowId]; - if(ganntRow) - ganntRow.tasks.push(claimTask); - } } var ganntRows = []; @@ -170,7 +189,12 @@ ganttControllerMod.controller('GanttController', ['$scope', 'dataService', funct ganntRows.push(ganntRowsDict[groupId]); $scope.ganttData = ganntRows; - setTimeout($scope.api.tree.collapseAll(), 10) + + if(self.doInitialCollapse) + { + doInitialCollapse = false; + setTimeout($scope.api.tree.collapseAll, 500) + } }; $scope.$watch('dataService.tasks', updateGanttData); @@ -178,5 +202,6 @@ ganttControllerMod.controller('GanttController', ['$scope', 'dataService', funct $scope.$watch('dataService.resourceclaims', updateGanttData); $scope.$watch('dataService.resourceGroups', updateGanttData); $scope.$watch('dataService.resourceGroupClaims', updateGanttData); + $scope.$watch('dataService.filteredTaskDict', updateGanttData); } ]); diff --git a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/gridcontroller.js b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/gridcontroller.js index 529d0f44951c450bfd86ca832e09c6e4ddb62a64..8bba12fc8e36ed92d4a87d25414bb05a3b685ec8 100644 --- a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/gridcontroller.js +++ b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/gridcontroller.js @@ -33,7 +33,32 @@ gridControllerMod.controller('GridController', ['$scope', 'dataService', 'uiGrid enableSorting: true, enableFiltering: true, columnDefs: $scope.columns, - data: [] + data: [], + onRegisterApi: function(gridApi){ + $scope.gridApi = gridApi; + + $scope.gridApi.core.on.rowsRendered($scope, filterTasks); + } + }; + + function filterTasks() { + var taskDict = $scope.dataService.taskDict; + var filteredTasks = []; + var filteredTaskDict = {}; + var rows = $scope.gridApi.grid.rows; + var numRows = rows.length; + for(var i = 0; i < numRows; i++) { + var row = rows[i]; + if(row.visible) + { + var task = taskDict[row.entity.id]; + filteredTasks.push(task); + filteredTaskDict[task.id] = task; + } + } + + $scope.dataService.filteredTasks = filteredTasks; + $scope.dataService.filteredTaskDict = filteredTaskDict; }; function fillColumFilterSelectOptions(options, columnDef) { @@ -48,7 +73,6 @@ gridControllerMod.controller('GridController', ['$scope', 'dataService', 'uiGrid columnDef.filter.selectOptions = columnSelectOptions; }; - $scope.$watch('dataService.taskstatustypes', function() { fillColumFilterSelectOptions($scope.dataService.taskstatustypes, $scope.columns[3]); }); diff --git a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/webservice.py b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/webservice.py index 7f4be997c823f5b5548a2c60275ed8138ac17749..746a135d0777c633c605b0e8e63347eadebeb80e 100755 --- a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/webservice.py +++ b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/webservice.py @@ -119,7 +119,7 @@ def taskstatustypes(): def main(argv=None, debug=False): '''Start the webserver''' - app.run(debug=debug, threaded=True, port=5001) + app.run(debug=debug, threaded=True, host='0.0.0.0', port=5001) if __name__ == '__main__': main(sys.argv[1:], True)