Skip to content

Instantly share code, notes, and snippets.

@imasahiro
Created December 6, 2017 10:27
Show Gist options
  • Save imasahiro/bd11991332f347e1494bd2fd2f95b6ef to your computer and use it in GitHub Desktop.
Save imasahiro/bd11991332f347e1494bd2fd2f95b6ef to your computer and use it in GitHub Desktop.
import com.linecorp.armeria.client.ClientFactory;
import com.linecorp.armeria.client.ClientFactoryBuilder;
import com.linecorp.armeria.client.HttpClient;
import com.linecorp.armeria.client.HttpClientBuilder;
import com.linecorp.armeria.client.metric.MetricCollectingClient;
import com.linecorp.armeria.common.AggregatedHttpMessage;
import com.linecorp.armeria.common.HttpResponse;
import com.linecorp.armeria.common.SessionProtocol;
import com.linecorp.armeria.common.metric.MeterIdPrefixFunction;
import com.linecorp.armeria.common.metric.PrometheusMeterRegistries;
import com.linecorp.armeria.server.HttpService;
import com.linecorp.armeria.server.ServerBuilder;
import com.linecorp.armeria.server.metric.MetricCollectingService;
import com.linecorp.armeria.server.metric.PrometheusExpositionService;
import io.micrometer.core.instrument.MeterRegistry;
import io.prometheus.client.CollectorRegistry;
public class App {
public static void main(String[] args) {
CollectorRegistry collectorRegistry = new CollectorRegistry();
MeterRegistry meterRegistry = PrometheusMeterRegistries.newRegistry(collectorRegistry);
ClientFactory clientFactory = new ClientFactoryBuilder().meterRegistry(meterRegistry).build();
HttpClient httpClient = new HttpClientBuilder("http://127.0.0.1:9998")
.factory(clientFactory)
.decorator(MetricCollectingClient.newDecorator(MeterIdPrefixFunction.ofDefault("client")))
.build();
new ServerBuilder()
.port(20080, SessionProtocol.HTTP)
.service("/", ((HttpService) (ctx, req) ->
HttpResponse.from(req.aggregate()
.thenComposeAsync(message -> {
return httpClient
.execute(message.toHttpRequest())
.aggregate()
.thenApply(AggregatedHttpMessage::toHttpResponse);
})))
.decorate(MetricCollectingService.newDecorator(MeterIdPrefixFunction.ofDefault("server")
)))
.meterRegistry(meterRegistry)
.service("/dump", new PrometheusExpositionService(collectorRegistry))
.build()
.start()
.join();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment