Changing the license and trademark
[aai/sparky-be.git] / src / main / java / org / openecomp / sparky / synchronizer / config / SynchronizerConfiguration.java
1 /**
2  * ============LICENSE_START=======================================================
3  * org.onap.aai
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
11  *
12  *       http://www.apache.org/licenses/LICENSE-2.0
13  *
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=========================================================
20  *
21  * ECOMP is a trademark and service mark of AT&T Intellectual Property.
22  */
23 package org.openecomp.sparky.synchronizer.config;
24
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;
34
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;
40
41
42 /**
43  * The Class SynchronizerConfiguration.
44  */
45 public class SynchronizerConfiguration {
46
47   private static final Logger LOG = LoggerFactory.getInstance().getLogger(SynchronizerConfiguration.class);
48
49   public static final String CONFIG_FILE =
50       TierSupportUiConstants.DYNAMIC_CONFIG_APP_LOCATION + "synchronizer.properties";
51
52   private static SynchronizerConfiguration instance;
53
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";
58
59   public static SynchronizerConfiguration getConfig() throws Exception {
60
61     if (instance == null) {
62       instance = new SynchronizerConfiguration();
63       instance.initialize();
64     }
65
66     return instance;
67   }
68
69   /**
70    * Instantiates a new synchronizer configuration.
71    */
72   public SynchronizerConfiguration() {
73     // test method
74   }
75
76   /**
77    * Initialize.
78    *
79    * @throws Exception the exception
80    */
81   protected void initialize() throws Exception {
82
83     Properties props = ConfigHelper.loadConfigFromExplicitPath(CONFIG_FILE);
84
85     // parse config for startup sync
86     try {
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();
92       }
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);
99     }
100
101     // parse config for periodic sync
102     try {
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();
108       }
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);
115     }
116
117     try {
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();
124       }
125
126       List<String> timestampVal = Arrays.asList(syncTaskStartTime.split(" "));
127
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");
132
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);
138
139         syncTaskStartTimeHr = calendar.get(Calendar.HOUR_OF_DAY);
140         syncTaskStartTimeMin = calendar.get(Calendar.MINUTE);
141         syncTaskStartTimeSec = calendar.get(Calendar.SECOND);
142       } else {
143         LOG.info(AaiUiMsgs.SYNC_START_TIME);
144       }
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);
150     }
151
152     scrollContextTimeToLiveInMinutes =
153         Integer.parseInt(props.getProperty("synchronizer.scrollContextTimeToLiveInMinutes", "5"));
154     numScrollContextItemsToRetrievePerRequest = Integer.parseInt(
155         props.getProperty("synchronizer.numScrollContextItemsToRetrievePerRequest", "5000"));
156
157     resolverProgressLogFrequencyInMs = Long
158         .parseLong(props.getProperty("synchronizer.resolver.progressLogFrequencyInMs", "60000"));
159     resolverQueueMonitorFrequencyInMs = Long
160         .parseLong(props.getProperty("synchronizer.resolver.queueMonitorFrequencyInMs", "1000"));
161
162     indexIntegrityValidatorEnabled = Boolean
163         .parseBoolean(props.getProperty("synchronizer.indexIntegrityValidator.enabled", "false"));
164     indexIntegrityValidatorFrequencyInMs = Long.parseLong(
165         props.getProperty("synchronizer.indexIntegrityValidatorFrequencyInMs", "300000"));
166
167     displayVerboseQueueManagerStats = Boolean
168         .parseBoolean(props.getProperty("synchronizer.resolver.displayVerboseQueueManagerStats"));
169
170     resourceNotFoundErrorsSupressed =
171         Boolean.parseBoolean(props.getProperty("synchronizer.suppressResourceNotFoundErrors"));
172
173     nodesOnlyModifierEnabled =
174         Boolean.parseBoolean(props.getProperty("synchronizer.applyNodesOnlyModifier"));
175
176     historicalEntitySummarizerEnabled = Boolean
177         .parseBoolean(props.getProperty("synchronizer.historicalEntitySummarizerEnabled", "true"));
178     historicalEntitySummarizedFrequencyInMinutes = Long.parseLong(
179         props.getProperty("synchronizer.historicalEntitySummarizedFrequencyInMinutes", "60"));
180     
181     autosuggestSynchronizationEnabled = Boolean
182         .parseBoolean(props.getProperty("synchronizer.autosuggestSynchronizationEnabled", "true"));
183     
184     if (LOG.isDebugEnabled()) {
185       LOG.debug(AaiUiMsgs.DEBUG_GENERIC, this.toString());
186     }
187   }
188
189   public boolean isNodesOnlyModifierEnabled() {
190     return nodesOnlyModifierEnabled;
191   }
192
193   public void setNodesOnlyModifierEnabled(boolean nodesOnlyModifierEnabled) {
194     this.nodesOnlyModifierEnabled = nodesOnlyModifierEnabled;
195   }
196
197   public int getSyncTaskInitialDelayInMs() {
198     return syncTaskInitialDelayInMs;
199   }
200
201   public void setSyncTaskInitialDelayInMs(int syncTaskInitialDelayInMs) {
202     this.syncTaskInitialDelayInMs = syncTaskInitialDelayInMs;
203   }
204
205   public boolean isDisplayVerboseQueueManagerStats() {
206     return displayVerboseQueueManagerStats;
207   }
208
209   public void setDisplayVerboseQueueManagerStats(boolean displayVerboseQueueManagerStats) {
210     this.displayVerboseQueueManagerStats = displayVerboseQueueManagerStats;
211   }
212
213   public boolean isHistoricalEntitySummarizerEnabled() {
214     return historicalEntitySummarizerEnabled;
215   }
216
217   public void setHistoricalEntitySummarizerEnabled(boolean historicalEntitySummarizerEnabled) {
218     this.historicalEntitySummarizerEnabled = historicalEntitySummarizerEnabled;
219   }
220
221   public long getHistoricalEntitySummarizedFrequencyInMinutes() {
222     return historicalEntitySummarizedFrequencyInMinutes;
223   }
224
225   public void setHistoricalEntitySummarizedFrequencyInMinutes(
226       long historicalEntitySummarizedFrequencyInMinutes) {
227     this.historicalEntitySummarizedFrequencyInMinutes =
228         historicalEntitySummarizedFrequencyInMinutes;
229   }
230
231   private int syncTaskInitialDelayInMs;
232
233   private int syncTaskFrequencyInMs;
234
235   private int scrollContextTimeToLiveInMinutes;
236
237   private int numScrollContextItemsToRetrievePerRequest;
238
239   private long resolverProgressLogFrequencyInMs;
240
241   private long resolverQueueMonitorFrequencyInMs;
242
243   private boolean indexIntegrityValidatorEnabled;
244
245   private long indexIntegrityValidatorFrequencyInMs;
246
247   private int syncTaskFrequencyInDay;
248
249   private String syncTaskStartTime;
250
251   private int syncTaskStartTimeHr = 5; // for default sync start time
252
253   private int syncTaskStartTimeMin;
254
255   private int syncTaskStartTimeSec;
256
257   private String syncTaskStartTimeTimeZone;
258
259   private boolean displayVerboseQueueManagerStats;
260
261   private boolean resourceNotFoundErrorsSupressed;
262
263   private boolean nodesOnlyModifierEnabled;
264
265   private boolean historicalEntitySummarizerEnabled;
266   
267   private boolean  autosuggestSynchronizationEnabled;
268
269   private long historicalEntitySummarizedFrequencyInMinutes;
270
271
272   private boolean configOkForStartupSync = true;
273
274   private boolean configOkForPeriodicSync = true;
275
276   public boolean isResourceNotFoundErrorsSupressed() {
277     return resourceNotFoundErrorsSupressed;
278   }
279
280   public void setResourceNotFoundErrorsSupressed(boolean resourceNotFoundErrorsSupressed) {
281     this.resourceNotFoundErrorsSupressed = resourceNotFoundErrorsSupressed;
282   }
283
284   public int getScrollContextTimeToLiveInMinutes() {
285     return scrollContextTimeToLiveInMinutes;
286   }
287
288   public void setScrollContextTimeToLiveInMinutes(int scrollContextTimeToLiveInMinutes) {
289     this.scrollContextTimeToLiveInMinutes = scrollContextTimeToLiveInMinutes;
290   }
291
292   public int getNumScrollContextItemsToRetrievePerRequest() {
293     return numScrollContextItemsToRetrievePerRequest;
294   }
295
296   public void setNumScrollContextItemsToRetrievePerRequest(
297       int numScrollContextItemsToRetrievePerRequest) {
298     this.numScrollContextItemsToRetrievePerRequest = numScrollContextItemsToRetrievePerRequest;
299   }
300
301   public int getSyncTaskFrequencyInDay() {
302     return syncTaskFrequencyInDay;
303   }
304
305   public void setSyncTaskFrequencyInDay(int syncTaskFrequencyInDay) {
306     this.syncTaskFrequencyInDay = syncTaskFrequencyInDay;
307   }
308
309   public String getSyncTaskStartTime() {
310     return syncTaskStartTime;
311   }
312
313   public void setSyncTaskStartTime(String syncTaskStartTime) {
314     this.syncTaskStartTime = syncTaskStartTime;
315   }
316
317   public int getSyncTaskStartTimeHr() {
318     return syncTaskStartTimeHr;
319   }
320
321   public void setSyncTaskStartTimeHr(int syncTaskStartTimeHr) {
322     this.syncTaskStartTimeHr = syncTaskStartTimeHr;
323   }
324
325   public int getSyncTaskStartTimeMin() {
326     return syncTaskStartTimeMin;
327   }
328
329   public void setSyncTaskStartTimeMin(int syncTaskStartTimeMin) {
330     this.syncTaskStartTimeMin = syncTaskStartTimeMin;
331   }
332
333   public int getSyncTaskStartTimeSec() {
334     return syncTaskStartTimeSec;
335   }
336
337   public void setSyncTaskStartTimeSec(int syncTaskStartTimeSec) {
338     this.syncTaskStartTimeSec = syncTaskStartTimeSec;
339   }
340
341   public String getSyncTaskStartTimeTimeZone() {
342     return syncTaskStartTimeTimeZone;
343   }
344
345   public void setSyncTaskStartTimeTimeZone(String syncTaskStartTimeTimeZone) {
346     this.syncTaskStartTimeTimeZone = syncTaskStartTimeTimeZone;
347   }
348
349   public int getSyncTaskFrequencyInMs() {
350     return syncTaskFrequencyInMs;
351   }
352
353   public void setSyncTaskFrequencyInMs(int syncTaskFrequencyInMs) {
354     this.syncTaskFrequencyInMs = syncTaskFrequencyInMs;
355   }
356
357   public long getResolverProgressLogFrequencyInMs() {
358     return resolverProgressLogFrequencyInMs;
359   }
360
361   public void setResolverProgressLogFrequencyInMs(long resolverProgressLogFrequencyInMs) {
362     this.resolverProgressLogFrequencyInMs = resolverProgressLogFrequencyInMs;
363   }
364
365   public long getResolverQueueMonitorFrequencyInMs() {
366     return resolverQueueMonitorFrequencyInMs;
367   }
368
369   public void setResolverQueueMonitorFrequencyInMs(long resolverQueueMonitorFrequencyInMs) {
370     this.resolverQueueMonitorFrequencyInMs = resolverQueueMonitorFrequencyInMs;
371   }
372
373   public boolean isIndexIntegrityValidatorEnabled() {
374     return indexIntegrityValidatorEnabled;
375   }
376
377   public void setIndexIntegrityValidatorEnabled(boolean indexIntegrityValidatorEnabled) {
378     this.indexIntegrityValidatorEnabled = indexIntegrityValidatorEnabled;
379   }
380
381   public long getIndexIntegrityValidatorFrequencyInMs() {
382     return indexIntegrityValidatorFrequencyInMs;
383   }
384
385   public void setIndexIntegrityValidatorFrequencyInMs(long indexIntegrityValidatorFrequencyInMs) {
386     this.indexIntegrityValidatorFrequencyInMs = indexIntegrityValidatorFrequencyInMs;
387   }
388
389   public boolean isConfigOkForStartupSync() {
390     return configOkForStartupSync;
391   }
392
393   public void setConfigOkForStartupSync(boolean configOkForStartupSync) {
394     this.configOkForStartupSync = configOkForStartupSync;
395   }
396
397   public boolean isConfigOkForPeriodicSync() {
398     return configOkForPeriodicSync;
399   }
400
401   public void setConfigOkForPeriodicSync(boolean configOkForPeriodicSync) {
402     this.configOkForPeriodicSync = configOkForPeriodicSync;
403   }
404
405   public boolean isConfigDisabledForInitialSync() {
406     return syncTaskInitialDelayInMs == SynchronizerConstants.DELAY_NO_STARTUP_SYNC_IN_MS;
407   }
408
409   public boolean isAutosuggestSynchronizationEnabled() {
410     return autosuggestSynchronizationEnabled;
411   }
412
413   public void setAutosuggestSynchronizationEnabled(boolean autosuggestSynchronizationEnabled) {
414     this.autosuggestSynchronizationEnabled = autosuggestSynchronizationEnabled;
415   }
416
417   /* (non-Javadoc)
418    * @see java.lang.Object#toString()
419    */
420   @Override
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 + "]";
439   }
440
441 }