diff --git a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/cleanupcontroller.js b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/cleanupcontroller.js index 13de0463b74ff29bbd4da1d3757ca95ce13a25fb..79abb6f8ebbee79925a8391347c0afb980743a9f 100644 --- a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/cleanupcontroller.js +++ b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/cleanupcontroller.js @@ -18,11 +18,6 @@ cleanupControllerMod.controller('CleanupController', ['$scope', '$uibModal', '$m return defer.promise; }; - self.deleteSelectedTasksDataWithConfirmation = function() { - var tasks = dataService.selected_task_ids.map(function(t_id) { return dataService.taskDict[t_id]; }); - self.deleteTasksDataWithConfirmation(tasks); - } - self.deleteTasksDataWithConfirmation = function(tasks) { suc_tasks_promises = []; for(var task of tasks) { @@ -96,7 +91,7 @@ cleanupControllerMod.controller('CleanupController', ['$scope', '$uibModal', '$m <label ng-if="has_im" style="margin-left:24px">IM: {{amount_im}}<input style="margin-left:8px" type="checkbox" ng-model="$parent.delete_im"></label>\ <label ng-if="has_img" style="margin-left:24px">Images: {{amount_img}}<input style="margin-left:8px" type="checkbox" ng-model="$parent.delete_img"></label>\ <label ng-if="has_pulp" style="margin-left:24px">Pulp: {{amount_pulp}}<input style="margin-left:8px" type="checkbox" ng-model="$parent.delete_pulp"></label>\ - <label ng-if="has_scratch" style="margin-left:24px">scratch<input style="margin-left:8px" type="checkbox" ng-model="$parent.delete_scratch"></label>\ + <label ng-if="has_scratch" style="margin-left:24px">scratch: {{amount_scratch}}<input style="margin-left:8px" type="checkbox" ng-model="$parent.delete_scratch"></label>\ </div>\ <div class="modal-footer">\ <button class="btn btn-primary" type="button" ng-click="ok()">OK</button>\ @@ -117,6 +112,7 @@ cleanupControllerMod.controller('CleanupController', ['$scope', '$uibModal', '$m $scope.amount_im = 0; $scope.amount_img = 0; $scope.amount_pulp = 0; + $scope.amount_scratch = 0; for(var du_result of du_results) { var path = du_result.task_directory.path; @@ -126,7 +122,7 @@ cleanupControllerMod.controller('CleanupController', ['$scope', '$uibModal', '$m var has_im = du_result.sub_directories.hasOwnProperty(path + '/im'); var has_img = du_result.sub_directories.hasOwnProperty(path + '/img'); var has_pulp = du_result.sub_directories.hasOwnProperty(path + '/pulp'); - var has_scratch = du_result.sub_directories.hasOwnProperty('scratch_paths'); + var has_scratch = du_result.task_directory.hasOwnProperty('scratch_paths'); $scope.has_is |= has_is; $scope.has_cs |= has_cs; @@ -142,6 +138,14 @@ cleanupControllerMod.controller('CleanupController', ['$scope', '$uibModal', '$m $scope.amount_im += has_im ? du_result.sub_directories[path + '/im'].disk_usage : 0; $scope.amount_img += has_img ? du_result.sub_directories[path + '/img'].disk_usage : 0; $scope.amount_pulp += has_pulp ? du_result.sub_directories[path + '/pulp'].disk_usage : 0; + if(has_scratch) { + for(var scratch_path in du_result.task_directory.scratch_paths) { + var scratch_path_du = du_result.task_directory.scratch_paths[scratch_path]; + if(scratch_path_du.found) { + $scope.amount_scratch += scratch_path_du.disk_usage; + } + } + } } $scope.amount_is = dataService.humanreadablesize($scope.amount_is); @@ -150,6 +154,7 @@ cleanupControllerMod.controller('CleanupController', ['$scope', '$uibModal', '$m $scope.amount_im = dataService.humanreadablesize($scope.amount_im); $scope.amount_img = dataService.humanreadablesize($scope.amount_img); $scope.amount_pulp = dataService.humanreadablesize($scope.amount_pulp); + $scope.amount_scratch = dataService.humanreadablesize($scope.amount_scratch); $scope.delete_is = true; $scope.delete_cs = true; @@ -202,6 +207,7 @@ cleanupControllerMod.controller('CleanupController', ['$scope', '$uibModal', '$m }; const OBJECT_TYPE_TASK = 'task'; + const OBJECT_TYPE_TASKS = 'tasks'; const OBJECT_TYPE_PROJECT = 'project'; const OBJECT_TYPE_PROJECTS = 'projects'; $scope.watchedObjectType = OBJECT_TYPE_TASK; @@ -210,6 +216,7 @@ cleanupControllerMod.controller('CleanupController', ['$scope', '$uibModal', '$m $scope.onPieClicked = function(event) { switch($scope.watchedObjectType) { + case OBJECT_TYPE_TASKS: case OBJECT_TYPE_PROJECT: loadTaskDiskUsage(this.otdb_id); break; @@ -224,6 +231,7 @@ cleanupControllerMod.controller('CleanupController', ['$scope', '$uibModal', '$m case OBJECT_TYPE_TASK: loadProjectDiskUsage($scope.diskUsageChartSeries[0].project_name); break; + case OBJECT_TYPE_TASKS: case OBJECT_TYPE_PROJECT: loadAllProjectsDiskUsage(); break; @@ -347,7 +355,7 @@ cleanupControllerMod.controller('CleanupController', ['$scope', '$uibModal', '$m if(result.found) { $scope.watchedObjectType = OBJECT_TYPE_TASK; $scope.diskUsageChartConfig.title.text = result.task_directory.name + ' ' + result.task_directory.disk_usage_readable; - $scope.diskUsageChartSeries[0].name = result.task_directory.name + ' ' + result.task_directory.disk_usage_readable; + $scope.diskUsageChartSeries[0].name = $scope.diskUsageChartConfig.title.text; var path_parts = result.task_directory.path.split('/'); $scope.diskUsageChartSeries[0].project_name = path_parts[path_parts.length-2]; $scope.diskUsageChartSeries[0].data.splice(0, $scope.diskUsageChartSeries[0].data.length); @@ -371,12 +379,41 @@ cleanupControllerMod.controller('CleanupController', ['$scope', '$uibModal', '$m }); }; + var loadTasksDiskUsage = function(tasks) { + var du_promises = tasks.map(function(t) { return dataService.getTaskDiskUsageByOTDBId(t.otdb_id); }); + $q.all(du_promises).then(function(du_results) { + var found_task_dus = du_results.filter(function(r) { return r.found;}).map(function(r) { return r.task_directory; }); + + if(found_task_dus.length > 0) { + $scope.watchedObjectType = OBJECT_TYPE_TASKS; + + $scope.leastRecentCacheTimestamp = new Date(Math.min.apply(null, found_task_dus.map(function(tdu) { return dataService.convertDatestringToLocalUTCDate(tdu.cache_timestamp); }))); + + var total_usage = found_task_dus.map(function(tdu) { return tdu.disk_usage; }).reduce(function(a, b) { return a + b;}); + var total_usage_readable = dataService.humanreadablesize(total_usage); + + $scope.diskUsageChartConfig.title.text = 'Total size: ' + total_usage_readable; + $scope.diskUsageChartSeries[0].data.splice(0, $scope.diskUsageChartSeries[0].data.length); + $scope.diskUsageChartSeries[0].name = $scope.diskUsageChartConfig.title.text; + + for(var task_du of found_task_dus) { + $scope.diskUsageChartSeries[0].data.push({name:task_du.name + ' ' + task_du.disk_usage_readable, + y:task_du.disk_usage || 0, + otdb_id: task_du.otdb_id }); + } + }else { + $scope.ok(); + $scope.$evalAsync(function() { alert("Could not find disk usage for task " + otdb_id); }); + } + }); + }; + var loadProjectDiskUsage = function(project_name) { dataService.getProjectDiskUsage(project_name).then(function(result) { if(result.found) { $scope.watchedObjectType = OBJECT_TYPE_PROJECT; $scope.diskUsageChartConfig.title.text = result.projectdir.name + ' ' + result.projectdir.disk_usage_readable; - $scope.diskUsageChartSeries[0].name = result.projectdir.name + ' ' + result.projectdir.disk_usage_readable; + $scope.diskUsageChartSeries[0].name = $scope.diskUsageChartConfig.title.text; $scope.diskUsageChartSeries[0].data.splice(0, $scope.diskUsageChartSeries[0].data.length); $scope.leastRecentCacheTimestamp = result.projectdir.cache_timestamp; @@ -405,7 +442,7 @@ cleanupControllerMod.controller('CleanupController', ['$scope', '$uibModal', '$m if(result.found) { $scope.watchedObjectType = OBJECT_TYPE_PROJECTS; $scope.diskUsageChartConfig.title.text = result.projectdir.name + ' ' + result.projectdir.disk_usage_readable; - $scope.diskUsageChartSeries[0].name = result.projectdir.name + ' ' + result.projectdir.disk_usage_readable; + $scope.diskUsageChartSeries[0].name = $scope.diskUsageChartConfig.title.text; $scope.diskUsageChartSeries[0].data.splice(0, $scope.diskUsageChartSeries[0].data.length); $scope.leastRecentCacheTimestamp = result.projectdir.cache_timestamp; @@ -430,7 +467,11 @@ cleanupControllerMod.controller('CleanupController', ['$scope', '$uibModal', '$m }; if(task) { - loadTaskDiskUsage(task.otdb_id); + if(task.constructor === Array) { + loadTasksDiskUsage(task); + } else { + loadTaskDiskUsage(task.otdb_id); + } } else { loadAllProjectsDiskUsage(); } diff --git a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/gridcontroller.js b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/gridcontroller.js index 5c19bb062b45755636aab3fffc33bc2bf25390a8..b632a2dc85d950955da5b9439ae47bd404b4fdc0 100644 --- a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/gridcontroller.js +++ b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/gridcontroller.js @@ -214,8 +214,10 @@ $scope.columns = [ var otdb_col = $scope.gridApi.grid.columns.find(function(c) {return c.field == 'otdb_id'; }); if(otdb_col && otdb_col.filters.length && otdb_col.filters[0].hasOwnProperty('term')) { var otdb_id = otdb_col.filters[0].term; - $scope.$parent.$parent.loadTaskByOTDBIdSelectAndJumpIntoView(otdb_id).then(function() { - otdb_col.filters[0].term = null; + $scope.$parent.$parent.loadTaskByOTDBIdSelectAndJumpIntoView(otdb_id).then(function(task) { + if(task) { + otdb_col.filters[0].term = null; + } }); } else { var mom_col = $scope.gridApi.grid.columns.find(function(c) {return c.field == 'mom_id'; }); @@ -223,8 +225,9 @@ $scope.columns = [ if(mom_col && mom_col.filters.length && mom_col.filters[0].hasOwnProperty('term')) { var mom_id = mom_col.filters[0].term; $scope.$parent.$parent.loadTaskByMoMIdSelectAndJumpIntoView(mom_id).then(function(task) { - mom_col.filters[0].term = null; - if(task == undefined) { + if(task) { + mom_col.filters[0].term = null; + } else { //getting the task by mom_id did not find a task //maybe the entered id was a mom group_id? //let's try to loadTasksByMoMGroupIdSelectAndJumpIntoView @@ -711,25 +714,29 @@ gridControllerMod.directive('contextMenu', ['$document', '$window', function($do }); } - var liContent = selected_cep4_tasks.length == selected_tasks.length ? '<li><a href="#">Show disk usage</a></li>' : '<li><a href="#" style="color:#aaaaaa">Show disk usage</a></li>' + var completed_selected_cep4_tasks = selected_cep4_tasks.filter(function(t) { return t.status == 'finished' || t.status == 'aborted'; }); + + var liContent = completed_selected_cep4_tasks.length > 0 ? '<li><a href="#">Show disk usage</a></li>' : '<li><a href="#" style="color:#aaaaaa">Show disk usage</a></li>' var liElement = angular.element(liContent); ulElement.append(liElement); - if(selected_cep4_tasks.length == selected_tasks.length) { + if(completed_selected_cep4_tasks.length > 0) { liElement.on('click', function() { closeContextMenu(); - cleanupCtrl.showTaskDiskUsage(task); + if(selected_cep4_tasks.length == 1) { + cleanupCtrl.showTaskDiskUsage(task); + } else { + cleanupCtrl.showTaskDiskUsage(completed_selected_cep4_tasks); + } }); } - var completed_selected_cep4_tasks = selected_cep4_tasks.filter(function(t) { return t.status == 'finished' || t.status == 'aborted'; }); - - var liContent = completed_selected_cep4_tasks.length == selected_tasks.length ? '<li><a href="#">Delete data</a></li>' : '<li><a href="#" style="color:#aaaaaa">Delete data</a></li>' + var liContent = completed_selected_cep4_tasks.length > 0 ? '<li><a href="#">Delete data</a></li>' : '<li><a href="#" style="color:#aaaaaa">Delete data</a></li>' var liElement = angular.element(liContent); ulElement.append(liElement); - if(completed_selected_cep4_tasks.length == selected_tasks.length) { + if(completed_selected_cep4_tasks.length > 0) { liElement.on('click', function() { closeContextMenu(); - cleanupCtrl.deleteSelectedTasksDataWithConfirmation(); + cleanupCtrl.deleteTasksDataWithConfirmation(completed_selected_cep4_tasks); }); } diff --git a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/gantt-plugins/angular-gantt-contextmenu-plugin.js b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/gantt-plugins/angular-gantt-contextmenu-plugin.js index 746cd6707e5418a217307c23f6d8c5a17d9bc8c7..06bfc0308fec37e18e0cb6922d3c8cebc3d8a62f 100644 --- a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/gantt-plugins/angular-gantt-contextmenu-plugin.js +++ b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/gantt-plugins/angular-gantt-contextmenu-plugin.js @@ -115,25 +115,29 @@ }); } - var liContent = selected_cep4_tasks.length == selected_tasks.length ? '<li><a href="#">Show disk usage</a></li>' : '<li><a href="#" style="color:#aaaaaa">Show disk usage</a></li>' + var completed_selected_cep4_tasks = selected_cep4_tasks.filter(function(t) { return t.status == 'finished' || t.status == 'aborted'; }); + + var liContent = completed_selected_cep4_tasks.length > 0 ? '<li><a href="#">Show disk usage</a></li>' : '<li><a href="#" style="color:#aaaaaa">Show disk usage</a></li>' var liElement = angular.element(liContent); ulElement.append(liElement); - if(selected_cep4_tasks.length == selected_tasks.length) { + if(completed_selected_cep4_tasks.length > 0) { liElement.on('click', function() { closeContextMenu(); - cleanupCtrl.showTaskDiskUsage(task); + if(selected_cep4_tasks.length == 1) { + cleanupCtrl.showTaskDiskUsage(task); + } else { + cleanupCtrl.showTaskDiskUsage(completed_selected_cep4_tasks); + } }); } - var completed_selected_cep4_tasks = selected_cep4_tasks.filter(function(t) { return t.status == 'finished' || t.status == 'aborted'; }); - - var liContent = completed_selected_cep4_tasks.length == selected_tasks.length ? '<li><a href="#">Delete data</a></li>' : '<li><a href="#" style="color:#aaaaaa">Delete data</a></li>' + var liContent = completed_selected_cep4_tasks.length > 0 ? '<li><a href="#">Delete data</a></li>' : '<li><a href="#" style="color:#aaaaaa">Delete data</a></li>' var liElement = angular.element(liContent); ulElement.append(liElement); - if(completed_selected_cep4_tasks.length == selected_tasks.length) { + if(completed_selected_cep4_tasks.length > 0) { liElement.on('click', function() { closeContextMenu(); - cleanupCtrl.deleteSelectedTasksDataWithConfirmation(); + cleanupCtrl.deleteTasksDataWithConfirmation(completed_selected_cep4_tasks); }); }