@spalger/kibana
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
66 lines (58 loc) • 2.2 kB
JavaScript
define(function (require) {
return function routeSetup(Promise, config, $route, kbnUrl, courier, Notifier, Private, $rootScope) {
var _ = require('lodash');
var errors = require('ui/errors');
var NoDefaultIndexPattern = errors.NoDefaultIndexPattern;
var NoDefinedIndexPatterns = errors.NoDefinedIndexPatterns;
var firstNoDefaultError = true;
var rootSearchSource = Private(require('ui/courier/data_source/_root_search_source'));
var allowedRoutesRE = /^\/settings\//;
var notify = new Notifier();
return {
routeSetupWork: function () {
return Promise.all([
config.init(),
courier.SearchSource.ready,
$rootScope.kibana && $rootScope.kibana.ready
])
.then(function () {
var path = _.get($route, 'current.$$route.originalPath');
var defaultIndexRequired = path && !path.match(allowedRoutesRE);
return courier.indexPatterns.getIds()
.then(function (patterns) {
var defined = !!config.get('defaultIndex');
var exists = _.contains(patterns, config.get('defaultIndex'));
if (defined && !exists) {
config.clear('defaultIndex');
defined = false;
}
if (!defined) {
if (defaultIndexRequired) {
throw new NoDefaultIndexPattern();
} else {
firstNoDefaultError = false;
}
}
return rootSearchSource.loadDefault();
});
});
},
handleKnownError: function (err) {
if (err instanceof NoDefaultIndexPattern || err instanceof NoDefinedIndexPatterns) {
// .change short circuits the routes by calling $route.refresh(). We can safely swallow this error
// after reporting it to the user
kbnUrl.change('/settings/indices');
if (err instanceof NoDefaultIndexPattern) {
if (firstNoDefaultError) {
firstNoDefaultError = false;
} else {
notify.error(err);
}
}
} else {
return Promise.reject(err);
}
}
};
};
});