--- /dev/null
+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