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  }