UNPKG

kibana-with-account

Version:

kibana-with-account is develop based kibana project

95 lines (77 loc) 2.68 kB
var _ = require('lodash'); var Promise = require('bluebird'); var elasticsearch = require('elasticsearch'); var exposeClient = require('./expose_client'); var migrateConfig = require('./migrate_config'); var createKibanaIndex = require('./create_kibana_index'); var checkEsVersion = require('./check_es_version'); var NoConnections = elasticsearch.errors.NoConnections; var util = require('util'); var format = util.format; module.exports = function (plugin, server) { var config = server.config(); var client = server.plugins.elasticsearch.client; plugin.status.yellow('Waiting for Elasticsearch'); function waitForPong() { return client.ping({ requestTimeout: 1500 }).catch(function (err) { if (!(err instanceof NoConnections)) throw err; plugin.status.red(format('Unable to connect to Elasticsearch at %s.', config.get('elasticsearch.url'))); return Promise.delay(2500).then(waitForPong); }); } function waitForShards() { return client.cluster.health({ timeout: '5s', // tells es to not sit around and wait forever index: config.get('kibana.index'), ignore: [408] }) .then(function (resp) { // if "timed_out" === true then elasticsearch could not // find any idices matching our filter within 5 seconds if (!resp || resp.timed_out) { plugin.status.yellow('No existing Kibana index found'); return createKibanaIndex(server); } // If status === "red" that means that index(es) were found // but the shards are not ready for queries if (resp.status === 'red') { plugin.status.red('Elasticsearch is still initializing the kibana index.'); return Promise.delay(2500).then(waitForShards); } // otherwise we are g2g plugin.status.green('Kibana index ready'); }); } function check() { return waitForPong() .then(_.partial(checkEsVersion, server)) .then(waitForShards) .then(_.partial(migrateConfig, server)) .catch(err => plugin.status.red(err)); } var timeoutId = null; function scheduleCheck(ms) { if (timeoutId) return; var myId = setTimeout(function () { check().finally(function () { if (timeoutId === myId) startorRestartChecking(); }); }, ms); timeoutId = myId; } function startorRestartChecking() { scheduleCheck(stopChecking() ? 2500 : 1); } function stopChecking() { if (!timeoutId) return false; clearTimeout(timeoutId); timeoutId = null; return true; } return { run: check, start: startorRestartChecking, stop: stopChecking, isRunning: function () { return !!timeoutId; }, }; };