6bf139d094
No longer treat it as a property for relationship, just ephemeral data that can be fetched on demand.
71 lines
1.9 KiB
JavaScript
71 lines
1.9 KiB
JavaScript
import { inject as service } from '@ember/service';
|
|
import { computed } from '@ember/object';
|
|
import Model from 'ember-data/model';
|
|
import attr from 'ember-data/attr';
|
|
import { belongsTo } from 'ember-data/relationships';
|
|
import { fragment, fragmentArray } from 'ember-data-model-fragments/attributes';
|
|
import shortUUIDProperty from '../utils/properties/short-uuid';
|
|
import AllocationStats from '../utils/classes/allocation-stats';
|
|
|
|
const STATUS_ORDER = {
|
|
pending: 1,
|
|
running: 2,
|
|
complete: 3,
|
|
failed: 4,
|
|
lost: 5,
|
|
};
|
|
|
|
export default Model.extend({
|
|
token: service(),
|
|
|
|
shortId: shortUUIDProperty('id'),
|
|
job: belongsTo('job'),
|
|
node: belongsTo('node'),
|
|
name: attr('string'),
|
|
taskGroupName: attr('string'),
|
|
resources: fragment('resources'),
|
|
modifyIndex: attr('number'),
|
|
modifyTime: attr('date'),
|
|
jobVersion: attr('number'),
|
|
|
|
// TEMPORARY: https://github.com/emberjs/data/issues/5209
|
|
originalJobId: attr('string'),
|
|
|
|
clientStatus: attr('string'),
|
|
desiredStatus: attr('string'),
|
|
statusIndex: computed('clientStatus', function() {
|
|
return STATUS_ORDER[this.get('clientStatus')] || 100;
|
|
}),
|
|
|
|
statusClass: computed('clientStatus', function() {
|
|
const classMap = {
|
|
pending: 'is-pending',
|
|
running: 'is-primary',
|
|
complete: 'is-complete',
|
|
failed: 'is-error',
|
|
lost: 'is-light',
|
|
};
|
|
|
|
return classMap[this.get('clientStatus')] || 'is-dark';
|
|
}),
|
|
|
|
taskGroup: computed('taskGroupName', 'job.taskGroups.[]', function() {
|
|
const taskGroups = this.get('job.taskGroups');
|
|
return taskGroups && taskGroups.findBy('name', this.get('taskGroupName'));
|
|
}),
|
|
|
|
fetchStats() {
|
|
return this.get('token')
|
|
.authorizedRequest(`/v1/client/allocation/${this.get('id')}/stats`)
|
|
.then(res => res.json())
|
|
.then(json => {
|
|
return new AllocationStats({
|
|
stats: json,
|
|
allocation: this,
|
|
});
|
|
});
|
|
},
|
|
|
|
states: fragmentArray('task-state'),
|
|
});
|