0505ebd04c
* ui: Ensure configuration is passed through to findInstanceBySlug Due to the addition of namespace support, this arguments passed to this method have been increased. Whilst the nspace support continues ot work here, the configuration for blocking queries is never passed through. This results in a 2 second poll rather than a blocking query. This commit fixes that * ui: Add a basic test to check the number of arguments passed through
73 lines
2.4 KiB
JavaScript
73 lines
2.4 KiB
JavaScript
import RepositoryService from 'consul-ui/services/repository';
|
|
import { get, set } from '@ember/object';
|
|
const modelName = 'service';
|
|
export default RepositoryService.extend({
|
|
getModelName: function() {
|
|
return modelName;
|
|
},
|
|
findBySlug: function(slug, dc) {
|
|
return this._super(...arguments).then(function(item) {
|
|
// TODO: Move this to the Serializer
|
|
const nodes = get(item, 'Nodes');
|
|
if (nodes.length === 0) {
|
|
// TODO: Add an store.error("404", "message") or similar
|
|
// or move all this to serializer
|
|
const e = new Error();
|
|
e.errors = [
|
|
{
|
|
status: '404',
|
|
title: 'Not found',
|
|
},
|
|
];
|
|
throw e;
|
|
}
|
|
const service = get(nodes, 'firstObject');
|
|
// TODO: Use [...new Set()] instead of uniq
|
|
const tags = nodes
|
|
.reduce(function(prev, item) {
|
|
return prev.concat(get(item, 'Service.Tags') || []);
|
|
}, [])
|
|
.uniq();
|
|
set(service, 'Tags', tags);
|
|
set(service, 'Nodes', nodes);
|
|
set(service, 'meta', get(item, 'meta'));
|
|
set(service, 'Namespace', get(item, 'Namespace'));
|
|
return service;
|
|
});
|
|
},
|
|
findInstanceBySlug: function(id, node, slug, dc, nspace, configuration) {
|
|
return this.findBySlug(slug, dc, nspace, configuration).then(function(item) {
|
|
// TODO: Move this to the Serializer
|
|
// Loop through all the service instances and pick out the one
|
|
// that has the same service id AND node name
|
|
// node names are unique per datacenter
|
|
const i = item.Nodes.findIndex(function(item) {
|
|
return item.Service.ID === id && item.Node.Node === node;
|
|
});
|
|
if (i !== -1) {
|
|
const service = item.Nodes[i].Service;
|
|
service.Node = item.Nodes[i].Node;
|
|
service.ServiceChecks = item.Nodes[i].Checks.filter(function(item) {
|
|
return item.ServiceID != '';
|
|
});
|
|
service.NodeChecks = item.Nodes[i].Checks.filter(function(item) {
|
|
return item.ServiceID == '';
|
|
});
|
|
set(service, 'meta', get(item, 'meta'));
|
|
set(service, 'Namespace', get(item, 'Namespace'));
|
|
return service;
|
|
}
|
|
// TODO: Add an store.error("404", "message") or similar
|
|
// or move all this to serializer
|
|
const e = new Error();
|
|
e.errors = [
|
|
{
|
|
status: '404',
|
|
title: 'Unable to find instance',
|
|
},
|
|
];
|
|
throw e;
|
|
});
|
|
},
|
|
});
|