github.com/manicqin/nomad@v0.9.5/ui/mirage/factories/node.js (about) 1 import { Factory, trait } from 'ember-cli-mirage'; 2 import faker from 'nomad-ui/mirage/faker'; 3 import { provide } from '../utils'; 4 import { DATACENTERS, HOSTS, generateResources } from '../common'; 5 import moment from 'moment'; 6 7 const UUIDS = provide(100, faker.random.uuid.bind(faker.random)); 8 const NODE_STATUSES = ['initializing', 'ready', 'down']; 9 const NODE_CLASSES = provide(7, faker.company.bsBuzz.bind(faker.company)); 10 const REF_DATE = new Date(); 11 12 export default Factory.extend({ 13 id: i => (i / 100 >= 1 ? `${UUIDS[i]}-${i}` : UUIDS[i]), 14 name: i => `nomad@${HOSTS[i % HOSTS.length]}`, 15 16 datacenter: () => faker.helpers.randomize(DATACENTERS), 17 nodeClass: () => faker.helpers.randomize(NODE_CLASSES), 18 drain: faker.random.boolean, 19 status: () => faker.helpers.randomize(NODE_STATUSES), 20 tls_enabled: faker.random.boolean, 21 schedulingEligibility: () => (faker.random.boolean() ? 'eligible' : 'ineligible'), 22 23 createIndex: i => i, 24 modifyIndex: () => faker.random.number({ min: 10, max: 2000 }), 25 26 httpAddr() { 27 return this.name.split('@')[1]; 28 }, 29 30 forceIPv4: trait({ 31 name: i => { 32 const ipv4Hosts = HOSTS.filter(h => !h.startsWith('[')); 33 return `nomad@${ipv4Hosts[i % ipv4Hosts.length]}`; 34 }, 35 }), 36 37 draining: trait({ 38 drain: true, 39 schedulingEligibility: 'ineligible', 40 drainStrategy: { 41 Deadline: faker.random.number({ min: 30 * 1000, max: 5 * 60 * 60 * 1000 }) * 1000000, 42 ForceDeadline: moment(REF_DATE).add(faker.random.number({ min: 1, max: 5 }), 'd'), 43 IgnoreSystemJobs: faker.random.boolean(), 44 }, 45 }), 46 47 forcedDraining: trait({ 48 drain: true, 49 schedulingEligibility: 'ineligible', 50 drainStrategy: { 51 Deadline: -1, 52 ForceDeadline: '0001-01-01T00:00:00Z', 53 IgnoreSystemJobs: faker.random.boolean(), 54 }, 55 }), 56 57 noDeadlineDraining: trait({ 58 drain: true, 59 schedulingEligibility: 'ineligible', 60 drainStrategy: { 61 Deadline: 0, 62 ForceDeadline: '0001-01-01T00:00:00Z', 63 IgnoreSystemJobs: faker.random.boolean(), 64 }, 65 }), 66 67 drainStrategy: null, 68 69 drivers: makeDrivers, 70 71 resources: generateResources, 72 73 attributes() { 74 // TODO add variability to these 75 return { 76 'os.version': '10.12.5', 77 'cpu.modelname': 'Intel(R) Core(TM) i7-3615QM CPU @ 2.30GHz', 78 'nomad.revision': 'f551dcb83e3ac144c9dbb90583b6e82d234662e9', 79 'driver.docker.volumes.enabled': '1', 80 'driver.docker': '1', 81 'cpu.frequency': '2300', 82 'memory.totalbytes': '17179869184', 83 'driver.mock_driver': '1', 84 'kernel.version': '16.6.0', 85 'unique.network.ip-address': '127.0.0.1', 86 'nomad.version': '0.5.5dev', 87 'unique.hostname': 'bacon-mac', 88 'cpu.arch': 'amd64', 89 'os.name': 'darwin', 90 'kernel.name': 'darwin', 91 'unique.storage.volume': '/dev/disk1', 92 'driver.docker.version': '17.03.1-ce', 93 'cpu.totalcompute': '18400', 94 'unique.storage.bytestotal': '249783500800', 95 'cpu.numcores': '8', 96 'os.signals': 97 'SIGCONT,SIGSTOP,SIGSYS,SIGINT,SIGIOT,SIGXCPU,SIGSEGV,SIGUSR1,SIGTTIN,SIGURG,SIGUSR2,SIGABRT,SIGALRM,SIGCHLD,SIGFPE,SIGTSTP,SIGIO,SIGKILL,SIGQUIT,SIGXFSZ,SIGBUS,SIGHUP,SIGPIPE,SIGPROF,SIGTRAP,SIGTTOU,SIGILL,SIGTERM', 98 'driver.raw_exec': '1', 99 'unique.storage.bytesfree': '142954643456', 100 }; 101 }, 102 103 withMeta: trait({ 104 meta: { 105 just: 'some', 106 prop: 'erties', 107 'over.here': 100, 108 }, 109 }), 110 111 afterCreate(node, server) { 112 // Each node has a corresponding client stat resource that's queried via node IP. 113 // Create that record, even though it's not a relationship. 114 server.create('client-stat', { 115 id: node.httpAddr, 116 }); 117 118 const events = server.createList('node-event', faker.random.number({ min: 1, max: 10 }), { 119 nodeId: node.id, 120 }); 121 122 node.update({ 123 eventIds: events.mapBy('id'), 124 }); 125 126 server.create('client-stat', { 127 id: node.id, 128 }); 129 }, 130 }); 131 132 function makeDrivers() { 133 const generate = name => { 134 const detected = faker.random.number(10) >= 3; 135 const healthy = detected && faker.random.number(10) >= 3; 136 const attributes = { 137 [`driver.${name}.version`]: '1.0.0', 138 [`driver.${name}.status`]: 'awesome', 139 [`driver.${name}.more.details`]: 'yeah', 140 [`driver.${name}.more.again`]: 'we got that', 141 }; 142 return { 143 Detected: detected, 144 Healthy: healthy, 145 HealthDescription: healthy ? 'Driver is healthy' : 'Uh oh', 146 UpdateTime: faker.date.past(5 / 365, REF_DATE), 147 Attributes: faker.random.number(10) >= 3 && detected ? attributes : null, 148 }; 149 }; 150 151 return { 152 docker: generate('docker'), 153 rkt: generate('rkt'), 154 qemu: generate('qemu'), 155 exec: generate('exec'), 156 raw_exec: generate('raw_exec'), 157 java: generate('java'), 158 }; 159 }