Provides an easy to start/stop one or more Elasticsearch instances that exists on disk already
A Proc.ObservableProcess implementation that starts an Elasticsearch instance from the specified
location. It is able to optionally block untill the node goes into started state and it sniffs the output
to expose useful information such as the java process id, port number and others.
Because its a subclass of Proc.ObservableProcess its completely reactive and allows you to seperate the act
of listening to the output and proxying stdout/err.
All the examples assume the following are defined. esHome points to a local folder where Elasticsearch is installed/unzipped.
var version = "6.2.0";
var esHome = Environment.ExpandEnvironmentVariables($@"%LOCALAPPDATA%\ElasticManaged\{version}\elasticsearch-{version}");The easiest way to get going pass the version and esHome to ElasticsearchNode.
ElasticsearchNode implements IDisposable and will try to shutdown gracefully when disposed.
Simply new'ing ElasticsearchNode won't actually start the node. We need to explicitly call Start().
Start() has several overloads but the default waits 2 minutes for a started confirmation and proxies
the consoleout using HighlightWriter which pretty prints the elasticsearch output.
using (var node = new ElasticsearchNode(version, esHome))
{
node.Start();
}Start is simply sugar over
using (var node = new ElasticsearchNode(version, esHome))
{
node.SubscribeLines(new HighlightWriter());
if (!node.WaitForStarted(TimeSpan.FromMinutes(2))) throw new Exception();
}As mentioned before ElasticsearchNode is really an IObservable<CharactersOut> by virtue of being an
subclass of Proc.ObservableProcess. SubscribeLines is a specialized
Subscribe that buffers CharactersOut untill a line is formed and emits a LineOut. Overloads exists that
take additional onNext/onError/onCompleted handlers.
A node can also be started using a NodeConfiguration
var clusterConfiguration = new ClusterConfiguration(version, esHome);
var nodeConfiguration = new NodeConfiguration(clusterConfiguration, 9200)
{
ShowElasticsearchOutputAfterStarted = false,
Settings = { "node.attr.x", "y" }
};
using (var node = new ElasticsearchNode(nodeConfiguration))
{
node.Start();
}Which exposes the full range of options e.g here ShowElasticsearchOutputAfterStarted will dispose
of the console out subscriptions as soon as we've parsed the started message to minimize the resources we consume.
Settings here allows you to pass elasticsearch node settings to use for the node.
A simple abstraction that can can start and stop one or more ElasticsearchNodes and wait for all of them to
be started
var clusterConfiguration = new ClusterConfiguration(version, esHome, numberOfNodes: 2);
using (var cluster = new ElasticsearchCluster(clusterConfiguration))
{
cluster.Start();
}ElasticsearchCluster is simply a barebones ClusterBase implementation, which is more powerful then it seems
and serves as the base for Elastic.Managed.Ephemeral.