/** * 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.http; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import java.util.logging.Logger; import okhttp3.HttpUrl; import okhttp3.OkHttpClient; import okhttp3.logging.HttpLoggingInterceptor; import org.springframework.boot.context.properties.ConfigurationProperties; import zipkin.storage.elasticsearch.http.ElasticsearchHttpStorage; @ConfigurationProperties("zipkin.storage.elasticsearch") public class ZipkinElasticsearchHttpStorageProperties implements Serializable { // for Spark jobs static final Logger log = Logger.getLogger(ZipkinElasticsearchHttpStorageProperties.class.getName()); private static final long serialVersionUID = 0L; /** Indicates the ingest pipeline used before spans are indexed. no default */ private String pipeline; /** A List of base urls to connect to. Defaults to http://localhost:9300 */ private List<String> hosts; // initialize to null to defer default to transport /** The index prefix to use when generating daily index names. Defaults to zipkin. */ private String index = "zipkin"; /** The date separator used to create the index name. Default to -. */ private char dateSeparator = '-'; /** Sets maximum in-flight requests from this process to any Elasticsearch host. Defaults to 64 */ private int maxRequests = 64; /** Number of shards (horizontal scaling factor) per index. Defaults to 5. */ private int indexShards = 5; /** Number of replicas (redundancy factor) per index. Defaults to 1.` */ private int indexReplicas = 1; /** username used for basic auth. Needed when Shield or X-Pack security is enabled */ private String username; /** password used for basic auth. Needed when Shield or X-Pack security is enabled */ private String password; /** When set, controls the volume of HTTP logging of the Elasticsearch Api. Options are BASIC, HEADERS, BODY */ private HttpLoggingInterceptor.Level httpLogging; public String getPipeline() { return pipeline; } public void setPipeline(String pipeline) { if (pipeline != null && !pipeline.isEmpty()) { this.pipeline = pipeline; } } public List<String> getHosts() { return hosts; } public void setHosts(List<String> hosts) { if (hosts != null && !hosts.isEmpty()) { List<String> converted = new ArrayList<>(); for (String host : hosts) { if (host.startsWith("http://") || host.startsWith("https://")) { converted.add(host); continue; } int port = HttpUrl.parse("http://" + host).port(); if (port == 80) { host += ":9200"; } else if (port == 9300) { log.warning( "Native transport no longer supported. Changing " + host + " to http port 9200"); host = host.replace(":9300", ":9200"); } converted.add("http://" + host); } this.hosts = converted; } } public String getIndex() { return index; } public int getMaxRequests() { return maxRequests; } public void setMaxRequests(int maxRequests) { this.maxRequests = maxRequests; } public void setIndex(String index) { this.index = index; } public int getIndexShards() { return indexShards; } public void setIndexShards(int indexShards) { this.indexShards = indexShards; } public char getDateSeparator() { return dateSeparator; } public void setDateSeparator(char dateSeparator) { this.dateSeparator = dateSeparator; } public int getIndexReplicas() { return indexReplicas; } public void setIndexReplicas(int indexReplicas) { this.indexReplicas = indexReplicas; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public HttpLoggingInterceptor.Level getHttpLogging() { return httpLogging; } public void setHttpLogging(HttpLoggingInterceptor.Level httpLogging) { this.httpLogging = httpLogging; } public ElasticsearchHttpStorage.Builder toBuilder(OkHttpClient client) { ElasticsearchHttpStorage.Builder builder = ElasticsearchHttpStorage.builder(client); if (hosts != null) builder.hosts(hosts); return builder .index(index) .dateSeparator(dateSeparator) .pipeline(pipeline) .maxRequests(maxRequests) .indexShards(indexShards) .indexReplicas(indexReplicas); } }