github.com/anth0d/nomad@v0.0.0-20221214183521-ae3a0a2cad06/ui/app/routes/jobs/job.js (about) 1 import { inject as service } from '@ember/service'; 2 import Route from '@ember/routing/route'; 3 import RSVP from 'rsvp'; 4 import notifyError from 'nomad-ui/utils/notify-error'; 5 import classic from 'ember-classic-decorator'; 6 7 @classic 8 export default class JobRoute extends Route { 9 @service can; 10 @service store; 11 @service token; 12 @service router; 13 14 serialize(model) { 15 return { job_name: model.get('idWithNamespace') }; 16 } 17 18 model(params) { 19 let name, 20 namespace = 'default'; 21 const { job_name } = params; 22 const delimiter = job_name.lastIndexOf('@'); 23 if (delimiter !== -1) { 24 name = job_name.slice(0, delimiter); 25 namespace = job_name.slice(delimiter + 1); 26 } else { 27 name = job_name; 28 } 29 30 const fullId = JSON.stringify([name, namespace]); 31 32 return this.store 33 .findRecord('job', fullId, { reload: true }) 34 .then((job) => { 35 const relatedModelsQueries = [ 36 job.get('allocations'), 37 job.get('evaluations'), 38 this.store.query('job', { namespace, meta: true }), 39 this.store.findAll('namespace'), 40 ]; 41 42 if (this.can.can('accept recommendation')) { 43 relatedModelsQueries.push(job.get('recommendationSummaries')); 44 } 45 46 // Optimizing future node look ups by preemptively loading everything 47 if (job.get('hasClientStatus') && this.can.can('read client')) { 48 relatedModelsQueries.push(this.store.findAll('node')); 49 } 50 51 return RSVP.all(relatedModelsQueries).then(() => job); 52 }) 53 .catch(notifyError(this)); 54 } 55 }