2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
6 * Copyright © 2017 Amdocs
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=========================================================
21 * ECOMP is a trademark and service mark of AT&T Intellectual Property.
23 package org.openecomp.sparky.synchronizer.config;
25 import java.text.DateFormat;
26 import java.text.SimpleDateFormat;
27 import java.util.Arrays;
28 import java.util.Calendar;
29 import java.util.Date;
30 import java.util.List;
31 import java.util.Properties;
32 import java.util.regex.Matcher;
33 import java.util.regex.Pattern;
35 import org.openecomp.cl.api.Logger;
36 import org.openecomp.cl.eelf.LoggerFactory;
37 import org.openecomp.sparky.logging.AaiUiMsgs;
38 import org.openecomp.sparky.util.ConfigHelper;
39 import org.openecomp.sparky.viewandinspect.config.TierSupportUiConstants;
43 * The Class SynchronizerConfiguration.
45 public class SynchronizerConfiguration {
47 private static final Logger LOG = LoggerFactory.getInstance().getLogger(SynchronizerConfiguration.class);
49 public static final String CONFIG_FILE =
50 TierSupportUiConstants.DYNAMIC_CONFIG_APP_LOCATION + "synchronizer.properties";
52 private static SynchronizerConfiguration instance;
54 public static final String DEPTH_MODIFIER = "?depth=0";
55 public static final String DEPTH_ALL_MODIFIER = "?depth=all";
56 public static final String DEPTH_AND_NODES_ONLY_MODIFIER = "?depth=0&nodes-only";
57 public static final String NODES_ONLY_MODIFIER = "?nodes-only";
59 public static SynchronizerConfiguration getConfig() throws Exception {
61 if (instance == null) {
62 instance = new SynchronizerConfiguration();
63 instance.initialize();
70 * Instantiates a new synchronizer configuration.
72 public SynchronizerConfiguration() {
79 * @throws Exception the exception
81 protected void initialize() throws Exception {
83 Properties props = ConfigHelper.loadConfigFromExplicitPath(CONFIG_FILE);
85 // parse config for startup sync
87 syncTaskInitialDelayInMs =
88 Integer.parseInt(props.getProperty("synchronizer.syncTask.initialDelayInMs",
89 SynchronizerConstants.DEFAULT_INITIAL_DELAY_IN_MS));
90 if (syncTaskInitialDelayInMs < 0) {
91 throw new Exception();
93 } catch (Exception exc) {
94 this.setConfigOkForStartupSync(false);
95 syncTaskInitialDelayInMs = SynchronizerConstants.DEFAULT_CONFIG_ERROR_INT_VALUE;
96 String message = "Invalid configuration for synchronizer parameter:"
97 + " 'synchronizer.syncTask.initialDelayInMs'";
98 LOG.error(AaiUiMsgs.SYNC_INVALID_CONFIG_PARAM, message);
101 // parse config for periodic sync
103 syncTaskFrequencyInDay =
104 Integer.parseInt(props.getProperty("synchronizer.syncTask.taskFrequencyInDay",
105 SynchronizerConstants.DEFAULT_TASK_FREQUENCY_IN_DAY));
106 if (syncTaskFrequencyInDay < 0) {
107 throw new Exception();
109 } catch (Exception exc) {
110 this.setConfigOkForPeriodicSync(false);
111 syncTaskFrequencyInDay = SynchronizerConstants.DEFAULT_CONFIG_ERROR_INT_VALUE;
112 String message = "Invalid configuration for synchronizer parameter:"
113 + " 'synchronizer.syncTask.taskFrequencyInDay'";
114 LOG.error(AaiUiMsgs.SYNC_INVALID_CONFIG_PARAM, message);
118 syncTaskStartTime = props.getProperty("synchronizer.syncTask.startTimestamp",
119 SynchronizerConstants.DEFAULT_START_TIMESTAMP); // Default 05:00:00 UTC
120 Pattern pattern = Pattern.compile(SynchronizerConstants.TIMESTAMP24HOURS_PATTERN);
121 Matcher matcher = pattern.matcher(syncTaskStartTime);
122 if (!matcher.matches()) {
123 throw new Exception();
126 List<String> timestampVal = Arrays.asList(syncTaskStartTime.split(" "));
128 if (timestampVal.size() == SynchronizerConstants.COMPONENTS_IN_TIMESTAMP) {
129 // Need both time and timezone offset
130 syncTaskStartTimeTimeZone = timestampVal
131 .get(SynchronizerConstants.IDX_TIMEZONE_IN_TIMESTAMP).replaceAll("UTC", "GMT");
133 String time = timestampVal.get(SynchronizerConstants.IDX_TIME_IN_TIMESTAMP);
134 DateFormat format = new SimpleDateFormat("HH:mm:ss");
135 Date date = format.parse(time);
136 Calendar calendar = Calendar.getInstance();
137 calendar.setTime(date);
139 syncTaskStartTimeHr = calendar.get(Calendar.HOUR_OF_DAY);
140 syncTaskStartTimeMin = calendar.get(Calendar.MINUTE);
141 syncTaskStartTimeSec = calendar.get(Calendar.SECOND);
143 LOG.info(AaiUiMsgs.SYNC_START_TIME);
145 } catch (Exception exc) {
146 this.setConfigOkForPeriodicSync(false);
147 String message = "Invalid configuration for synchronizer parameter:"
148 + " 'synchronizer.syncTask.startTimestamp'";
149 LOG.error(AaiUiMsgs.SYNC_INVALID_CONFIG_PARAM, message);
152 scrollContextTimeToLiveInMinutes =
153 Integer.parseInt(props.getProperty("synchronizer.scrollContextTimeToLiveInMinutes", "5"));
154 numScrollContextItemsToRetrievePerRequest = Integer.parseInt(
155 props.getProperty("synchronizer.numScrollContextItemsToRetrievePerRequest", "5000"));
157 resolverProgressLogFrequencyInMs = Long
158 .parseLong(props.getProperty("synchronizer.resolver.progressLogFrequencyInMs", "60000"));
159 resolverQueueMonitorFrequencyInMs = Long
160 .parseLong(props.getProperty("synchronizer.resolver.queueMonitorFrequencyInMs", "1000"));
162 indexIntegrityValidatorEnabled = Boolean
163 .parseBoolean(props.getProperty("synchronizer.indexIntegrityValidator.enabled", "false"));
164 indexIntegrityValidatorFrequencyInMs = Long.parseLong(
165 props.getProperty("synchronizer.indexIntegrityValidatorFrequencyInMs", "300000"));
167 displayVerboseQueueManagerStats = Boolean
168 .parseBoolean(props.getProperty("synchronizer.resolver.displayVerboseQueueManagerStats"));
170 resourceNotFoundErrorsSupressed =
171 Boolean.parseBoolean(props.getProperty("synchronizer.suppressResourceNotFoundErrors"));
173 nodesOnlyModifierEnabled =
174 Boolean.parseBoolean(props.getProperty("synchronizer.applyNodesOnlyModifier"));
176 historicalEntitySummarizerEnabled = Boolean
177 .parseBoolean(props.getProperty("synchronizer.historicalEntitySummarizerEnabled", "true"));
178 historicalEntitySummarizedFrequencyInMinutes = Long.parseLong(
179 props.getProperty("synchronizer.historicalEntitySummarizedFrequencyInMinutes", "60"));
181 autosuggestSynchronizationEnabled = Boolean
182 .parseBoolean(props.getProperty("synchronizer.autosuggestSynchronizationEnabled", "true"));
184 if (LOG.isDebugEnabled()) {
185 LOG.debug(AaiUiMsgs.DEBUG_GENERIC, this.toString());
189 public boolean isNodesOnlyModifierEnabled() {
190 return nodesOnlyModifierEnabled;
193 public void setNodesOnlyModifierEnabled(boolean nodesOnlyModifierEnabled) {
194 this.nodesOnlyModifierEnabled = nodesOnlyModifierEnabled;
197 public int getSyncTaskInitialDelayInMs() {
198 return syncTaskInitialDelayInMs;
201 public void setSyncTaskInitialDelayInMs(int syncTaskInitialDelayInMs) {
202 this.syncTaskInitialDelayInMs = syncTaskInitialDelayInMs;
205 public boolean isDisplayVerboseQueueManagerStats() {
206 return displayVerboseQueueManagerStats;
209 public void setDisplayVerboseQueueManagerStats(boolean displayVerboseQueueManagerStats) {
210 this.displayVerboseQueueManagerStats = displayVerboseQueueManagerStats;
213 public boolean isHistoricalEntitySummarizerEnabled() {
214 return historicalEntitySummarizerEnabled;
217 public void setHistoricalEntitySummarizerEnabled(boolean historicalEntitySummarizerEnabled) {
218 this.historicalEntitySummarizerEnabled = historicalEntitySummarizerEnabled;
221 public long getHistoricalEntitySummarizedFrequencyInMinutes() {
222 return historicalEntitySummarizedFrequencyInMinutes;
225 public void setHistoricalEntitySummarizedFrequencyInMinutes(
226 long historicalEntitySummarizedFrequencyInMinutes) {
227 this.historicalEntitySummarizedFrequencyInMinutes =
228 historicalEntitySummarizedFrequencyInMinutes;
231 private int syncTaskInitialDelayInMs;
233 private int syncTaskFrequencyInMs;
235 private int scrollContextTimeToLiveInMinutes;
237 private int numScrollContextItemsToRetrievePerRequest;
239 private long resolverProgressLogFrequencyInMs;
241 private long resolverQueueMonitorFrequencyInMs;
243 private boolean indexIntegrityValidatorEnabled;
245 private long indexIntegrityValidatorFrequencyInMs;
247 private int syncTaskFrequencyInDay;
249 private String syncTaskStartTime;
251 private int syncTaskStartTimeHr = 5; // for default sync start time
253 private int syncTaskStartTimeMin;
255 private int syncTaskStartTimeSec;
257 private String syncTaskStartTimeTimeZone;
259 private boolean displayVerboseQueueManagerStats;
261 private boolean resourceNotFoundErrorsSupressed;
263 private boolean nodesOnlyModifierEnabled;
265 private boolean historicalEntitySummarizerEnabled;
267 private boolean autosuggestSynchronizationEnabled;
269 private long historicalEntitySummarizedFrequencyInMinutes;
272 private boolean configOkForStartupSync = true;
274 private boolean configOkForPeriodicSync = true;
276 public boolean isResourceNotFoundErrorsSupressed() {
277 return resourceNotFoundErrorsSupressed;
280 public void setResourceNotFoundErrorsSupressed(boolean resourceNotFoundErrorsSupressed) {
281 this.resourceNotFoundErrorsSupressed = resourceNotFoundErrorsSupressed;
284 public int getScrollContextTimeToLiveInMinutes() {
285 return scrollContextTimeToLiveInMinutes;
288 public void setScrollContextTimeToLiveInMinutes(int scrollContextTimeToLiveInMinutes) {
289 this.scrollContextTimeToLiveInMinutes = scrollContextTimeToLiveInMinutes;
292 public int getNumScrollContextItemsToRetrievePerRequest() {
293 return numScrollContextItemsToRetrievePerRequest;
296 public void setNumScrollContextItemsToRetrievePerRequest(
297 int numScrollContextItemsToRetrievePerRequest) {
298 this.numScrollContextItemsToRetrievePerRequest = numScrollContextItemsToRetrievePerRequest;
301 public int getSyncTaskFrequencyInDay() {
302 return syncTaskFrequencyInDay;
305 public void setSyncTaskFrequencyInDay(int syncTaskFrequencyInDay) {
306 this.syncTaskFrequencyInDay = syncTaskFrequencyInDay;
309 public String getSyncTaskStartTime() {
310 return syncTaskStartTime;
313 public void setSyncTaskStartTime(String syncTaskStartTime) {
314 this.syncTaskStartTime = syncTaskStartTime;
317 public int getSyncTaskStartTimeHr() {
318 return syncTaskStartTimeHr;
321 public void setSyncTaskStartTimeHr(int syncTaskStartTimeHr) {
322 this.syncTaskStartTimeHr = syncTaskStartTimeHr;
325 public int getSyncTaskStartTimeMin() {
326 return syncTaskStartTimeMin;
329 public void setSyncTaskStartTimeMin(int syncTaskStartTimeMin) {
330 this.syncTaskStartTimeMin = syncTaskStartTimeMin;
333 public int getSyncTaskStartTimeSec() {
334 return syncTaskStartTimeSec;
337 public void setSyncTaskStartTimeSec(int syncTaskStartTimeSec) {
338 this.syncTaskStartTimeSec = syncTaskStartTimeSec;
341 public String getSyncTaskStartTimeTimeZone() {
342 return syncTaskStartTimeTimeZone;
345 public void setSyncTaskStartTimeTimeZone(String syncTaskStartTimeTimeZone) {
346 this.syncTaskStartTimeTimeZone = syncTaskStartTimeTimeZone;
349 public int getSyncTaskFrequencyInMs() {
350 return syncTaskFrequencyInMs;
353 public void setSyncTaskFrequencyInMs(int syncTaskFrequencyInMs) {
354 this.syncTaskFrequencyInMs = syncTaskFrequencyInMs;
357 public long getResolverProgressLogFrequencyInMs() {
358 return resolverProgressLogFrequencyInMs;
361 public void setResolverProgressLogFrequencyInMs(long resolverProgressLogFrequencyInMs) {
362 this.resolverProgressLogFrequencyInMs = resolverProgressLogFrequencyInMs;
365 public long getResolverQueueMonitorFrequencyInMs() {
366 return resolverQueueMonitorFrequencyInMs;
369 public void setResolverQueueMonitorFrequencyInMs(long resolverQueueMonitorFrequencyInMs) {
370 this.resolverQueueMonitorFrequencyInMs = resolverQueueMonitorFrequencyInMs;
373 public boolean isIndexIntegrityValidatorEnabled() {
374 return indexIntegrityValidatorEnabled;
377 public void setIndexIntegrityValidatorEnabled(boolean indexIntegrityValidatorEnabled) {
378 this.indexIntegrityValidatorEnabled = indexIntegrityValidatorEnabled;
381 public long getIndexIntegrityValidatorFrequencyInMs() {
382 return indexIntegrityValidatorFrequencyInMs;
385 public void setIndexIntegrityValidatorFrequencyInMs(long indexIntegrityValidatorFrequencyInMs) {
386 this.indexIntegrityValidatorFrequencyInMs = indexIntegrityValidatorFrequencyInMs;
389 public boolean isConfigOkForStartupSync() {
390 return configOkForStartupSync;
393 public void setConfigOkForStartupSync(boolean configOkForStartupSync) {
394 this.configOkForStartupSync = configOkForStartupSync;
397 public boolean isConfigOkForPeriodicSync() {
398 return configOkForPeriodicSync;
401 public void setConfigOkForPeriodicSync(boolean configOkForPeriodicSync) {
402 this.configOkForPeriodicSync = configOkForPeriodicSync;
405 public boolean isConfigDisabledForInitialSync() {
406 return syncTaskInitialDelayInMs == SynchronizerConstants.DELAY_NO_STARTUP_SYNC_IN_MS;
409 public boolean isAutosuggestSynchronizationEnabled() {
410 return autosuggestSynchronizationEnabled;
413 public void setAutosuggestSynchronizationEnabled(boolean autosuggestSynchronizationEnabled) {
414 this.autosuggestSynchronizationEnabled = autosuggestSynchronizationEnabled;
418 * @see java.lang.Object#toString()
421 public String toString() {
422 return "SynchronizerConfiguration [syncTaskInitialDelayInMs=" + syncTaskInitialDelayInMs
423 + ", syncTaskFrequencyInMs=" + syncTaskFrequencyInMs + ", scrollContextTimeToLiveInMinutes="
424 + scrollContextTimeToLiveInMinutes + ", numScrollContextItemsToRetrievePerRequest="
425 + numScrollContextItemsToRetrievePerRequest + ", resolverProgressLogFrequencyInMs="
426 + resolverProgressLogFrequencyInMs + ", resolverQueueMonitorFrequencyInMs="
427 + resolverQueueMonitorFrequencyInMs + ", indexIntegrityValidatorEnabled="
428 + indexIntegrityValidatorEnabled + ", indexIntegrityValidatorFrequencyInMs="
429 + indexIntegrityValidatorFrequencyInMs + ", ssyncTaskFrequencyInDay="
430 + syncTaskFrequencyInDay + ", syncTaskStartTime=" + syncTaskStartTime
431 + ", syncTaskStartTimeHr=" + syncTaskStartTimeHr + ", syncTaskStartTimeMin="
432 + syncTaskStartTimeMin + ", syncTaskStartTimeSec=" + syncTaskStartTimeSec
433 + ", syncTaskStartTimeTimeZone=" + syncTaskStartTimeTimeZone
434 + ", displayVerboseQueueManagerStats=" + displayVerboseQueueManagerStats
435 + ", resourceNotFoundErrorsSupressed=" + resourceNotFoundErrorsSupressed
436 + ", nodesOnlyModifierEnabled=" + nodesOnlyModifierEnabled + ", configOKForStartupSync="
437 + configOkForStartupSync + ", configOKForPeriodicSync=" + configOkForPeriodicSync
438 + ", autosuggestSynchronizationEnabled=" + autosuggestSynchronizationEnabled + "]";