use of com.couchbase.connector.config.common.ClientCertConfig in project couchbase-elasticsearch-connector by couchbase.
the class ElasticsearchConfig method from.
static ImmutableElasticsearchConfig from(ConfigTable config) {
config.expectOnly("hosts", "username", "pathToPassword", "secureConnection", "clientCertificate", "aws", "bulkRequestLimits", "docStructure", "typeDefaults", "type", "rejectionLog");
final boolean secureConnection = config.getBoolean("secureConnection").orElse(false);
final AwsConfig aws = AwsConfig.from(config.getTableOrEmpty("aws"));
final ClientCertConfig clientCert = ClientCertConfig.from(config.getTableOrEmpty("clientCertificate"), "elasticsearch.clientCertificate");
// Standard ES HTTP port is 9200. Amazon Elasticsearch Service listens on ports 80 & 443.
final int defaultPort = aws.region().isEmpty() ? 9200 : secureConnection ? 443 : 80;
final ImmutableElasticsearchConfig.Builder builder = ImmutableElasticsearchConfig.builder().secureConnection(secureConnection).hosts(config.getRequiredStrings("hosts").stream().map(h -> createHttpHost(h, defaultPort, secureConnection)).collect(toList())).username(config.getString("username").orElse("")).password(readPassword(config, "elasticsearch", "pathToPassword")).bulkRequest(BulkRequestConfig.from(config.getTableOrEmpty("bulkRequestLimits"))).aws(aws).clientCert(clientCert).docStructure(DocStructureConfig.from(config.getTableOrEmpty("docStructure")));
final ConfigTable typeDefaults = config.getTableOrEmpty("typeDefaults");
typeDefaults.expectOnly("typeName", "index", "pipeline", "ignore", "ignoreDeletes", "matchOnQualifiedKey");
final TypeConfig defaultTypeConfig = ImmutableTypeConfig.builder().index(typeDefaults.getString("index").orElse(null)).type(typeDefaults.getString("typeName").orElse("_doc")).pipeline(typeDefaults.getString("pipeline").orElse(null)).ignore(typeDefaults.getBoolean("ignore").orElse(false)).ignoreDeletes(typeDefaults.getBoolean("ignoreDeletes").orElse(false)).matchOnQualifiedKey(typeDefaults.getBoolean("matchOnQualifiedKey").orElse(false)).matcher(s -> null).build();
ImmutableList.Builder<TypeConfig> typeConfigs = ImmutableList.builder();
ConfigArray types = config.getArrayOrEmpty("type");
for (int i = 0; i < types.size(); i++) {
typeConfigs.add(TypeConfig.from(types.getTable(i), types.inputPositionOf(i), defaultTypeConfig));
}
builder.types(typeConfigs.build());
builder.rejectLog(RejectLogConfig.from(config.getTableOrEmpty("rejectionLog"), defaultTypeConfig.type()));
return builder.build();
}
use of com.couchbase.connector.config.common.ClientCertConfig in project couchbase-elasticsearch-connector by couchbase.
the class ElasticsearchHelper method newElasticsearchClient.
public static RestHighLevelClient newElasticsearchClient(List<HttpHost> hosts, String username, String password, boolean secureConnection, Supplier<KeyStore> trustStore, ClientCertConfig clientCert, AwsConfig aws, TimeValue bulkRequestTimeout) throws Exception {
final int connectTimeoutMillis = (int) SECONDS.toMillis(5);
final int socketTimeoutMillis = (int) Math.max(SECONDS.toMillis(60), toMillis(bulkRequestTimeout) + SECONDS.toMillis(3));
LOGGER.info("Elasticsearch client connect timeout = {}ms; socket timeout={}ms", connectTimeoutMillis, socketTimeoutMillis);
final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(username, password));
final SSLContext sslContext = !secureConnection ? null : newSslContext(trustStore.get(), clientCert);
final RestClientBuilder builder = RestClient.builder(Iterables.toArray(hosts, HttpHost.class)).setHttpClientConfigCallback(httpClientBuilder -> {
httpClientBuilder.setSSLContext(sslContext);
if (!clientCert.use()) {
httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
}
awsSigner(aws).ifPresent(httpClientBuilder::addInterceptorLast);
return httpClientBuilder;
}).setRequestConfigCallback(requestConfigBuilder -> requestConfigBuilder.setConnectTimeout(connectTimeoutMillis).setSocketTimeout(socketTimeoutMillis)).setFailureListener(new RestClient.FailureListener() {
@Override
public void onFailure(Node host) {
Metrics.elasticsearchHostOffline().increment();
}
});
return new RestHighLevelClient(builder);
}
Aggregations