diff --git a/ui/app/controllers/nodes.js b/ui/app/controllers/clients.js similarity index 100% rename from ui/app/controllers/nodes.js rename to ui/app/controllers/clients.js diff --git a/ui/app/controllers/nodes/node.js b/ui/app/controllers/clients/client.js similarity index 100% rename from ui/app/controllers/nodes/node.js rename to ui/app/controllers/clients/client.js diff --git a/ui/app/controllers/nodes/index.js b/ui/app/controllers/clients/index.js similarity index 82% rename from ui/app/controllers/nodes/index.js rename to ui/app/controllers/clients/index.js index 4e3a2b7f67dd..eedb9ebe8dfd 100644 --- a/ui/app/controllers/nodes/index.js +++ b/ui/app/controllers/clients/index.js @@ -5,7 +5,7 @@ import Searchable from 'nomad-ui/mixins/searchable'; const { Controller, computed, inject } = Ember; export default Controller.extend(Sortable, Searchable, { - nodesController: inject.controller('nodes'), + clientsController: inject.controller('clients'), nodes: computed.alias('model.nodes'), agents: computed.alias('model.agents'), @@ -29,11 +29,11 @@ export default Controller.extend(Sortable, Searchable, { listToSearch: computed.alias('listSorted'), sortedNodes: computed.alias('listSearched'), - isForbidden: computed.alias('nodesController.isForbidden'), + isForbidden: computed.alias('clientsController.isForbidden'), actions: { gotoNode(node) { - this.transitionToRoute('nodes.node', node); + this.transitionToRoute('clients.client', node); }, }, }); diff --git a/ui/app/router.js b/ui/app/router.js index c710a728504c..367e311e2b8a 100644 --- a/ui/app/router.js +++ b/ui/app/router.js @@ -16,8 +16,8 @@ Router.map(function() { }); }); - this.route('nodes', function() { - this.route('node', { path: '/:node_id' }); + this.route('clients', function() { + this.route('client', { path: '/:node_id' }); }); this.route('servers', function() { diff --git a/ui/app/routes/nodes.js b/ui/app/routes/clients.js similarity index 100% rename from ui/app/routes/nodes.js rename to ui/app/routes/clients.js diff --git a/ui/app/routes/nodes/node.js b/ui/app/routes/clients/client.js similarity index 100% rename from ui/app/routes/nodes/node.js rename to ui/app/routes/clients/client.js diff --git a/ui/app/templates/allocations/allocation.hbs b/ui/app/templates/allocations/allocation.hbs index b95608750249..5d9a537900a6 100644 --- a/ui/app/templates/allocations/allocation.hbs +++ b/ui/app/templates/allocations/allocation.hbs @@ -2,7 +2,7 @@

Allocation {{model.name}}

For job {{#link-to "jobs.job" model.job (query-params jobNamespace=model.job.namespace.id)}}{{model.job.name}}{{/link-to}} - on node {{#link-to "nodes.node" model.node}}{{model.node.shortId}}{{/link-to}} + on client {{#link-to "clients.client" model.node}}{{model.node.shortId}}{{/link-to}}

diff --git a/ui/app/templates/nodes.hbs b/ui/app/templates/clients.hbs similarity index 100% rename from ui/app/templates/nodes.hbs rename to ui/app/templates/clients.hbs diff --git a/ui/app/templates/nodes/node.hbs b/ui/app/templates/clients/client.hbs similarity index 98% rename from ui/app/templates/nodes/node.hbs rename to ui/app/templates/clients/client.hbs index 0b13a4920dbc..a4f10bd3a18a 100644 --- a/ui/app/templates/nodes/node.hbs +++ b/ui/app/templates/clients/client.hbs @@ -1,5 +1,5 @@ {{#global-header class="page-header"}} - {{#link-to "nodes" class="breadcrumb"}}Nodes{{/link-to}} + {{#link-to "clients" class="breadcrumb"}}Clients{{/link-to}} {{model.shortId}} {{/global-header}} {{#gutter-menu class="page-body"}} diff --git a/ui/app/templates/nodes/index.hbs b/ui/app/templates/clients/index.hbs similarity index 98% rename from ui/app/templates/nodes/index.hbs rename to ui/app/templates/clients/index.hbs index 296caaf7bba2..b6f0c7275659 100644 --- a/ui/app/templates/nodes/index.hbs +++ b/ui/app/templates/clients/index.hbs @@ -1,5 +1,5 @@ {{#global-header class="page-header"}} - Nodes + Clients {{/global-header}} {{#gutter-menu class="page-body"}}
@@ -8,7 +8,7 @@ {{else}} {{#if nodes.length}}
-
{{search-box searchTerm=(mut searchTerm) placeholder="Search nodes..."}}
+
{{search-box searchTerm=(mut searchTerm) placeholder="Search clients..."}}
{{/if}} {{#list-pagination diff --git a/ui/app/templates/nodes/loading.hbs b/ui/app/templates/clients/loading.hbs similarity index 95% rename from ui/app/templates/nodes/loading.hbs rename to ui/app/templates/clients/loading.hbs index d247848fd0dc..7014a5a9d56f 100644 --- a/ui/app/templates/nodes/loading.hbs +++ b/ui/app/templates/clients/loading.hbs @@ -1,5 +1,5 @@ {{#global-header class="page-header"}} - Nodes + Clients {{/global-header}} {{#gutter-menu class="page-body"}}
{{partial "partials/loading-spinner"}}
diff --git a/ui/app/templates/components/allocation-row.hbs b/ui/app/templates/components/allocation-row.hbs index 5d3000e2ae5a..d61032cc3de2 100644 --- a/ui/app/templates/components/allocation-row.hbs +++ b/ui/app/templates/components/allocation-row.hbs @@ -10,7 +10,7 @@ {{#if (eq context "job")}} {{allocation.jobVersion}} - {{#link-to "nodes.node" allocation.node}}{{allocation.node.shortId}}{{/link-to}} + {{#link-to "clients.client" allocation.node}}{{allocation.node.shortId}}{{/link-to}} {{else if (eq context "node")}} {{#if (or allocation.job.isPending allocation.job.isReloading)}} diff --git a/ui/app/templates/components/client-node-row.hbs b/ui/app/templates/components/client-node-row.hbs index 7eedfd4b5c77..b6eb25413dc9 100644 --- a/ui/app/templates/components/client-node-row.hbs +++ b/ui/app/templates/components/client-node-row.hbs @@ -1,4 +1,4 @@ -{{#link-to "nodes.node" node.id class="is-primary"}}{{node.shortId}}{{/link-to}} +{{#link-to "clients.client" node.id class="is-primary"}}{{node.shortId}}{{/link-to}} {{node.name}} {{node.status}} {{node.address}} diff --git a/ui/app/templates/components/gutter-menu.hbs b/ui/app/templates/components/gutter-menu.hbs index 43274d67d2ba..765b53ab9409 100644 --- a/ui/app/templates/components/gutter-menu.hbs +++ b/ui/app/templates/components/gutter-menu.hbs @@ -35,7 +35,7 @@ Cluster

diff --git a/ui/app/templates/jobs/job/task-group.hbs b/ui/app/templates/jobs/job/task-group.hbs index 51c9dc48ac29..3d94ee812600 100644 --- a/ui/app/templates/jobs/job/task-group.hbs +++ b/ui/app/templates/jobs/job/task-group.hbs @@ -79,7 +79,7 @@ {{#t.sort-by prop="name"}}Name{{/t.sort-by}} {{#t.sort-by prop="statusIndex"}}Status{{/t.sort-by}} {{#t.sort-by prop="jobVersion"}}Version{{/t.sort-by}} - {{#t.sort-by prop="node.shortId"}}Node{{/t.sort-by}} + {{#t.sort-by prop="node.shortId"}}Client{{/t.sort-by}} CPU Memory {{/t.head}} diff --git a/ui/tests/acceptance/allocation-detail-test.js b/ui/tests/acceptance/allocation-detail-test.js index a310b8a86794..213ed47d2a4c 100644 --- a/ui/tests/acceptance/allocation-detail-test.js +++ b/ui/tests/acceptance/allocation-detail-test.js @@ -49,7 +49,7 @@ test('/allocation/:id should name the allocation and link to the corresponding j }); andThen(() => { - assert.equal(currentURL(), `/nodes/${node.id}`, 'Node link navigates to the node'); + assert.equal(currentURL(), `/clients/${node.id}`, 'Client link navigates to the client'); }); }); diff --git a/ui/tests/acceptance/application-errors-test.js b/ui/tests/acceptance/application-errors-test.js index 78373bd7ef7c..b5e2e636e475 100644 --- a/ui/tests/acceptance/application-errors-test.js +++ b/ui/tests/acceptance/application-errors-test.js @@ -13,7 +13,7 @@ moduleForAcceptance('Acceptance | application errors ', { test('transitioning away from an error page resets the global error', function(assert) { server.pretender.get('/v1/nodes', () => [500, {}, null]); - visit('/nodes'); + visit('/clients'); andThen(() => { assert.ok(find('.error-message'), 'Application has errored'); diff --git a/ui/tests/acceptance/client-detail-test.js b/ui/tests/acceptance/client-detail-test.js index 189b3bf92be8..993277b8e1b2 100644 --- a/ui/tests/acceptance/client-detail-test.js +++ b/ui/tests/acceptance/client-detail-test.js @@ -20,11 +20,11 @@ moduleForAcceptance('Acceptance | client detail', { }, }); -test('/nodes/:id should have a breadrcumb trail linking back to nodes', function(assert) { - visit(`/nodes/${node.id}`); +test('/clients/:id should have a breadrcumb trail linking back to clients', function(assert) { + visit(`/clients/${node.id}`); andThen(() => { - assert.equal(findAll('.breadcrumb')[0].textContent, 'Nodes', 'First breadcrumb says nodes'); + assert.equal(findAll('.breadcrumb')[0].textContent, 'Clients', 'First breadcrumb says clients'); assert.equal( findAll('.breadcrumb')[1].textContent, node.id.split('-')[0], @@ -37,12 +37,12 @@ test('/nodes/:id should have a breadrcumb trail linking back to nodes', function }); andThen(() => { - assert.equal(currentURL(), '/nodes', 'First breadcrumb links back to nodes'); + assert.equal(currentURL(), '/clients', 'First breadcrumb links back to clients'); }); }); -test('/nodes/:id should list immediate details for the node in the title', function(assert) { - visit(`/nodes/${node.id}`); +test('/clients/:id should list immediate details for the node in the title', function(assert) { + visit(`/clients/${node.id}`); andThen(() => { assert.ok(find('.title').textContent.includes(node.name), 'Title includes name'); @@ -54,8 +54,8 @@ test('/nodes/:id should list immediate details for the node in the title', funct }); }); -test('/nodes/:id should list additional detail for the node below the title', function(assert) { - visit(`/nodes/${node.id}`); +test('/clients/:id should list additional detail for the node below the title', function(assert) { + visit(`/clients/${node.id}`); andThen(() => { assert.equal( @@ -80,10 +80,10 @@ test('/nodes/:id should list additional detail for the node below the title', fu }); }); -test('/nodes/:id should list all allocations on the node', function(assert) { +test('/clients/:id should list all allocations on the node', function(assert) { const allocationsCount = server.db.allocations.where({ nodeId: node.id }).length; - visit(`/nodes/${node.id}`); + visit(`/clients/${node.id}`); andThen(() => { assert.equal( @@ -110,7 +110,7 @@ test('each allocation should have high-level details for the allocation', functi const cpuUsed = tasks.reduce((sum, task) => sum + task.Resources.CPU, 0); const memoryUsed = tasks.reduce((sum, task) => sum + task.Resources.MemoryMB, 0); - visit(`/nodes/${node.id}`); + visit(`/clients/${node.id}`); andThen(() => { const allocationRow = $(findAll('.allocations tbody tr')[0]); @@ -199,10 +199,10 @@ test('each allocation should have high-level details for the allocation', functi test('each allocation should show job information even if the job is incomplete and already in the store', function( assert ) { - // First, visit nodes to load the allocations for each visible node. + // First, visit clients to load the allocations for each visible node. // Don't load the job belongsTo of the allocation! Leave it unfulfilled. - visit('/nodes'); + visit('/clients'); // Then, visit jobs to load all jobs, which should implicitly fulfill // the job belongsTo of each allocation pointed at each job. @@ -213,7 +213,7 @@ test('each allocation should show job information even if the job is incomplete // present. This will require reloading the job, since task groups aren't a // part of the jobs list response. - visit(`/nodes/${node.id}`); + visit(`/clients/${node.id}`); andThen(() => { const allocationRow = $(findAll('.allocations tbody tr')[0]); @@ -245,7 +245,7 @@ test('each allocation should link to the allocation detail page', function(asser .sortBy('modifyIndex') .reverse()[0]; - visit(`/nodes/${node.id}`); + visit(`/clients/${node.id}`); andThen(() => { click($('.allocations tbody tr:eq(0) td:eq(0) a').get(0)); @@ -261,7 +261,7 @@ test('each allocation should link to the allocation detail page', function(asser }); test('each allocation should link to the job the allocation belongs to', function(assert) { - visit(`/nodes/${node.id}`); + visit(`/clients/${node.id}`); const allocation = server.db.allocations.where({ nodeId: node.id })[0]; const job = server.db.jobs.find(allocation.jobId); @@ -279,8 +279,8 @@ test('each allocation should link to the job the allocation belongs to', functio }); }); -test('/nodes/:id should list all attributes for the node', function(assert) { - visit(`/nodes/${node.id}`); +test('/clients/:id should list all attributes for the node', function(assert) { + visit(`/clients/${node.id}`); andThen(() => { assert.ok(find('.attributes-table'), 'Attributes table is on the page'); @@ -290,7 +290,7 @@ test('/nodes/:id should list all attributes for the node', function(assert) { test('when the node is not found, an error message is shown, but the URL persists', function( assert ) { - visit('/nodes/not-a-real-node'); + visit('/clients/not-a-real-node'); andThen(() => { assert.equal( @@ -298,7 +298,7 @@ test('when the node is not found, an error message is shown, but the URL persist '/v1/node/not-a-real-node', 'A request to the non-existent node is made' ); - assert.equal(currentURL(), '/nodes/not-a-real-node', 'The URL persists'); + assert.equal(currentURL(), '/clients/not-a-real-node', 'The URL persists'); assert.ok(find('.error-message'), 'Error message is shown'); assert.equal( find('.error-message .title').textContent, diff --git a/ui/tests/acceptance/nodes-list-test.js b/ui/tests/acceptance/nodes-list-test.js index 7a6bffdde497..c78d83b4bc63 100644 --- a/ui/tests/acceptance/nodes-list-test.js +++ b/ui/tests/acceptance/nodes-list-test.js @@ -12,9 +12,9 @@ function minimumSetup() { server.createList('agent', 1); } -moduleForAcceptance('Acceptance | nodes list'); +moduleForAcceptance('Acceptance | clients list'); -test('/nodes should list one page of clients', function(assert) { +test('/clients should list one page of clients', function(assert) { // Make sure to make more nodes than 1 page to assert that pagination is working const nodesCount = 10; const pageSize = 8; @@ -22,7 +22,7 @@ test('/nodes should list one page of clients', function(assert) { server.createList('node', nodesCount); server.createList('agent', 1); - visit('/nodes'); + visit('/clients'); andThen(() => { assert.equal(findAll('.client-node-row').length, pageSize); @@ -34,7 +34,7 @@ test('/nodes should list one page of clients', function(assert) { assert.equal( $(`.client-node-row:eq(${nodeNumber}) td:eq(0)`).text(), sortedNodes[nodeNumber].id.split('-')[0], - 'Nodes are ordered' + 'Clients are ordered' ); } }); @@ -44,7 +44,7 @@ test('each client record should show high-level info of the client', function(as minimumSetup(); const node = server.db.nodes[0]; - visit('/nodes'); + visit('/clients'); andThen(() => { const nodeRow = $(findAll('.client-node-row')[0]); @@ -65,20 +65,20 @@ test('each client should link to the client detail page', function(assert) { minimumSetup(); const node = server.db.nodes[0]; - visit('/nodes'); + visit('/clients'); andThen(() => { click(findAll('.client-node-row')[0]); }); andThen(() => { - assert.equal(currentURL(), `/nodes/${node.id}`); + assert.equal(currentURL(), `/clients/${node.id}`); }); }); test('when there are no clients, there is an empty message', function(assert) { server.createList('agent', 1); - visit('/nodes'); + visit('/clients'); andThen(() => { assert.ok(find('.empty-message')); @@ -92,7 +92,7 @@ test('when there are clients, but no matches for a search term, there is an empt server.createList('agent', 1); server.create('node', { name: 'node' }); - visit('/nodes'); + visit('/clients'); andThen(() => { fillIn('.search-box input', 'client'); @@ -111,7 +111,7 @@ test('when accessing clients is forbidden, show a message with a link to the tok server.create('node', { name: 'node' }); server.pretender.get('/v1/nodes', () => [403, {}, null]); - visit('/nodes'); + visit('/clients'); andThen(() => { assert.equal(find('.empty-message-headline').textContent, 'Not Authorized'); diff --git a/ui/tests/acceptance/task-group-detail-test.js b/ui/tests/acceptance/task-group-detail-test.js index e8f7e50919af..46de34968cbf 100644 --- a/ui/tests/acceptance/task-group-detail-test.js +++ b/ui/tests/acceptance/task-group-detail-test.js @@ -197,7 +197,7 @@ test('each allocation should show basic information about the allocation', funct click(allocationRow.find('td:eq(5) a').get(0)); andThen(() => { - assert.equal(currentURL(), `/nodes/${allocation.nodeId}`, 'Node links to node page'); + assert.equal(currentURL(), `/clients/${allocation.nodeId}`, 'Node links to node page'); }); }); diff --git a/ui/tests/acceptance/token-test.js b/ui/tests/acceptance/token-test.js index d32d38b991c1..2e62bd9e14d5 100644 --- a/ui/tests/acceptance/token-test.js +++ b/ui/tests/acceptance/token-test.js @@ -43,7 +43,7 @@ skip('the X-Nomad-Token header gets sent with requests once it is set', function let requestPosition = 0; visit(`/jobs/${job.id}`); - visit(`/nodes/${node.id}`); + visit(`/clients/${node.id}`); andThen(() => { assert.ok(server.pretender.handledRequests.length > 1, 'Requests have been made'); @@ -62,7 +62,7 @@ skip('the X-Nomad-Token header gets sent with requests once it is set', function }); visit(`/jobs/${job.id}`); - visit(`/nodes/${node.id}`); + visit(`/clients/${node.id}`); andThen(() => { const newRequests = server.pretender.handledRequests.slice(requestPosition); diff --git a/website/source/assets/images/guide-ui-client-detail.png b/website/source/assets/images/guide-ui-client-detail.png index 5b37c9f2041f..915e568ea35b 100644 Binary files a/website/source/assets/images/guide-ui-client-detail.png and b/website/source/assets/images/guide-ui-client-detail.png differ diff --git a/website/source/assets/images/guide-ui-clients-list.png b/website/source/assets/images/guide-ui-clients-list.png index 51d379095bf7..e7340cdfa046 100644 Binary files a/website/source/assets/images/guide-ui-clients-list.png and b/website/source/assets/images/guide-ui-clients-list.png differ diff --git a/website/source/assets/images/guide-ui-server-detail.png b/website/source/assets/images/guide-ui-server-detail.png index cf94ec4c9461..e6149e4bc554 100644 Binary files a/website/source/assets/images/guide-ui-server-detail.png and b/website/source/assets/images/guide-ui-server-detail.png differ