mirror of https://github.com/status-im/consul.git
Allow configuring a datasource to poll instead of block (#8805)
This commit is contained in:
parent
5da640b287
commit
e4a0dcf10e
|
@ -107,10 +107,6 @@ export default Serializer.extend({
|
||||||
// say `normalizeQueryResponse`
|
// say `normalizeQueryResponse`
|
||||||
// TODO: consider creating a method for each one of the `normalize...Response` family
|
// TODO: consider creating a method for each one of the `normalize...Response` family
|
||||||
normalizeResponse: function(store, modelClass, payload, id, requestType) {
|
normalizeResponse: function(store, modelClass, payload, id, requestType) {
|
||||||
// Pick the meta/headers back off the payload and cleanup
|
|
||||||
// before we go through serializing
|
|
||||||
const headers = payload[HTTP_HEADERS_SYMBOL] || {};
|
|
||||||
delete payload[HTTP_HEADERS_SYMBOL];
|
|
||||||
const normalizedPayload = this.normalizePayload(payload, id, requestType);
|
const normalizedPayload = this.normalizePayload(payload, id, requestType);
|
||||||
// put the meta onto the response, here this is ok
|
// put the meta onto the response, here this is ok
|
||||||
// as JSON-API allows this and our specific data is now in
|
// as JSON-API allows this and our specific data is now in
|
||||||
|
@ -119,7 +115,7 @@ export default Serializer.extend({
|
||||||
// (which was the reason for the Symbol-like property earlier)
|
// (which was the reason for the Symbol-like property earlier)
|
||||||
// use a method modelled on ember-data methods so we have the opportunity to
|
// use a method modelled on ember-data methods so we have the opportunity to
|
||||||
// do this on a per-model level
|
// do this on a per-model level
|
||||||
const meta = this.normalizeMeta(store, modelClass, headers, normalizedPayload, id, requestType);
|
const meta = this.normalizeMeta(store, modelClass, normalizedPayload, id, requestType);
|
||||||
if (requestType !== 'query') {
|
if (requestType !== 'query') {
|
||||||
normalizedPayload.meta = meta;
|
normalizedPayload.meta = meta;
|
||||||
}
|
}
|
||||||
|
@ -148,7 +144,10 @@ export default Serializer.extend({
|
||||||
timestamp: function() {
|
timestamp: function() {
|
||||||
return new Date().getTime();
|
return new Date().getTime();
|
||||||
},
|
},
|
||||||
normalizeMeta: function(store, modelClass, headers, payload, id, requestType) {
|
normalizeMeta: function(store, modelClass, payload, id, requestType) {
|
||||||
|
// Pick the meta/headers back off the payload and cleanup
|
||||||
|
const headers = payload[HTTP_HEADERS_SYMBOL] || {};
|
||||||
|
delete payload[HTTP_HEADERS_SYMBOL];
|
||||||
const meta = {
|
const meta = {
|
||||||
cacheControl: headers[HTTP_HEADERS_CACHE_CONTROL.toLowerCase()],
|
cacheControl: headers[HTTP_HEADERS_CACHE_CONTROL.toLowerCase()],
|
||||||
cursor: headers[HTTP_HEADERS_INDEX.toLowerCase()],
|
cursor: headers[HTTP_HEADERS_INDEX.toLowerCase()],
|
||||||
|
@ -158,6 +157,9 @@ export default Serializer.extend({
|
||||||
if (typeof headers['x-range'] !== 'undefined') {
|
if (typeof headers['x-range'] !== 'undefined') {
|
||||||
meta.range = headers['x-range'];
|
meta.range = headers['x-range'];
|
||||||
}
|
}
|
||||||
|
if (typeof headers['refresh'] !== 'undefined') {
|
||||||
|
meta.interval = headers['refresh'] * 1000;
|
||||||
|
}
|
||||||
if (requestType === 'query') {
|
if (requestType === 'query') {
|
||||||
meta.date = this.timestamp();
|
meta.date = this.timestamp();
|
||||||
payload.forEach(function(item) {
|
payload.forEach(function(item) {
|
||||||
|
|
|
@ -70,7 +70,7 @@ const parseBody = function(strs, ...values) {
|
||||||
return [body, ...values];
|
return [body, ...values];
|
||||||
};
|
};
|
||||||
|
|
||||||
const CLIENT_HEADERS = [CACHE_CONTROL, 'X-Request-ID', 'X-Range'];
|
const CLIENT_HEADERS = [CACHE_CONTROL, 'X-Request-ID', 'X-Range', 'Refresh'];
|
||||||
export default Service.extend({
|
export default Service.extend({
|
||||||
dom: service('dom'),
|
dom: service('dom'),
|
||||||
connections: service('client/connections'),
|
connections: service('client/connections'),
|
||||||
|
|
|
@ -17,8 +17,9 @@ export default Service.extend({
|
||||||
return maybeCall(deleteCursor, ifNotBlocking(this.settings))().then(() => {
|
return maybeCall(deleteCursor, ifNotBlocking(this.settings))().then(() => {
|
||||||
return find(configuration)
|
return find(configuration)
|
||||||
.then(maybeCall(close, ifNotBlocking(this.settings)))
|
.then(maybeCall(close, ifNotBlocking(this.settings)))
|
||||||
.then(function(res) {
|
.then(function(res = {}) {
|
||||||
if (typeof get(res || {}, 'meta.cursor') === 'undefined') {
|
const meta = get(res, 'meta') || {};
|
||||||
|
if (typeof meta.cursor === 'undefined' && typeof meta.interval === 'undefined') {
|
||||||
close();
|
close();
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
|
|
|
@ -44,7 +44,7 @@ const throttle = function(configuration, prev, current) {
|
||||||
return new Promise(function(resolve, reject) {
|
return new Promise(function(resolve, reject) {
|
||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
resolve(obj);
|
resolve(obj);
|
||||||
}, pause);
|
}, configuration.interval || pause);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -104,6 +104,7 @@ export default function(EventSource, backoff = createErrorBackoff()) {
|
||||||
// along with cursor validation
|
// along with cursor validation
|
||||||
configuration.cursor = validateCursor(meta.cursor, configuration.cursor);
|
configuration.cursor = validateCursor(meta.cursor, configuration.cursor);
|
||||||
configuration.cacheControl = meta.cacheControl;
|
configuration.cacheControl = meta.cacheControl;
|
||||||
|
configuration.interval = meta.interval;
|
||||||
}
|
}
|
||||||
if ((configuration.cacheControl || '').indexOf('no-store') === -1) {
|
if ((configuration.cacheControl || '').indexOf('no-store') === -1) {
|
||||||
this.currentEvent = event;
|
this.currentEvent = event;
|
||||||
|
|
Loading…
Reference in New Issue