package org.stagemonitor;
import com.codahale.metrics.Counter;
import com.codahale.metrics.Gauge;
import com.codahale.metrics.Histogram;
import com.codahale.metrics.Meter;
import com.codahale.metrics.Timer;
import org.apache.commons.io.FileUtils;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.node.Node;
import org.elasticsearch.node.internal.InternalSettingsPreparer;
import org.elasticsearch.plugins.Plugin;
import org.elasticsearch.transport.Netty4Plugin;
import org.slf4j.LoggerFactory;
import org.stagemonitor.core.Stagemonitor;
import org.stagemonitor.core.instrument.TimedElementMatcherDecorator;
import org.stagemonitor.core.metrics.SortedTableLogReporter;
import org.stagemonitor.core.metrics.metrics2.MetricName;
import java.io.File;
import java.io.IOException;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Locale;
import java.util.concurrent.TimeUnit;
import static org.stagemonitor.core.metrics.metrics2.MetricName.name;
public class InstrumentationPerformanceTest {
private static Node node;
private InstrumentationPerformanceTest() {
}
public static void main(String[] args) throws Exception {
final Timer.Context timer = Stagemonitor.getMetric2Registry().timer(name("startElasticsearch").build()).time();
startElasticsearch();
Stagemonitor.init();
timer.stop();
printResults();
node.close();
}
private static void startElasticsearch() throws Exception {
try {
FileUtils.deleteDirectory(new File("build/elasticsearch"));
} catch (IOException e) {
// ignore
}
final Settings settings = Settings.builder()
.put("path.home", "build/elasticsearch")
.put("node.name", "junit-es-node")
.put("path.logs", "build/elasticsearch/logs")
.put("path.data", "build/elasticsearch/data")
.put("transport.type", "local")
.put("http.type", "netty4")
.build();
node = new TestNode(settings, Collections.singletonList(Netty4Plugin.class));
node.start();
node.client().admin().cluster().prepareHealth().setWaitForGreenStatus().get();
}
private static class TestNode extends Node {
public TestNode(Settings preparedSettings, Collection<Class<? extends Plugin>> classpathPlugins) {
super(InternalSettingsPreparer.prepareEnvironment(preparedSettings, null), classpathPlugins);
}
}
public static void printResults() throws Exception {
SortedTableLogReporter reporter = SortedTableLogReporter
.forRegistry(Stagemonitor.getMetric2Registry())
.log(LoggerFactory.getLogger(InstrumentationPerformanceTest.class))
.convertRatesTo(TimeUnit.SECONDS)
.convertDurationsTo(TimeUnit.MILLISECONDS)
.formattedFor(Locale.US)
.build();
reporter.reportMetrics(new HashMap<MetricName, Gauge>(), new HashMap<MetricName, Counter>(),
new HashMap<MetricName, Histogram>(), new HashMap<MetricName, Meter>(),
Stagemonitor.getMetric2Registry().getTimers());
TimedElementMatcherDecorator.logMetrics();
Stagemonitor.reset();
}
}