下面列出了怎么用io.opentracing.contrib.jaxrs2.server.SpanFinishingFilter的API类实例代码及写法,或者点击链接到github查看源代码。
@BuildStep
void setupFilter(BuildProducer<ResteasyJaxrsProviderBuildItem> providers,
BuildProducer<FilterBuildItem> filterProducer,
BuildProducer<FeatureBuildItem> feature,
Capabilities capabilities) {
feature.produce(new FeatureBuildItem(Feature.SMALLRYE_OPENTRACING));
providers.produce(new ResteasyJaxrsProviderBuildItem(QuarkusSmallRyeTracingDynamicFeature.class.getName()));
if (capabilities.isPresent(Capability.SERVLET)) {
FilterBuildItem filterInfo = FilterBuildItem.builder("tracingFilter", SpanFinishingFilter.class.getName())
.setAsyncSupported(true)
.addFilterUrlMapping("*", DispatcherType.FORWARD)
.addFilterUrlMapping("*", DispatcherType.INCLUDE)
.addFilterUrlMapping("*", DispatcherType.REQUEST)
.addFilterUrlMapping("*", DispatcherType.ASYNC)
.addFilterUrlMapping("*", DispatcherType.ERROR)
.build();
filterProducer.produce(filterInfo);
} else {
//otherwise we know we have RESTeasy on vert.x
providers.produce(
new ResteasyJaxrsProviderBuildItem(QuarkusSmallRyeTracingStandaloneVertxDynamicFeature.class.getName()));
}
}
@Override
protected void initTracing(ServletContextHandler context) {
client.register(new ClientTracingFeature.Builder(mockTracer).build());
ServerTracingDynamicFeature.Builder builder = new ServerTracingDynamicFeature.Builder(mockTracer);
if (shouldUseParentSpan()) {
builder = builder.withJoinExistingActiveSpan(true);
}
ServerTracingDynamicFeature serverTracingFeature = builder.build();
context.addFilter(new FilterHolder(new SpanFinishingFilter()),
"/*", EnumSet.of(DispatcherType.REQUEST));
context.setAttribute(TRACER_ATTRIBUTE, mockTracer);
context.setAttribute(CLIENT_ATTRIBUTE, client);
context.setAttribute(SERVER_TRACING_FEATURE, serverTracingFeature);
}
protected void initTracing(ServletContextHandler context) {
client.register(new Builder(mockTracer).build());
ServerTracingDynamicFeature serverTracingFeature =
new ServerTracingDynamicFeature.Builder(mockTracer)
.withOperationNameProvider(HTTPMethodOperationName.newBuilder())
.withDecorators(Collections.singletonList(ServerSpanDecorator.STANDARD_TAGS))
.withSkipPattern("/health")
.build();
// TODO clarify dispatcher types
context.addFilter(new FilterHolder(new SpanFinishingFilter()), "/*",
EnumSet.of(
DispatcherType.REQUEST,
// TODO CXF does not call AsyncListener#onComplete() without this (it calls only onStartAsync)
DispatcherType.ASYNC));
context.setAttribute(CLIENT_ATTRIBUTE, client);
context.setAttribute(TRACER_ATTRIBUTE, mockTracer);
context.setAttribute(SERVER_TRACING_FEATURE, serverTracingFeature);
}
@Override
protected void initTracing(ServletContextHandler context) {
client.register(new Builder(mockTracer).build());
ServerTracingDynamicFeature serverTracingBuilder =
new ServerTracingDynamicFeature.Builder(mockTracer)
.withOperationNameProvider(WildcardOperationName.newBuilder())
.build();
context.addFilter(new FilterHolder(new SpanFinishingFilter()),
"/*", EnumSet.of(DispatcherType.REQUEST));
context.setAttribute(TRACER_ATTRIBUTE, mockTracer);
context.setAttribute(CLIENT_ATTRIBUTE, client);
context.setAttribute(SERVER_TRACING_FEATURE, serverTracingBuilder);
}
@Override
protected void initTracing(ServletContextHandler context) {
client.register(new ClientTracingFeature.Builder(mockTracer).build());
ServerTracingDynamicFeature serverTracingBuilder =
new ServerTracingDynamicFeature.Builder(mockTracer)
.withTraceNothing() // This should only trace @Traced annotations, per documentation!
.build();
context.addFilter(new FilterHolder(new SpanFinishingFilter()),
"/*", EnumSet.of(DispatcherType.REQUEST));
context.setAttribute(TRACER_ATTRIBUTE, mockTracer);
context.setAttribute(CLIENT_ATTRIBUTE, client);
context.setAttribute(SERVER_TRACING_FEATURE, serverTracingBuilder);
}
@Override
protected void initTracing(ServletContextHandler context) {
client.register(new Builder(mockTracer).build());
ServerTracingDynamicFeature serverTracingBuilder =
new ServerTracingDynamicFeature.Builder(mockTracer)
.withOperationNameProvider(ClassNameOperationName.newBuilder())
.build();
context.addFilter(new FilterHolder(new SpanFinishingFilter()),
"/*", EnumSet.of(DispatcherType.REQUEST));
context.setAttribute(TRACER_ATTRIBUTE, mockTracer);
context.setAttribute(CLIENT_ATTRIBUTE, client);
context.setAttribute(SERVER_TRACING_FEATURE, serverTracingBuilder);
}
@Override
protected void initTracing(ServletContextHandler context) {
client.register(new Builder(mockTracer).build());
ServerTracingDynamicFeature serverTracingBuilder =
new ServerTracingDynamicFeature.Builder(mockTracer)
.build();
context.addFilter(new FilterHolder(new SpanFinishingFilter()),
"/*", EnumSet.of(DispatcherType.REQUEST));
context.setAttribute(TRACER_ATTRIBUTE, mockTracer);
context.setAttribute(CLIENT_ATTRIBUTE, client);
context.setAttribute(SERVER_TRACING_FEATURE, serverTracingBuilder);
}
@Bean
public FilterRegistrationBean spanFinishingFilter() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
filterRegistrationBean.setFilter(new SpanFinishingFilter());
filterRegistrationBean.setAsyncSupported(true);
filterRegistrationBean.setDispatcherTypes(DispatcherType.REQUEST);
filterRegistrationBean.addUrlPatterns("*");
return filterRegistrationBean;
}
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
ServletContext servletContext = servletContextEvent.getServletContext();
Dynamic filterRegistration = servletContext
.addFilter("tracingFilter", new SpanFinishingFilter());
filterRegistration.setAsyncSupported(true);
filterRegistration.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), false, "*");
}
@Bean
public FilterRegistrationBean spanFinishingFilter() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
filterRegistrationBean.setFilter(new SpanFinishingFilter());
filterRegistrationBean.setAsyncSupported(true);
filterRegistrationBean.setOrder(Integer.MIN_VALUE);
filterRegistrationBean.setDispatcherTypes(DispatcherType.REQUEST);
filterRegistrationBean.addUrlPatterns("*");
return filterRegistrationBean;
}