import { Factory, faker } from 'ember-cli-mirage'; import { provide, provider, pickOne } from '../utils'; import { DATACENTERS } from '../common'; const JOB_PREFIXES = provide(5, faker.hacker.abbreviation); const JOB_TYPES = ['service', 'batch', 'system']; const JOB_STATUSES = ['pending', 'running', 'dead']; export default Factory.extend({ id: i => `job-${i}`, name: i => `${faker.list.random(...JOB_PREFIXES)()}-${faker.hacker.noun()}-${i}`, groupsCount: () => faker.random.number({ min: 1, max: 5 }), region: () => 'global', type: faker.list.random(...JOB_TYPES), priority: () => faker.random.number(100), all_at_once: faker.random.boolean, status: faker.list.random(...JOB_STATUSES), datacenters: provider( () => faker.random.number({ min: 1, max: 4 }), faker.list.random(...DATACENTERS) ), periodic: () => Math.random() > 0.5, parameterized() { return !this.periodic; }, createIndex: i => i, modifyIndex: () => faker.random.number({ min: 10, max: 2000 }), // Directive used to control sub-resources // When false, no allocations are made createAllocations: true, // When true, deployments for the job will never have a 'running' status noActiveDeployment: false, // When true, deployments for the job will always have a 'running' status activeDeployment: false, // When true, an evaluation with a high modify index and placement failures is created failedPlacements: false, afterCreate(job, server) { const groups = server.createList('task-group', job.groupsCount, { job, createAllocations: job.createAllocations, }); job.update({ taskGroupIds: groups.mapBy('id'), task_group_ids: groups.mapBy('id'), }); if (!job.namespaceId) { const namespace = server.db.namespaces.length ? pickOne(server.db.namespaces).id : null; job.update({ namespace, namespaceId: namespace, }); } else { job.update({ namespace: job.namespaceId, }); } const jobSummary = server.create('job-summary', { groupNames: groups.mapBy('name'), job, }); job.update({ jobSummaryId: jobSummary.id, job_summary_id: jobSummary.id, }); Array(faker.random.number({ min: 1, max: 10 })) .fill(null) .map((_, index) => { return server.create('job-version', { job, version: index, noActiveDeployment: job.noActiveDeployment, activeDeployment: job.activeDeployment, }); }); server.createList('evaluation', faker.random.number({ min: 1, max: 5 }), { job }); server.createList('evaluation', faker.random.number(3), 'withPlacementFailures', { job }); if (job.failedPlacements) { server.create('evaluation', 'withPlacementFailures', { job, modifyIndex: 4000, }); } }, });