mirror of
https://github.com/status-im/consul.git
synced 2025-01-17 01:01:14 +00:00
2838f7a2e9
* ui: Reduce discovery-chain log spam Currently the only way that the UI can know whether connect is enabled or not is whether we get 500 errors from certain endpoints. One of these endpoints we already use, so aswell as recovering from a 500 error, we also remember that connect is disabled for the rest of the page 'session' (so until the page is refreshed), and make no further http requests to the endpoint for that specific datacenter. This means that log spam is reduced to only 1 log per page refresh/dc instead of 1 log per service navigation. Longer term we'll need some way to dynamically discover whether connect is enabled per datacenter without relying on something that will add error logs to consul.
93 lines
2.8 KiB
JavaScript
93 lines
2.8 KiB
JavaScript
import Service, { inject as service } from '@ember/service';
|
|
import { assert } from '@ember/debug';
|
|
import { typeOf } from '@ember/utils';
|
|
import { get } from '@ember/object';
|
|
|
|
export default Service.extend({
|
|
getModelName: function() {
|
|
assert('RepositoryService.getModelName should be overridden', false);
|
|
},
|
|
getPrimaryKey: function() {
|
|
assert('RepositoryService.getPrimaryKey should be overridden', false);
|
|
},
|
|
getSlugKey: function() {
|
|
assert('RepositoryService.getSlugKey should be overridden', false);
|
|
},
|
|
//
|
|
store: service('store'),
|
|
shouldReconcile: function(method) {
|
|
return true;
|
|
},
|
|
reconcile: function(meta = {}) {
|
|
// unload anything older than our current sync date/time
|
|
if (typeof meta.date !== 'undefined') {
|
|
const checkNspace = meta.nspace !== '';
|
|
this.store.peekAll(this.getModelName()).forEach(item => {
|
|
const dc = get(item, 'Datacenter');
|
|
if (dc === meta.dc) {
|
|
if (checkNspace) {
|
|
const nspace = get(item, 'Namespace');
|
|
if (nspace !== meta.namespace) {
|
|
return;
|
|
}
|
|
}
|
|
const date = get(item, 'SyncTime');
|
|
if (typeof date !== 'undefined' && date != meta.date) {
|
|
this.store.unloadRecord(item);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
},
|
|
peekOne: function(id) {
|
|
return this.store.peekRecord(this.getModelName(), id);
|
|
},
|
|
findAllByDatacenter: function(dc, nspace, configuration = {}) {
|
|
const query = {
|
|
dc: dc,
|
|
ns: nspace,
|
|
};
|
|
if (typeof configuration.cursor !== 'undefined') {
|
|
query.index = configuration.cursor;
|
|
}
|
|
return this.store.query(this.getModelName(), query);
|
|
},
|
|
findBySlug: function(slug, dc, nspace, configuration = {}) {
|
|
const query = {
|
|
dc: dc,
|
|
ns: nspace,
|
|
id: slug,
|
|
};
|
|
if (typeof configuration.cursor !== 'undefined') {
|
|
query.index = configuration.cursor;
|
|
}
|
|
return this.store.queryRecord(this.getModelName(), query);
|
|
},
|
|
create: function(obj) {
|
|
// TODO: This should probably return a Promise
|
|
return this.store.createRecord(this.getModelName(), obj);
|
|
},
|
|
persist: function(item) {
|
|
return item.save();
|
|
},
|
|
remove: function(obj) {
|
|
let item = obj;
|
|
if (typeof obj.destroyRecord === 'undefined') {
|
|
item = obj.get('data');
|
|
}
|
|
// TODO: Change this to use vanilla JS
|
|
// I think this was originally looking for a plain object
|
|
// as opposed to an ember one
|
|
if (typeOf(item) === 'object') {
|
|
item = this.store.peekRecord(this.getModelName(), item[this.getPrimaryKey()]);
|
|
}
|
|
return item.destroyRecord().then(item => {
|
|
return this.store.unloadRecord(item);
|
|
});
|
|
},
|
|
invalidate: function() {
|
|
// TODO: This should probably return a Promise
|
|
this.store.unloadAll(this.getModelName());
|
|
},
|
|
});
|