Search service configurable index settings
[aai/search-data-service.git] / src / main / java / org / onap / aai / sa / searchdbabstraction / elasticsearch / dao / ElasticSearchHttpController.java
index 6087488..a4af160 100644 (file)
@@ -22,7 +22,6 @@
 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;
@@ -53,6 +52,7 @@ import java.util.Optional;
 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;
@@ -71,6 +71,7 @@ import org.onap.aai.sa.rest.ApiUtils;
 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;
@@ -127,14 +128,17 @@ public class ElasticSearchHttpController implements DocumentStoreInterface {
             "{\"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 {
@@ -174,12 +178,16 @@ public class ElasticSearchHttpController implements DocumentStoreInterface {
         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.
@@ -230,10 +238,10 @@ public class ElasticSearchHttpController implements DocumentStoreInterface {
     }
 
     // @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) {
@@ -243,10 +251,10 @@ public class ElasticSearchHttpController implements DocumentStoreInterface {
         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\" : {");
@@ -501,7 +509,10 @@ public class ElasticSearchHttpController implements DocumentStoreInterface {
                 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) {
@@ -1392,7 +1403,8 @@ public class ElasticSearchHttpController implements DocumentStoreInterface {
         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);
     }
 }