VES Heartbeat and Software Management Feature
[oam/tr069-adapter.git] / ves-agent / src / main / java / org / commscope / tr069adapter / vesagent / timer / HeartBeatTimeoutTask.java
diff --git a/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/timer/HeartBeatTimeoutTask.java b/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/timer/HeartBeatTimeoutTask.java
new file mode 100644 (file)
index 0000000..aa32275
--- /dev/null
@@ -0,0 +1,80 @@
+package org.commscope.tr069adapter.vesagent.timer;\r
+\r
+import java.util.List;\r
+import java.util.concurrent.TimeUnit;\r
+\r
+import org.commscope.tr069adapter.vesagent.VesConfiguration;\r
+import org.commscope.tr069adapter.vesagent.async.AsyncRequestHandler;\r
+import org.commscope.tr069adapter.vesagent.controller.HeartBeatMessageHandler;\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
+\r
+public class HeartBeatTimeoutTask implements Runnable {\r
+  private static final Logger logger = LoggerFactory.getLogger(HeartBeatTimeoutTask.class);\r
+\r
+  @Autowired\r
+  VesDataRepository vesDataRepository;\r
+\r
+  @Autowired\r
+  ScheduleTaskService timerService;\r
+\r
+  @Autowired\r
+  AsyncRequestHandler asyncHandler;\r
+\r
+  @Autowired\r
+  HeartBeatMessageHandler heartBeatMessageHandler;\r
+\r
+  @Autowired\r
+  VesConfiguration config;\r
+\r
+  private String deviceId;\r
+\r
+  @Override\r
+  public void run() {\r
+    logger.debug("Timer task: checking device {} connectivity.", deviceId);\r
+    List<DeviceDataEntity> deviceDataEntityList =\r
+        vesDataRepository.findByDeviceIdAndAttrGroup(deviceId, VesAgentConstants.HEART_BEAT);\r
+\r
+    if (VesAgentUtils.isNullOrEmpty(deviceDataEntityList)\r
+        || VesAgentUtils.isNullOrEmpty(deviceDataEntityList.get(0).getAttributesMap())) {\r
+      timerService.cancelSchedule(deviceId);\r
+      return;\r
+    }\r
+\r
+    DeviceDataEntity deviceDataEntity = deviceDataEntityList.get(0);\r
+    String heartBeatPeriod =\r
+        deviceDataEntity.getAttributesMap().get(VesAgentConstants.HEART_BEAT_PERIOD);\r
+\r
+    if (VesAgentUtils.isNullOrEmpty(heartBeatPeriod)\r
+        || heartBeatPeriod.equals(VesAgentConstants.REMOVE_HEART_BEAT_TIMER_VAL)) {\r
+      timerService.cancelSchedule(deviceId);\r
+      return;\r
+    }\r
+\r
+    ScheduleInfo scheduleInfo = new ScheduleInfo();\r
+    scheduleInfo.setInterval(Integer.parseInt(heartBeatPeriod));\r
+    scheduleInfo.setTimeUnit(TimeUnit.MINUTES);\r
+\r
+    timerService.schedule(deviceId, scheduleInfo, this);\r
+\r
+    asyncHandler.initiateDeviceReachabilityCheck(deviceDataEntity);\r
+  }\r
+\r
+  public HeartBeatTimeoutTask(String deviceId) {\r
+    super();\r
+    this.deviceId = deviceId;\r
+  }\r
+\r
+  public String getDeviceId() {\r
+    return deviceId;\r
+  }\r
+\r
+  public void setDeviceId(String deviceId) {\r
+    this.deviceId = deviceId;\r
+  }\r
+}\r