github.com/Ilhicas/nomad@v1.0.4-0.20210304152020-e86851182bc3/ui/mirage/scenarios/default.js (about)

     1  import config from 'nomad-ui/config/environment';
     2  import * as topoScenarios from './topo';
     3  import { pickOne } from '../utils';
     4  
     5  const withNamespaces = getConfigValue('mirageWithNamespaces', false);
     6  const withTokens = getConfigValue('mirageWithTokens', true);
     7  const withRegions = getConfigValue('mirageWithRegions', false);
     8  
     9  const allScenarios = {
    10    smallCluster,
    11    mediumCluster,
    12    largeCluster,
    13    massiveCluster,
    14    allJobTypes,
    15    allNodeTypes,
    16    everyFeature,
    17    emptyCluster,
    18    ...topoScenarios,
    19  };
    20  
    21  const scenario = getScenarioQueryParameter() || getConfigValue('mirageScenario', 'emptyCluster');
    22  
    23  export default function(server) {
    24    const activeScenario = allScenarios[scenario];
    25    if (!activeScenario) {
    26      throw new Error(
    27        `Selected Mirage scenario does not exist.\n\n${scenario} not in list: \n\n\t${Object.keys(
    28          allScenarios
    29        ).join('\n\t')}`
    30      );
    31    }
    32  
    33    if (withNamespaces) createNamespaces(server);
    34    if (withTokens) createTokens(server);
    35    if (withRegions) createRegions(server);
    36    activeScenario(server);
    37  }
    38  
    39  // Scenarios
    40  
    41  function smallCluster(server) {
    42    server.createList('agent', 3);
    43    server.createList('node', 5);
    44    server.createList('job', 5, { createRecommendations: true });
    45    server.createList('allocFile', 5);
    46    server.create('allocFile', 'dir', { depth: 2 });
    47    server.createList('csi-plugin', 2);
    48  
    49    const csiAllocations = server.createList('allocation', 5);
    50    const volumes = server.schema.csiVolumes.all().models;
    51    csiAllocations.forEach(alloc => {
    52      const volume = pickOne(volumes);
    53      volume.writeAllocs.add(alloc);
    54      volume.readAllocs.add(alloc);
    55      volume.save();
    56    });
    57  }
    58  
    59  function mediumCluster(server) {
    60    server.createList('agent', 3);
    61    server.createList('node', 50);
    62    server.createList('job', 25);
    63  }
    64  
    65  // Due to Mirage performance, large cluster scenarios will be slow
    66  function largeCluster(server) {
    67    server.createList('agent', 5);
    68    server.createList('node', 1000);
    69    server.createList('job', 100);
    70  }
    71  
    72  function massiveCluster(server) {
    73    server.createList('agent', 7);
    74    server.createList('node', 5000);
    75    server.createList('job', 2000);
    76  }
    77  
    78  function allJobTypes(server) {
    79    server.createList('agent', 3);
    80    server.createList('node', 5);
    81  
    82    server.create('job', { type: 'service' });
    83    server.create('job', { type: 'batch' });
    84    server.create('job', { type: 'system' });
    85    server.create('job', 'periodic');
    86    server.create('job', 'parameterized');
    87    server.create('job', { failedPlacements: true });
    88  }
    89  
    90  function allNodeTypes(server) {
    91    server.createList('agent', 3);
    92  
    93    server.create('node');
    94    server.create('node', 'forceIPv4');
    95    server.create('node', 'draining');
    96    server.create('node', 'forcedDraining');
    97    server.create('node', 'noDeadlineDraining');
    98    server.create('node', 'withMeta');
    99  
   100    server.createList('job', 3);
   101  }
   102  
   103  function everyFeature(server) {
   104    server.createList('agent', 3);
   105  
   106    server.create('node', 'forceIPv4');
   107    server.create('node', 'draining');
   108    server.create('node', 'forcedDraining');
   109    server.create('node', 'noDeadlineDraining');
   110    server.create('node', 'withMeta');
   111  
   112    const job1 = server.create('job', {
   113      type: 'service',
   114      activeDeployment: true,
   115      namespaceId: 'default',
   116      createAllocations: false,
   117    });
   118    server.create('job', { type: 'batch', failedPlacements: true, namespaceId: 'default' });
   119    server.create('job', { type: 'system', namespaceId: 'default' });
   120    server.create('job', 'periodic', { namespaceId: 'default' });
   121    server.create('job', 'parameterized', { namespaceId: 'default' });
   122  
   123    server.create('allocation', 'rescheduled', { jobId: job1.id });
   124    server.create('allocation', 'preempter', { jobId: job1.id });
   125    server.create('allocation', 'preempted', { jobId: job1.id });
   126  }
   127  
   128  function emptyCluster(server) {
   129    server.create('agent');
   130    server.create('node');
   131  }
   132  
   133  // Behaviors
   134  
   135  function createTokens(server) {
   136    server.createList('token', 3);
   137    logTokens(server);
   138  }
   139  
   140  function createNamespaces(server) {
   141    server.createList('namespace', 3);
   142  }
   143  
   144  function createRegions(server) {
   145    ['americas', 'europe', 'asia', 'some-long-name-just-to-test'].forEach(id => {
   146      server.create('region', { id });
   147    });
   148  }
   149  
   150  /* eslint-disable */
   151  function logTokens(server) {
   152    console.log('TOKENS:');
   153    server.db.tokens.forEach(token => {
   154      console.log(`
   155  Name: ${token.name}
   156  Secret: ${token.secretId}
   157  Accessor: ${token.accessorId}
   158  
   159  `);
   160    });
   161  }
   162  
   163  function getConfigValue(variableName, defaultValue) {
   164    const value = config.APP[variableName];
   165    if (value !== undefined) return value;
   166  
   167    console.warn(
   168      `No ENV.APP value set for "${variableName}". Defaulting to "${defaultValue}". To set a custom value, modify config/environment.js`
   169    );
   170    return defaultValue;
   171  }
   172  
   173  function getScenarioQueryParameter() {
   174    const params = new URLSearchParams(window.location.search);
   175    return params.get('mirage-scenario');
   176  }
   177  /* eslint-enable */