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