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  }