github.com/justinjmoses/evergreen@v0.0.0-20170530173719-1d50e381ff0d/public/static/js/task_admin.js (about) 1 mciModule.controller('AdminOptionsCtrl', ['$scope', '$rootScope', 'mciTasksRestService', 'notificationService', function($scope, $rootScope, taskRestService, notifier) { 2 $scope.modalOpen = false; 3 $scope.modalTitle = 'Modify Task'; 4 $scope.adminOptionVals = {}; 5 6 $scope.setTask = function(task) { 7 var dispatchTime = +new Date(task.dispatch_time); 8 $scope.task = task; 9 $scope.taskId = task.id; 10 $scope.isAborted = ($scope.task.status == 'undispatched' && !$scope.task.activated && $scope.task.dispatch_time > 0) 11 $scope.canRestart = ($scope.task.status == "success" || $scope.task.status == "failed" || $scope.isAborted); 12 $scope.canAbort = ($scope.task.status == "dispatched" || $scope.task.status == "started"); 13 $scope.canSchedule = !$scope.task.activated && !$scope.canRestart && !$scope.isAborted; 14 $scope.canUnschedule = $scope.task.activated && ($scope.task.status == "undispatched") ; 15 $scope.canSetPriority = ($scope.task.status == "undispatched"); 16 }; 17 18 function doModalSuccess(message, data){ 19 $scope.closeAdminModal(); 20 $rootScope.$broadcast("task_updated", data); 21 $scope.setTask(data); 22 notifier.pushNotification(message, 'notifyHeader', 'success'); 23 } 24 25 $scope.abort = function() { 26 taskRestService.takeActionOnTask( 27 $scope.taskId, 28 'abort', 29 {}, 30 { 31 success: function(data, status) { 32 doModalSuccess("Task aborted.", data); 33 }, 34 error: function(jqXHR, status, errorThrown) { 35 notifier.pushNotification('Error aborting: ' + jqXHR,'errorModal'); 36 } 37 } 38 ); 39 }; 40 41 $scope.restart = function() { 42 taskRestService.takeActionOnTask( 43 $scope.taskId, 44 'restart', 45 {}, 46 { 47 success: function(data, status) { 48 doModalSuccess("Task scheduled to restart.", data); 49 }, 50 error: function(jqXHR, status, errorThrown) { 51 notifier.pushNotification('Error restarting: ' + jqXHR,'errorModal'); 52 } 53 } 54 ); 55 }; 56 57 $scope.setPriority = function() { 58 taskRestService.takeActionOnTask( 59 $scope.taskId, 60 'set_priority', 61 { priority: $scope.adminOptionVals.priority }, 62 { 63 success: function(data, status) { 64 doModalSuccess("Priority for task updated to "+ data.priority +".", data); 65 }, 66 error: function(jqXHR, status, errorThrown) { 67 notifier.pushNotification('Error setting priority: ' + jqXHR,'errorModal'); 68 } 69 } 70 ); 71 }; 72 73 $scope.setActive = function(active) { 74 taskRestService.takeActionOnTask( 75 $scope.taskId, 76 'set_active', 77 { active: active }, 78 { 79 success: function(data, status) { 80 doModalSuccess("Task marked as " + (active ? "scheduled." : "unscheduled."), data); 81 }, 82 error: function(jqXHR, status, errorThrown) { 83 notifier.pushNotification('Error setting active = ' + active + ': ' + jqXHR,'errorModal'); 84 } 85 } 86 ); 87 } 88 89 $scope.closeAdminModal = function() { 90 var modal = $('#admin-modal').modal('hide'); 91 } 92 93 $scope.openAdminModal = function(opt) { 94 $scope.adminOption = opt; 95 var modal = $('#admin-modal').modal('show'); 96 97 if (opt === "setPriority") { 98 modal.on('shown.bs.modal', function() { 99 $('#input-priority').focus(); 100 $scope.modalOpen = true; 101 }); 102 103 modal.on('hide.bs.modal', function() { 104 $scope.modalOpen = false; 105 }); 106 } else { 107 modal.on('shown.bs.modal', function() { 108 $scope.modalOpen = true; 109 }); 110 111 modal.on('hide.bs.modal', function() { 112 $scope.modalOpen = false; 113 }); 114 } 115 116 $(document).keyup(function(ev) { 117 if ($scope.modalOpen && ev.keyCode === 13) { 118 if ($scope.adminOption === 'abort') { 119 $scope.abort(); 120 $('#admin-modal').modal('hide'); 121 } else if ($scope.adminOption === 'restart') { 122 $scope.restart(); 123 $('#admin-modal').modal('hide'); 124 } else if ($scope.adminOption === 'unschedule') { 125 $scope.setActive(false); 126 $('#admin-modal').modal('hide'); 127 } else if ($scope.adminOption === 'schedule') { 128 $scope.setActive(true); 129 $('#admin-modal').modal('hide'); 130 } else if ($scope.adminOption === 'priority') { 131 $scope.setPriority(); 132 $('#admin-modal').modal('hide'); 133 } 134 } 135 }); 136 }; 137 138 }]); 139 140 mciModule.directive('adminAbortTask', function() { 141 return { 142 restrict: 'E', 143 template: 144 '<div class="row">' + 145 '<div class="col-lg-12">' + 146 'Abort current task?' + 147 '<button type="button" class="btn btn-danger" style="float: right;" data-dismiss="modal">Cancel</button>' + 148 '<button type="button" class="btn btn-primary" style="float: right; margin-right: 10px;" ng-click="abort()">Yes</button>' + 149 '</div>' + 150 '</div>' 151 } 152 }); 153 154 mciModule.directive('adminScheduleTask', function() { 155 return { 156 restrict: 'E', 157 template: 158 '<div class="row">' + 159 '<div class="col-lg-12">' + 160 'Schedule current task?' + 161 '<button type="button" class="btn btn-danger" style="float: right;" data-dismiss="modal">Cancel</button>' + 162 '<button type="button" class="btn btn-primary" style="float: right; margin-right: 10px;" ng-click="setActive(true)">Yes</button>' + 163 '</div>' + 164 '</div>' 165 } 166 }); 167 168 mciModule.directive('adminUnscheduleTask', function() { 169 return { 170 restrict: 'E', 171 template: 172 '<div class="row">' + 173 '<div class="col-lg-12">' + 174 'Unschedule current task?' + 175 '<button type="button" class="btn btn-danger" style="float: right;" data-dismiss="modal">Cancel</button>' + 176 '<button type="button" class="btn btn-primary" style="float: right; margin-right: 10px;" ng-click="setActive(false)">Yes</button>' + 177 '</div>' + 178 '</div>' 179 } 180 }); 181 182 mciModule.directive('adminRestartTask', function() { 183 return { 184 restrict: 'E', 185 template: 186 '<div class="row">' + 187 '<div class="col-lg-12">' + 188 'Restart current task?' + 189 '<button type="button" class="btn btn-danger" style="float: right;" data-dismiss="modal">Cancel</button>' + 190 '<button type="button" class="btn btn-primary" style="float: right; margin-right: 10px;" ng-click="restart()">Yes</button>' + 191 '</div>' + 192 '</div>' 193 } 194 }); 195 196 mciModule.directive('adminSetPriority', function() { 197 return { 198 restrict: 'E', 199 template: 200 '<div class="row">' + 201 '<div class="col-lg-12">' + 202 'Set new priority = ' + 203 '<form style="display: inline" ng-submit="setPriority()">' + 204 '<input type="text" id="input-priority" placeholder="number" ng-model="adminOptionVals.priority">' + 205 '</form>' + 206 '<button type="submit" class="btn btn-primary" style="float: right; margin-left: 10px;" ng-click="setPriority()">Set</button>' + 207 '</div>' + 208 '</div>' 209 } 210 });