diff --git a/ui/config/environment.js b/ui/config/environment.js index b97c3f183..3fafff324 100644 --- a/ui/config/environment.js +++ b/ui/config/environment.js @@ -20,6 +20,9 @@ module.exports = function(environment) { APP: { blockingQueries: true, + mirageScenario: 'smallCluster', + mirageWithNamespaces: false, + mirageWithTokens: true, }, }; diff --git a/ui/mirage/scenarios/default.js b/ui/mirage/scenarios/default.js index 7ab761099..e40dee2cb 100644 --- a/ui/mirage/scenarios/default.js +++ b/ui/mirage/scenarios/default.js @@ -1,16 +1,103 @@ +import config from 'nomad-ui/config/environment'; + +const withNamespaces = getConfigValue('mirageWithNamespaces', false); +const withTokens = getConfigValue('mirageWithTokens', true); + +const allScenarios = { + smallCluster, + mediumCluster, + largeCluster, + massiveCluster, + allJobTypes, + allNodeTypes, + emptyCluster, +}; + +const scenario = getConfigValue('mirageScenario', 'emptyCluster'); + export default function(server) { + const activeScenario = allScenarios[scenario]; + if (!activeScenario) { + throw new Error( + `Selected Mirage scenario does not exist.\n\n${scenario} not in list: \n\n\t${Object.keys( + allScenarios + ).join('\n\t')}` + ); + } + + if (withNamespaces) createNamespaces(server); + if (withTokens) createTokens(server); + activeScenario(server); +} + +// Scenarios + +function smallCluster(server) { + server.createList('agent', 3); + server.createList('node', 5); + server.createList('job', 5); +} + +function mediumCluster(server) { server.createList('agent', 3); server.createList('node', 50); + server.createList('job', 25); +} - server.createList('namespace', 3); +// Due to Mirage performance, large cluster scenarios will be slow +function largeCluster(server) { + server.createList('agent', 5); + server.createList('node', 1000); + server.createList('job', 100); +} - server.createList('job', 10); - server.createList('job', 5, { failedPlacements: true }); +function massiveCluster(server) { + server.createList('agent', 7); + server.createList('node', 5000); + server.createList('job', 2000); +} +function allJobTypes(server) { + server.createList('agent', 3); + server.createList('node', 5); + + server.create('job', { type: 'service' }); + server.create('job', { type: 'batch' }); + server.create('job', { type: 'system' }); + server.create('job', 'periodic'); + server.create('job', 'parameterized'); + server.create('job', { failedPlacements: true }); +} + +function allNodeTypes(server) { + server.createList('agent', 3); + + server.create('node'); + server.create('node', 'forceIPv4'); + server.create('node', 'draining'); + server.create('node', 'forcedDraining'); + server.create('node', 'noDeadlineDraining'); + server.create('node', 'withMeta'); + + server.createList('job', 3); +} + +function emptyCluster(server) { + server.create('agent'); + server.create('node'); +} + +// Behaviors + +function createTokens(server) { server.createList('token', 3); logTokens(server); } +function createNamespaces(server) { + server.createList('namespace', 3); +} + /* eslint-disable */ function logTokens(server) { console.log('TOKENS:'); @@ -23,4 +110,14 @@ Accessor: ${token.accessorId} `); }); } + +function getConfigValue(variableName, defaultValue) { + const value = config.APP[variableName]; + if (value !== undefined) return value; + + console.warn( + `No ENV.APP value set for "${variableName}". Defaulting to "${defaultValue}". To set a custom value, modify config/environment.js` + ); + return defaultValue; +} /* eslint-enable */