package org.onap.aai.sa.searchdbabstraction.elasticsearch.dao;
import static javax.ws.rs.core.HttpHeaders.CONTENT_TYPE;
-import static javax.ws.rs.core.MediaType.APPLICATION_FORM_URLENCODED;
import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import java.util.Properties;
import java.util.concurrent.atomic.AtomicBoolean;
import javax.ws.rs.HttpMethod;
+import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response.Status;
import javax.ws.rs.core.UriBuilder;
import org.eclipse.jetty.http.HttpStatus;
import org.onap.aai.sa.rest.BulkRequest;
import org.onap.aai.sa.rest.BulkRequest.OperationType;
import org.onap.aai.sa.rest.DocumentSchema;
+import org.onap.aai.sa.rest.SettingConfiguration;
import org.onap.aai.sa.searchdbabstraction.elasticsearch.config.ElasticSearchConfig;
import org.onap.aai.sa.searchdbabstraction.elasticsearch.exception.DocumentStoreOperationException;
import org.onap.aai.sa.searchdbabstraction.elasticsearch.exception.DocumentStoreOperationException.ErrorMessage;
"{\"index\":{\"_index\":\"%s\",\"_type\":\"%s\",\"_id\":\"%s\", \"_version\":\"%s\"}}\n";
private static final String BULK_DELETE_TEMPLATE =
"{ \"delete\": { \"_index\": \"%s\", \"_type\": \"%s\", \"_id\": \"%s\", \"_version\":\"%s\"}}\n";
+ public final static String APPLICATION_XND_JSON_TYPE = new MediaType("application", "x-ndjson").toString();
private final ElasticSearchConfig config;
protected AnalysisConfiguration analysisConfig;
-
+ protected SettingConfiguration settingConfig;
public ElasticSearchHttpController(ElasticSearchConfig config) {
this.config = config;
analysisConfig = new AnalysisConfiguration();
+ settingConfig = new SettingConfiguration();
String rootUrl = null;
try {
+ if ("https".equals(config.getUriScheme())) {
+ new ElasticSearchHttpsController(config);
+ }
rootUrl = buildUrl(createUriBuilder("")).toString();
logger.info(SearchDbMsgs.ELASTIC_SEARCH_CONNECTION_ATTEMPT, rootUrl);
checkConnection();
return analysisConfig;
}
+ public ElasticSearchConfig getElasticSearchConfig() {
+ return config;
+ }
+
@Override
public OperationResult createIndex(String index, DocumentSchema documentSchema) {
try {
// Submit the request to ElasticSearch to create the index using a default document type.
- OperationResult result = createTable(index, DEFAULT_TYPE, analysisConfig.getEsIndexSettings(),
- DocumentSchemaUtil.generateDocumentMappings(documentSchema));
+ OperationResult result = createTable(index, DEFAULT_TYPE, analysisConfig,
+ DocumentSchemaUtil.generateDocumentMappings(documentSchema), settingConfig);
// ElasticSearch will return us a 200 code on success when we
// want to report a 201, so translate the result here.
}
// @Override
- protected OperationResult createTable(String indexName, String typeName, String indexSettings, String indexMappings)
- throws DocumentStoreOperationException {
- if (indexSettings == null) {
- logger.debug("No settings provided.");
+ protected OperationResult createTable(String indexName, String typeName, AnalysisConfiguration ac,
+ String indexMappings, SettingConfiguration sc) throws DocumentStoreOperationException {
+ if (ac.getEsIndexSettings() == null) {
+ logger.debug("No analysis settings provided.");
}
if (indexMappings == null) {
MdcOverride override = getStartTime(new MdcOverride());
HttpURLConnection conn = createConnection(buildUrl(createUriBuilder(indexName)), HttpMethod.PUT);
-
+
StringBuilder sb = new StringBuilder(128);
sb.append("{ \"settings\" : ");
- sb.append(indexSettings);
+ sb.append(sc.getSettingsWithAnalysis(ac));
sb.append(",");
sb.append("\"mappings\" : {");
conn = (HttpURLConnection) buildUrl(createUriBuilder("_bulk")).openConnection();
conn.setRequestMethod(HttpMethod.PUT);
conn.setDoOutput(true);
- conn.setRequestProperty(CONTENT_TYPE, APPLICATION_FORM_URLENCODED);
+ conn.setRequestProperty(CONTENT_TYPE, APPLICATION_XND_JSON_TYPE);
+ if(config.useAuth()){
+ conn.setRequestProperty("Authorization", config.getAuthValue());
+ }
conn.setRequestProperty("Connection", "Close");
} catch (IOException e) {
conn = (HttpURLConnection) url.openConnection();
conn.setRequestProperty(CONTENT_TYPE, APPLICATION_JSON);
conn.setDoOutput(true);
+ if (config.useAuth()) {
+ conn.setRequestProperty("Authorization", config.getAuthValue());
+ }
} catch (IOException e) {
shutdownConnection(conn);
throw new DocumentStoreOperationException("Failed to open connection to URL " + url, e);
builder.host(config.getIpAddress());
String port = Optional.ofNullable(config.getHttpPort()).orElse("0");
builder.port(Integer.valueOf(port));
- builder.scheme("http");
+ builder.scheme(config.getUriScheme());
return builder;
}
metricsLogger.info(message,
new LogFields() //
.setField(LogLine.DefinedFields.RESPONSE_CODE, operationResult.getResultCode())
- .setField(LogLine.DefinedFields.RESPONSE_DESCRIPTION, operationResult.getResult()),
+ .setField(LogLine.DefinedFields.RESPONSE_DESCRIPTION, operationResult.getResult())
+ .setField(LogLine.DefinedFields.SERVER_IP, "ElasticHost-"+config.getIpAddress()),
override, args);
}
}