From 74303b71e884cbaf6099031973d6c37e31c55bf3 Mon Sep 17 00:00:00 2001 From: sebdet Date: Tue, 8 Oct 2019 17:53:08 +0200 Subject: DCAE inventory calls in camel Move the HTTP/HTTPS calls to camel so that there is no issue with the previous code that does not support the config required for HTTP4 Camel Issue-ID: CLAMP-532 Change-Id: I83db0da5bbe6906890d0d6aa9b529c264e5f9b20 Signed-off-by: sebdet --- .../clamp/clds/client/DcaeInventoryServices.java | 56 ++++---- .../org/onap/clamp/util/HttpConnectionManager.java | 157 --------------------- 2 files changed, 30 insertions(+), 183 deletions(-) delete mode 100644 src/main/java/org/onap/clamp/util/HttpConnectionManager.java (limited to 'src/main/java') diff --git a/src/main/java/org/onap/clamp/clds/client/DcaeInventoryServices.java b/src/main/java/org/onap/clamp/clds/client/DcaeInventoryServices.java index 0ebaab555..b24bc99b2 100644 --- a/src/main/java/org/onap/clamp/clds/client/DcaeInventoryServices.java +++ b/src/main/java/org/onap/clamp/clds/client/DcaeInventoryServices.java @@ -30,6 +30,9 @@ import com.att.eelf.configuration.EELFManager; import java.io.IOException; import java.util.Date; +import org.apache.camel.CamelContext; +import org.apache.camel.Exchange; +import org.apache.camel.builder.ExchangeBuilder; import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; @@ -38,7 +41,6 @@ import org.onap.clamp.clds.config.ClampProperties; import org.onap.clamp.clds.model.dcae.DcaeInventoryResponse; import org.onap.clamp.clds.util.JsonUtils; import org.onap.clamp.clds.util.LoggingUtils; -import org.onap.clamp.util.HttpConnectionManager; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -48,6 +50,9 @@ import org.springframework.stereotype.Component; @Component public class DcaeInventoryServices { + @Autowired + CamelContext camelContext; + protected static final EELFLogger logger = EELFManager.getInstance().getLogger(DcaeInventoryServices.class); protected static final EELFLogger auditLogger = EELFManager.getInstance().getAuditLogger(); protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger(); @@ -55,15 +60,13 @@ public class DcaeInventoryServices { public static final String DCAE_INVENTORY_RETRY_INTERVAL = "dcae.intentory.retry.interval"; public static final String DCAE_INVENTORY_RETRY_LIMIT = "dcae.intentory.retry.limit"; private final ClampProperties refProp; - private final HttpConnectionManager httpConnectionManager; /** * Constructor. */ @Autowired - public DcaeInventoryServices(ClampProperties refProp, HttpConnectionManager httpConnectionManager) { + public DcaeInventoryServices(ClampProperties refProp) { this.refProp = refProp; - this.httpConnectionManager = httpConnectionManager; } private int getTotalCountFromDcaeInventoryResponse(String responseStr) throws ParseException { @@ -96,19 +99,7 @@ public class DcaeInventoryServices { public DcaeInventoryResponse getDcaeInformation(String artifactName, String serviceUuid, String resourceUuid) throws IOException, ParseException, InterruptedException { LoggingUtils.setTargetContext("DCAE", "getDcaeInformation"); - String queryString = "?asdcResourceId=" + resourceUuid + "&asdcServiceId=" + serviceUuid + "&typeName=" - + artifactName; - String fullUrl = refProp.getStringValue(DCAE_INVENTORY_URL) + "/dcae-service-types" + queryString; - logger.info("Dcae Inventory Service full url - " + fullUrl); - DcaeInventoryResponse response = queryDcaeInventory(fullUrl); - LoggingUtils.setResponseContext("0", "Get Dcae Information success", this.getClass().getName()); - Date startTime = new Date(); - LoggingUtils.setTimeContext(startTime, new Date()); - return response; - } - private DcaeInventoryResponse queryDcaeInventory(String fullUrl) - throws IOException, InterruptedException, ParseException { int retryInterval = 0; int retryLimit = 1; if (refProp.getStringValue(DCAE_INVENTORY_RETRY_LIMIT) != null) { @@ -118,18 +109,31 @@ public class DcaeInventoryServices { retryInterval = Integer.valueOf(refProp.getStringValue(DCAE_INVENTORY_RETRY_INTERVAL)); } for (int i = 0; i < retryLimit; i++) { + Exchange myCamelExchange = ExchangeBuilder.anExchange(camelContext) + .withProperty("blueprintResourceId", resourceUuid).withProperty("blueprintServiceId", serviceUuid) + .withProperty("blueprintName", artifactName).build(); metricsLogger.info("Attempt n°" + i + " to contact DCAE inventory"); - String response = httpConnectionManager.doHttpRequest(fullUrl, "GET", null, null, "DCAE", null, null); - int totalCount = getTotalCountFromDcaeInventoryResponse(response); - metricsLogger.info("getDcaeInformation complete: totalCount returned=" + totalCount); - if (totalCount > 0) { - logger.info("getDcaeInformation, answer from DCAE inventory:" + response); - return getItemsFromDcaeInventoryResponse(response); + + Exchange exchangeResponse = camelContext.createProducerTemplate() + .send("direct:get-dcae-blueprint-inventory", myCamelExchange); + + if (Integer.valueOf(200).equals(exchangeResponse.getIn().getHeader("CamelHttpResponseCode"))) { + String dcaeResponse = (String) exchangeResponse.getIn().getBody(); + int totalCount = getTotalCountFromDcaeInventoryResponse(dcaeResponse); + metricsLogger.info("getDcaeInformation complete: totalCount returned=" + totalCount); + if (totalCount > 0) { + logger.info("getDcaeInformation, answer from DCAE inventory:" + dcaeResponse); + LoggingUtils.setResponseContext("0", "Get Dcae Information success", this.getClass().getName()); + Date startTime = new Date(); + LoggingUtils.setTimeContext(startTime, new Date()); + return getItemsFromDcaeInventoryResponse(dcaeResponse); + } else { + logger.info("Dcae inventory totalCount returned is 0, so waiting " + retryInterval + + "ms before retrying ..."); + // wait for a while and try to connect to DCAE again + Thread.sleep(retryInterval); + } } - logger.info( - "Dcae inventory totalCount returned is 0, so waiting " + retryInterval + "ms before retrying ..."); - // wait for a while and try to connect to DCAE again - Thread.sleep(retryInterval); } logger.warn("Dcae inventory totalCount returned is still 0, after " + retryLimit + " attempts, returning NULL"); return null; diff --git a/src/main/java/org/onap/clamp/util/HttpConnectionManager.java b/src/main/java/org/onap/clamp/util/HttpConnectionManager.java deleted file mode 100644 index 6459fa971..000000000 --- a/src/main/java/org/onap/clamp/util/HttpConnectionManager.java +++ /dev/null @@ -1,157 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP CLAMP - * ================================================================================ - * Copyright (C) 2019 AT&T Intellectual Property. All rights - * reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END============================================ - * Modifications copyright (c) 2018 Nokia - * =================================================================== - * - */ - -package org.onap.clamp.util; - -import com.att.eelf.configuration.EELFLogger; -import com.att.eelf.configuration.EELFManager; - -import java.io.BufferedReader; -import java.io.DataOutputStream; -import java.io.IOException; -import java.io.InputStreamReader; -import java.net.HttpURLConnection; -import java.net.URL; -import java.nio.charset.StandardCharsets; -import java.util.Base64; - -import javax.net.ssl.HttpsURLConnection; -import javax.ws.rs.BadRequestException; - -import org.apache.commons.io.IOUtils; -import org.onap.clamp.clds.util.LoggingUtils; -import org.springframework.stereotype.Component; - -/** - * This class manages the HTTP and HTTPS connections. - */ -@Component -public class HttpConnectionManager { - protected static final EELFLogger logger = EELFManager.getInstance().getLogger(HttpConnectionManager.class); - protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger(); - private static final String REQUEST_FAILED_LOG = "Request Failed - response payload="; - - private String doHttpsQuery(URL url, String requestMethod, String payload, String contentType, String target, - String userName, String password) throws IOException { - LoggingUtils utils = new LoggingUtils(logger); - logger.info("Using HTTPS URL:" + url.toString()); - HttpsURLConnection secureConnection = (HttpsURLConnection) url.openConnection(); - secureConnection = utils.invokeHttps(secureConnection, target, requestMethod); - secureConnection.setRequestMethod(requestMethod); - if (userName != null && password != null) { - secureConnection.setRequestProperty("Authorization", "Basic " - + Base64.getEncoder().encodeToString((userName + ":" + password).getBytes(StandardCharsets.UTF_8))); - } - if (payload != null && contentType != null) { - secureConnection.setRequestProperty("Content-Type", contentType); - secureConnection.setDoOutput(true); - try (DataOutputStream wr = new DataOutputStream(secureConnection.getOutputStream())) { - wr.writeBytes(payload); - wr.flush(); - } - } - int responseCode = secureConnection.getResponseCode(); - logger.info("Response Code: " + responseCode); - if (responseCode < 400) { - try (BufferedReader reader = new BufferedReader(new InputStreamReader(secureConnection.getInputStream()))) { - String responseStr = IOUtils.toString(reader); - logger.info("Response Content: " + responseStr); - return responseStr; - } - } else { - // In case of connection failure just check whether there is a - // content or not - try (BufferedReader reader = new BufferedReader(new InputStreamReader(secureConnection.getErrorStream()))) { - String responseStr = IOUtils.toString(reader); - logger.error(REQUEST_FAILED_LOG + responseStr); - throw new BadRequestException(responseStr); - } - } - } - - private String doHttpQuery(URL url, String requestMethod, String payload, String contentType, String target, - String userName, String password) throws IOException { - LoggingUtils utils = new LoggingUtils(logger); - logger.info("Using HTTP URL:" + url); - HttpURLConnection connection = (HttpURLConnection) url.openConnection(); - connection = utils.invoke(connection, target, requestMethod); - connection.setRequestMethod(requestMethod); - if (userName != null && password != null) { - connection.setRequestProperty("Authorization", "Basic " - + Base64.getEncoder().encodeToString((userName + ":" + password).getBytes(StandardCharsets.UTF_8))); - } - if (payload != null && contentType != null) { - connection.setRequestProperty("Content-Type", contentType); - connection.setDoOutput(true); - try (DataOutputStream wr = new DataOutputStream(connection.getOutputStream())) { - wr.writeBytes(payload); - wr.flush(); - } - } - int responseCode = connection.getResponseCode(); - logger.info("Response Code: " + responseCode); - if (responseCode < 400) { - try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()))) { - String responseStr = IOUtils.toString(reader); - logger.info("Response Content: " + responseStr); - utils.invokeReturn(); - return responseStr; - } - } else { - // In case of connection failure just check whether there is a - // content or not - try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getErrorStream()))) { - String responseStr = IOUtils.toString(reader); - logger.error(REQUEST_FAILED_LOG + responseStr); - utils.invokeReturn(); - throw new BadRequestException(responseStr); - } - } - } - - /** - * This method does a HTTP/HTTPS query with parameters specified. - * - * @param url - * The string HTTP or HTTPS that mustr be used to connect - * @param requestMethod - * The Request Method (PUT, POST, GET, DELETE, etc ...) - * @param payload - * The payload if any, in that case an ouputstream is opened - * @param contentType - * The "application/json or application/xml, or whatever" - * @return The payload of the answer - * @throws IOException - * In case of issue with the streams - */ - public String doHttpRequest(String url, String requestMethod, String payload, String contentType, String target, - String userName, String password) throws IOException { - URL urlObj = new URL(url); - if (url.contains("https://")) { // Support for HTTPS - return doHttpsQuery(urlObj, requestMethod, payload, contentType, target, userName, password); - } else { // Support for HTTP - return doHttpQuery(urlObj, requestMethod, payload, contentType, target, userName, password); - } - } -} -- cgit 1.2.3-korg