open-nomad/ui/app/models/task-state.js
Buck Doyle ee0e74186f
UI: Move kind property to task (#6271)
I put this property in the wrong place. 

I’ve found how to fix the mock API in the tests but
they’re failing to pass with headless Chrome only,
so they’re skipped for now.
2019-09-05 13:14:54 -05:00

63 lines
1.8 KiB
JavaScript

import { computed } from '@ember/object';
import { alias, none, and } from '@ember/object/computed';
import Fragment from 'ember-data-model-fragments/fragment';
import attr from 'ember-data/attr';
import { fragment, fragmentOwner, fragmentArray } from 'ember-data-model-fragments/attributes';
export default Fragment.extend({
allocation: fragmentOwner(),
name: attr('string'),
state: attr('string'),
startedAt: attr('date'),
finishedAt: attr('date'),
failed: attr('boolean'),
isActive: none('finishedAt'),
isRunning: and('isActive', 'allocation.isRunning'),
isConnectProxy: computed('task.kind', function() {
return (this.get('task.kind') || '').startsWith('connect-proxy:');
}),
task: computed('allocation.taskGroup.tasks.[]', function() {
const tasks = this.get('allocation.taskGroup.tasks');
return tasks && tasks.findBy('name', this.name);
}),
driver: alias('task.driver'),
// TaskState represents a task running on a node, so in addition to knowing the
// driver via the task, the health of the driver is also known via the node
driverStatus: computed('task.driver', 'allocation.node.drivers.[]', function() {
const nodeDrivers = this.get('allocation.node.drivers') || [];
return nodeDrivers.findBy('name', this.get('task.driver'));
}),
resources: fragment('resources'),
events: fragmentArray('task-event'),
stateClass: computed('state', function() {
const classMap = {
pending: 'is-pending',
running: 'is-primary',
finished: 'is-complete',
failed: 'is-error',
};
return classMap[this.state] || 'is-dark';
}),
restart() {
return this.allocation.restart(this.name);
},
ls(path) {
return this.store.adapterFor('task-state').ls(this, path);
},
stat(path) {
return this.store.adapterFor('task-state').stat(this, path);
},
});