try { // get redis connection jedisConnection = factory.getConnection(); StringBuilder jedisMrid = new StringBuilder(), urlDataConstruct = null; int counter = 0, rrCounter = 0; URL urlObj = null;// need to reviewed CassandraDataEntity cassandraData = null; // to keep mird for failed post-url hit List<Long> mridList = null; StringBuffer jedisKeyForToday = new StringBuffer() .append(modal.getSmeAddr().toString().concat("_").concat(DlrUtil.getDate().toString())); StringBuffer jedisKeyForYesterday = new StringBuffer() .append(modal.getSmeAddr().toString().concat("_").concat(DlrUtil.getPreviousDate().toString())); logger.debug("Enter===="+modal.getSmeAddr()); while (true) { jedisMrid.replace(0, jedisMrid.length(), DlrUtil.byteToStringList( jedisConnection.bRPop(2, jedisKeyForYesterday.toString().getBytes(), jedisKeyForToday.toString().getBytes())) .toString()); if (!StringUtils.isEmpty(jedisMrid.toString())) { // initialize postBody only if there is any mrid in Redis if ( urlDataConstruct == null) {// postBody is null // only for the // first time urlDataConstruct = new StringBuilder(); response = new StringBuilder(); modal.setUrlSubString( modal.getUrl().substring(0, modal.getUrl().indexOf(DlrConstant.QUES_MARK)));// need // to // change // db modal.setUrlDataString( modal.getUrl().substring(modal.getUrl().indexOf(DlrConstant.QUES_MARK) + 1)); if (modal.getMethod().equalsIgnoreCase(DlrConstant.POST_REQ)) { mridList = new ArrayList<Long>(); urlObj = new URL(modal.getUrlSubString()); } else {// for get request executor = Executors.newFixedThreadPool(modal.getXmlBulkSize()); tasks = new ArrayList<GetRequestTask>(); hm = new HashMap<Long, String>(); } } else if (!StringUtils.isEmpty(urlDataConstruct.toString())) { } // select cassandra table on basis of mrid if (Integer.parseInt(jedisMrid.toString().substring(4, 6)) % 2 == 0) cassandraData = cassandraRepository.getDataFromEvenTable(Long.parseLong(jedisMrid.toString())); else cassandraData = cassandraRepository.getDataFromOddTable(Long.parseLong(jedisMrid.toString())); ++counter; ++rrCounter; // check data from cassandra to avoid NullPointerException if (!StringUtils.isEmpty(cassandraData)) { String statusForReplace = null; if(modal.getSmeAddr().equals(DlrConstant.SME1) || modal.getSmeAddr().equals(DlrConstant.SME2) || modal.getSmeAddr().equals(DlrConstant.SME3)){ switch(Integer.parseInt(cassandraData.getStatus())){ case 1: statusForReplace = DlrConstant.DELIVERED; break; case 108: statusForReplace = DlrConstant.DUPLICATE; break; default: statusForReplace = DlrConstant.FAILED; } }else{ statusForReplace = cassandraData.getStatus(); } logger.info("cassendra status"+cassandraData.getStatus()+"Set status"+statusForReplace); urlDataConstruct.append(modal.getUrlDataString() .replace(DlrConstant.DEST, Long.toString(cassandraData.getDest())) .replace(DlrConstant.QUESTIME, cassandraData.getQuestime()) .replace(DlrConstant.REASON, cassandraData.getReason()) .replace(DlrConstant.STATUS, statusForReplace) .replace(DlrConstant.TERM_TIME, cassandraData.getTermtime()) .replace(DlrConstant.URL_HIT_TIME, cassandraData.getUrlhittime()) .replace(DlrConstant.TEMPLID,StringUtils.isEmpty(Long.toString(cassandraData.getTmplid())) ? "": Long.toString(cassandraData.getTmplid())) .replace(DlrConstant.SENDERID,StringUtils.isEmpty(cassandraData.getSenderid()) ? "": cassandraData.getSenderid()) .replace(DlrConstant.DATA1, StringUtils.isEmpty(cassandraData.getData1())?"":cassandraData.getData1()) .replace(DlrConstant.DATA2, StringUtils.isEmpty(cassandraData.getData2())?"":cassandraData.getData2()) .replace(DlrConstant.DATA3, StringUtils.isEmpty(cassandraData.getData3())?"":cassandraData.getData3()) .replace(DlrConstant.DATA4, StringUtils.isEmpty(cassandraData.getData4())?"":cassandraData.getData4()) .replace(DlrConstant.DATA5, StringUtils.isEmpty(cassandraData.getData5())?"":cassandraData.getData5()) .replace(DlrConstant.ATTEMPT_NO, Integer.toString(cassandraData.getAtmptno())) .replace(DlrConstant.MRID, Long.toString(cassandraData.getMrid())) .replace(DlrConstant.USERNAME, modal.getUserName()) .replaceAll(DlrConstant.ONE_WHITESPACE_FOR_URL, DlrConstant.PERCENTAGE_20) .concat(DlrConstant.NEW_LINE)); cassandraData = null; if (modal.getMethod().equalsIgnoreCase(DlrConstant.POST_REQ)) { mridList.add(Long.parseLong(jedisMrid.toString())); } } else { // no data found in cassandra for the corresponding mrid } } if (urlDataConstruct != null && !StringUtils.isEmpty(urlDataConstruct.toString()) && modal.getMethod().equalsIgnoreCase(DlrConstant.POST_REQ)) { // check if normal api || xml api || threshold reached if (modal.getContentType().toLowerCase().equalsIgnoreCase(DlrConstant.JSON) || counter >= modal.getXmlBulkSize() || rrCounter >= 5000 || StringUtils.isEmpty(jedisMrid.toString())) { // hit url response = postUrlHit(urlObj, urlDataConstruct); counter = 0; urlDataConstruct.delete(0, urlDataConstruct.length()); // check response if (StringUtils.isEmpty(response) || StringUtils.isEmpty(response.toString()) || !response.toString().toLowerCase().contains(modal.getRespMessage().toLowerCase())) { postResponseToBackupJedis(mridList, jedisKeyForToday); } } } else if ((urlDataConstruct != null && !StringUtils.isEmpty(urlDataConstruct.toString()))|| StringUtils.isEmpty(jedisMrid.toString()) && modal.getMethod().equalsIgnoreCase(DlrConstant.GET_REQ)) { if(jedisMrid != null && !StringUtils.isEmpty(jedisMrid.toString())) tasks.add(new GetRequestTask(Long.parseLong(jedisMrid.toString()), modal.getUrlSubString().concat(DlrConstant.QUES_MARK).concat(urlDataConstruct.toString()), (ThreadPoolExecutor) executor, modal, null, 0));
## How to run the project To run this project, you need to have `java` and `maven` installed on your system. Then you can follow the following steps: 1. Clone this repository. 2. Open a terminal and `cd` into the repository. 3. Type `mvn clean install` to install the dependencies and build the project. 4. Type `mvn exec:java -Dexec.mainClass="com.impetus.Main"` to run the application. ## License This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.