Search in sources :

Example 1 with WebClientBuilder

use of com.linecorp.armeria.client.WebClientBuilder in project zipkin by openzipkin.

the class ElasticsearchExtension method computeStorageBuilder.

Builder computeStorageBuilder() {
    WebClientBuilder builder = WebClient.builder(baseUrl()).factory(ClientFactory.builder().useHttp2Preface(false).build());
    builder.decorator((delegate, ctx, req) -> {
        final HttpResponse response = delegate.execute(ctx, req);
        return HttpResponse.from(response.aggregate().thenApply(r -> {
            // ES will return a 'warning' response header when using deprecated api, detect this and
            // fail early so we can do something about it.
            // Example usage: https://github.com/elastic/elasticsearch/blob/3049e55f093487bb582a7e49ad624961415ba31c/x-pack/plugin/security/src/internalClusterTest/java/org/elasticsearch/integration/IndexPrivilegeIntegTests.java#L559
            final String warningHeader = r.headers().get("warning");
            if (warningHeader != null) {
                if (IGNORE_THESE_WARNINGS.stream().noneMatch(p -> p.matcher(warningHeader).find())) {
                    throw new IllegalArgumentException("Detected usage of deprecated API for request " + req.toString() + ":\n" + warningHeader);
                }
            }
            // Convert AggregatedHttpResponse back to HttpResponse.
            return r.toHttpResponse();
        }));
    });
    // com.linecorp.armeria.client.logging
    if (Boolean.parseBoolean(System.getenv("ES_DEBUG"))) {
        ClientOptionsBuilder options = ClientOptions.builder();
        LoggingClientBuilder loggingBuilder = LoggingClient.builder().requestLogLevel(LogLevel.INFO).successfulResponseLogLevel(LogLevel.INFO);
        options.decorator(loggingBuilder.newDecorator());
        options.decorator(ContentPreviewingClient.newDecorator(Integer.MAX_VALUE));
        builder.options(options.build());
    }
    WebClient client = builder.build();
    return ElasticsearchStorage.newBuilder(new ElasticsearchStorage.LazyHttpClient() {

        @Override
        public WebClient get() {
            return client;
        }

        @Override
        public void close() {
            client.endpointGroup().close();
        }

        @Override
        public String toString() {
            return client.uri().toString();
        }
    }).index("zipkin-test").flushOnWrites(true);
}
Also used : Wait(org.testcontainers.containers.wait.strategy.Wait) WebClientBuilder(com.linecorp.armeria.client.WebClientBuilder) Builder(zipkin2.elasticsearch.ElasticsearchStorage.Builder) ClientFactory(com.linecorp.armeria.client.ClientFactory) HttpResponse(com.linecorp.armeria.common.HttpResponse) LogLevel(com.linecorp.armeria.common.logging.LogLevel) Logger(org.slf4j.Logger) ContentPreviewingClient(com.linecorp.armeria.client.logging.ContentPreviewingClient) TestAbortedException(org.opentest4j.TestAbortedException) LoggerFactory(org.slf4j.LoggerFactory) ClientOptions(com.linecorp.armeria.client.ClientOptions) ExtensionContext(org.junit.jupiter.api.extension.ExtensionContext) LoggingClient(com.linecorp.armeria.client.logging.LoggingClient) TestInfo(org.junit.jupiter.api.TestInfo) ElasticsearchStorage(zipkin2.elasticsearch.ElasticsearchStorage) LoggingClientBuilder(com.linecorp.armeria.client.logging.LoggingClientBuilder) IGNORE_THESE_WARNINGS(zipkin2.elasticsearch.integration.IgnoredDeprecationWarnings.IGNORE_THESE_WARNINGS) ClientOptionsBuilder(com.linecorp.armeria.client.ClientOptionsBuilder) BeforeAllCallback(org.junit.jupiter.api.extension.BeforeAllCallback) Slf4jLogConsumer(org.testcontainers.containers.output.Slf4jLogConsumer) AfterAllCallback(org.junit.jupiter.api.extension.AfterAllCallback) WebClient(com.linecorp.armeria.client.WebClient) GenericContainer(org.testcontainers.containers.GenericContainer) DockerImageName.parse(org.testcontainers.utility.DockerImageName.parse) WebClientBuilder(com.linecorp.armeria.client.WebClientBuilder) ElasticsearchStorage(zipkin2.elasticsearch.ElasticsearchStorage) HttpResponse(com.linecorp.armeria.common.HttpResponse) ClientOptionsBuilder(com.linecorp.armeria.client.ClientOptionsBuilder) WebClient(com.linecorp.armeria.client.WebClient) LoggingClientBuilder(com.linecorp.armeria.client.logging.LoggingClientBuilder)

Aggregations

ClientFactory (com.linecorp.armeria.client.ClientFactory)1 ClientOptions (com.linecorp.armeria.client.ClientOptions)1 ClientOptionsBuilder (com.linecorp.armeria.client.ClientOptionsBuilder)1 WebClient (com.linecorp.armeria.client.WebClient)1 WebClientBuilder (com.linecorp.armeria.client.WebClientBuilder)1 ContentPreviewingClient (com.linecorp.armeria.client.logging.ContentPreviewingClient)1 LoggingClient (com.linecorp.armeria.client.logging.LoggingClient)1 LoggingClientBuilder (com.linecorp.armeria.client.logging.LoggingClientBuilder)1 HttpResponse (com.linecorp.armeria.common.HttpResponse)1 LogLevel (com.linecorp.armeria.common.logging.LogLevel)1 TestInfo (org.junit.jupiter.api.TestInfo)1 AfterAllCallback (org.junit.jupiter.api.extension.AfterAllCallback)1 BeforeAllCallback (org.junit.jupiter.api.extension.BeforeAllCallback)1 ExtensionContext (org.junit.jupiter.api.extension.ExtensionContext)1 TestAbortedException (org.opentest4j.TestAbortedException)1 Logger (org.slf4j.Logger)1 LoggerFactory (org.slf4j.LoggerFactory)1 GenericContainer (org.testcontainers.containers.GenericContainer)1 Slf4jLogConsumer (org.testcontainers.containers.output.Slf4jLogConsumer)1 Wait (org.testcontainers.containers.wait.strategy.Wait)1