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