2017-12-15 21:39:18 +00:00
|
|
|
import Route from '@ember/routing/route';
|
2021-12-13 15:29:25 +00:00
|
|
|
import { inject as service } from '@ember/service';
|
2018-03-01 00:27:15 +00:00
|
|
|
import { collect } from '@ember/object/computed';
|
2022-08-26 22:02:12 +00:00
|
|
|
import {
|
|
|
|
watchRecord,
|
|
|
|
watchNonStoreRecords,
|
|
|
|
} from 'nomad-ui/utils/properties/watch';
|
2018-03-01 00:27:15 +00:00
|
|
|
import WithWatchers from 'nomad-ui/mixins/with-watchers';
|
2018-03-13 21:58:22 +00:00
|
|
|
import notifyError from 'nomad-ui/utils/notify-error';
|
2020-06-10 13:49:16 +00:00
|
|
|
export default class AllocationRoute extends Route.extend(WithWatchers) {
|
2021-12-13 15:29:25 +00:00
|
|
|
@service store;
|
|
|
|
|
2018-03-06 22:27:01 +00:00
|
|
|
startWatchers(controller, model) {
|
2018-11-06 00:33:33 +00:00
|
|
|
if (model) {
|
2019-03-26 07:46:44 +00:00
|
|
|
controller.set('watcher', this.watch.perform(model));
|
2022-08-29 18:04:55 +00:00
|
|
|
|
|
|
|
// Conditionally Long Poll /checks endpoint if alloc has nomad services
|
|
|
|
const doesAllocHaveServices =
|
|
|
|
!!model.taskGroup?.services?.filterBy('provider', 'nomad').length ||
|
|
|
|
!!model.states
|
|
|
|
?.mapBy('task')
|
|
|
|
?.map((t) => t && t.get('services'))[0]
|
|
|
|
?.filterBy('provider', 'nomad').length;
|
|
|
|
|
|
|
|
if (doesAllocHaveServices) {
|
|
|
|
controller.set(
|
|
|
|
'watchHealthChecks',
|
|
|
|
this.watchHealthChecks.perform(model, 'getServiceHealth')
|
|
|
|
);
|
|
|
|
}
|
2018-11-06 00:33:33 +00:00
|
|
|
}
|
2020-06-10 13:49:16 +00:00
|
|
|
}
|
2018-02-28 19:48:06 +00:00
|
|
|
|
2018-03-13 21:58:22 +00:00
|
|
|
model() {
|
|
|
|
// Preload the job for the allocation since it's required for the breadcrumb trail
|
2020-06-10 13:49:16 +00:00
|
|
|
return super
|
|
|
|
.model(...arguments)
|
2022-04-28 18:02:15 +00:00
|
|
|
.then((allocation) => {
|
|
|
|
const jobId = allocation.belongsTo('job').id();
|
|
|
|
return this.store
|
|
|
|
.findRecord('job', jobId)
|
2021-12-15 17:37:10 +00:00
|
|
|
.then(() => this.store.findAll('namespace')) // namespaces belong to a job and are an asynchronous relationship so we can peak them later on
|
2022-04-28 18:02:15 +00:00
|
|
|
.then(() => allocation);
|
|
|
|
})
|
2018-03-13 21:58:22 +00:00
|
|
|
.catch(notifyError(this));
|
2020-06-10 13:49:16 +00:00
|
|
|
}
|
2018-03-13 21:58:22 +00:00
|
|
|
|
2020-06-10 13:49:16 +00:00
|
|
|
@watchRecord('allocation') watch;
|
2022-08-26 22:02:12 +00:00
|
|
|
@watchNonStoreRecords('allocation') watchHealthChecks;
|
2018-03-01 00:27:15 +00:00
|
|
|
|
2020-06-10 13:49:16 +00:00
|
|
|
@collect('watch') watchers;
|
|
|
|
}
|