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 */