* ===============LICENSE_END=======================================================================
*/
-package org.commscope.tr069adapter.vesagent.async;\r
-\r
-import java.util.concurrent.Future;\r
-\r
-import org.commscope.tr069adapter.acs.common.DeviceDetails;\r
-import org.commscope.tr069adapter.acs.common.DeviceRPCRequest;\r
-import org.commscope.tr069adapter.acs.common.DeviceRPCResponse;\r
-import org.commscope.tr069adapter.acs.common.OperationCode;\r
-import org.commscope.tr069adapter.acs.common.OperationOptions;\r
-import org.commscope.tr069adapter.acs.common.dto.CustomOperationCode;\r
-import org.commscope.tr069adapter.acs.common.dto.TR069OperationDetails;\r
-import org.commscope.tr069adapter.vesagent.VesConfiguration;\r
-import org.commscope.tr069adapter.vesagent.controller.HeartBeatMessageHandler;\r
-import org.commscope.tr069adapter.vesagent.entity.DeviceDataEntity;\r
-import org.commscope.tr069adapter.vesagent.mapper.MapperRequestSender;\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.scheduling.annotation.Async;\r
-import org.springframework.stereotype.Component;\r
-\r
-/**\r
- * \r
- * @version 1.0\r
- * @since June 12, 2020\r
- * @author Prashant Kumar\r
- */\r
-@Component\r
-public class AsyncRequestHandler {\r
-\r
- private static final Logger LOG = LoggerFactory.getLogger(AsyncRequestHandler.class);\r
-\r
- @Autowired\r
- MapperRequestSender mapperRequestSender;\r
-\r
- @Autowired\r
- WaitForNotifications waitForNotifications;\r
-\r
- @Autowired\r
- HeartBeatMessageHandler heartBeatMessageHandler;\r
-\r
- @Autowired\r
- VesConfiguration config;\r
-\r
- public DeviceRPCResponse performDeviceOperation(DeviceRPCRequest deviceRPCRequest) {\r
- LOG.info("Initiating device connectivity request to ACS for device {}",\r
- deviceRPCRequest.getDeviceDetails().getDeviceId());\r
-\r
- Future<DeviceRPCResponse> futureResponse = mapperRequestSender.sendRequest(deviceRPCRequest);\r
- if (null == futureResponse) {\r
- LOG.error("Request could not be sent. response is null");\r
- return null;\r
- }\r
-\r
- boolean isSuccess = false;\r
- DeviceRPCResponse response = null;\r
-\r
- OperationCode opCode = deviceRPCRequest.getOpDetails().getOpCode();\r
- String deviceId = deviceRPCRequest.getDeviceDetails().getDeviceId();\r
- long timeOut = getOperationTimeOut(deviceRPCRequest.getOptions().getExecutionTimeout());\r
-\r
- try {\r
- waitForNotifications.waitForResult(deviceId, opCode, futureResponse, timeOut);\r
- response = waitForNotifications.getOperationResult(deviceId, opCode);\r
-\r
- if (null == response) {\r
- LOG.error("Request got timed out.");\r
- } else {\r
- LOG.debug("Received operation result for device : {}, operation = {} as {}", deviceId,\r
- opCode, response);\r
- }\r
- waitForNotifications.stopOperation(deviceId, opCode);\r
-\r
- // if(isSuccess) {\r
- // response = waitForNotifications.getOperationResult(deviceId, opCode);\r
- // LOG.debug("Received operation result for device : {}, operation = {} as {}",deviceId,\r
- // opCode,response);\r
- //\r
- // waitForNotifications.stopOperation(deviceId, opCode);\r
- // }else {\r
- // LOG.error("Request got timed out.");\r
- // }\r
- } catch (InterruptedException e) {\r
- LOG.debug(\r
- "InterruptedException while waiting for mapper operation result for device : {}, operation : {} request.",\r
- deviceId, opCode);\r
- }\r
-\r
- return response;\r
- }\r
-\r
- private long getOperationTimeOut(long timeOut) {\r
- if (timeOut > 0) {\r
- return timeOut;\r
- }\r
-\r
- if (null != config.getRequestTimeout()) {\r
- timeOut = Long.valueOf(config.getRequestTimeout());\r
- }\r
-\r
- return timeOut;\r
- }\r
-\r
- @Async("threadPoolTaskExecutor1")\r
+package org.commscope.tr069adapter.vesagent.async;
+
+import java.util.concurrent.Future;
+
+import org.commscope.tr069adapter.acs.common.DeviceDetails;
+import org.commscope.tr069adapter.acs.common.DeviceRPCRequest;
+import org.commscope.tr069adapter.acs.common.DeviceRPCResponse;
+import org.commscope.tr069adapter.acs.common.OperationCode;
+import org.commscope.tr069adapter.acs.common.OperationOptions;
+import org.commscope.tr069adapter.acs.common.dto.CustomOperationCode;
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationDetails;
+import org.commscope.tr069adapter.vesagent.VesConfiguration;
+import org.commscope.tr069adapter.vesagent.controller.HeartBeatMessageHandler;
+import org.commscope.tr069adapter.vesagent.entity.DeviceDataEntity;
+import org.commscope.tr069adapter.vesagent.mapper.MapperRequestSender;
+import org.commscope.tr069adapter.vesagent.util.VesAgentConstants;
+import org.commscope.tr069adapter.vesagent.util.VesAgentUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Component;
+
+/**
+ *
+ * @version 1.0
+ * @since June 12, 2020
+ * @author Prashant Kumar
+ */
+@Component
+public class AsyncRequestHandler {
+
+ private static final Logger LOG = LoggerFactory.getLogger(AsyncRequestHandler.class);
+
+ @Autowired
+ MapperRequestSender mapperRequestSender;
+
+ @Autowired
+ WaitForNotifications waitForNotifications;
+
+ @Autowired
+ HeartBeatMessageHandler heartBeatMessageHandler;
+
+ @Autowired
+ VesConfiguration config;
+
+ public DeviceRPCResponse performDeviceOperation(DeviceRPCRequest deviceRPCRequest) {
+ LOG.info("Initiating device connectivity request to ACS for device {}",
+ deviceRPCRequest.getDeviceDetails().getDeviceId());
+
+ Future<DeviceRPCResponse> futureResponse = mapperRequestSender.sendRequest(deviceRPCRequest);
+ if (null == futureResponse) {
+ LOG.error("Request could not be sent. response is null");
+ return null;
+ }
+
+ DeviceRPCResponse response = null;
+
+ OperationCode opCode = deviceRPCRequest.getOpDetails().getOpCode();
+ String deviceId = deviceRPCRequest.getDeviceDetails().getDeviceId();
+ long timeOut = getOperationTimeOut(deviceRPCRequest.getOptions().getExecutionTimeout());
+
+ try {
+ waitForNotifications.waitForResult(deviceId, opCode, futureResponse, timeOut);
+ response = waitForNotifications.getOperationResult(deviceId, opCode);
+
+ if (null == response) {
+ LOG.error("Request got timed out.");
+ } else {
+ LOG.debug("Received operation result for device : {}, operation = {} as {}", deviceId,
+ opCode, response);
+ }
+ waitForNotifications.stopOperation(deviceId, opCode);
+
+ } catch (InterruptedException e) {
+ LOG.debug(
+ "InterruptedException while waiting for mapper operation result for device : {}, operation : {} request.",
+ deviceId, opCode);
+ Thread.currentThread().interrupt();
+ }
+
+ return response;
+ }
+
+ private long getOperationTimeOut(long timeOut) {
+ if (timeOut > 0) {
+ return timeOut;
+ }
+
+ if (null != config.getRequestTimeout()) {
+ timeOut = Long.valueOf(config.getRequestTimeout());
+ }
+
+ return timeOut;
+ }
+
+ @Async("threadPoolTaskExecutor1")
public void initiateDeviceReachabilityCheck(DeviceDataEntity deviceDataEntity) {
- deviceDataEntity.setStartEpochMicrosec(VesAgentUtils.getStartEpochTime()*1000);\r
- DeviceDetails deviceDetails = new DeviceDetails();\r
- deviceDetails.setDeviceId(deviceDataEntity.getDeviceId());\r
- deviceDetails.setOui(deviceDataEntity.getOui());\r
- deviceDetails.setProductClass(deviceDataEntity.getProductClass());\r
-\r
- TR069OperationDetails operationDetails = new TR069OperationDetails();\r
- operationDetails.setOpCode(CustomOperationCode.CONNECT);\r
-\r
- DeviceRPCRequest deviceRPCRequest = new DeviceRPCRequest();\r
-\r
- deviceRPCRequest.setDeviceDetails(deviceDetails);\r
- deviceRPCRequest.setOpDetails(operationDetails);\r
-\r
- OperationOptions options = new OperationOptions();\r
- if (null != config.getRequestTimeout()) {\r
- options.setExecutionTimeout(Integer.valueOf(config.getRequestTimeout()));\r
- }\r
-\r
- deviceRPCRequest.setOptions(options);\r
-\r
- DeviceRPCResponse deviceRPCResponse = performDeviceOperation(deviceRPCRequest);\r
-\r
- if (VesAgentUtils.isDeviceReachable(deviceRPCResponse)) {\r
- LOG.debug("Device {} is reachable.", deviceDataEntity.getDeviceId());\r
- try {\r
- LOG.debug("Sending heatbeat event for device {}.", deviceDataEntity.getDeviceId());\r
- heartBeatMessageHandler.sendHeartBeatEvent(deviceDataEntity, Integer.parseInt(\r
- deviceDataEntity.getAttributesMap().get(VesAgentConstants.HEART_BEAT_PERIOD)));\r
- } catch (NumberFormatException e) {\r
- LOG.error("heartBeatPeriod doesn't have numeric value. ErrorMsg: {}", e.getMessage());\r
- } catch (Exception e) {\r
- LOG.error("Error while sending heart beat ves event. ErrorMsg: {}", e.getMessage());\r
- }\r
- }\r
- }\r
-}\r
+ deviceDataEntity.setStartEpochMicrosec(VesAgentUtils.getStartEpochTime() * 1000);
+ DeviceDetails deviceDetails = new DeviceDetails();
+ deviceDetails.setDeviceId(deviceDataEntity.getDeviceId());
+ deviceDetails.setOui(deviceDataEntity.getOui());
+ deviceDetails.setProductClass(deviceDataEntity.getProductClass());
+
+ TR069OperationDetails operationDetails = new TR069OperationDetails();
+ operationDetails.setOpCode(CustomOperationCode.CONNECT);
+
+ DeviceRPCRequest deviceRPCRequest = new DeviceRPCRequest();
+
+ deviceRPCRequest.setDeviceDetails(deviceDetails);
+ deviceRPCRequest.setOpDetails(operationDetails);
+
+ OperationOptions options = new OperationOptions();
+ if (null != config.getRequestTimeout()) {
+ options.setExecutionTimeout(Integer.valueOf(config.getRequestTimeout()));
+ }
+
+ deviceRPCRequest.setOptions(options);
+
+ DeviceRPCResponse deviceRPCResponse = performDeviceOperation(deviceRPCRequest);
+
+ if (VesAgentUtils.isDeviceReachable(deviceRPCResponse)) {
+ LOG.debug("Device {} is reachable.", deviceDataEntity.getDeviceId());
+ try {
+ LOG.debug("Sending heatbeat event for device {}.", deviceDataEntity.getDeviceId());
+ heartBeatMessageHandler.sendHeartBeatEvent(deviceDataEntity, Integer.parseInt(
+ deviceDataEntity.getAttributesMap().get(VesAgentConstants.HEART_BEAT_PERIOD)));
+ } catch (NumberFormatException e) {
+ LOG.error("heartBeatPeriod doesn't have numeric value. ErrorMsg: {}", e.getMessage());
+ } catch (Exception e) {
+ LOG.error("Error while sending heart beat ves event. ErrorMsg: {}", e.getMessage());
+ }
+ }
+ }
+}