package org.stagemonitor.tracing.elasticsearch; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.stagemonitor.configuration.ConfigurationRegistry; import org.stagemonitor.core.CorePlugin; import org.stagemonitor.core.elasticsearch.ElasticsearchClient; import org.stagemonitor.core.util.JsonUtils; import org.stagemonitor.tracing.SpanContextInformation; import org.stagemonitor.tracing.reporter.SpanReporter; import org.stagemonitor.util.StringUtils; public class ElasticsearchSpanReporter extends SpanReporter { public static final String ES_SPAN_LOGGER = "ElasticsearchSpanReporter"; private final Logger spanLogger; protected CorePlugin corePlugin; protected ElasticsearchTracingPlugin elasticsearchTracingPlugin; protected ElasticsearchClient elasticsearchClient; private static final String SPANS_TYPE = "spans"; public ElasticsearchSpanReporter() { this(LoggerFactory.getLogger(ES_SPAN_LOGGER)); } ElasticsearchSpanReporter(Logger spanLogger) { this.spanLogger = spanLogger; } @Override public void init(ConfigurationRegistry configuration) { corePlugin = configuration.getConfig(CorePlugin.class); elasticsearchTracingPlugin = configuration.getConfig(ElasticsearchTracingPlugin.class); elasticsearchClient = corePlugin.getElasticsearchClient(); } @Override public void report(SpanContextInformation spanContext) { final String spansIndex = "stagemonitor-spans-" + StringUtils.getLogstashStyleDate(); if (elasticsearchTracingPlugin.isOnlyLogElasticsearchSpanReports()) { spanLogger.info(ElasticsearchClient.getBulkHeader("index", spansIndex, SPANS_TYPE) + JsonUtils.toJson(spanContext.getReadbackSpan())); } else { elasticsearchClient.index(spansIndex, SPANS_TYPE, spanContext.getReadbackSpan()); } } @Override public boolean isActive(SpanContextInformation spanContext) { final boolean logOnly = elasticsearchTracingPlugin.isOnlyLogElasticsearchSpanReports(); return elasticsearchClient.isElasticsearchAvailable() || logOnly; } }