public void configure()

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"))));
    }