github.com/anth0d/nomad@v0.0.0-20221214183521-ae3a0a2cad06/ui/mirage/common.js (about) 1 import faker from 'nomad-ui/mirage/faker'; 2 import { provide } from './utils'; 3 4 faker.seed(1); 5 6 // Realistically, resource reservations have a low cardinality 7 const CPU_RESERVATIONS = [250, 500, 1000, 2000, 2500, 4000]; 8 const MEMORY_RESERVATIONS = [256, 512, 1024, 2048, 4096, 8192]; 9 const DISK_RESERVATIONS = [200, 500, 1000, 2000, 5000, 10000, 100000]; 10 11 // There is also a good chance that certain resource restrictions are unbounded 12 DISK_RESERVATIONS.push(...Array(500).fill(0)); 13 14 const NETWORK_MODES = ['bridge', 'host']; 15 16 export const DATACENTERS = provide( 17 15, 18 (n, i) => `${faker.address.countryCode().toLowerCase()}${i}` 19 ); 20 21 export const HOSTS = provide(100, () => { 22 const ip = faker.random.boolean() 23 ? faker.internet.ip() 24 : `[${faker.internet.ipv6()}]`; 25 return `${ip}:${faker.random.number({ min: 4000, max: 4999 })}`; 26 }); 27 28 export const STORAGE_PROVIDERS = ['ebs', 'zfs', 'nfs', 'cow', 'moo']; 29 30 export function generateResources(options = {}) { 31 const resources = { 32 Cpu: { 33 CpuShares: options.CPU || faker.helpers.randomize(CPU_RESERVATIONS), 34 }, 35 Memory: { 36 MemoryMB: 37 options.MemoryMB || faker.helpers.randomize(MEMORY_RESERVATIONS), 38 }, 39 Disk: { 40 DiskMB: options.DiskMB || faker.helpers.randomize(DISK_RESERVATIONS), 41 }, 42 Networks: generateNetworks(options.networks), 43 Ports: generatePorts(options.networks), 44 }; 45 46 if (faker.random.boolean()) { 47 const higherMemoryReservations = MEMORY_RESERVATIONS.filter( 48 (mb) => mb > resources.Memory.MemoryMB 49 ); 50 resources.Memory.MemoryMaxMB = 51 faker.helpers.randomize(higherMemoryReservations) || 52 resources.Memory.MemoryMB + 1; 53 } else { 54 resources.Memory.MemoryMaxMB = 0; 55 } 56 57 return resources; 58 } 59 60 export function generateNetworks(options = {}) { 61 return Array(faker.random.number({ min: 1, max: 3 })) 62 .fill(null) 63 .map(() => ({ 64 Device: `eth${faker.random.number({ max: 5 })}`, 65 CIDR: '', 66 IP: faker.internet.ip(), 67 MBits: 10, 68 Mode: faker.helpers.randomize(NETWORK_MODES), 69 ReservedPorts: Array( 70 faker.random.number({ 71 min: options.minPorts != null ? options.minPorts : 0, 72 max: options.maxPorts != null ? options.maxPorts : 2, 73 }) 74 ) 75 .fill(null) 76 .map(() => ({ 77 Label: faker.hacker.noun(), 78 Value: faker.random.number({ min: 5000, max: 60000 }), 79 To: faker.random.number({ min: 5000, max: 60000 }), 80 })), 81 DynamicPorts: Array( 82 faker.random.number({ 83 min: options.minPorts != null ? options.minPorts : 0, 84 max: options.maxPorts != null ? options.maxPorts : 2, 85 }) 86 ) 87 .fill(null) 88 .map(() => ({ 89 Label: faker.hacker.noun(), 90 Value: faker.random.number({ min: 5000, max: 60000 }), 91 To: faker.random.number({ min: 5000, max: 60000 }), 92 })), 93 })); 94 } 95 96 export function generatePorts(options = {}) { 97 return Array( 98 faker.random.number({ 99 min: options.minPorts != null ? options.minPorts : 0, 100 max: options.maxPorts != null ? options.maxPorts : 2, 101 }) 102 ) 103 .fill(null) 104 .map(() => ({ 105 Label: faker.hacker.noun(), 106 Value: faker.random.number({ min: 5000, max: 60000 }), 107 To: faker.random.number({ min: 5000, max: 60000 }), 108 HostIP: faker.random.boolean() 109 ? faker.internet.ip() 110 : faker.internet.ipv6(), 111 })); 112 }