github.com/justinjmoses/evergreen@v0.0.0-20170530173719-1d50e381ff0d/public/static/js/version_admin.js (about)

     1  mciModule.controller('AdminOptionsCtrl', ['$scope', '$rootScope', 'mciVersionsRestService','notificationService', '$filter', function($scope, $rootScope, versionRestService, notifier, $filter) {
     2  
     3      $scope.adminOptionVals = {};
     4      $scope.modalTitle = 'Modify Version';
     5      $scope.selection = "completed";
     6      $scope.collapsedBuilds = {};
     7  
     8      $scope.checkedForRestartIds = function(){
     9          return _.pluck($scope.version.Builds.map(
    10            function(x){
    11              return x.Build.tasks.filter(function(y){return y.checkedForRestart});
    12            }
    13          ).reduce(function(x,y){return x.concat(y)}, []), "id");
    14      }
    15  
    16      $scope.numToBeRestarted = function(build_id){
    17          var buildFilter = function(){return true;};
    18          if(build_id){ // if specified, only count the number checked in the given build
    19              buildFilter = function(x){return x.Build._id == build_id};
    20          }
    21          // count the number of checked items in the tasks from the
    22          // filtered set of builds
    23          return $scope.version.Builds.filter(buildFilter).map(
    24            function(x){
    25              return x.Build.tasks.filter(function(y){return y.checkedForRestart}).length;
    26            }
    27          ).reduce(function(x,y){return x+y}, 0);
    28      }
    29  
    30      $scope.setRestartSelection = function(s){
    31          $scope.selection = s;
    32          if($scope.selection == "") {
    33              return;
    34          }
    35          for(var j=0;j<$scope.version.Builds.length;j++){
    36              for(var i=0;i<$scope.version.Builds[j].Build.tasks.length;i++){
    37                  var t = $scope.version.Builds[j].Build.tasks[i];
    38                  var setting = false;
    39                  if(s == "none"){
    40                      // do nothing (everything gets unchecked)
    41                  }else if(s == "all"){
    42                      setting = true;
    43                  }else if(t.status != "undispatched" && t.status == "failed"){
    44                      if(s == "failures"){
    45                          setting = true;
    46                      }else if (s == "system-failures" && $filter("statusFilter")(t) =="system-failed"){
    47                          setting = true;
    48                      }
    49                  }
    50                  $scope.version.Builds[j].Build.tasks[i].checkedForRestart = setting;
    51              }
    52          }
    53      }
    54  
    55      $scope.restart = function() {
    56          versionRestService.takeActionOnVersion(
    57              $scope.version.Version.id,
    58              'restart',
    59              { 
    60                abort: $scope.adminOptionVals.abort,
    61                task_ids: $scope.checkedForRestartIds()
    62              },
    63              {
    64                  success: function(data, status) {
    65                      $scope.closeAdminModal()
    66                      $rootScope.$broadcast("version_updated", data)
    67                      notifier.pushNotification( "Selected tasks are restarted.", 'notifyHeader', 'success');
    68                  },
    69                  error: function(jqXHR, status, errorThrown) {
    70                      notifier.pushNotification('Error restarting build: ' + jqXHR,'errorModal');
    71                  }
    72              }
    73          );
    74      };
    75  
    76  	function setVersionActive(active, abort) {
    77          versionRestService.takeActionOnVersion(
    78              $scope.version.Version.id,
    79              'set_active',
    80              { active: active, abort: abort },
    81              {
    82                  success: function(data, status) {
    83                      $scope.closeAdminModal()
    84                      $rootScope.$broadcast("version_updated", data)
    85                      notifier.pushNotification(
    86                        "Version " + (active ? "scheduled." : "unscheduled.") + 
    87                        (abort ? "\n In progress tasks will be aborted." : ""),
    88                        'notifyHeader', 'success');
    89                  },
    90                  error: function(jqXHR, status, errorThrown) {
    91                      notifier.pushNotification('Error setting version activation: ' + jqXHR,'errorModal');
    92                  }
    93              }
    94          );
    95  	}
    96  	function setVersionPriority(newPriority) {
    97          versionRestService.takeActionOnVersion(
    98              $scope.version.Version.id,
    99              'set_priority',
   100              { priority: newPriority },
   101              {
   102                  success: function(data, status) {
   103                      $scope.closeAdminModal()
   104                      $rootScope.$broadcast("version_updated", data)
   105                      var msg = "Priority for version set to " + newPriority + "."
   106                      notifier.pushNotification(msg, 'notifyHeader', 'success');
   107                  },
   108                  error: function(jqXHR, status, errorThrown) {
   109                      notifier.pushNotification('Error changing priority: ' + jqXHR,'errorModal');
   110                  }
   111              }
   112          );
   113  	}
   114  
   115  	$scope.updateScheduled = function(isActive) {
   116  		var abortSet = $scope.adminOptionVals.abort ? true : false
   117  		// only read in the abort checkbox if we are setting active to false
   118  		var abortVersion = isActive ? false : abortSet;
   119  		setVersionActive(isActive, abortVersion);
   120  	}
   121  
   122  	$scope.updatePriority = function() {
   123  		var newPriority = parseInt($scope.adminOptionVals.priority);
   124  		if(isNaN(newPriority)) {
   125  			notifier.pushNotification('New priority value must be an integer','errorModal');
   126  		} else {
   127  			setVersionPriority(parseInt($scope.adminOptionVals.priority));
   128  		}
   129  	}
   130  
   131  	$scope.closeAdminModal = function() {
   132  		var modal = $('#admin-modal').modal('hide');
   133      }
   134  
   135  	$scope.openAdminModal = function(opt) {
   136  		$scope.adminOption = opt
   137  		var modal = $('#admin-modal').modal('show');
   138  
   139          if (opt === "priority") {
   140              modal.on('shown.bs.modal', function() {
   141                  $('#input-priority').focus();
   142                  $scope.modalOpen = true;
   143              });
   144  
   145              modal.on('hide.bs.modal', function() {
   146                  $scope.modalOpen = false;
   147              });
   148          } else {
   149              modal.on('shown.bs.modal', function() {
   150                  $scope.modalOpen = true;
   151              });
   152  
   153              modal.on('hide.bs.modal', function() {
   154                  $scope.modalOpen = false;
   155              });
   156          }
   157  
   158          $(document).keyup(function(ev) {
   159              if ($scope.modalOpen && ev.keyCode === 13) {
   160                  if ($scope.adminOption === 'unschedule') {
   161                      $scope.updateScheduled(false);
   162                      $('#admin-modal').modal('hide');
   163                  } else if ($scope.adminOption === 'schedule') {
   164                      $scope.updateScheduled(true);
   165                      $('#admin-modal').modal('hide');
   166                  }
   167              }
   168          });
   169      }
   170  
   171      $scope.setRestartSelection('all');
   172  }]);
   173  
   174  mciModule.directive('adminRestartVersion', function() {
   175    return {
   176      restrict: 'E',
   177      templateUrl: '/static/partials/admin-restart-version.html',
   178    }
   179  });
   180  
   181  
   182  mciModule.directive('adminScheduleAll', function() {
   183      return {
   184          restrict: 'E',
   185          template:
   186      '<div class="row">' +
   187        '<div class="col-lg-12">' +
   188          'Schedule all tasks?' +
   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="updateScheduled(true)">Yes</button>' +
   191        '</div>' +
   192      '</div>'
   193    }
   194  });
   195  
   196  mciModule.directive('adminUnscheduleAll', function() {
   197      return {
   198          restrict: 'E',
   199          template:
   200      '<div class="row">' +
   201        '<div class="col-lg-12">' +
   202          '<div>' +
   203            'Unschedule all tasks?' +
   204            '<div style="float:right">' +
   205              '<button type="button" class="btn btn-danger" style="float: right;" data-dismiss="modal">Cancel</button>' +
   206              '<button type="button" class="btn btn-primary" style="float: right; margin-right: 10px;" ng-click="updateScheduled(false)">Yes</button>' +
   207          '</div>' +
   208        '</div>' +
   209        '<div styl="float:right">' +
   210          '<input type="checkbox" id="passed" name="passed" ng-model="adminOptionVals.abort" class="ng-valid ng-dirty"> ' +
   211          '<label for="passed" style="font-weight:normal;font-size:.8em;">  Abort tasks that have already started</label>' +
   212        '</div>' +
   213      '</div>'
   214    }
   215  });
   216  
   217  mciModule.directive('adminSetPriority', function() {
   218      return {
   219          restrict: 'E',
   220          template:
   221      '<div class="row">' +
   222        '<div class="col-lg-12">' +
   223          'Set new priority = ' +
   224          '<form style="display: inline" ng-submit="updatePriority()">' +
   225            '<input type="text" id="input-priority" placeholder="number" ng-model="adminOptionVals.priority">' +
   226          '</form>' +
   227          '<button type="submit" class="btn btn-primary" style="float: right; margin-left: 10px;" ng-click="updatePriority()">Set</button>' +
   228        '</div>' +
   229      '</div>'
   230    }
   231  });
   232