kibana-riya
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
167 lines (131 loc) • 6.11 kB
JavaScript
'use strict';
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
var _lodash = require('lodash');
var _boom = require('boom');
var _libHealth_check = require('./lib/health_check');
var _libHealth_check2 = _interopRequireDefault(_libHealth_check);
var _libCreate_data_cluster = require('./lib/create_data_cluster');
var _libCreate_admin_cluster = require('./lib/create_admin_cluster');
var _libClient_logger = require('./lib/client_logger');
var _libCreate_clusters = require('./lib/create_clusters');
var _libFilter_headers = require('./lib/filter_headers');
var _libFilter_headers2 = _interopRequireDefault(_libFilter_headers);
var _libCreate_proxy = require('./lib/create_proxy');
var _libCreate_proxy2 = _interopRequireDefault(_libCreate_proxy);
var DEFAULT_REQUEST_HEADERS = ['authorization'];
module.exports = function (_ref) {
var Plugin = _ref.Plugin;
return new Plugin({
require: ['kibana'],
config: function config(Joi) {
var array = Joi.array;
var boolean = Joi.boolean;
var number = Joi.number;
var object = Joi.object;
var string = Joi.string;
var ref = Joi.ref;
return object({
enabled: boolean()['default'](true),
url: string().uri({ scheme: ['http', 'https'] })['default']('http://localhost:9200'),
preserveHost: boolean()['default'](true),
username: string(),
password: string(),
shardTimeout: number()['default'](0),
requestTimeout: number()['default'](30000),
requestHeadersWhitelist: array().items().single()['default'](DEFAULT_REQUEST_HEADERS),
customHeaders: object()['default']({}),
pingTimeout: number()['default'](ref('requestTimeout')),
startupTimeout: number()['default'](5000),
logQueries: boolean()['default'](false),
ssl: object({
verify: boolean()['default'](true),
ca: array().single().items(string()),
cert: string(),
key: string()
})['default'](),
apiVersion: Joi.string()['default']('master'),
healthCheck: object({
delay: number()['default'](2500)
})['default'](),
tribe: object({
url: string().uri({ scheme: ['http', 'https'] }),
preserveHost: boolean()['default'](true),
username: string(),
password: string(),
shardTimeout: number()['default'](0),
requestTimeout: number()['default'](30000),
requestHeadersWhitelist: array().items().single()['default'](DEFAULT_REQUEST_HEADERS),
customHeaders: object()['default']({}),
pingTimeout: number()['default'](ref('requestTimeout')),
startupTimeout: number()['default'](5000),
logQueries: boolean()['default'](false),
ssl: object({
verify: boolean()['default'](true),
ca: array().single().items(string()),
cert: string(),
key: string()
})['default'](),
apiVersion: Joi.string()['default']('master')
})['default']()
})['default']();
},
uiExports: {
injectDefaultVars: function injectDefaultVars(server, options) {
return {
esRequestTimeout: options.requestTimeout,
esShardTimeout: options.shardTimeout,
esApiVersion: options.apiVersion,
esDataIsTribe: (0, _lodash.get)(options, 'tribe.url') ? true : false
};
}
},
init: function init(server, options) {
var kibanaIndex = server.config().get('kibana.index');
var clusters = (0, _libCreate_clusters.createClusters)(server);
server.expose('getCluster', clusters.get);
server.expose('createCluster', clusters.create);
server.expose('filterHeaders', _libFilter_headers2['default']);
server.expose('ElasticsearchClientLogging', (0, _libClient_logger.clientLogger)(server));
(0, _libCreate_data_cluster.createDataCluster)(server);
(0, _libCreate_admin_cluster.createAdminCluster)(server);
(0, _libCreate_proxy2['default'])(server, 'GET', '/{paths*}');
(0, _libCreate_proxy2['default'])(server, 'POST', '/_mget');
(0, _libCreate_proxy2['default'])(server, 'POST', '/{index}/_search');
(0, _libCreate_proxy2['default'])(server, 'POST', '/{index}/_field_stats');
(0, _libCreate_proxy2['default'])(server, 'POST', '/_msearch');
(0, _libCreate_proxy2['default'])(server, 'POST', '/_search/scroll');
function noBulkCheck(_ref2, reply) {
var path = _ref2.path;
if (/\/_bulk/.test(path)) {
return reply({
error: 'You can not send _bulk requests to this interface.'
}).code(400).takeover();
}
return reply['continue']();
}
function noDirectIndex(_ref3, reply) {
var path = _ref3.path;
var requestPath = (0, _lodash.trimRight)((0, _lodash.trim)(path), '/');
var matchPath = (0, _libCreate_proxy.createPath)('/elasticsearch', kibanaIndex);
if (requestPath === matchPath) {
return reply((0, _boom.methodNotAllowed)('You cannot modify the primary kibana index through this interface.'));
}
reply['continue']();
}
// These routes are actually used to deal with things such as managing
// index patterns and advanced settings, but since hapi treats route
// wildcards as zero-or-more, the routes also match the kibana index
// itself. The client-side kibana code does not deal with creating nor
// destroying the kibana index, so we limit that ability here.
(0, _libCreate_proxy2['default'])(server, ['PUT', 'POST', 'DELETE'], '/' + kibanaIndex + '/{paths*}', {
pre: [noDirectIndex, noBulkCheck]
});
// Set up the health check service and start it.
var _healthCheck = (0, _libHealth_check2['default'])(this, server);
var start = _healthCheck.start;
var waitUntilReady = _healthCheck.waitUntilReady;
server.expose('waitUntilReady', waitUntilReady);
start();
}
});
};