VES Heartbeat and Software Management Feature
[oam/tr069-adapter.git] / ves-agent / src / main / java / org / commscope / tr069adapter / vesagent / timer / StartupTimerService.java
diff --git a/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/timer/StartupTimerService.java b/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/timer/StartupTimerService.java
new file mode 100644 (file)
index 0000000..8702d47
--- /dev/null
@@ -0,0 +1,68 @@
+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