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