package org.stagemonitor.tracing.reporter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.stagemonitor.configuration.ConfigurationRegistry;
import org.stagemonitor.tracing.SpanContextInformation;
import org.stagemonitor.tracing.TracingPlugin;
import org.stagemonitor.tracing.utils.SpanUtils;
import java.util.Map;
public class LoggingSpanReporter extends SpanReporter {
private static final Logger logger = LoggerFactory.getLogger(LoggingSpanReporter.class);
private TracingPlugin tracingPlugin;
@Override
public void init(ConfigurationRegistry configuration) {
this.tracingPlugin = configuration.getConfig(TracingPlugin.class);
}
@Override
public void report(SpanContextInformation context) {
logger.info(getLogMessage(context));
}
String getLogMessage(SpanContextInformation context) {
ReadbackSpan span = context.getReadbackSpan();
StringBuilder sb = new StringBuilder();
sb.append("\n###########################\n");
sb.append("# Span report #\n");
sb.append("###########################\n");
appendLine(sb, "name", span.getName());
appendLine(sb, "duration", span.getDuration());
appendLine(sb, "traceId", span.getTraceId());
appendLine(sb, "spanId", span.getId());
appendLine(sb, "parentId", span.getParentId());
sb.append("###########################\n");
sb.append("# Tags #\n");
sb.append("###########################\n");
for (Map.Entry<String, Object> entry : span.getTags().entrySet()) {
if (!SpanUtils.CALL_TREE_JSON.equals(entry.getKey())) {
appendLine(sb, entry.getKey(), entry.getValue());
}
}
sb.append("###########################\n");
return sb.toString();
}
private void appendLine(StringBuilder sb, Object key, Object value) {
if (value != null) {
sb.append("# ").append(key).append(": ").append(value).append('\n');
}
}
@Override
public boolean isActive(SpanContextInformation spanContext) {
return tracingPlugin.isLogSpans();
}
}