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  });