package brave.spring.beans; import java.util.concurrent.TimeUnit; import org.springframework.beans.factory.config.AbstractFactoryBean; import zipkin.reporter.AsyncReporter; import zipkin.reporter.ReporterMetrics; import zipkin.reporter.Sender; /** Spring XML config does not support chained builders. This converts accordingly */ public class AsyncReporterFactoryBean extends AbstractFactoryBean<AsyncReporter> { Sender sender; ReporterMetrics metrics; Integer messageMaxBytes; Integer messageTimeout; Integer closeTimeout; Integer queuedMaxSpans; Integer queuedMaxBytes; @Override public Class<? extends AsyncReporter> getObjectType() { return AsyncReporter.class; } @Override protected AsyncReporter createInstance() throws Exception { AsyncReporter.Builder builder = AsyncReporter.builder(sender); if (metrics != null) builder.metrics(metrics); if (messageMaxBytes != null) builder.messageMaxBytes(messageMaxBytes); if (messageTimeout != null) builder.messageTimeout(messageTimeout, TimeUnit.MILLISECONDS); if (closeTimeout != null) builder.closeTimeout(closeTimeout, TimeUnit.MILLISECONDS); if (queuedMaxSpans != null) builder.queuedMaxSpans(queuedMaxSpans); if (queuedMaxBytes != null) builder.queuedMaxBytes(queuedMaxBytes); return builder.build(); } @Override protected void destroyInstance(AsyncReporter instance) throws Exception { instance.close(); } @Override public boolean isSingleton() { return true; } public void setSender(Sender sender) { this.sender = sender; } public void setMetrics(ReporterMetrics metrics) { this.metrics = metrics; } public void setMessageMaxBytes(Integer messageMaxBytes) { this.messageMaxBytes = messageMaxBytes; } public void setMessageTimeout(Integer messageTimeout) { this.messageTimeout = messageTimeout; } public void setCloseTimeout(Integer closeTimeout) { this.closeTimeout = closeTimeout; } public void setQueuedMaxSpans(Integer queuedMaxSpans) { this.queuedMaxSpans = queuedMaxSpans; } public void setQueuedMaxBytes(Integer queuedMaxBytes) { this.queuedMaxBytes = queuedMaxBytes; } }