kibana-123
Version:
Kibana is an open source (Apache Licensed), browser based analytics and search dashboard for Elasticsearch. Kibana is a snap to setup and start using. Kibana strives to be easy to get started with, while also being flexible and powerful, just like Elastic
80 lines (66 loc) • 2.26 kB
JavaScript
import _ from 'lodash';
import RequestQueueProvider from '../_request_queue';
import FetchTheseProvider from './fetch_these';
import CallResponseHandlersProvider from './call_response_handlers';
import ReqStatusProvider from './req_status';
export default function fetchService(Private, Promise) {
const requestQueue = Private(RequestQueueProvider);
const fetchThese = Private(FetchTheseProvider);
const callResponseHandlers = Private(CallResponseHandlersProvider);
const INCOMPLETE = Private(ReqStatusProvider).INCOMPLETE;
function fetchQueued(strategy) {
const requests = requestQueue.getStartable(strategy);
if (!requests.length) return Promise.resolve();
else return fetchThese(requests);
}
this.fetchQueued = fetchQueued;
function fetchASource(source, strategy) {
const defer = Promise.defer();
fetchThese([
source._createRequest(defer)
]);
return defer.promise;
}
/**
* Fetch a single doc source
* @param {DocSource} source - The DocSource to request
* @async
*/
this.doc = fetchASource;
/**
* Fetch a single search source
* @param {SearchSource} source - The SearchSource to request
* @async
*/
this.search = fetchASource;
/**
* Fetch a list of requests
* @param {array} reqs - the requests to fetch
* @async
*/
this.these = fetchThese;
/**
* Send responses to a list of requests, used when requests
* should be skipped (like when a doc is updated with an index).
*
* This logic is a simplified version of what fetch_these does, and
* could have been added elsewhere, but I would rather the logic be
* here than outside the courier/fetch module.
*
* @param {array[Request]} requests - the list of requests to respond to
* @param {array[any]} responses - the list of responses for each request
*/
this.fakeFetchThese = function (requests, responses) {
return Promise.map(requests, function (req) {
return req.start();
})
.then(function () {
return callResponseHandlers(requests, responses);
})
.then(function (requestStates) {
if (_.contains(requestStates, INCOMPLETE)) {
throw new Error('responding to requests did not complete!');
}
});
};
};