mirror of
https://github.com/elastic/kibana.git
synced 2025-04-24 09:48:58 -04:00
Adding CLI and YAML loader
This commit is contained in:
parent
f4bc660c88
commit
259b6f7910
5 changed files with 119 additions and 4 deletions
65
src/hapi/bin/kibana.js
Normal file
65
src/hapi/bin/kibana.js
Normal file
|
@ -0,0 +1,65 @@
|
|||
#!/usr/bin/env node
|
||||
|
||||
var _ = require('lodash');
|
||||
var kibana = require('../');
|
||||
var program = require('commander');
|
||||
var path = require('path');
|
||||
var writePidFile = require('../lib/write_pid_file');
|
||||
var loadSettingsFromYAML = require('../lib/load_settings_from_yaml');
|
||||
|
||||
var env = (process.env.NODE_ENV) ? process.env.NODE_ENV : 'development';
|
||||
var packagePath = path.resolve(__dirname, '..', '..', '..', 'package.json');
|
||||
if (env !== 'development') {
|
||||
packagePath = path.resolve(__dirname, '..', 'package.json');
|
||||
}
|
||||
var package = require(packagePath);
|
||||
|
||||
program.description('Kibana is an open source (Apache Licensed), browser based analytics and search dashboard for Elasticsearch.');
|
||||
program.version(package.version);
|
||||
program.option('-e, --elasticsearch <uri>', 'Elasticsearch instance');
|
||||
program.option('-c, --config <path>', 'Path to the config file');
|
||||
program.option('-p, --port <port>', 'The port to bind to', parseInt);
|
||||
program.option('-q, --quiet', 'Turns off logging');
|
||||
program.option('-H, --host <host>', 'The host to bind to');
|
||||
program.option('-l, --log-file <path>', 'The file to log to');
|
||||
program.option('--plugins <path>', 'Path to scan for plugins');
|
||||
program.parse(process.argv);
|
||||
|
||||
|
||||
if (program.plugins) {
|
||||
config['externalPluginsFolder'] = program.plugins;
|
||||
}
|
||||
|
||||
var settings = {};
|
||||
if (program.elasticsearch) {
|
||||
settings['elasticsearch.url'] = program.elasticsearch;
|
||||
}
|
||||
|
||||
if (program.port) {
|
||||
settings['kibana.server.port'] = program.port;
|
||||
}
|
||||
|
||||
if (program.host) {
|
||||
settings['kibana.server.host'] = program.host;
|
||||
}
|
||||
|
||||
if (program.quiet) {
|
||||
settings['logging.quiet'] = program.quiet;
|
||||
}
|
||||
|
||||
if (program.logFile) {
|
||||
settings['logging.file'] = program.logFile;
|
||||
}
|
||||
|
||||
if (program.config) {
|
||||
// Create the settings with the overrides from the YAML config file.
|
||||
settings = _.defaults(settings, loadSettingsFromYAML(program.config));
|
||||
}
|
||||
|
||||
|
||||
// Start the Kibana server with the settings fromt he CLI and YAML file
|
||||
kibana.start(settings)
|
||||
.then(writePidFile)
|
||||
.catch(function (err) {
|
||||
process.exit(1);
|
||||
});
|
|
@ -25,7 +25,11 @@ module.exports = Joi.object({
|
|||
port: Joi.number().default(5601),
|
||||
maxSockets: Joi.any().default(Infinity),
|
||||
pidFile: Joi.string(),
|
||||
root: Joi.string().default(path.normalize(path.join(__dirname, '..')))
|
||||
root: Joi.string().default(path.normalize(path.join(__dirname, '..'))),
|
||||
ssl: Joi.object({
|
||||
cert: Joi.string(),
|
||||
key: Joi.string()
|
||||
}).default()
|
||||
}).default(),
|
||||
index: Joi.string().default('.kibana'),
|
||||
publicFolder: Joi.string().default(publicFolder),
|
||||
|
@ -41,8 +45,10 @@ module.exports = Joi.object({
|
|||
preserveHost: Joi.boolean().default(true),
|
||||
username: Joi.string(),
|
||||
password: Joi.string(),
|
||||
sharedTimeout: Joi.number().default(0),
|
||||
shardTimeout: Joi.number().default(0),
|
||||
requestTimeout: Joi.number().default(30000),
|
||||
pingTimeout: Joi.number().default(30000),
|
||||
startupTimeout: Joi.number().default(5000),
|
||||
ssl: Joi.object({
|
||||
verify: Joi.boolean().default(true),
|
||||
ca: Joi.string(),
|
||||
|
@ -54,7 +60,7 @@ module.exports = Joi.object({
|
|||
quiet: Joi.boolean().default(false),
|
||||
file: Joi.string(),
|
||||
console: Joi.object({
|
||||
ops: Joi.any().default('*'),
|
||||
ops: Joi.any(),
|
||||
log: Joi.any().default('*'),
|
||||
response: Joi.any().default('*'),
|
||||
error: Joi.any().default('*'),
|
||||
|
|
28
src/hapi/lib/load_settings_from_yaml.js
Normal file
28
src/hapi/lib/load_settings_from_yaml.js
Normal file
|
@ -0,0 +1,28 @@
|
|||
var fs = require('fs');
|
||||
var yaml = require('js-yaml');
|
||||
module.exports = function (path) {
|
||||
var config = yaml.safeLoad(fs.readFileSync(path, 'utf8'));
|
||||
var settings = {};
|
||||
if (config.port) settings['kibana.server.port'] = config.port;
|
||||
if (config.host) settings['kibana.server.host'] = config.host;
|
||||
if (config.elasticsearch_url) settings['elasticsearch.url'] = config.elasticsearch_url;
|
||||
if (config.elasticsearch_preserve_host) settings['elasticsearch.preserveHost'] = config.elasticsearch_preserve_host;
|
||||
if (config.config_index) settings['config.index'] = config.config_index;
|
||||
if (config.config_elasticsearch_username) settings['elasticsearch.username'] = config.config_elasticsearch_username;
|
||||
if (config.config_elasticsearch_password) settings['elasticsearch.password'] = config.config_elasticsearch_password;
|
||||
if (config.config_elasticsearch_client_crt) settings['elasticsearch.ssl.cert'] = config.config_elasticsearch_client_crt;
|
||||
if (config.config_elasticsearch_client_key) settings['elasticsearch.ssl.key'] = config.config_elasticsearch_client_key;
|
||||
if (config.ca) settings['elasticsearch.ssl.ca'] = config.ca;
|
||||
if (config.verify_ssl) settings['elasticsearch.ssl.verify'] = config.verify_ssl;
|
||||
if (config.default_app_id) settings['kibana.defaultAppId'] = config.default_app_id;
|
||||
if (config.ping_timeout) settings['elastcsearch.pingTimeout'] = config.ping_timeout;
|
||||
if (config.request_timeout) settings['elastcsearch.requestTimeout'] = config.request_timeout;
|
||||
if (config.shard_timeout) settings['elastcsearch.shardTimeout'] = config.shard_timeout;
|
||||
if (config.startup_timeout) settings['elastcsearch.startupTimeout'] = config.startup_timeout;
|
||||
if (config.ssl_cert_file) settings['kibana.server.ssl.cert'] = config.ssl_cert_file;
|
||||
if (config.ssl_key_file) settings['kibana.server.ssl.key'] = config.ssl_key_file;
|
||||
if (config.pid_file) settings['config.server.pidFile'] = config.pid_file;
|
||||
if (config.log_file) settings['logging.file'] = config.log_file;
|
||||
return settings;
|
||||
};
|
||||
|
16
src/hapi/lib/write_pid_file.js
Normal file
16
src/hapi/lib/write_pid_file.js
Normal file
|
@ -0,0 +1,16 @@
|
|||
var fs = require('fs');
|
||||
var Promise = require('bluebird');
|
||||
module.exports = function (server) {
|
||||
return new Promise(function (resolve, reject) {
|
||||
var config = server.config();
|
||||
var pidFile = config.get('kibana.server.pidFile');
|
||||
if (!pidFile) return resolve(server);
|
||||
fs.writeFile(pidFile, process.pid, function (err) {
|
||||
if (err) {
|
||||
server.log('error', { err: err });
|
||||
return reject(err);
|
||||
}
|
||||
resolve(server);
|
||||
});
|
||||
});
|
||||
};
|
|
@ -14,7 +14,7 @@ module.exports = new kibana.Plugin({
|
|||
reply({
|
||||
kibana_index: config.get('kibana.index'),
|
||||
default_app_id: config.get('kibana.defaultAppId'),
|
||||
shard_timeout: config.get('elasticsearch.sharedTimeout'),
|
||||
shard_timeout: config.get('elasticsearch.shardTimeout'),
|
||||
plugins: listPlugins(config)
|
||||
});
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue