--- /dev/null
+package org.commscope.tr069adapter.vesagent.timer;\r
+\r
+import java.util.List;\r
+import java.util.concurrent.TimeUnit;\r
+import java.util.function.Function;\r
+\r
+import javax.annotation.PostConstruct;\r
+\r
+import org.commscope.tr069adapter.vesagent.entity.DeviceDataEntity;\r
+import org.commscope.tr069adapter.vesagent.repository.VesDataRepository;\r
+import org.commscope.tr069adapter.vesagent.util.VesAgentConstants;\r
+import org.commscope.tr069adapter.vesagent.util.VesAgentUtils;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.stereotype.Component;\r
+\r
+@Component\r
+public class StartupTimerService {\r
+ private static final Logger logger = LoggerFactory.getLogger(StartupTimerService.class);\r
+\r
+ @Autowired\r
+ private Function<String, HeartBeatTimeoutTask> beanFactory;\r
+\r
+ public HeartBeatTimeoutTask getBeanInstance(String name) {\r
+ return beanFactory.apply(name);\r
+ }\r
+\r
+ @Autowired\r
+ VesDataRepository vesDataRepository;\r
+\r
+ @Autowired\r
+ ScheduleTaskService timerService;\r
+\r
+ @PostConstruct\r
+ public void initializeDeviceReachabilityCheckTimers() {\r
+ logger.debug("Initializing all device connectivity check timer tasks.");\r
+ List<DeviceDataEntity> deviceDataEntityList =\r
+ vesDataRepository.findByAttrGroup(VesAgentConstants.HEART_BEAT);\r
+\r
+ if (VesAgentUtils.isNullOrEmpty(deviceDataEntityList)) {\r
+ logger.debug("No device reachability check timer tasks exist.");\r
+ return;\r
+ }\r
+\r
+ for (DeviceDataEntity deviceDataEntity : deviceDataEntityList) {\r
+ String heartBeatPeriod = null;\r
+\r
+ if (null != deviceDataEntity.getAttributesMap()) {\r
+ heartBeatPeriod =\r
+ deviceDataEntity.getAttributesMap().get(VesAgentConstants.HEART_BEAT_PERIOD);\r
+ }\r
+\r
+ if (!VesAgentUtils.isNullOrEmpty(heartBeatPeriod)\r
+ && !heartBeatPeriod.equals(VesAgentConstants.REMOVE_HEART_BEAT_TIMER_VAL)) {\r
+ logger.info("Creating device connectivity check timer tasks for device {}.",\r
+ deviceDataEntity.getDeviceId());\r
+ ScheduleInfo scheduleInfo = new ScheduleInfo();\r
+ scheduleInfo.setInterval(Integer.parseInt(heartBeatPeriod));\r
+ scheduleInfo.setTimeUnit(TimeUnit.SECONDS);\r
+\r
+ HeartBeatTimeoutTask callbackTask = getBeanInstance(deviceDataEntity.getDeviceId());\r
+\r
+ timerService.schedule(deviceDataEntity.getDeviceId(), scheduleInfo, callbackTask);\r
+ }\r
+ }\r
+ }\r
+}\r