github.com/Ilhicas/nomad@v1.0.4-0.20210304152020-e86851182bc3/ui/app/components/lifecycle-chart.js (about)

     1  import Component from '@ember/component';
     2  import { computed } from '@ember/object';
     3  import { sort } from '@ember/object/computed';
     4  import { tagName } from '@ember-decorators/component';
     5  import classic from 'ember-classic-decorator';
     6  
     7  @classic
     8  @tagName('')
     9  export default class LifecycleChart extends Component {
    10    tasks = null;
    11    taskStates = null;
    12  
    13    @computed('tasks.@each.lifecycle', 'taskStates.@each.state')
    14    get lifecyclePhases() {
    15      const tasksOrStates = this.taskStates || this.tasks;
    16      const lifecycles = {
    17        'prestart-ephemerals': [],
    18        'prestart-sidecars': [],
    19        'poststart-ephemerals': [],
    20        'poststart-sidecars': [],
    21        poststops: [],
    22        mains: [],
    23      };
    24  
    25      tasksOrStates.forEach(taskOrState => {
    26        const task = taskOrState.task || taskOrState;
    27        lifecycles[`${task.lifecycleName}s`].push(taskOrState);
    28      });
    29  
    30      const phases = [];
    31      const stateActiveIterator = state => state.state === 'running';
    32  
    33      if (lifecycles.mains.length < tasksOrStates.length) {
    34        phases.push({
    35          name: 'Prestart',
    36          isActive: lifecycles['prestart-ephemerals'].some(stateActiveIterator),
    37        });
    38  
    39        phases.push({
    40          name: 'Main',
    41          isActive:
    42            lifecycles.mains.some(stateActiveIterator) ||
    43            lifecycles['poststart-ephemerals'].some(stateActiveIterator),
    44        });
    45  
    46        // Poststart is rendered as a subphase of main and therefore has no independent active state
    47        phases.push({
    48          name: 'Poststart',
    49        });
    50  
    51        phases.push({
    52          name: 'Poststop',
    53          isActive: lifecycles.poststops.some(stateActiveIterator),
    54        });
    55      }
    56  
    57      return phases;
    58    }
    59  
    60    @sort('taskStates', function(a, b) {
    61      return getTaskSortPrefix(a.task).localeCompare(getTaskSortPrefix(b.task));
    62    })
    63    sortedLifecycleTaskStates;
    64  
    65    @sort('tasks', function(a, b) {
    66      return getTaskSortPrefix(a).localeCompare(getTaskSortPrefix(b));
    67    })
    68    sortedLifecycleTasks;
    69  }
    70  
    71  const lifecycleNameSortPrefix = {
    72    'prestart-ephemeral': 0,
    73    'prestart-sidecar': 1,
    74    main: 2,
    75    'poststart-sidecar': 3,
    76    'poststart-ephemeral': 4,
    77    poststop: 5,
    78  };
    79  
    80  function getTaskSortPrefix(task) {
    81    return `${lifecycleNameSortPrefix[task.lifecycleName]}-${task.name}`;
    82  }