From 5f2dee8225ef340ea6887eed8bce76478b70ab0d Mon Sep 17 00:00:00 2001 From: Michael Lange Date: Fri, 24 Jul 2020 21:36:43 -0700 Subject: [PATCH] Model job scaling and events in Mirage --- ui/mirage/config.js | 9 ++++++++ ui/mirage/factories/job-scale.js | 26 +++++++++++++++++++++++ ui/mirage/factories/job.js | 11 ++++++++++ ui/mirage/factories/scale-event.js | 17 +++++++++++++++ ui/mirage/factories/task-group-scale.js | 24 +++++++++++++++++++++ ui/mirage/models/job-scale.js | 6 ++++++ ui/mirage/models/job.js | 1 + ui/mirage/models/scale-event.js | 5 +++++ ui/mirage/models/task-group-scale.js | 6 ++++++ ui/mirage/serializers/job-scale.js | 6 ++++++ ui/mirage/serializers/task-group-scale.js | 6 ++++++ 11 files changed, 117 insertions(+) create mode 100644 ui/mirage/factories/job-scale.js create mode 100644 ui/mirage/factories/scale-event.js create mode 100644 ui/mirage/factories/task-group-scale.js create mode 100644 ui/mirage/models/job-scale.js create mode 100644 ui/mirage/models/scale-event.js create mode 100644 ui/mirage/models/task-group-scale.js create mode 100644 ui/mirage/serializers/job-scale.js create mode 100644 ui/mirage/serializers/task-group-scale.js diff --git a/ui/mirage/config.js b/ui/mirage/config.js index 80c521791..c76fa2e4e 100644 --- a/ui/mirage/config.js +++ b/ui/mirage/config.js @@ -157,6 +157,15 @@ export default function() { return deployment ? this.serialize(deployment) : new Response(200, {}, 'null'); }); + this.get( + '/job/:id/scale', + withBlockingSupport(function({ jobScales }, { params }) { + const obj = jobScales.findBy({ jobId: params.id }); + console.log('Job Scale Object', obj); + return this.serialize(jobScales.findBy({ jobId: params.id })); + }) + ); + this.post('/job/:id/periodic/force', function(schema, { params }) { // Create the child job const parent = schema.jobs.find(params.id); diff --git a/ui/mirage/factories/job-scale.js b/ui/mirage/factories/job-scale.js new file mode 100644 index 000000000..168f2c0e9 --- /dev/null +++ b/ui/mirage/factories/job-scale.js @@ -0,0 +1,26 @@ +import { Factory, trait } from 'ember-cli-mirage'; +import faker from 'nomad-ui/mirage/faker'; + +export default Factory.extend({ + groupNames: [], + + jobId: '', + JobID() { + return this.jobId; + }, + namespace: null, + shallow: false, + + afterCreate(jobScale, server) { + const groups = jobScale.groupNames.map(group => + server.create('task-group-scale', { + id: group, + shallow: jobScale.shallow, + }) + ); + + jobScale.update({ + taskGroupScaleIds: groups.mapBy('id'), + }); + }, +}); diff --git a/ui/mirage/factories/job.js b/ui/mirage/factories/job.js index 90e2f27b3..c09eae9d8 100644 --- a/ui/mirage/factories/job.js +++ b/ui/mirage/factories/job.js @@ -158,6 +158,17 @@ export default Factory.extend({ job_summary_id: jobSummary.id, }); + const jobScale = server.create('job-scale', { + groupNames: groups.mapBy('name'), + jobId: job.id, + namespace: job.namespace, + shallow: job.shallow, + }); + + job.update({ + jobScaleId: jobScale.id, + }); + if (!job.noDeployments) { Array(faker.random.number({ min: 1, max: 3 })) .fill(null) diff --git a/ui/mirage/factories/scale-event.js b/ui/mirage/factories/scale-event.js new file mode 100644 index 000000000..8532c4ec2 --- /dev/null +++ b/ui/mirage/factories/scale-event.js @@ -0,0 +1,17 @@ +import { Factory, trait } from 'ember-cli-mirage'; +import faker from 'nomad-ui/mirage/faker'; + +const REF_TIME = new Date(); + +export default Factory.extend({ + time: () => faker.date.past(2 / 365, REF_TIME) * 1000000, + count: () => faker.random.number(10), + previousCount: () => faker.random.number(10), + error: () => faker.random.number(10) > 9, + message: 'Sample message for a job scale event', + meta: () => ({ + 'nomad_autoscaler.count.capped': true, + 'nomad_autoscaler.count.original': 0, + 'nomad_autoscaler.reason_history': ['scaling down because factor is 0.000000'], + }), +}); diff --git a/ui/mirage/factories/task-group-scale.js b/ui/mirage/factories/task-group-scale.js new file mode 100644 index 000000000..98160b49d --- /dev/null +++ b/ui/mirage/factories/task-group-scale.js @@ -0,0 +1,24 @@ +import { Factory, trait } from 'ember-cli-mirage'; +import faker from 'nomad-ui/mirage/faker'; + +export default Factory.extend({ + name: id => id, + + desired: 1, + placed: 1, + running: 1, + healthy: 1, + unhealthy: 1, + + shallow: false, + + afterCreate(taskGroupScale, server) { + if (!taskGroupScale.shallow) { + const events = server.createList('scale-event', faker.random.number({ min: 1, max: 10 })); + + taskGroupScale.update({ + eventIds: events.mapBy('id'), + }); + } + }, +}); diff --git a/ui/mirage/models/job-scale.js b/ui/mirage/models/job-scale.js new file mode 100644 index 000000000..8e06eead0 --- /dev/null +++ b/ui/mirage/models/job-scale.js @@ -0,0 +1,6 @@ +import { Model, belongsTo, hasMany } from 'ember-cli-mirage'; + +export default Model.extend({ + job: belongsTo(), + taskGroupScales: hasMany(), +}); diff --git a/ui/mirage/models/job.js b/ui/mirage/models/job.js index 3a69c0281..9c41e610d 100644 --- a/ui/mirage/models/job.js +++ b/ui/mirage/models/job.js @@ -3,4 +3,5 @@ import { Model, hasMany, belongsTo } from 'ember-cli-mirage'; export default Model.extend({ task_groups: hasMany('task-group'), job_summary: belongsTo('job-summary'), + job_scale: belongsTo('job-scale'), }); diff --git a/ui/mirage/models/scale-event.js b/ui/mirage/models/scale-event.js new file mode 100644 index 000000000..3c41f3573 --- /dev/null +++ b/ui/mirage/models/scale-event.js @@ -0,0 +1,5 @@ +import { Model, belongsTo } from 'ember-cli-mirage'; + +export default Model.extend({ + taskGroupScale: belongsTo(), +}); diff --git a/ui/mirage/models/task-group-scale.js b/ui/mirage/models/task-group-scale.js new file mode 100644 index 000000000..526299503 --- /dev/null +++ b/ui/mirage/models/task-group-scale.js @@ -0,0 +1,6 @@ +import { Model, belongsTo, hasMany } from 'ember-cli-mirage'; + +export default Model.extend({ + jobScale: belongsTo(), + events: hasMany('scale-event'), +}); diff --git a/ui/mirage/serializers/job-scale.js b/ui/mirage/serializers/job-scale.js new file mode 100644 index 000000000..83abf7011 --- /dev/null +++ b/ui/mirage/serializers/job-scale.js @@ -0,0 +1,6 @@ +import ApplicationSerializer from './application'; + +export default ApplicationSerializer.extend({ + embed: true, + include: ['taskGroupScales'], +}); diff --git a/ui/mirage/serializers/task-group-scale.js b/ui/mirage/serializers/task-group-scale.js new file mode 100644 index 000000000..506c19038 --- /dev/null +++ b/ui/mirage/serializers/task-group-scale.js @@ -0,0 +1,6 @@ +import ApplicationSerializer from './application'; + +export default ApplicationSerializer.extend({ + embed: true, + include: ['events'], +});