2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
6 * Copyright © 2017-2018 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 package org.onap.aai.sparky.sync.config;
23 import java.text.DateFormat;
24 import java.text.ParseException;
25 import java.text.SimpleDateFormat;
26 import java.util.Arrays;
27 import java.util.Calendar;
28 import java.util.Date;
29 import java.util.List;
30 import java.util.TimeZone;
31 import java.util.regex.Matcher;
32 import java.util.regex.Pattern;
34 import org.onap.aai.sparky.sync.SynchronizerConstants;
36 public class SyncControllerConfig {
38 private static final String UNKNOWN_CONTROLLER_NAME = "UnknownControllerName";
39 private final SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
41 private String controllerName;
42 private boolean enabled;
43 private int syncTaskDelayInMs;
44 private int syncTaskFrequencyInDays;
46 private int numSyncControllerWorkers;
47 private boolean runOnceSyncEnabled;
48 private boolean periodicSyncEnabled;
50 private String targetSyncStartTimeStamp;
52 private int numInternalSyncWorkers;
53 private int numSyncElasticWorkers;
54 private int numSyncActiveInventoryWorkers;
57 * calculated variables based on incoming config
59 private String timeZoneOfSyncStartTimeStamp;
60 private int syncTaskStartTimeHr;
61 private int syncTaskStartTimeMin;
62 private int syncTaskStartTimeSec;
66 public SyncControllerConfig() {
67 controllerName = UNKNOWN_CONTROLLER_NAME;
69 syncTaskDelayInMs = 0;
70 syncTaskFrequencyInDays = 365;
71 numSyncControllerWorkers = 1;
72 runOnceSyncEnabled = false;
73 periodicSyncEnabled = false;
74 targetSyncStartTimeStamp = SynchronizerConstants.DEFAULT_START_TIMESTAMP;
75 numInternalSyncWorkers = 2;
76 numSyncElasticWorkers = 5;
77 numSyncActiveInventoryWorkers = 5;
80 protected void initializeSyncTimeParameters() {
82 if (syncTaskDelayInMs < 0) {
83 throw new IllegalArgumentException("syncTaskDelayInMs must >= 0");
86 Pattern pattern = Pattern.compile(SynchronizerConstants.TIMESTAMP24HOURS_PATTERN);
87 Matcher matcher = pattern.matcher(targetSyncStartTimeStamp);
88 if (!matcher.matches()) {
89 throw new IllegalArgumentException("Invalid time format for targetSyncStartTimeStamp");
92 List<String> timestampVal = Arrays.asList(targetSyncStartTimeStamp.split(" "));
94 if (timestampVal.size() == SynchronizerConstants.COMPONENTS_IN_TIMESTAMP) {
96 // Need both time and timezone offset
97 timeZoneOfSyncStartTimeStamp = timestampVal
98 .get(SynchronizerConstants.IDX_TIMEZONE_IN_TIMESTAMP).replaceAll("UTC", "GMT");
100 String time = timestampVal.get(SynchronizerConstants.IDX_TIME_IN_TIMESTAMP);
101 DateFormat format = new SimpleDateFormat("HH:mm:ss");
106 date = format.parse(time);
107 } catch (ParseException parseException) {
108 throw new IllegalArgumentException(parseException);
111 Calendar calendar = Calendar.getInstance();
112 calendar.setTime(date);
114 syncTaskStartTimeHr = calendar.get(Calendar.HOUR_OF_DAY);
115 syncTaskStartTimeMin = calendar.get(Calendar.MINUTE);
116 syncTaskStartTimeSec = calendar.get(Calendar.SECOND);
118 throw new IllegalArgumentException("Invalid timestamp format from targetSyncStartTimeStamp");
124 public int getNumInternalSyncWorkers() {
125 return numInternalSyncWorkers;
128 public void setNumInternalSyncWorkers(int numInternalSyncWorkers) {
129 this.numInternalSyncWorkers = numInternalSyncWorkers;
132 public int getNumSyncElasticWorkers() {
133 return numSyncElasticWorkers;
136 public void setNumSyncElasticWorkers(int numSyncElasticWorkers) {
137 this.numSyncElasticWorkers = numSyncElasticWorkers;
140 public int getNumSyncActiveInventoryWorkers() {
141 return numSyncActiveInventoryWorkers;
144 public void setNumSyncActiveInventoryWorkers(int numSyncActiveInventoryWorkers) {
145 this.numSyncActiveInventoryWorkers = numSyncActiveInventoryWorkers;
148 public String getTargetSyncStartTimeStamp() {
149 return targetSyncStartTimeStamp;
152 public void setTargetSyncStartTimeStamp(String targetSyncStartTimeStamp) {
153 this.targetSyncStartTimeStamp = targetSyncStartTimeStamp;
154 initializeSyncTimeParameters();
157 public String getControllerName() {
158 return controllerName;
161 public void setControllerName(String controllerName) {
162 this.controllerName = controllerName;
165 public boolean isEnabled() {
169 public void setEnabled(boolean enabled) {
170 this.enabled = enabled;
173 public int getSyncTaskDelayInMs() {
174 return syncTaskDelayInMs;
177 public void setSyncTaskDelayInMs(int syncTaskDelayInMs) {
178 this.syncTaskDelayInMs = syncTaskDelayInMs;
181 public int getSyncTaskFrequencyInDays() {
182 return syncTaskFrequencyInDays;
185 public void setSyncTaskFrequencyInDays(int syncTaskFrequencyInDays) {
186 this.syncTaskFrequencyInDays = syncTaskFrequencyInDays;
189 public int getNumSyncControllerWorkers() {
190 return numSyncControllerWorkers;
193 public void setNumSyncControllerWorkers(int numSyncControllerWorkers) {
194 this.numSyncControllerWorkers = numSyncControllerWorkers;
197 public boolean isRunOnceSyncEnabled() {
198 return runOnceSyncEnabled;
201 public void setRunOnceSyncEnabled(boolean runOnceSyncEnabled) {
202 this.runOnceSyncEnabled = runOnceSyncEnabled;
205 public boolean isPeriodicSyncEnabled() {
206 return periodicSyncEnabled;
209 public void setPeriodicSyncEnabled(boolean periodicSyncEnabled) {
210 this.periodicSyncEnabled = periodicSyncEnabled;
213 public long getSyncFrequencyInMs() {
215 return (syncTaskFrequencyInDays * SynchronizerConstants.MILLISEC_IN_A_DAY);
219 public Calendar getTargetSyncTime() {
221 TimeZone tz = TimeZone.getTimeZone(timeZoneOfSyncStartTimeStamp);
222 Calendar targetSyncTime = Calendar.getInstance(tz);
224 targetSyncTime.set(Calendar.HOUR_OF_DAY, syncTaskStartTimeHr);
225 targetSyncTime.set(Calendar.MINUTE, syncTaskStartTimeMin);
226 targetSyncTime.set(Calendar.SECOND, syncTaskStartTimeSec);
228 return targetSyncTime;
233 public String getNextSyncTime() {
235 int taskFrequencyInSeconds = 0;
236 if (getSyncFrequencyInMs() > 0) {
237 taskFrequencyInSeconds = (int) (getSyncFrequencyInMs() / 1000);
240 if (taskFrequencyInSeconds < 86400) {
242 TimeZone tz = TimeZone.getTimeZone(timeZoneOfSyncStartTimeStamp);
243 Calendar targetSyncTime = Calendar.getInstance(tz);
244 targetSyncTime.add(Calendar.SECOND, taskFrequencyInSeconds);
246 return this.simpleDateFormat.format(targetSyncTime.getTimeInMillis())
247 .replaceAll(SynchronizerConstants.TIME_STD, SynchronizerConstants.TIME_CONFIG_STD);
251 return this.simpleDateFormat
252 .format(getNextSyncTime(getTargetSyncTime(), taskFrequencyInSeconds))
253 .replaceAll(SynchronizerConstants.TIME_STD, SynchronizerConstants.TIME_CONFIG_STD);
259 public long getNextSyncTime(Calendar syncTime, int taskFrequencyInSeconds) {
261 TimeZone tz = TimeZone.getTimeZone(timeZoneOfSyncStartTimeStamp);
262 Calendar timeNow = Calendar.getInstance(tz);
264 return getNextSyncTime(syncTime, timeNow.getTimeInMillis(), taskFrequencyInSeconds);
268 * Gets the first sync time.
270 * @param calendar the calendar
271 * @param timeNow the time now in ms
272 * @param taskFrequencyInMs task period in ms
273 * @return the first sync time
276 public long getNextSyncTime(Calendar syncTime, long timeNowInMs, int taskFrequencyInSeconds) {
277 if (taskFrequencyInSeconds == 0) {
279 } else if (timeNowInMs > syncTime.getTimeInMillis()) {
282 * If current time is after the scheduled sync start time, then we'll skip ahead to the next
286 syncTime.add(Calendar.SECOND, taskFrequencyInSeconds);
289 return syncTime.getTimeInMillis();
292 public String getTimeZoneOfSyncStartTimeStamp() {
293 return timeZoneOfSyncStartTimeStamp;
296 public void setTimeZoneOfSyncStartTimeStamp(String timeZoneOfSyncStartTimeStamp) {
297 this.timeZoneOfSyncStartTimeStamp = timeZoneOfSyncStartTimeStamp;