github.com/zoomfoo/nomad@v0.8.5-0.20180907175415-f28fd3a1a056/ui/app/models/task-state.js (about) 1 import { none } from '@ember/object/computed'; 2 import { computed } from '@ember/object'; 3 import { alias } from '@ember/object/computed'; 4 import Fragment from 'ember-data-model-fragments/fragment'; 5 import attr from 'ember-data/attr'; 6 import { fragment, fragmentOwner, fragmentArray } from 'ember-data-model-fragments/attributes'; 7 8 export default Fragment.extend({ 9 name: attr('string'), 10 state: attr('string'), 11 startedAt: attr('date'), 12 finishedAt: attr('date'), 13 failed: attr('boolean'), 14 15 isActive: none('finishedAt'), 16 17 allocation: fragmentOwner(), 18 task: computed('allocation.taskGroup.tasks.[]', function() { 19 const tasks = this.get('allocation.taskGroup.tasks'); 20 return tasks && tasks.findBy('name', this.get('name')); 21 }), 22 23 driver: alias('task.driver'), 24 25 // TaskState represents a task running on a node, so in addition to knowing the 26 // driver via the task, the health of the driver is also known via the node 27 driverStatus: computed('task.driver', 'allocation.node.drivers.[]', function() { 28 const nodeDrivers = this.get('allocation.node.drivers') || []; 29 return nodeDrivers.findBy('name', this.get('task.driver')); 30 }), 31 32 resources: fragment('resources'), 33 events: fragmentArray('task-event'), 34 35 stateClass: computed('state', function() { 36 const classMap = { 37 pending: 'is-pending', 38 running: 'is-primary', 39 finished: 'is-complete', 40 failed: 'is-error', 41 }; 42 43 return classMap[this.get('state')] || 'is-dark'; 44 }), 45 });