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  }