diff --git a/ui/app/services/system.js b/ui/app/services/system.js index 134a60db5..fc2941c7f 100644 --- a/ui/app/services/system.js +++ b/ui/app/services/system.js @@ -39,10 +39,12 @@ export default class SystemService extends Service { .authorizedRawRequest(`/${namespace}/agent/self`) .then(jsonWithDefault({})) .then(agent => { - const { Version, VersionPrerelease, VersionMetadata } = agent.config.Version; - agent.version = Version; - if (VersionPrerelease) agent.version += `-${VersionPrerelease}`; - if (VersionMetadata) agent.version += `+${VersionMetadata}`; + if (agent.config.Version) { + const { Version, VersionPrerelease, VersionMetadata } = agent.config.Version; + agent.version = Version; + if (VersionPrerelease) agent.version = `${agent.version}-${VersionPrerelease}`; + if (VersionMetadata) agent.version = `${agent.version}+${VersionMetadata}`; + } return agent; }), }); diff --git a/ui/mirage/config.js b/ui/mirage/config.js index 66e1f56b3..8a1296a85 100644 --- a/ui/mirage/config.js +++ b/ui/mirage/config.js @@ -335,21 +335,12 @@ export default function() { const firstRegion = regions.first(); return { ServerRegion: firstRegion ? firstRegion.id : null, - Members: this.serialize(agents.all()), + Members: this.serialize(agents.all()).map(({ member }) => ({ ...member })), }; }); this.get('/agent/self', function({ agents }) { - return { - member: this.serialize(agents.first()), - config: { - Version: { - Version: '1.1.0', - VersionMetadata: 'ent', - VersionPrerelease: 'dev', - }, - }, - }; + return agents.first(); }); this.get('/agent/monitor', function({ agents, nodes }, { queryParams }) { diff --git a/ui/mirage/factories/agent.js b/ui/mirage/factories/agent.js index 3ba98ea32..10e1a559a 100644 --- a/ui/mirage/factories/agent.js +++ b/ui/mirage/factories/agent.js @@ -8,32 +8,40 @@ const AGENT_STATUSES = ['alive', 'leaving', 'left', 'failed']; export default Factory.extend({ id: i => (i / 100 >= 1 ? `${UUIDS[i]}-${i}` : UUIDS[i]), - name: () => `nomad@${faker.random.boolean() ? faker.internet.ip() : faker.internet.ipv6()}`, - status: () => faker.helpers.randomize(AGENT_STATUSES), - serfPort: () => faker.random.number({ min: 4000, max: 4999 }), - - address() { - return this.name.split('@')[1]; - }, - - config: makeConfig, - - tags() { - const rpcPortCandidate = faker.random.number({ min: 4000, max: 4999 }); - return { - port: rpcPortCandidate === this.serfPort ? rpcPortCandidate + 1 : rpcPortCandidate, - dc: faker.helpers.randomize(DATACENTERS), - }; - }, -}); - -function makeConfig() { - return { + config: { Version: { Version: '1.1.0', VersionMetadata: 'ent', VersionPrerelease: 'dev', }, + }, + + member: () => { + const name = generateName(); + const serfPort = faker.random.number({ min: 4000, max: 4999 }); + return { + Name: name, + Port: serfPort, + Status: faker.helpers.randomize(AGENT_STATUSES), + Address: generateAddress(name), + Tags: generateTags(serfPort), + }; + }, +}); + +function generateName() { + return `nomad@${faker.random.boolean() ? faker.internet.ip() : faker.internet.ipv6()}`; +} + +function generateAddress(name) { + return name.split('@')[1]; +} + +function generateTags(serfPort) { + const rpcPortCandidate = faker.random.number({ min: 4000, max: 4999 }); + return { + port: rpcPortCandidate === serfPort ? rpcPortCandidate + 1 : rpcPortCandidate, + dc: faker.helpers.randomize(DATACENTERS), }; } diff --git a/ui/mirage/serializers/agent.js b/ui/mirage/serializers/agent.js new file mode 100644 index 000000000..13abd2b12 --- /dev/null +++ b/ui/mirage/serializers/agent.js @@ -0,0 +1,10 @@ +import ApplicationSerializer from './application'; + +export default ApplicationSerializer.extend({ + keyForAttribute(str) { + if (str === 'config' || str === 'member') { + return str; + } + return ApplicationSerializer.prototype.keyForAttribute.apply(this, arguments); + }, +});