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  }