github.com/iqoqo/nomad@v0.11.3-0.20200911112621-d7021c74d101/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 noHostVolumes: trait({ 68 hostVolumes: () => ({}), 69 }), 70 71 drainStrategy: null, 72 73 drivers: makeDrivers, 74 75 hostVolumes: makeHostVolumes, 76 77 resources: generateResources, 78 79 attributes() { 80 // TODO add variability to these 81 return { 82 'os.version': '10.12.5', 83 'cpu.modelname': 'Intel(R) Core(TM) i7-3615QM CPU @ 2.30GHz', 84 'nomad.revision': 'f551dcb83e3ac144c9dbb90583b6e82d234662e9', 85 'driver.docker.volumes.enabled': '1', 86 'driver.docker': '1', 87 'cpu.frequency': '2300', 88 'memory.totalbytes': '17179869184', 89 'driver.mock_driver': '1', 90 'kernel.version': '16.6.0', 91 'unique.network.ip-address': '127.0.0.1', 92 'nomad.version': '0.5.5dev', 93 'unique.hostname': 'bacon-mac', 94 'cpu.arch': 'amd64', 95 'os.name': 'darwin', 96 'kernel.name': 'darwin', 97 'unique.storage.volume': '/dev/disk1', 98 'driver.docker.version': '17.03.1-ce', 99 'cpu.totalcompute': '18400', 100 'unique.storage.bytestotal': '249783500800', 101 'cpu.numcores': '8', 102 'os.signals': 103 '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', 104 'driver.raw_exec': '1', 105 'unique.storage.bytesfree': '142954643456', 106 }; 107 }, 108 109 withMeta: trait({ 110 meta: { 111 just: 'some', 112 prop: 'erties', 113 'over.here': 100, 114 }, 115 }), 116 117 afterCreate(node, server) { 118 // Each node has a corresponding client stat resource that's queried via node IP. 119 // Create that record, even though it's not a relationship. 120 server.create('client-stat', { 121 id: node.httpAddr, 122 }); 123 124 const events = server.createList('node-event', faker.random.number({ min: 1, max: 10 }), { 125 nodeId: node.id, 126 }); 127 128 node.update({ 129 eventIds: events.mapBy('id'), 130 }); 131 132 server.create('client-stat', { 133 id: node.id, 134 }); 135 }, 136 }); 137 138 function makeDrivers() { 139 const generate = name => { 140 const detected = faker.random.number(10) >= 3; 141 const healthy = detected && faker.random.number(10) >= 3; 142 const attributes = { 143 [`driver.${name}.version`]: '1.0.0', 144 [`driver.${name}.status`]: 'awesome', 145 [`driver.${name}.more.details`]: 'yeah', 146 [`driver.${name}.more.again`]: 'we got that', 147 }; 148 return { 149 Detected: detected, 150 Healthy: healthy, 151 HealthDescription: healthy ? 'Driver is healthy' : 'Uh oh', 152 UpdateTime: faker.date.past(5 / 365, REF_DATE), 153 Attributes: faker.random.number(10) >= 3 && detected ? attributes : null, 154 }; 155 }; 156 157 return { 158 docker: generate('docker'), 159 rkt: generate('rkt'), 160 qemu: generate('qemu'), 161 exec: generate('exec'), 162 raw_exec: generate('raw_exec'), 163 java: generate('java'), 164 }; 165 } 166 167 function makeHostVolumes() { 168 const generate = () => ({ 169 Name: faker.internet.domainWord(), 170 Path: `/${faker.internet.userName()}/${faker.internet.domainWord()}/${faker.internet.color()}`, 171 ReadOnly: faker.random.boolean(), 172 }); 173 174 const volumes = provide(faker.random.number({ min: 1, max: 5 }), generate); 175 return volumes.reduce((hash, volume) => { 176 hash[volume.Name] = volume; 177 return hash; 178 }, {}); 179 }