@Override public Mono<ClusterInformation> clusterInfo() { return createWebClient(endpoint) // .head().uri("/").exchange() // .flatMap(it -> { if (it.statusCode().isError()) { state = ElasticsearchHost.offline(endpoint); } else { state = ElasticsearchHost.online(endpoint); } return Mono.just(state); }).onErrorResume(throwable -> { state = ElasticsearchHost.offline(endpoint); clientProvider.getErrorListener().accept(throwable); return Mono.just(state); }) // .flatMap(it -> Mono.just(new ClusterInformation(Collections.singleton(it)))); }
private Flux<Tuple2<InetSocketAddress, ClientResponse>> nodes(@Nullable State state) { return Flux.fromIterable(hosts()) // .filter(entry -> state == null || entry.getState().equals(state)) // .map(ElasticsearchHost::getEndpoint) // .flatMap(host -> { Mono<ClientResponse> exchange = createWebClient(host) // .head().uri("/").exchange().doOnError(throwable -> { hosts.put(host, new ElasticsearchHost(host, State.OFFLINE)); clientProvider.getErrorListener().accept(throwable); }); return Mono.just(host).zipWith(exchange); }) // .onErrorContinue((throwable, o) -> clientProvider.getErrorListener().accept(throwable)); }