mirror of https://github.com/status-im/consul.git
add external-services method to peer repo
This commit is contained in:
parent
3559549db7
commit
34ec12202d
|
@ -1,6 +1,10 @@
|
||||||
import Serializer from './application';
|
import Serializer from './application';
|
||||||
import { PRIMARY_KEY, SLUG_KEY } from 'consul-ui/models/service';
|
import { PRIMARY_KEY, SLUG_KEY } from 'consul-ui/models/service';
|
||||||
import { get } from '@ember/object';
|
import { get } from '@ember/object';
|
||||||
|
import {
|
||||||
|
HEADERS_NAMESPACE as HTTP_HEADERS_NAMESPACE,
|
||||||
|
HEADERS_PARTITION as HTTP_HEADERS_PARTITION,
|
||||||
|
} from 'consul-ui/utils/http/consul';
|
||||||
|
|
||||||
export default class ServiceSerializer extends Serializer {
|
export default class ServiceSerializer extends Serializer {
|
||||||
primaryKey = PRIMARY_KEY;
|
primaryKey = PRIMARY_KEY;
|
||||||
|
@ -13,6 +17,54 @@ export default class ServiceSerializer extends Serializer {
|
||||||
// Services and proxies all come together in the same list. Here we
|
// Services and proxies all come together in the same list. Here we
|
||||||
// map the proxies to their related services on a Service.Proxy
|
// map the proxies to their related services on a Service.Proxy
|
||||||
// property for easy access later on
|
// property for easy access later on
|
||||||
|
return cb(headers, this._transformServicesPayload(body));
|
||||||
|
}),
|
||||||
|
query
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
respondForQueryRecord(respond, query) {
|
||||||
|
// Name is added here from the query, which is used to make the uid
|
||||||
|
// Datacenter gets added in the ApplicationSerializer
|
||||||
|
return super.respondForQueryRecord(
|
||||||
|
(cb) =>
|
||||||
|
respond((headers, body) => {
|
||||||
|
return cb(headers, {
|
||||||
|
Name: query.id,
|
||||||
|
Namespace: get(body, 'firstObject.Service.Namespace'),
|
||||||
|
Nodes: body,
|
||||||
|
});
|
||||||
|
}),
|
||||||
|
query
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
createJSONApiDocumentFromServicesPayload(headers, responseBody, dc) {
|
||||||
|
const { primaryKey, slugKey, fingerprint } = this;
|
||||||
|
|
||||||
|
const transformedBody = this._transformServicesPayload(responseBody);
|
||||||
|
const attributes = transformedBody.map(
|
||||||
|
fingerprint(
|
||||||
|
primaryKey,
|
||||||
|
slugKey,
|
||||||
|
dc,
|
||||||
|
headers[HTTP_HEADERS_NAMESPACE],
|
||||||
|
headers[HTTP_HEADERS_PARTITION]
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
return {
|
||||||
|
data: attributes.map((attr) => {
|
||||||
|
return {
|
||||||
|
id: attr.uid,
|
||||||
|
type: 'service',
|
||||||
|
attributes: attr,
|
||||||
|
};
|
||||||
|
}),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
_transformServicesPayload(body) {
|
||||||
const services = {};
|
const services = {};
|
||||||
body
|
body
|
||||||
.filter(function (item) {
|
.filter(function (item) {
|
||||||
|
@ -36,26 +88,6 @@ export default class ServiceSerializer extends Serializer {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
return body;
|
||||||
return cb(headers, body);
|
|
||||||
}),
|
|
||||||
query
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
respondForQueryRecord(respond, query) {
|
|
||||||
// Name is added here from the query, which is used to make the uid
|
|
||||||
// Datacenter gets added in the ApplicationSerializer
|
|
||||||
return super.respondForQueryRecord(
|
|
||||||
(cb) =>
|
|
||||||
respond((headers, body) => {
|
|
||||||
return cb(headers, {
|
|
||||||
Name: query.id,
|
|
||||||
Namespace: get(body, 'firstObject.Service.Namespace'),
|
|
||||||
Nodes: body,
|
|
||||||
});
|
|
||||||
}),
|
|
||||||
query
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import RepositoryService from 'consul-ui/services/repository';
|
import RepositoryService from 'consul-ui/services/repository';
|
||||||
import dataSource from 'consul-ui/decorators/data-source';
|
import dataSource from 'consul-ui/decorators/data-source';
|
||||||
|
import { inject as service } from '@ember/service';
|
||||||
|
|
||||||
function normalizePeerPayload(peerPayload, dc, partition) {
|
function normalizePeerPayload(peerPayload, dc, partition) {
|
||||||
const {
|
const {
|
||||||
|
@ -18,10 +19,31 @@ function normalizePeerPayload(peerPayload, dc, partition) {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
export default class PeerService extends RepositoryService {
|
export default class PeerService extends RepositoryService {
|
||||||
|
@service store;
|
||||||
|
|
||||||
getModelName() {
|
getModelName() {
|
||||||
return 'peer';
|
return 'peer';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@dataSource('/:partition/:ns/:ds/exported-services/:name')
|
||||||
|
async fetchExportedServices({ dc, ns, partition, name }, configuration, request) {
|
||||||
|
return (
|
||||||
|
await request`
|
||||||
|
GET /v1/internal/ui/exported-services
|
||||||
|
|
||||||
|
${{
|
||||||
|
peer: name,
|
||||||
|
}}
|
||||||
|
`
|
||||||
|
)((headers, body, cache) => {
|
||||||
|
const serviceSerializer = this.store.serializerFor('service');
|
||||||
|
|
||||||
|
return this.store.push(
|
||||||
|
serviceSerializer.createJSONApiDocumentFromServicesPayload(headers, body, dc)
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
@dataSource('/:partition/:ns/:dc/peering/token-for/:name')
|
@dataSource('/:partition/:ns/:dc/peering/token-for/:name')
|
||||||
async fetchToken({ dc, ns, partition, name }, configuration, request) {
|
async fetchToken({ dc, ns, partition, name }, configuration, request) {
|
||||||
return (
|
return (
|
||||||
|
|
Loading…
Reference in New Issue