var checkForEs = Private(require('components/setup/steps/check_for_es'));
var checkEsVersion = Private(require('components/setup/steps/check_es_version'));
var checkForKibanaIndex = Private(require('components/setup/steps/check_for_kibana_index'));
var createKibanaIndex = Private(require('components/setup/steps/create_kibana_index'));
return _.once(function () {
return checkForEs()
.then(checkEsVersion)
.then(checkForKibanaIndex)
.then(function (exists) {
if (!exists) return createKibanaIndex();
})
});
kibana.load = _.onceWithCb(function (cb) {
var firstLoad = [ 'plugins/kibana/index' ];
var thenLoad = _.difference(configFile.plugins, firstLoad);
require(firstLoad, function loadApps() {
require(thenLoad, cb);
});
});
function Courier() {
var self = this;
var DocSource = Private(require('components/courier/data_source/doc_source'));
var SearchSource = Private(require('components/courier/data_source/search_source'));
var searchStrategy = Private(require('components/courier/fetch/strategy/search'));
var requestQueue = Private(require('components/courier/_request_queue'));
var fetch = Private(require('components/courier/fetch/fetch'));
var docLooper = self.docLooper = Private(require('components/courier/looper/doc'));
var searchLooper = self.searchLooper = Private(require('components/courier/looper/search'));
self.setRootSearchSource = Private(require('components/courier/data_source/_root_search_source')).set;
self.SavedObject = Private(require('components/courier/saved_object/saved_object'));
self.indexPatterns = indexPatterns;
self.redirectWhenMissing = Private(require('components/courier/_redirect_when_missing'));
self.DocSource = DocSource;
self.SearchSource = SearchSource;
self.start = function () {
searchLooper.start();
docLooper.start();
return this;
};
self.fetch = function () {
fetch.fetchQueued(searchStrategy).then(function () {
searchLooper.restart();
});
};
self.started = function () {
return searchLooper.started();
};
self.stop = function () {
searchLooper.stop();
return this;
};
self.createSource = function (type) {
switch (type) {
case 'doc':
return new DocSource();
case 'search':
return new SearchSource();
}
};
self.close = function () {
searchLooper.stop();
docLooper.stop();
_.invoke(requestQueue, 'abort');
if (requestQueue.length) {
throw new Error('Aborting all pending requests failed.');
}
};
es[method](params)
.then(function (resp) {
if (resp.status === 409) throw new errors.VersionConflict(resp);
doc._storeVersion(resp._version);
doc.id(resp._id);
var docFetchProm;
if (method !== 'index') {
docFetchProm = doc.fetch();
} else {
// we already know what the response will be
docFetchProm = Promise.resolve({
_id: resp._id,
_index: params.index,
_source: body,
_type: params.type,
_version: doc._getVersion(),
found: true
});
}
define(function (require) {
require('elasticsearch');
var _ = require('lodash');
var es; // share the client amoungst all apps
require('modules')
.get('kibana', ['elasticsearch', 'kibana/config'])
.service('es', function (esFactory, configFile, $q) {
if (es) return es;
es = esFactory({
host: configFile.elasticsearch,
log: 'info',
requestTimeout: 0,
apiVersion: '1.4'
});
return es;
});
});
var fetch = Private(require('components/courier/fetch/fetch'));
var searchStrategy = Private(require('components/courier/fetch/strategy/search'));
var requestQueue = Private(require('components/courier/_request_queue'));
var Looper = Private(require('components/courier/looper/_looper'));
var searchLooper = new Looper(null, function () {
$rootScope.$broadcast('courier:searchRefresh');
return fetch.these(
requestQueue.getInactive(searchStrategy)
);
});