in geronimo-opentracing-common/src/main/java/org/apache/geronimo/microprofile/opentracing/common/microprofile/server/GeronimoOpenTracingFeature.java [67:111]
public void configure(final ResourceInfo resourceInfo, final FeatureContext context) {
if ((tracer == null || config == null) && container == null) {
container = Container.get();
}
if (tracer == null) { // configured instead of scanned
tracer = container.lookup(Tracer.class);
}
if (config == null) {
config = container.lookup(GeronimoOpenTracingConfig.class);
}
if (skipPatterns == null) {
skipPatterns = ofNullable(config.read("mp.opentracing.server.skip-pattern", null))
.map(it -> Stream.of(it.split("\\|")).map(String::trim).filter(p -> !p.isEmpty()).map(Pattern::compile).collect(toList()))
.orElseGet(Collections::emptyList);
}
final Optional<Traced> traced = ofNullable(ofNullable(resourceInfo.getResourceMethod().getAnnotation(Traced.class))
.orElseGet(() -> resourceInfo.getResourceClass().getAnnotation(Traced.class)));
if (!traced.map(Traced::value).orElse(true)) {
return;
}
final String path = Stream.of(
ofNullable(resourceInfo.getResourceClass().getAnnotation(Path.class)).map(Path::value).orElse(""),
ofNullable(resourceInfo.getResourceMethod().getAnnotation(Path.class)).map(Path::value).orElse(""))
.map(it -> it.equals("/") ? "" : it)
.map(it -> it.substring(it.startsWith("/") ? 1 : 0, it.endsWith("/") ? it.length() - 1 : it.length()))
.filter(it -> !it.isEmpty())
.collect(joining("/", "/", ""));
if (skipPatterns.stream().anyMatch(it -> it.matcher(path).matches())) {
return;
}
final String operationName = traced.map(Traced::operationName).filter(v -> !v.trim().isEmpty()).orElseGet(() -> {
if (Boolean.parseBoolean(config.read("server.filter.request.operationName.usePath", "false"))) {
return getHttpMethod(resourceInfo) + ':' + getMethodPath(resourceInfo);
} else if ("http-path".equals(config.read("mp.opentracing.server.operation-name-provider", null))) {
return getMethodPath(resourceInfo);
}
return buildDefaultName(resourceInfo);
});
context.register(new OpenTracingServerResponseFilter())
.register(new OpenTracingServerRequestFilter(operationName, tracer,
shouldSkip(resourceInfo),
Boolean.parseBoolean(config.read("server.filter.request.skipDefaultTags", "false"))));
}