github.com/Ilhicas/nomad@v1.0.4-0.20210304152020-e86851182bc3/ui/app/controllers/clients/client/index.js (about)

     1  /* eslint-disable ember/no-observers */
     2  import { alias } from '@ember/object/computed';
     3  import Controller from '@ember/controller';
     4  import { action, computed } from '@ember/object';
     5  import { observes } from '@ember-decorators/object';
     6  import { task } from 'ember-concurrency';
     7  import Sortable from 'nomad-ui/mixins/sortable';
     8  import Searchable from 'nomad-ui/mixins/searchable';
     9  import messageFromAdapterError from 'nomad-ui/utils/message-from-adapter-error';
    10  import classic from 'ember-classic-decorator';
    11  
    12  @classic
    13  export default class ClientController extends Controller.extend(Sortable, Searchable) {
    14    queryParams = [
    15      {
    16        currentPage: 'page',
    17      },
    18      {
    19        searchTerm: 'search',
    20      },
    21      {
    22        sortProperty: 'sort',
    23      },
    24      {
    25        sortDescending: 'desc',
    26      },
    27      {
    28        onlyPreemptions: 'preemptions',
    29      },
    30    ];
    31  
    32    // Set in the route
    33    flagAsDraining = false;
    34  
    35    currentPage = 1;
    36    pageSize = 8;
    37  
    38    sortProperty = 'modifyIndex';
    39    sortDescending = true;
    40  
    41    @computed()
    42    get searchProps() {
    43      return ['shortId', 'name'];
    44    }
    45  
    46    onlyPreemptions = false;
    47  
    48    @computed('model.allocations.[]', 'preemptions.[]', 'onlyPreemptions')
    49    get visibleAllocations() {
    50      return this.onlyPreemptions ? this.preemptions : this.model.allocations;
    51    }
    52  
    53    @alias('visibleAllocations') listToSort;
    54    @alias('listSorted') listToSearch;
    55    @alias('listSearched') sortedAllocations;
    56  
    57    eligibilityError = null;
    58    stopDrainError = null;
    59    drainError = null;
    60    showDrainNotification = false;
    61    showDrainUpdateNotification = false;
    62    showDrainStoppedNotification = false;
    63  
    64    @computed('model.allocations.@each.wasPreempted')
    65    get preemptions() {
    66      return this.model.allocations.filterBy('wasPreempted');
    67    }
    68  
    69    @computed('model.events.@each.time')
    70    get sortedEvents() {
    71      return this.get('model.events')
    72        .sortBy('time')
    73        .reverse();
    74    }
    75  
    76    @computed('model.drivers.@each.name')
    77    get sortedDrivers() {
    78      return this.get('model.drivers').sortBy('name');
    79    }
    80  
    81    @computed('model.hostVolumes.@each.name')
    82    get sortedHostVolumes() {
    83      return this.model.hostVolumes.sortBy('name');
    84    }
    85  
    86    @(task(function*(value) {
    87      try {
    88        yield value ? this.model.setEligible() : this.model.setIneligible();
    89      } catch (err) {
    90        const error = messageFromAdapterError(err) || 'Could not set eligibility';
    91        this.set('eligibilityError', error);
    92      }
    93    }).drop())
    94    setEligibility;
    95  
    96    @(task(function*() {
    97      try {
    98        this.set('flagAsDraining', false);
    99        yield this.model.cancelDrain();
   100        this.set('showDrainStoppedNotification', true);
   101      } catch (err) {
   102        this.set('flagAsDraining', true);
   103        const error = messageFromAdapterError(err) || 'Could not stop drain';
   104        this.set('stopDrainError', error);
   105      }
   106    }).drop())
   107    stopDrain;
   108  
   109    @(task(function*() {
   110      try {
   111        yield this.model.forceDrain({
   112          IgnoreSystemJobs: this.model.drainStrategy.ignoreSystemJobs,
   113        });
   114      } catch (err) {
   115        const error = messageFromAdapterError(err) || 'Could not force drain';
   116        this.set('drainError', error);
   117      }
   118    }).drop())
   119    forceDrain;
   120  
   121    @observes('model.isDraining')
   122    triggerDrainNotification() {
   123      if (!this.model.isDraining && this.flagAsDraining) {
   124        this.set('showDrainNotification', true);
   125      }
   126  
   127      this.set('flagAsDraining', this.model.isDraining);
   128    }
   129  
   130    @action
   131    gotoAllocation(allocation) {
   132      this.transitionToRoute('allocations.allocation', allocation);
   133    }
   134  
   135    @action
   136    setPreemptionFilter(value) {
   137      this.set('onlyPreemptions', value);
   138    }
   139  
   140    @action
   141    drainNotify(isUpdating) {
   142      this.set('showDrainUpdateNotification', isUpdating);
   143    }
   144  
   145    @action
   146    setDrainError(err) {
   147      const error = messageFromAdapterError(err) || 'Could not run drain';
   148      this.set('drainError', error);
   149    }
   150  }