kibana/x-pack/plugins/monitoring/init.js
2018-04-24 13:48:10 -07:00

69 lines
2.9 KiB
JavaScript

/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License;
* you may not use this file except in compliance with the Elastic License.
*/
import { requireUIRoutes } from './server/routes';
import { instantiateClient } from './server/es_client/instantiate_client';
import { initMonitoringXpackInfo } from './server/init_monitoring_xpack_info';
import { initKibanaMonitoring } from './server/kibana_monitoring';
/**
* Initialize the Kibana Monitoring plugin by starting up asynchronous server
* tasks, based on user-defined configuration
* - webserver route handling
* - monitoring cluster health checker
* - instantiation of an elasticsearch-js client exposed as a server plugin object
* - start kibana ops monitoring loop
* - start monitoring cluster x-pack license and features check loop
* @param monitoringPlugin {Object} Monitoring UI plugin
* @param server {Object} HapiJS server instance
*/
export const init = (monitoringPlugin, server) => {
const xpackMainPlugin = server.plugins.xpack_main;
xpackMainPlugin.status.once('green', async () => {
const config = server.config();
const uiEnabled = config.get('xpack.monitoring.ui.enabled');
const features = [];
const onceMonitoringGreen = callbackFn => monitoringPlugin.status.once('green', () => callbackFn()); // avoid race condition in things that require ES client
if (uiEnabled) {
// Instantiate the dedicated ES client
features.push(instantiateClient(server));
// route handlers depend on xpackInfo (exposed as server.plugins.monitoring.info)
onceMonitoringGreen(async () => {
await initMonitoringXpackInfo(server);
});
// Require only routes needed for ui app
features.push(requireUIRoutes(server));
}
// Send Kibana usage / server ops to the monitoring bulk api
if (config.get('xpack.monitoring.kibana.collection.enabled')) {
onceMonitoringGreen(() => {
features.push(initKibanaMonitoring(monitoringPlugin.kbnServer, server));
});
}
Promise.all(features);
});
server.injectUiAppVars('monitoring', (server) => {
const config = server.config();
return {
maxBucketSize: config.get('xpack.monitoring.max_bucket_size'),
minIntervalSeconds: config.get('xpack.monitoring.min_interval_seconds'),
kbnIndex: config.get('kibana.index'),
esApiVersion: config.get('elasticsearch.apiVersion'),
esShardTimeout: config.get('elasticsearch.shardTimeout'),
showLicenseExpiration: config.get('xpack.monitoring.show_license_expiration'),
showCgroupMetricsElasticsearch: config.get('xpack.monitoring.ui.container.elasticsearch.enabled'),
showCgroupMetricsLogstash: config.get('xpack.monitoring.ui.container.logstash.enabled') // Note, not currently used, but see https://github.com/elastic/x-pack-kibana/issues/1559 part 2
};
});
};