ui: Send kind query to the service-topology endpoint (#8909)

This commit is contained in:
Kenia 2020-10-09 14:39:16 -04:00 committed by GitHub
parent ef2b6f848e
commit aa4618312b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 29 additions and 16 deletions

View File

@ -1,12 +1,12 @@
import Adapter from './application';
// TODO: Update to use this.formatDatacenter()
export default Adapter.extend({
requestForQueryRecord: function(request, { dc, ns, index, id, uri }) {
requestForQueryRecord: function(request, { dc, ns, index, id, uri, kind }) {
if (typeof id === 'undefined') {
throw new Error('You must specify an id');
}
return request`
GET /v1/internal/ui/service-topology/${id}?${{ dc }}
GET /v1/internal/ui/service-topology/${id}?${{ dc, kind }}
X-Request-ID: ${uri}
${{

View File

@ -39,6 +39,10 @@ export default Route.extend({
});
})
.then(model => {
let kind = get(model, 'items.firstObject.Service.Kind');
if (typeof kind === 'undefined') {
kind = '';
}
return ['mesh-gateway', 'terminating-gateway'].includes(
get(model, 'items.firstObject.Service.Kind')
)
@ -46,7 +50,7 @@ export default Route.extend({
: hash({
...model,
topology: this.data.source(
uri => uri`/${nspace}/${dc}/topology/for-service/${params.name}`
uri => uri`/${nspace}/${dc}/topology/${params.name}/${kind}`
),
});
});

View File

@ -105,14 +105,6 @@ export default Service.extend({
break;
}
break;
case 'topology':
[method, slug] = rest;
switch (method) {
case 'for-service':
find = configuration => repo.findBySlug(slug, dc, nspace, configuration);
break;
}
break;
case 'sessions':
[method, ...slug] = rest;
switch (method) {
@ -138,6 +130,10 @@ export default Service.extend({
find = configuration =>
repo.findInstanceBySlug(rest[0], rest[1], rest[2], dc, nspace, configuration);
break;
case 'topology':
// id, service kind
find = configuration => repo.findBySlug(rest[0], rest[1], dc, nspace, configuration);
break;
case 'policy':
case 'kv':
case 'intention':

View File

@ -10,12 +10,22 @@ export default RepositoryService.extend({
getModelName: function() {
return modelName;
},
findBySlug: function(slug, dc, nspace, configuration = {}) {
findBySlug: function(slug, kind, dc, nspace, configuration = {}) {
const datacenter = this.dcs.peekOne(dc);
if (datacenter !== null && !get(datacenter, 'MeshEnabled')) {
return Promise.resolve();
}
return this._super(...arguments).catch(e => {
const query = {
dc: dc,
ns: nspace,
id: slug,
kind: kind,
};
if (typeof configuration.cursor !== 'undefined') {
query.index = configuration.cursor;
query.uri = configuration.uri;
}
return this.store.queryRecord(this.getModelName(), query).catch(e => {
const code = get(e, 'errors.firstObject.status');
const body = get(e, 'errors.firstObject.detail').trim();
switch (code) {

View File

@ -7,13 +7,15 @@ module('Integration | Adapter | topology', function(hooks) {
setupTest(hooks);
const dc = 'dc-1';
const id = 'slug';
const kind = '';
test('requestForQueryRecord returns the correct url/method', function(assert) {
const adapter = this.owner.lookup('adapter:topology');
const client = this.owner.lookup('service:client/http');
const expected = `GET /v1/internal/ui/service-topology/${id}?dc=${dc}`;
const expected = `GET /v1/internal/ui/service-topology/${id}?dc=${dc}&kind=${kind}`;
const actual = adapter.requestForQueryRecord(client.requestParams.bind(client), {
dc: dc,
id: id,
kind: kind,
});
assert.equal(`${actual.method} ${actual.url}`, expected);
});

View File

@ -7,18 +7,19 @@ moduleFor('service:repository/topology', 'Integration | Repository | topology',
});
const dc = 'dc-1';
const id = 'slug';
const kind = '';
test('findBySlug returns the correct data for item endpoint', function(assert) {
return repo(
'Service',
'findBySlug',
this.subject(),
function retrieveStub(stub) {
return stub(`/v1/internal/ui/service-topology/${id}?dc=${dc}`, {
return stub(`/v1/internal/ui/service-topology/${id}?dc=${dc}&${kind}`, {
CONSUL_DISCOVERY_CHAIN_COUNT: 1,
});
},
function performTest(service) {
return service.findBySlug(id, dc);
return service.findBySlug(id, kind, dc);
},
function performAssertion(actual, expected) {
const result = expected(function(payload) {