var BROWSER = process.env.browser; var VERBOSE = process.env.VERBOSE; if (BROWSER) { /* jshint browser: true */ var es = window.elasticsearch; } else { var es = require('../../../src/elasticsearch'); } var argv = require('./argv'); var server = require('./server'); // var path = require('path'); // var fs = require('fs'); var _ = require('../../../src/lib/utils'); // current client var client = null; // when set to a boolean, hold the test of a ping var externalExists; // a reference to a personal instance of ES Server var esServer = null; module.exports = { create: function create(cb) { if (argv.createServer || externalExists === false) { if (!esServer) { server.start(function (err, _server) { esServer = _server; if (err) { done(err); } else { doCreateClient(done); } }); } else { doCreateClient(done); } } else if (externalExists === void 0) { doCreateClient(function () { client.ping({ requestTimeout: 1000 }, function (err) { if (err instanceof es.errors.ConnectionFault) { externalExists = false; create(done); } else { done(err); } }); }); } else { doCreateClient(done); } function done(err) { cb(err, client); } function doCreateClient(cb) { // close existing client if (client) { client.close(); } client = new es.Client({ hosts: [ { host: esServer ? esServer.__hostname : argv.host, port: esServer ? esServer.__port : argv.port } ], log: { type: BROWSER ? 'console' : VERBOSE ? 'tracer' : 'stdio', level: VERBOSE ? 'trace' : 'warning', path: VERBOSE ? undefined : false } }); _.nextTick(cb); } }, get: function () { return client; } };