summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/openecomp/sparky/dal/elasticsearch/config/ElasticSearchConfig.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/openecomp/sparky/dal/elasticsearch/config/ElasticSearchConfig.java')
-rw-r--r--src/main/java/org/openecomp/sparky/dal/elasticsearch/config/ElasticSearchConfig.java543
1 files changed, 543 insertions, 0 deletions
diff --git a/src/main/java/org/openecomp/sparky/dal/elasticsearch/config/ElasticSearchConfig.java b/src/main/java/org/openecomp/sparky/dal/elasticsearch/config/ElasticSearchConfig.java
new file mode 100644
index 0000000..3f2cf7a
--- /dev/null
+++ b/src/main/java/org/openecomp/sparky/dal/elasticsearch/config/ElasticSearchConfig.java
@@ -0,0 +1,543 @@
+/**
+ * ============LICENSE_START===================================================
+ * SPARKY (AAI UI service)
+ * ============================================================================
+ * Copyright © 2017 AT&T Intellectual Property.
+ * Copyright © 2017 Amdocs
+ * All rights reserved.
+ * ============================================================================
+ * 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.
+ * ============LICENSE_END=====================================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ */
+
+package org.openecomp.sparky.dal.elasticsearch.config;
+
+import java.io.BufferedReader;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.Properties;
+
+import org.openecomp.sparky.dal.exception.ElasticSearchOperationException;
+import org.openecomp.sparky.synchronizer.config.TaskProcessorConfig;
+import org.openecomp.sparky.util.ConfigHelper;
+import org.openecomp.sparky.viewandinspect.config.TierSupportUiConstants;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+
+
+/**
+ * The Class ElasticSearchConfig.
+ */
+public class ElasticSearchConfig {
+
+ public static final String CONFIG_FILE =
+ TierSupportUiConstants.DYNAMIC_CONFIG_APP_LOCATION + "elasticsearch.properties";
+
+ private static ElasticSearchConfig instance;
+
+ private String ipAddress;
+
+ private String httpPort;
+
+ private String javaApiPort;
+
+ private String indexName;
+
+ private String type;
+
+ private String clusterName;
+
+ private String mappingsFileName;
+
+ private String settingsFileName;
+
+ private int syncAdapterMaxConcurrentWorkers;
+
+ private String auditIndexName;
+
+ private String topographicalSearchIndex;
+
+ private String entityCountHistoryIndex;
+
+ private String autosuggestIndexname;
+
+ private String entityCountHistoryMappingsFileName;
+
+ private String autoSuggestSettingsFileName;
+
+ private String autoSuggestMappingsFileName;
+
+ private String dynamicMappingsFileName;
+
+ private static final String IP_ADDRESS_DEFAULT = "localhost";
+
+ private static final String HTTP_PORT_DEFAULT = "9200";
+
+ private static final String JAVA_API_PORT_DEFAULT = "9300";
+
+ private static final String TYPE_DEFAULT = "aaiEntities";
+
+ private static final String CLUSTER_NAME_DEFAULT = "elasticsearch";
+
+ private static final String INDEX_NAME_DEFAULT = "entitySearchIndex";
+
+ private static final String AUDIT_INDEX_NAME_DEFAULT = "auditdataindex";
+
+ private static final String TOPOGRAPHICAL_INDEX_NAME_DEFAULT = "topographicalSearchIndex";
+
+ private static final String ENTITY_COUNT_HISTORY_INDEX_NAME_DEFAULT = "entityCountHistory";
+
+ private static final String ENTITY_AUTO_SUGGEST_INDEX_NAME_DEFAULT =
+ TierSupportUiConstants.ENTITY_AUTO_SUGGEST_INDEX_NAME_DEFAULT;
+
+ private static final String ENTITY_AUTO_SUGGEST_SETTINGS_FILE_DEFAULT =
+ TierSupportUiConstants.ENTITY_AUTO_SUGGEST_SETTINGS_FILE_DEFAULT;
+
+ private static final String ENTITY_AUTO_SUGGEST_MAPPINGS_FILE_DEFAULT =
+ TierSupportUiConstants.ENTITY_AUTO_SUGGEST_SETTINGS_FILE_DEFAULT;
+
+ private static final String ENTITY_DYNAMIC_MAPPINGS_FILE_DEFAULT =
+ TierSupportUiConstants.ENTITY_DYNAMIC_MAPPINGS_FILE_DEFAULT;
+
+ private static final String BULK_API = "_bulk";
+
+ private TaskProcessorConfig processorConfig;
+
+ public TaskProcessorConfig getProcessorConfig() {
+ return processorConfig;
+ }
+
+ public void setProcessorConfig(TaskProcessorConfig processorConfig) {
+ this.processorConfig = processorConfig;
+ }
+
+ public static ElasticSearchConfig getConfig() throws Exception {
+
+ if (instance == null) {
+ instance = new ElasticSearchConfig();
+ instance.initializeProperties();
+ }
+
+ return instance;
+ }
+
+ public static void setConfig(ElasticSearchConfig config) {
+ /*
+ * Explicitly allow setting the configuration singleton. This will be useful for automation.
+ */
+
+ ElasticSearchConfig.instance = config;
+ }
+
+ /**
+ * Instantiates a new elastic search config.
+ */
+ public ElasticSearchConfig() {
+ // test method
+ }
+
+ public String getElasticFullUrl(String resourceUrl, String indexName, String indexType)
+ throws Exception {
+ final String host = getIpAddress();
+ final String port = getHttpPort();
+ return String.format("http://%s:%s/%s/%s%s", host, port, indexName, indexType, resourceUrl);
+ }
+
+ public String getElasticFullUrl(String resourceUrl, String indexName) throws Exception {
+ final String host = getIpAddress();
+ final String port = getHttpPort();
+ return String.format("http://%s:%s/%s/%s%s", host, port, indexName,
+ ElasticSearchConfig.getConfig().getType(), resourceUrl);
+ }
+
+ public String getElasticFullUrl(String resourceUrl) throws Exception {
+ final String host = getIpAddress();
+ final String port = getHttpPort();
+ final String indexName = getIndexName();
+ return String.format("http://%s:%s/%s/%s%s", host, port, indexName, getType(), resourceUrl);
+ }
+
+ /**
+ * Initialize properties.
+ */
+ private void initializeProperties() {
+ Properties props = ConfigHelper.loadConfigFromExplicitPath(CONFIG_FILE);
+
+ ipAddress = props.getProperty("elasticsearch.ipAddress", IP_ADDRESS_DEFAULT);
+ httpPort = props.getProperty("elasticsearch.httpPort", "" + HTTP_PORT_DEFAULT);
+ javaApiPort = props.getProperty("elasticsearch.javaApiPort", "" + JAVA_API_PORT_DEFAULT);
+ type = props.getProperty("elasticsearch.type", TYPE_DEFAULT);
+ clusterName = props.getProperty("elasticsearch.clusterName", CLUSTER_NAME_DEFAULT);
+ indexName = props.getProperty("elasticsearch.indexName", INDEX_NAME_DEFAULT);
+ mappingsFileName = props.getProperty("elasticsearch.mappingsFileName");
+ settingsFileName = props.getProperty("elasticsearch.settingsFileName");
+ auditIndexName = props.getProperty("elasticsearch.auditIndexName", AUDIT_INDEX_NAME_DEFAULT);
+ topographicalSearchIndex =
+ props.getProperty("elasticsearch.topographicalIndexName", TOPOGRAPHICAL_INDEX_NAME_DEFAULT);
+ entityCountHistoryIndex = props.getProperty("elasticsearch.entityCountHistoryIndexName",
+ ENTITY_COUNT_HISTORY_INDEX_NAME_DEFAULT);
+ entityCountHistoryMappingsFileName =
+ props.getProperty("elasticsearch.entityCountHistoryMappingsFileName");
+
+ autosuggestIndexname = props.getProperty("elasticsearch.autosuggestIndexname",
+ ENTITY_AUTO_SUGGEST_INDEX_NAME_DEFAULT);
+ autoSuggestSettingsFileName = props.getProperty("elasticsearch.autosuggestSettingsFileName",
+ ENTITY_AUTO_SUGGEST_SETTINGS_FILE_DEFAULT);
+ autoSuggestMappingsFileName = props.getProperty("elasticsearch.autosuggestMappingsFileName",
+ ENTITY_AUTO_SUGGEST_MAPPINGS_FILE_DEFAULT);
+ dynamicMappingsFileName = props.getProperty("elasticsearch.dynamicMappingsFileName",
+ ENTITY_DYNAMIC_MAPPINGS_FILE_DEFAULT);
+
+ syncAdapterMaxConcurrentWorkers =
+ Integer.parseInt(props.getProperty("elasticsearch.syncAdapter.maxConcurrentWorkers", "5"));
+
+ processorConfig = new TaskProcessorConfig();
+ processorConfig.initializeFromProperties(
+ ConfigHelper.getConfigWithPrefix("elasticsearch.taskProcessor", props));
+
+ }
+
+ public String getIpAddress() {
+ return ipAddress;
+ }
+
+ public void setIpAddress(String ipAddress) {
+ this.ipAddress = ipAddress;
+ }
+
+ public String getHttpPort() {
+ return httpPort;
+ }
+
+ public void setHttpPort(String httpPort) {
+ this.httpPort = httpPort;
+ }
+
+ public String getJavaApiPort() {
+ return javaApiPort;
+ }
+
+ public void setJavaApiPort(String javaApiPort) {
+ this.javaApiPort = javaApiPort;
+ }
+
+ public String getIndexName() {
+ return indexName;
+ }
+
+ public void setIndexName(String indexName) {
+ this.indexName = indexName;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public String getClusterName() {
+ return clusterName;
+ }
+
+ public void setClusterName(String clusterName) {
+ this.clusterName = clusterName;
+ }
+
+ public String getMappingsFileName() {
+ return mappingsFileName;
+ }
+
+ public void setMappingsFileName(String mappingsFileName) {
+ this.mappingsFileName = mappingsFileName;
+ }
+
+ public String getSettingsFileName() {
+ return settingsFileName;
+ }
+
+ public int getSyncAdapterMaxConcurrentWorkers() {
+ return syncAdapterMaxConcurrentWorkers;
+ }
+
+ public void setSyncAdapterMaxConcurrentWorkers(int syncAdapterMaxConcurrentWorkers) {
+ this.syncAdapterMaxConcurrentWorkers = syncAdapterMaxConcurrentWorkers;
+ }
+
+ public void setSettingsFileName(String settingsFileName) {
+ this.settingsFileName = settingsFileName;
+ }
+
+ public String getAuditIndexName() {
+ return auditIndexName;
+ }
+
+ public void setAuditIndexName(String auditIndexName) {
+ this.auditIndexName = auditIndexName;
+ }
+
+ public String getTopographicalSearchIndex() {
+ return topographicalSearchIndex;
+ }
+
+ public void setTopographicalSearchIndex(String topographicalSearchIndex) {
+ this.topographicalSearchIndex = topographicalSearchIndex;
+ }
+
+ public String getEntityCountHistoryIndex() {
+ return entityCountHistoryIndex;
+ }
+
+ public void setEntityCountHistoryIndex(String entityCountHistoryIndex) {
+ this.entityCountHistoryIndex = entityCountHistoryIndex;
+ }
+
+
+ public String getEntityCountHistoryMappingsFileName() {
+ return entityCountHistoryMappingsFileName;
+ }
+
+ public void setEntityCountHistoryMappingsFileName(String entityCountHistoryMappingsFileName) {
+ this.entityCountHistoryMappingsFileName = entityCountHistoryMappingsFileName;
+ }
+
+ public String getBulkUrl() {
+ String url = this.getIpAddress();
+ String port = this.getHttpPort();
+ return String.format("http://%s:%s/%s", url, port, BULK_API);
+ }
+
+ public String getConfigAsString(String configItem, String configFileName)
+ throws ElasticSearchOperationException {
+ String indexConfig = null;
+
+ try {
+ indexConfig = ConfigHelper.getFileContents(configFileName);
+ } catch (IOException exc) {
+ throw new ElasticSearchOperationException(
+ "Failed to read index " + configItem + " from file = " + configFileName + ".", exc);
+ }
+
+ if (indexConfig == null) {
+ throw new ElasticSearchOperationException(
+ "Failed to load index " + configItem + " with filename = " + configFileName + ".");
+ }
+ return indexConfig;
+ }
+
+ public String getElasticSearchSettings() throws ElasticSearchOperationException {
+ return getConfigAsString("settings",
+ TierSupportUiConstants.getConfigPath(this.getSettingsFileName()));
+ }
+
+ public String getDynamicMappings() throws ElasticSearchOperationException{
+ return getConfigAsString("mapping",
+ TierSupportUiConstants.getConfigPath(this.getDynamicMappingsFileName()));
+ }
+ public String getElasticSearchMappings() throws ElasticSearchOperationException {
+ return getConfigAsString("mapping",
+ TierSupportUiConstants.getConfigPath(this.getMappingsFileName()));
+ }
+
+ public String getElasticSearchEntityCountHistoryMappings()
+ throws ElasticSearchOperationException {
+ return getConfigAsString("mapping",
+ TierSupportUiConstants.getConfigPath(this.getEntityCountHistoryMappingsFileName()));
+ }
+
+ public String getAutosuggestIndexSettings() throws ElasticSearchOperationException {
+ return getConfigAsString("setting",
+ TierSupportUiConstants.getConfigPath(this.getAutoSuggestSettingsFileName()));
+ }
+
+ public String getAutosuggestIndexMappings() throws ElasticSearchOperationException {
+ return getConfigAsString("mapping",
+ TierSupportUiConstants.getConfigPath(this.getAutoSuggestMappingsFileName()));
+ }
+
+ public String getAutosuggestIndexname() {
+ return autosuggestIndexname;
+ }
+
+ public void setAutosuggestIndexname(String autosuggestIndexname) {
+ this.autosuggestIndexname = autosuggestIndexname;
+ }
+
+ public String getAutoSuggestSettingsFileName() {
+ return autoSuggestSettingsFileName;
+ }
+
+ public void setAutoSuggestSettingsFileName(String autoSuggestSettingsFileName) {
+ this.autoSuggestSettingsFileName = autoSuggestSettingsFileName;
+ }
+
+ public String getAutoSuggestMappingsFileName() {
+ return autoSuggestMappingsFileName;
+ }
+
+ public void setAutoSuggestMappingsFileName(String autoSuggestMappingsFileName) {
+ this.autoSuggestMappingsFileName = autoSuggestMappingsFileName;
+ }
+
+ public String getDynamicMappingsFileName() {
+ return dynamicMappingsFileName;
+ }
+
+ public void setDynamicMappingsFileName(String dynamicMappingsFileName) {
+ this.dynamicMappingsFileName = dynamicMappingsFileName;
+ }
+
+ /**
+ * Builds the elastic search table config.
+ *
+ * @return the string
+ * @throws ElasticSearchOperationException the elastic search operation exception
+ */
+ public String buildElasticSearchTableConfig() throws ElasticSearchOperationException {
+
+ JsonNode esSettingsNode;
+ JsonNode esMappingsNodes;
+ ObjectMapper mapper = new ObjectMapper();
+
+ try {
+ esSettingsNode = mapper.readTree(getElasticSearchSettings());
+ esMappingsNodes = mapper.readTree(getElasticSearchMappings());
+ } catch (IOException e1) {
+ throw new ElasticSearchOperationException("Caught an exception building initial ES index");
+ }
+
+ ObjectNode esConfig = (ObjectNode) mapper.createObjectNode().set("settings", esSettingsNode);
+ ObjectNode mappings = (ObjectNode) mapper.createObjectNode().set(getType(), esMappingsNodes);
+
+ esConfig.set("mappings", mappings);
+
+ try {
+ return mapper.writeValueAsString(esConfig);
+ } catch (JsonProcessingException exc) {
+ throw new ElasticSearchOperationException("Error getting object node as string", exc);
+ }
+
+ }
+
+ /**
+ * Builds the elastic search entity count history table config.
+ *
+ * @return the string
+ * @throws ElasticSearchOperationException the elastic search operation exception
+ */
+ public String buildElasticSearchEntityCountHistoryTableConfig()
+ throws ElasticSearchOperationException {
+
+ JsonNode esSettingsNode;
+ JsonNode esMappingsNodes;
+ ObjectMapper mapper = new ObjectMapper();
+
+ try {
+ esSettingsNode = mapper.readTree(getElasticSearchSettings());
+ esMappingsNodes = mapper.readTree(getElasticSearchEntityCountHistoryMappings());
+ } catch (IOException e1) {
+ throw new ElasticSearchOperationException("Caught an exception building initial ES index");
+ }
+
+ ObjectNode esConfig = (ObjectNode) mapper.createObjectNode().set("settings", esSettingsNode);
+ ObjectNode mappings = (ObjectNode) mapper.createObjectNode().set(getType(), esMappingsNodes);
+
+ esConfig.set("mappings", mappings);
+
+ try {
+ return mapper.writeValueAsString(esConfig);
+ } catch (JsonProcessingException exc) {
+ throw new ElasticSearchOperationException("Error getting object node as string", exc);
+ }
+
+ }
+
+ public String buildAggregationTableConfig() throws ElasticSearchOperationException {
+
+ JsonNode esMappingsNodes;
+ ObjectMapper mapper = new ObjectMapper();
+
+ try {
+ esMappingsNodes = mapper.readTree(this.getDynamicMappings());
+ } catch (IOException e1) {
+ throw new ElasticSearchOperationException(
+ "Caught an exception building Aggreagation ES index");
+ }
+
+ ObjectNode mappings = (ObjectNode) mapper.createObjectNode().set(getType(), esMappingsNodes);
+
+ ObjectNode indexConfig = (ObjectNode) mapper.createObjectNode().set("mappings", mappings);
+
+ try {
+ return mapper.writeValueAsString(indexConfig);
+ } catch (JsonProcessingException exc) {
+ throw new ElasticSearchOperationException("Error getting object node as string", exc);
+ }
+
+ }
+
+ public String buildAutosuggestionTableConfig() throws ElasticSearchOperationException {
+
+ JsonNode esSettingsNode;
+ JsonNode esMappingsNodes;
+ ObjectMapper mapper = new ObjectMapper();
+
+ try {
+ esSettingsNode = mapper.readTree(this.getAutosuggestIndexSettings());
+ esMappingsNodes = mapper.readTree(this.getAutosuggestIndexMappings());
+ } catch (IOException e1) {
+ throw new ElasticSearchOperationException(
+ "Caught an exception building Autosuggestion ES index");
+ }
+
+ ObjectNode indexConfig = (ObjectNode) mapper.createObjectNode().set("settings", esSettingsNode);
+ ObjectNode mappings = (ObjectNode) mapper.createObjectNode().set(getType(), esMappingsNodes);
+
+ indexConfig.set("mappings", mappings);
+
+ try {
+ return mapper.writeValueAsString(indexConfig);
+ } catch (JsonProcessingException exc) {
+ throw new ElasticSearchOperationException("Error getting object node as string", exc);
+ }
+
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public String toString() {
+ return "ElasticSearchConfig [ipAddress=" + ipAddress + ", httpPort=" + httpPort
+ + ", javaApiPort=" + javaApiPort + ", indexName=" + indexName + ", type=" + type
+ + ", clusterName=" + clusterName + ", mappingsFileName=" + mappingsFileName
+ + ", settingsFileName=" + settingsFileName + ", syncAdapterMaxConcurrentWorkers="
+ + syncAdapterMaxConcurrentWorkers + ", auditIndexName=" + auditIndexName
+ + ", topographicalSearchIndex=" + topographicalSearchIndex + ", entityCountHistoryIndex="
+ + entityCountHistoryIndex + ", autosuggestIndexname=" + autosuggestIndexname
+ + ", entityCountHistoryMappingsFileName=" + entityCountHistoryMappingsFileName
+ + ", autoSuggestSettingsFileName=" + autoSuggestSettingsFileName
+ + ", autoSuggestMappingsFileName=" + autoSuggestMappingsFileName
+ + ", dynamicMappingsFileName=" + dynamicMappingsFileName + ", processorConfig="
+ + processorConfig + "]";
+ }
+}