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