/** * Copyright 2015-2017 The OpenZipkin Authors * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the License * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express * or implied. See the License for the specific language governing permissions and limitations under * the License. */ package zipkin.autoconfigure.storage.elasticsearch.aws; import com.squareup.moshi.JsonReader; import java.io.IOException; import java.util.Collections; import java.util.List; import java.util.logging.Logger; import okhttp3.HttpUrl; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; import zipkin.storage.elasticsearch.http.ElasticsearchHttpStorage; import static zipkin.internal.Util.checkArgument; import static zipkin.internal.Util.checkNotNull; import static zipkin.moshi.JsonReaders.enterPath; final class ElasticsearchDomainEndpoint implements ElasticsearchHttpStorage.HostsSupplier { static final Logger log = Logger.getLogger(ElasticsearchDomainEndpoint.class.getName()); final OkHttpClient client; final Request describeElasticsearchDomain; ElasticsearchDomainEndpoint(OkHttpClient client, HttpUrl baseUrl, String domain) { this.client = checkNotNull(client, "client"); this.describeElasticsearchDomain = new Request.Builder().url(checkNotNull(baseUrl, "baseUrl") .newBuilder("2015-01-01/es/domain") .addPathSegment(checkNotNull(domain, "domain")).build()).build(); } @Override public List<String> get() { try (Response response = client.newCall(describeElasticsearchDomain).execute()) { if (!response.isSuccessful()) { throw new IllegalStateException(response.body().string()); } JsonReader endpointReader = enterPath(JsonReader.of(response.body().source()), "DomainStatus", "Endpoint"); checkArgument(endpointReader != null, "DomainStatus.Endpoint wasn't present in response"); String endpoint = endpointReader.nextString(); if (!endpoint.startsWith("https://")) { endpoint = "https://" + endpoint; } log.fine("using endpoint " + endpoint); return Collections.singletonList(endpoint); } catch (IOException e) { throw new IllegalStateException("couldn't lookup domain endpoint", e); } } }