diff --git a/src/ui/public/courier/courier.js b/src/ui/public/courier/courier.js index e8e5e34a5b4e5..6e6818308c051 100644 --- a/src/ui/public/courier/courier.js +++ b/src/ui/public/courier/courier.js @@ -11,6 +11,7 @@ import Notifier from 'ui/notify/notifier'; import DocSourceProvider from './data_source/doc_source'; import SearchSourceProvider from './data_source/search_source'; import EsSearchStrategyProvider from './fetch_types/es_search_strategy'; +import GenericStrategyProvider from './fetch_types/generic_strategy'; import RequestQueueProvider from './_request_queue'; import ErrorHandlersProvider from './_error_handlers'; import FetchProvider from './fetch'; @@ -29,6 +30,7 @@ uiModules.get('kibana/courier') var DocSource = Private(DocSourceProvider); var SearchSource = Private(SearchSourceProvider); var esSearchStrategy = Private(EsSearchStrategyProvider); + var genericStrategy = Private(GenericStrategyProvider); var requestQueue = Private(RequestQueueProvider); var errorHandlers = Private(ErrorHandlersProvider); @@ -75,7 +77,7 @@ uiModules.get('kibana/courier') * individual errors are routed to their respective requests. */ self.fetch = function () { - fetch.fetchQueued(esSearchStrategy).then(function () { + fetch.fetchQueued(esSearchStrategy, genericStrategy).then(function () { searchLooper.restart(); }); }; diff --git a/src/ui/public/courier/fetch_types/generic_request.js b/src/ui/public/courier/fetch_types/generic_request.js new file mode 100644 index 0000000000000..3deb6602bd810 --- /dev/null +++ b/src/ui/public/courier/fetch_types/generic_request.js @@ -0,0 +1,19 @@ +import _ from 'lodash'; + +import GenericStrategyProvider from './generic_strategy'; +import AbstractRequestProvider from './abstract_request'; + +export default function GenericRequestProvider(Private) { + const genericStrategy = Private(GenericStrategyProvider); + const AbstractRequest = Private(AbstractRequestProvider); + + return class GenericRequest extends AbstractRequest { + constructor(fn) { + super(); + + this.fn = fn; + this.type = 'generic'; + this.strategy = genericStrategy; + } + }; +}; diff --git a/src/ui/public/courier/fetch_types/generic_strategy.js b/src/ui/public/courier/fetch_types/generic_strategy.js new file mode 100644 index 0000000000000..1cd139fb27704 --- /dev/null +++ b/src/ui/public/courier/fetch_types/generic_strategy.js @@ -0,0 +1,19 @@ +import IsRequestProvider from '../fetch/is_request'; +import AbstractStrategyProvider from './abstract_strategy'; + +export default function GenericStrategyProvider(Promise, Private) { + const isRequest = Private(IsRequestProvider); + const AbstractStrategy = Private(AbstractStrategyProvider); + + return new class GenericStrategy extends AbstractStrategy { + execute(requests) { + return Promise.map(requests, req => { + if (isRequest(req)) { + return Promise.try(req.fn); + } else { + return req; + } + }); + } + }; +} diff --git a/src/ui/public/courier/looper/search.js b/src/ui/public/courier/looper/search.js index cd324aae07988..b1578b70b3d37 100644 --- a/src/ui/public/courier/looper/search.js +++ b/src/ui/public/courier/looper/search.js @@ -1,11 +1,13 @@ import FetchProvider from '../fetch'; import EsSearchStrategyProvider from '../fetch_types/es_search_strategy'; +import GenericStrategyProvider from '../fetch_types/generic_strategy'; import RequestQueueProvider from '../_request_queue'; import LooperProvider from './_looper'; export default function SearchLooperService(Private, Promise, Notifier, $rootScope) { var fetch = Private(FetchProvider); var esSearchStrategy = Private(EsSearchStrategyProvider); + var genericStrategy = Private(GenericStrategyProvider); var requestQueue = Private(RequestQueueProvider); var Looper = Private(LooperProvider); @@ -18,7 +20,7 @@ export default function SearchLooperService(Private, Promise, Notifier, $rootSco var searchLooper = new Looper(null, function () { $rootScope.$broadcast('courier:searchRefresh'); return fetch.these( - requestQueue.getInactive(esSearchStrategy) + requestQueue.getInactive(esSearchStrategy, genericStrategy) ); });