package brave.spring.beans;
import brave.Clock;
import brave.Tracing;
import brave.propagation.CurrentTraceContext;
import brave.sampler.Sampler;
import org.springframework.beans.factory.config.AbstractFactoryBean;
import zipkin.Endpoint;
import zipkin.reporter.Reporter;
/** Spring XML config does not support chained builders. This converts accordingly */
public class TracingFactoryBean extends AbstractFactoryBean<Tracing> {
String localServiceName;
Endpoint localEndpoint;
Reporter<zipkin.Span> reporter;
Clock clock;
Sampler sampler;
CurrentTraceContext currentTraceContext;
Boolean traceId128Bit;
@Override protected Tracing createInstance() throws Exception {
Tracing.Builder builder = Tracing.newBuilder();
if (localServiceName != null) builder.localServiceName(localServiceName);
if (localEndpoint != null) builder.localEndpoint(localEndpoint);
if (reporter != null) builder.reporter(reporter);
if (clock != null) builder.clock(clock);
if (sampler != null) builder.sampler(sampler);
if (currentTraceContext != null) builder.currentTraceContext(currentTraceContext);
if (traceId128Bit != null) builder.traceId128Bit(traceId128Bit);
return builder.build();
}
@Override protected void destroyInstance(Tracing instance) throws Exception {
instance.close();
}
@Override public Class<? extends Tracing> getObjectType() {
return Tracing.class;
}
@Override public boolean isSingleton() {
return true;
}
public void setLocalServiceName(String localServiceName) {
this.localServiceName = localServiceName;
}
public void setLocalEndpoint(Endpoint localEndpoint) {
this.localEndpoint = localEndpoint;
}
public void setReporter(Reporter<zipkin.Span> reporter) {
this.reporter = reporter;
}
public void setClock(Clock clock) {
this.clock = clock;
}
public void setSampler(Sampler sampler) {
this.sampler = sampler;
}
public void setCurrentTraceContext(CurrentTraceContext currentTraceContext) {
this.currentTraceContext = currentTraceContext;
}
public void setTraceId128Bit(boolean traceId128Bit) {
this.traceId128Bit = traceId128Bit;
}
}