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