github.com/iqoqo/nomad@v0.11.3-0.20200911112621-d7021c74d101/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 5 export default Component.extend({ 6 tagName: '', 7 8 tasks: null, 9 taskStates: null, 10 11 lifecyclePhases: computed('tasks.@each.lifecycle', 'taskStates.@each.state', function() { 12 const tasksOrStates = this.taskStates || this.tasks; 13 const lifecycles = { 14 prestarts: [], 15 sidecars: [], 16 mains: [], 17 }; 18 19 tasksOrStates.forEach(taskOrState => { 20 const task = taskOrState.task || taskOrState; 21 lifecycles[`${task.lifecycleName}s`].push(taskOrState); 22 }); 23 24 const phases = []; 25 26 if (lifecycles.prestarts.length || lifecycles.sidecars.length) { 27 phases.push({ 28 name: 'Prestart', 29 isActive: lifecycles.prestarts.some(state => state.state === 'running'), 30 }); 31 } 32 33 if (lifecycles.sidecars.length || lifecycles.mains.length) { 34 phases.push({ 35 name: 'Main', 36 isActive: lifecycles.mains.some(state => state.state === 'running'), 37 }); 38 } 39 40 return phases; 41 }), 42 43 sortedLifecycleTaskStates: sort('taskStates', function(a, b) { 44 return getTaskSortPrefix(a.task).localeCompare(getTaskSortPrefix(b.task)); 45 }), 46 47 sortedLifecycleTasks: sort('tasks', function(a, b) { 48 return getTaskSortPrefix(a).localeCompare(getTaskSortPrefix(b)); 49 }), 50 }); 51 52 const lifecycleNameSortPrefix = { 53 prestart: 0, 54 sidecar: 1, 55 main: 2, 56 }; 57 58 function getTaskSortPrefix(task) { 59 // Prestarts first, then sidecars, then mains 60 return `${lifecycleNameSortPrefix[task.lifecycleName]}-${task.name}`; 61 }