2 * ============LICENSE_START=======================================================
3 * ONAP : ccsdk features
4 * ================================================================================
5 * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property.
7 * ================================================================================
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
19 * ============LICENSE_END=========================================================
22 package org.onap.ccsdk.features.sdnr.wt.dataprovider.database.elasticsearch;
24 import java.net.MalformedURLException;
26 import java.util.ArrayList;
27 import java.util.Arrays;
28 import java.util.List;
29 import org.onap.ccsdk.features.sdnr.wt.common.configuration.Configuration;
30 import org.onap.ccsdk.features.sdnr.wt.common.configuration.ConfigurationFileRepresentation;
31 import org.onap.ccsdk.features.sdnr.wt.common.configuration.filechange.IConfigChangedListener;
32 import org.onap.ccsdk.features.sdnr.wt.common.database.config.HostInfo;
33 import org.onap.ccsdk.features.sdnr.wt.common.database.config.HostInfo.Protocol;
34 import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.IEsConfig;
35 import org.slf4j.Logger;
36 import org.slf4j.LoggerFactory;
38 public class EsConfig implements Configuration, IEsConfig {
40 private static final Logger LOG = LoggerFactory.getLogger(EsConfig.class);
42 public static final String SECTION_MARKER_ES = "es";
44 private static final String PROPERTY_KEY_DBHOSTS = "esHosts";
45 private static final String PROPERTY_KEY_TRUSTALLCERTS = "esTrustAllCerts";
46 private static final String PROPERTY_KEY_ARCHIVE_LIMIT = "esArchiveLifetimeSeconds";
47 private static final String PROPERTY_KEY_CLUSTER = "esCluster";
48 private static final String PROPERTY_KEY_ARCHIVE_INTERVAL = "esArchiveCheckIntervalSeconds";
49 private static final String PROPERTY_KEY_NODE = "esNode";
50 private static final String PROPERTY_KEY_AUTH_USERNAME = "esAuthUsername";
51 private static final String PROPERTY_KEY_AUTH_PASSWORD = "esAuthPassword";
52 private static final String PROPERTY_KEY_FULLSIZE = "esFullsize";
55 private static String defaultHostinfo = "${SDNRDBURL}";
56 private static final String DEFAULT_VALUE_CLUSTER = "";
57 /** check db data in this interval [in seconds] 0 deactivated */
58 private static final String DEFAULT_ARCHIVE_INTERVAL_SEC = "0";
59 /** keep data for this time [in seconds] 30 days */
60 private static final String DEFAULT_ARCHIVE_LIMIT_SEC = String.valueOf(60L * 60L * 24L * 30L);
61 private static final String DEFAULT_VALUE_NODE = "elasticsearchnode";
62 private static final String DEFAULT_VALUE_DBUSERNAME = "${SDNRDBUSERNAME}";
63 private static final String DEFAULT_VALUE_DBPASSWORD = "${SDNRDBPASSWORD}";
64 private static final String DEFAULT_VALUE_TRUSTALLCERTS = "${SDNRDBTRUSTALLCERTS}";
65 private static final String DEFAULT_VALUE_FULLSIZE = "${SDNRDBFULLSIZEREQUESTS}";
67 private final ConfigurationFileRepresentation configuration;
69 public EsConfig(ConfigurationFileRepresentation configuration) {
71 this.configuration = configuration;
72 this.configuration.addSection(SECTION_MARKER_ES);
80 public void setNode(String nodeName) {
81 configuration.setProperty(SECTION_MARKER_ES, PROPERTY_KEY_NODE, nodeName);
88 public String getNode() {
89 return configuration.getProperty(SECTION_MARKER_ES, PROPERTY_KEY_NODE);
92 public HostInfo[] getHosts() {
93 String dbHosts = configuration.getProperty(SECTION_MARKER_ES, PROPERTY_KEY_DBHOSTS);
94 return parseHosts(dbHosts);
97 public void setHosts(HostInfo[] hosts) {
98 this.configuration.setProperty(SECTION_MARKER_ES, PROPERTY_KEY_DBHOSTS, printHosts(hosts));
102 public String getCluster() {
103 return configuration.getProperty(SECTION_MARKER_ES, PROPERTY_KEY_ARCHIVE_INTERVAL);
106 public void setCluster(String cluster) {
107 configuration.setProperty(SECTION_MARKER_ES, PROPERTY_KEY_CLUSTER, cluster);
110 public boolean hasBasicAuthCredentials() {
111 return this.getBasicAuthUsername() != null && this.getBasicAuthPassword() != null
112 && !this.getBasicAuthUsername().isEmpty() && !this.getBasicAuthPassword().isEmpty();
115 public String getBasicAuthUsername() {
116 return this.configuration.getProperty(SECTION_MARKER_ES, PROPERTY_KEY_AUTH_USERNAME);
119 public String getBasicAuthPassword() {
120 return this.configuration.getProperty(SECTION_MARKER_ES, PROPERTY_KEY_AUTH_PASSWORD);
124 public long getArchiveCheckIntervalSeconds() {
125 return configuration.getPropertyLong(SECTION_MARKER_ES, PROPERTY_KEY_ARCHIVE_INTERVAL).orElse(0L);
128 public boolean trustAllCerts() {
129 return configuration.getPropertyBoolean(SECTION_MARKER_ES, PROPERTY_KEY_TRUSTALLCERTS);
132 public void setArchiveCheckIntervalSeconds(long seconds) {
133 configuration.setProperty(SECTION_MARKER_ES, PROPERTY_KEY_ARCHIVE_INTERVAL, seconds);
137 public long getArchiveLifetimeSeconds() {
138 return configuration.getPropertyLong(SECTION_MARKER_ES, PROPERTY_KEY_ARCHIVE_LIMIT).orElse(0L);
141 public void setArchiveLimit(long seconds) {
142 configuration.setProperty(SECTION_MARKER_ES, PROPERTY_KEY_ARCHIVE_LIMIT, seconds);
146 public String getSectionName() {
147 return SECTION_MARKER_ES;
151 public synchronized void defaults() {
152 // Add default if not available
153 configuration.setPropertyIfNotAvailable(SECTION_MARKER_ES, PROPERTY_KEY_DBHOSTS, defaultHostinfo);
154 configuration.setPropertyIfNotAvailable(SECTION_MARKER_ES, PROPERTY_KEY_ARCHIVE_LIMIT,
155 DEFAULT_ARCHIVE_LIMIT_SEC);
156 configuration.setPropertyIfNotAvailable(SECTION_MARKER_ES, PROPERTY_KEY_CLUSTER, DEFAULT_VALUE_CLUSTER);
157 configuration.setPropertyIfNotAvailable(SECTION_MARKER_ES, PROPERTY_KEY_ARCHIVE_INTERVAL,
158 DEFAULT_ARCHIVE_INTERVAL_SEC);
159 configuration.setPropertyIfNotAvailable(SECTION_MARKER_ES, PROPERTY_KEY_NODE, DEFAULT_VALUE_NODE);
160 configuration.setPropertyIfNotAvailable(SECTION_MARKER_ES, PROPERTY_KEY_AUTH_USERNAME,
161 DEFAULT_VALUE_DBUSERNAME);
162 configuration.setPropertyIfNotAvailable(SECTION_MARKER_ES, PROPERTY_KEY_AUTH_PASSWORD,
163 DEFAULT_VALUE_DBPASSWORD);
164 configuration.setPropertyIfNotAvailable(SECTION_MARKER_ES, PROPERTY_KEY_TRUSTALLCERTS,
165 DEFAULT_VALUE_TRUSTALLCERTS);
166 configuration.setPropertyIfNotAvailable(SECTION_MARKER_ES, PROPERTY_KEY_FULLSIZE,
167 DEFAULT_VALUE_FULLSIZE);
172 public void unregisterConfigChangedListener(IConfigChangedListener archiveCleanService) {
173 configuration.unregisterConfigChangedListener(archiveCleanService);
177 public void registerConfigChangedListener(IConfigChangedListener archiveCleanService) {
178 configuration.registerConfigChangedListener(archiveCleanService);
181 /** @TODO Shift to own class **/
182 private static String printHosts(HostInfo[] h) {
183 StringBuilder sb = new StringBuilder();
184 for (int i = 0; i < h.length; i++) {
185 sb.append(h[i].toUrl());
186 if (i != h.length - 1) {
190 return sb.toString();
193 /** @TODO Shift to own class **/
194 private static HostInfo[] parseHosts(String string) {
195 List<HostInfo> infos = new ArrayList<>();
196 String[] list = string.split(",");
197 if (list.length > 0) {
198 for (String item : list) {
200 URL url = new URL(item);
201 infos.add(new HostInfo(url.getHost(), url.getPort(), Protocol.getValueOf(url.getProtocol())));
202 } catch (MalformedURLException e) {
203 LOG.warn("problem parsing url {} : {}", item, e.getMessage());
207 HostInfo[] a = new HostInfo[infos.size()];
208 return infos.toArray(a);
212 public String toString() {
213 return "EsConfig [getNode()=" + getNode() + ", getHosts()=" + Arrays.toString(getHosts()) + ", getCluster()="
214 + getCluster() + ", getArchiveCheckIntervalSeconds()=" + getArchiveCheckIntervalSeconds()
215 + ", getArchiveLifetimeSeconds()=" + getArchiveLifetimeSeconds() + ", getSectionName()="
216 + getSectionName() + "]";
220 public boolean doFullsizeRequests() {
221 return configuration.getPropertyBoolean(SECTION_MARKER_ES, PROPERTY_KEY_FULLSIZE);