Skip to content

Commit

Permalink
Merge pull request #4489 from hashicorp/f-ui-mirage-scenarios
Browse files Browse the repository at this point in the history
UI: Codify common mirage scenarios and make it easy to switch between
  • Loading branch information
DingoEatingFuzz authored Jul 10, 2018
2 parents 0a392dc + 7138b28 commit 0fc3021
Show file tree
Hide file tree
Showing 2 changed files with 103 additions and 3 deletions.
3 changes: 3 additions & 0 deletions ui/config/environment.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@ module.exports = function(environment) {

APP: {
blockingQueries: true,
mirageScenario: 'smallCluster',
mirageWithNamespaces: false,
mirageWithTokens: true,
},
};

Expand Down
103 changes: 100 additions & 3 deletions ui/mirage/scenarios/default.js
Original file line number Diff line number Diff line change
@@ -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);
}

function massiveCluster(server) {
server.createList('agent', 7);
server.createList('node', 5000);
server.createList('job', 2000);
}

server.createList('job', 10);
server.createList('job', 5, { failedPlacements: true });
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:');
Expand All @@ -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 */

0 comments on commit 0fc3021

Please sign in to comment.