2 * ============LICENSE_START===================================================
3 * SPARKY (AAI UI service)
4 * ============================================================================
5 * Copyright © 2017 AT&T Intellectual Property.
6 * Copyright © 2017 Amdocs
8 * ============================================================================
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
13 * http://www.apache.org/licenses/LICENSE-2.0
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
20 * ============LICENSE_END=====================================================
22 * ECOMP and OpenECOMP are trademarks
23 * and service marks of AT&T Intellectual Property.
26 package org.openecomp.sparky.synchronizer.config;
28 import java.text.DateFormat;
29 import java.text.SimpleDateFormat;
30 import java.util.Arrays;
31 import java.util.Calendar;
32 import java.util.Date;
33 import java.util.List;
34 import java.util.Properties;
35 import java.util.regex.Matcher;
36 import java.util.regex.Pattern;
38 import org.openecomp.cl.api.Logger;
39 import org.openecomp.cl.eelf.LoggerFactory;
40 import org.openecomp.sparky.logging.AaiUiMsgs;
41 import org.openecomp.sparky.util.ConfigHelper;
42 import org.openecomp.sparky.viewandinspect.config.TierSupportUiConstants;
46 * The Class SynchronizerConfiguration.
48 public class SynchronizerConfiguration {
50 private static final Logger LOG = LoggerFactory.getInstance().getLogger(SynchronizerConfiguration.class);
52 public static final String CONFIG_FILE =
53 TierSupportUiConstants.DYNAMIC_CONFIG_APP_LOCATION + "synchronizer.properties";
55 private static SynchronizerConfiguration instance;
57 public static final String DEPTH_MODIFIER = "?depth=0";
58 public static final String DEPTH_ALL_MODIFIER = "?depth=all";
59 public static final String DEPTH_AND_NODES_ONLY_MODIFIER = "?depth=0&nodes-only";
60 public static final String NODES_ONLY_MODIFIER = "?nodes-only";
62 public static SynchronizerConfiguration getConfig() throws Exception {
64 if (instance == null) {
65 instance = new SynchronizerConfiguration();
66 instance.initialize();
73 * Instantiates a new synchronizer configuration.
75 public SynchronizerConfiguration() {
82 * @throws Exception the exception
84 protected void initialize() throws Exception {
86 Properties props = ConfigHelper.loadConfigFromExplicitPath(CONFIG_FILE);
88 // parse config for startup sync
90 syncTaskInitialDelayInMs =
91 Integer.parseInt(props.getProperty("synchronizer.syncTask.initialDelayInMs",
92 SynchronizerConstants.DEFAULT_INITIAL_DELAY_IN_MS));
93 if (syncTaskInitialDelayInMs < 0) {
94 throw new Exception();
96 } catch (Exception exc) {
97 this.setConfigOkForStartupSync(false);
98 syncTaskInitialDelayInMs = SynchronizerConstants.DEFAULT_CONFIG_ERROR_INT_VALUE;
99 String message = "Invalid configuration for synchronizer parameter:"
100 + " 'synchronizer.syncTask.initialDelayInMs'";
101 LOG.error(AaiUiMsgs.SYNC_INVALID_CONFIG_PARAM, message);
104 // parse config for periodic sync
106 syncTaskFrequencyInDay =
107 Integer.parseInt(props.getProperty("synchronizer.syncTask.taskFrequencyInDay",
108 SynchronizerConstants.DEFAULT_TASK_FREQUENCY_IN_DAY));
109 if (syncTaskFrequencyInDay < 0) {
110 throw new Exception();
112 } catch (Exception exc) {
113 this.setConfigOkForPeriodicSync(false);
114 syncTaskFrequencyInDay = SynchronizerConstants.DEFAULT_CONFIG_ERROR_INT_VALUE;
115 String message = "Invalid configuration for synchronizer parameter:"
116 + " 'synchronizer.syncTask.taskFrequencyInDay'";
117 LOG.error(AaiUiMsgs.SYNC_INVALID_CONFIG_PARAM, message);
121 syncTaskStartTime = props.getProperty("synchronizer.syncTask.startTimestamp",
122 SynchronizerConstants.DEFAULT_START_TIMESTAMP); // Default 05:00:00 UTC
123 Pattern pattern = Pattern.compile(SynchronizerConstants.TIMESTAMP24HOURS_PATTERN);
124 Matcher matcher = pattern.matcher(syncTaskStartTime);
125 if (!matcher.matches()) {
126 throw new Exception();
129 List<String> timestampVal = Arrays.asList(syncTaskStartTime.split(" "));
131 if (timestampVal.size() == SynchronizerConstants.COMPONENTS_IN_TIMESTAMP) {
132 // Need both time and timezone offset
133 syncTaskStartTimeTimeZone = timestampVal
134 .get(SynchronizerConstants.IDX_TIMEZONE_IN_TIMESTAMP).replaceAll("UTC", "GMT");
136 String time = timestampVal.get(SynchronizerConstants.IDX_TIME_IN_TIMESTAMP);
137 DateFormat format = new SimpleDateFormat("HH:mm:ss");
138 Date date = format.parse(time);
139 Calendar calendar = Calendar.getInstance();
140 calendar.setTime(date);
142 syncTaskStartTimeHr = calendar.get(Calendar.HOUR_OF_DAY);
143 syncTaskStartTimeMin = calendar.get(Calendar.MINUTE);
144 syncTaskStartTimeSec = calendar.get(Calendar.SECOND);
146 LOG.info(AaiUiMsgs.SYNC_START_TIME);
148 } catch (Exception exc) {
149 this.setConfigOkForPeriodicSync(false);
150 String message = "Invalid configuration for synchronizer parameter:"
151 + " 'synchronizer.syncTask.startTimestamp'";
152 LOG.error(AaiUiMsgs.SYNC_INVALID_CONFIG_PARAM, message);
155 scrollContextTimeToLiveInMinutes =
156 Integer.parseInt(props.getProperty("synchronizer.scrollContextTimeToLiveInMinutes", "5"));
157 numScrollContextItemsToRetrievePerRequest = Integer.parseInt(
158 props.getProperty("synchronizer.numScrollContextItemsToRetrievePerRequest", "5000"));
160 resolverProgressLogFrequencyInMs = Long
161 .parseLong(props.getProperty("synchronizer.resolver.progressLogFrequencyInMs", "60000"));
162 resolverQueueMonitorFrequencyInMs = Long
163 .parseLong(props.getProperty("synchronizer.resolver.queueMonitorFrequencyInMs", "1000"));
165 indexIntegrityValidatorEnabled = Boolean
166 .parseBoolean(props.getProperty("synchronizer.indexIntegrityValidator.enabled", "false"));
167 indexIntegrityValidatorFrequencyInMs = Long.parseLong(
168 props.getProperty("synchronizer.indexIntegrityValidatorFrequencyInMs", "300000"));
170 displayVerboseQueueManagerStats = Boolean
171 .parseBoolean(props.getProperty("synchronizer.resolver.displayVerboseQueueManagerStats"));
173 resourceNotFoundErrorsSupressed =
174 Boolean.parseBoolean(props.getProperty("synchronizer.suppressResourceNotFoundErrors"));
176 nodesOnlyModifierEnabled =
177 Boolean.parseBoolean(props.getProperty("synchronizer.applyNodesOnlyModifier"));
179 historicalEntitySummarizerEnabled = Boolean
180 .parseBoolean(props.getProperty("synchronizer.historicalEntitySummarizerEnabled", "true"));
181 historicalEntitySummarizedFrequencyInMinutes = Long.parseLong(
182 props.getProperty("synchronizer.historicalEntitySummarizedFrequencyInMinutes", "60"));
184 autosuggestSynchronizationEnabled = Boolean
185 .parseBoolean(props.getProperty("synchronizer.autosuggestSynchronizationEnabled", "true"));
187 if (LOG.isDebugEnabled()) {
188 LOG.debug(AaiUiMsgs.DEBUG_GENERIC, this.toString());
192 public boolean isNodesOnlyModifierEnabled() {
193 return nodesOnlyModifierEnabled;
196 public void setNodesOnlyModifierEnabled(boolean nodesOnlyModifierEnabled) {
197 this.nodesOnlyModifierEnabled = nodesOnlyModifierEnabled;
200 public int getSyncTaskInitialDelayInMs() {
201 return syncTaskInitialDelayInMs;
204 public void setSyncTaskInitialDelayInMs(int syncTaskInitialDelayInMs) {
205 this.syncTaskInitialDelayInMs = syncTaskInitialDelayInMs;
208 public boolean isDisplayVerboseQueueManagerStats() {
209 return displayVerboseQueueManagerStats;
212 public void setDisplayVerboseQueueManagerStats(boolean displayVerboseQueueManagerStats) {
213 this.displayVerboseQueueManagerStats = displayVerboseQueueManagerStats;
216 public boolean isHistoricalEntitySummarizerEnabled() {
217 return historicalEntitySummarizerEnabled;
220 public void setHistoricalEntitySummarizerEnabled(boolean historicalEntitySummarizerEnabled) {
221 this.historicalEntitySummarizerEnabled = historicalEntitySummarizerEnabled;
224 public long getHistoricalEntitySummarizedFrequencyInMinutes() {
225 return historicalEntitySummarizedFrequencyInMinutes;
228 public void setHistoricalEntitySummarizedFrequencyInMinutes(
229 long historicalEntitySummarizedFrequencyInMinutes) {
230 this.historicalEntitySummarizedFrequencyInMinutes =
231 historicalEntitySummarizedFrequencyInMinutes;
234 private int syncTaskInitialDelayInMs;
236 private int syncTaskFrequencyInMs;
238 private int scrollContextTimeToLiveInMinutes;
240 private int numScrollContextItemsToRetrievePerRequest;
242 private long resolverProgressLogFrequencyInMs;
244 private long resolverQueueMonitorFrequencyInMs;
246 private boolean indexIntegrityValidatorEnabled;
248 private long indexIntegrityValidatorFrequencyInMs;
250 private int syncTaskFrequencyInDay;
252 private String syncTaskStartTime;
254 private int syncTaskStartTimeHr = 5; // for default sync start time
256 private int syncTaskStartTimeMin;
258 private int syncTaskStartTimeSec;
260 private String syncTaskStartTimeTimeZone;
262 private boolean displayVerboseQueueManagerStats;
264 private boolean resourceNotFoundErrorsSupressed;
266 private boolean nodesOnlyModifierEnabled;
268 private boolean historicalEntitySummarizerEnabled;
270 private boolean autosuggestSynchronizationEnabled;
272 private long historicalEntitySummarizedFrequencyInMinutes;
275 private boolean configOkForStartupSync = true;
277 private boolean configOkForPeriodicSync = true;
279 public boolean isResourceNotFoundErrorsSupressed() {
280 return resourceNotFoundErrorsSupressed;
283 public void setResourceNotFoundErrorsSupressed(boolean resourceNotFoundErrorsSupressed) {
284 this.resourceNotFoundErrorsSupressed = resourceNotFoundErrorsSupressed;
287 public int getScrollContextTimeToLiveInMinutes() {
288 return scrollContextTimeToLiveInMinutes;
291 public void setScrollContextTimeToLiveInMinutes(int scrollContextTimeToLiveInMinutes) {
292 this.scrollContextTimeToLiveInMinutes = scrollContextTimeToLiveInMinutes;
295 public int getNumScrollContextItemsToRetrievePerRequest() {
296 return numScrollContextItemsToRetrievePerRequest;
299 public void setNumScrollContextItemsToRetrievePerRequest(
300 int numScrollContextItemsToRetrievePerRequest) {
301 this.numScrollContextItemsToRetrievePerRequest = numScrollContextItemsToRetrievePerRequest;
304 public int getSyncTaskFrequencyInDay() {
305 return syncTaskFrequencyInDay;
308 public void setSyncTaskFrequencyInDay(int syncTaskFrequencyInDay) {
309 this.syncTaskFrequencyInDay = syncTaskFrequencyInDay;
312 public String getSyncTaskStartTime() {
313 return syncTaskStartTime;
316 public void setSyncTaskStartTime(String syncTaskStartTime) {
317 this.syncTaskStartTime = syncTaskStartTime;
320 public int getSyncTaskStartTimeHr() {
321 return syncTaskStartTimeHr;
324 public void setSyncTaskStartTimeHr(int syncTaskStartTimeHr) {
325 this.syncTaskStartTimeHr = syncTaskStartTimeHr;
328 public int getSyncTaskStartTimeMin() {
329 return syncTaskStartTimeMin;
332 public void setSyncTaskStartTimeMin(int syncTaskStartTimeMin) {
333 this.syncTaskStartTimeMin = syncTaskStartTimeMin;
336 public int getSyncTaskStartTimeSec() {
337 return syncTaskStartTimeSec;
340 public void setSyncTaskStartTimeSec(int syncTaskStartTimeSec) {
341 this.syncTaskStartTimeSec = syncTaskStartTimeSec;
344 public String getSyncTaskStartTimeTimeZone() {
345 return syncTaskStartTimeTimeZone;
348 public void setSyncTaskStartTimeTimeZone(String syncTaskStartTimeTimeZone) {
349 this.syncTaskStartTimeTimeZone = syncTaskStartTimeTimeZone;
352 public int getSyncTaskFrequencyInMs() {
353 return syncTaskFrequencyInMs;
356 public void setSyncTaskFrequencyInMs(int syncTaskFrequencyInMs) {
357 this.syncTaskFrequencyInMs = syncTaskFrequencyInMs;
360 public long getResolverProgressLogFrequencyInMs() {
361 return resolverProgressLogFrequencyInMs;
364 public void setResolverProgressLogFrequencyInMs(long resolverProgressLogFrequencyInMs) {
365 this.resolverProgressLogFrequencyInMs = resolverProgressLogFrequencyInMs;
368 public long getResolverQueueMonitorFrequencyInMs() {
369 return resolverQueueMonitorFrequencyInMs;
372 public void setResolverQueueMonitorFrequencyInMs(long resolverQueueMonitorFrequencyInMs) {
373 this.resolverQueueMonitorFrequencyInMs = resolverQueueMonitorFrequencyInMs;
376 public boolean isIndexIntegrityValidatorEnabled() {
377 return indexIntegrityValidatorEnabled;
380 public void setIndexIntegrityValidatorEnabled(boolean indexIntegrityValidatorEnabled) {
381 this.indexIntegrityValidatorEnabled = indexIntegrityValidatorEnabled;
384 public long getIndexIntegrityValidatorFrequencyInMs() {
385 return indexIntegrityValidatorFrequencyInMs;
388 public void setIndexIntegrityValidatorFrequencyInMs(long indexIntegrityValidatorFrequencyInMs) {
389 this.indexIntegrityValidatorFrequencyInMs = indexIntegrityValidatorFrequencyInMs;
392 public boolean isConfigOkForStartupSync() {
393 return configOkForStartupSync;
396 public void setConfigOkForStartupSync(boolean configOkForStartupSync) {
397 this.configOkForStartupSync = configOkForStartupSync;
400 public boolean isConfigOkForPeriodicSync() {
401 return configOkForPeriodicSync;
404 public void setConfigOkForPeriodicSync(boolean configOkForPeriodicSync) {
405 this.configOkForPeriodicSync = configOkForPeriodicSync;
408 public boolean isConfigDisabledForInitialSync() {
409 return syncTaskInitialDelayInMs == SynchronizerConstants.DELAY_NO_STARTUP_SYNC_IN_MS;
412 public boolean isAutosuggestSynchronizationEnabled() {
413 return autosuggestSynchronizationEnabled;
416 public void setAutosuggestSynchronizationEnabled(boolean autosuggestSynchronizationEnabled) {
417 this.autosuggestSynchronizationEnabled = autosuggestSynchronizationEnabled;
421 * @see java.lang.Object#toString()
424 public String toString() {
425 return "SynchronizerConfiguration [syncTaskInitialDelayInMs=" + syncTaskInitialDelayInMs
426 + ", syncTaskFrequencyInMs=" + syncTaskFrequencyInMs + ", scrollContextTimeToLiveInMinutes="
427 + scrollContextTimeToLiveInMinutes + ", numScrollContextItemsToRetrievePerRequest="
428 + numScrollContextItemsToRetrievePerRequest + ", resolverProgressLogFrequencyInMs="
429 + resolverProgressLogFrequencyInMs + ", resolverQueueMonitorFrequencyInMs="
430 + resolverQueueMonitorFrequencyInMs + ", indexIntegrityValidatorEnabled="
431 + indexIntegrityValidatorEnabled + ", indexIntegrityValidatorFrequencyInMs="
432 + indexIntegrityValidatorFrequencyInMs + ", ssyncTaskFrequencyInDay="
433 + syncTaskFrequencyInDay + ", syncTaskStartTime=" + syncTaskStartTime
434 + ", syncTaskStartTimeHr=" + syncTaskStartTimeHr + ", syncTaskStartTimeMin="
435 + syncTaskStartTimeMin + ", syncTaskStartTimeSec=" + syncTaskStartTimeSec
436 + ", syncTaskStartTimeTimeZone=" + syncTaskStartTimeTimeZone
437 + ", displayVerboseQueueManagerStats=" + displayVerboseQueueManagerStats
438 + ", resourceNotFoundErrorsSupressed=" + resourceNotFoundErrorsSupressed
439 + ", nodesOnlyModifierEnabled=" + nodesOnlyModifierEnabled + ", configOKForStartupSync="
440 + configOkForStartupSync + ", configOKForPeriodicSync=" + configOkForPeriodicSync
441 + ", autosuggestSynchronizationEnabled=" + autosuggestSynchronizationEnabled + "]";