aboutsummaryrefslogtreecommitdiffstats
path: root/src/main
diff options
context:
space:
mode:
authorsebdet <sebastien.determe@intl.att.com>2019-10-08 17:53:08 +0200
committerSébastien Determe <sebastien.determe@intl.att.com>2019-10-08 16:41:30 +0000
commit74303b71e884cbaf6099031973d6c37e31c55bf3 (patch)
treec73a6112e2db01d7179a4803a6dd046dd4366f4a /src/main
parent0efeb6b141cb4abe84af8eb38e26d5ed1ab73bb0 (diff)
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 <sebastien.determe@intl.att.com>
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/org/onap/clamp/clds/client/DcaeInventoryServices.java56
-rw-r--r--src/main/java/org/onap/clamp/util/HttpConnectionManager.java157
-rw-r--r--src/main/resources/application-noaaf.properties7
-rw-r--r--src/main/resources/application.properties9
-rw-r--r--src/main/resources/clds/camel/routes/dcae-flows.xml34
-rw-r--r--src/main/resources/clds/camel/routes/flexible-flow.xml78
6 files changed, 67 insertions, 274 deletions
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 0ebaab55..b24bc99b 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 6459fa97..00000000
--- 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);
- }
- }
-}
diff --git a/src/main/resources/application-noaaf.properties b/src/main/resources/application-noaaf.properties
index 580ec3f4..79466c89 100644
--- a/src/main/resources/application-noaaf.properties
+++ b/src/main/resources/application-noaaf.properties
@@ -208,15 +208,10 @@ clamp.config.action.insert.test.event=false
clamp.config.clds.service.cache.invalidate.after.seconds=120
#DCAE Inventory Url Properties
-clamp.config.dcae.inventory.url=http://localhost:8085
+clamp.config.dcae.inventory.url=http4://localhost:8085
clamp.config.dcae.intentory.retry.interval=10000
clamp.config.dcae.intentory.retry.limit=5
-#DCAE Dispatcher Url Properties
-clamp.config.dcae.dispatcher.url=http://localhost:8085
-clamp.config.dcae.dispatcher.retry.interval=20000
-clamp.config.dcae.dispatcher.retry.limit=30
-
#DCAE Deployment Url Properties
clamp.config.dcae.deployment.url=http4://localhost:8085
clamp.config.dcae.deployment.userName=test
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index dcad32ed..64121c94 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -219,15 +219,10 @@ clamp.config.action.insert.test.event=false
clamp.config.clds.service.cache.invalidate.after.seconds=120
#DCAE Inventory Url Properties
-clamp.config.dcae.inventory.url=http://dcae.api.simpledemo.onap.org:8080
+clamp.config.dcae.inventory.url=http4://dcae.api.simpledemo.onap.org:8080
clamp.config.dcae.intentory.retry.interval=10000
clamp.config.dcae.intentory.retry.limit=5
-#DCAE Dispatcher Url Properties
-clamp.config.dcae.dispatcher.url=http://dcae.api.simpledemo.onap.org:8188
-clamp.config.dcae.dispatcher.retry.interval=20000
-clamp.config.dcae.dispatcher.retry.limit=30
-
#DCAE Deployment Url Properties
clamp.config.dcae.deployment.url=http4://dcae.api.simpledemo.onap.org:8188
clamp.config.dcae.deployment.userName=test
@@ -249,7 +244,7 @@ clamp.config.cadi.keyFile=classpath:/clds/aaf/org.onap.clamp.keyfile
clamp.config.cadi.cadiLoglevel=DEBUG
clamp.config.cadi.cadiLatitude=10
clamp.config.cadi.cadiLongitude=10
-clamp.config.cadi.aafLocateUrl=https://aaf.api.simpledemo.onap.org:8095
+clamp.config.cadi.aafLocateUrl=https://10.0.0.106:31111
clamp.config.cadi.cadiKeystorePassword=enc:V_kq_EwDNb4itWp_lYfDGXIWJzemHGkhkZOxAQI9IHs
clamp.config.cadi.cadiTruststorePassword=enc:Mj0YQqNCUKbKq2lPp1kTFQWeqLxaBXKNwd5F1yB1ukf
#clamp.config.cadi.oauthTokenUrl=https://AAF_LOCATE_URL/AAF_NS.token:2.0/token
diff --git a/src/main/resources/clds/camel/routes/dcae-flows.xml b/src/main/resources/clds/camel/routes/dcae-flows.xml
index 46935819..fb3bc90e 100644
--- a/src/main/resources/clds/camel/routes/dcae-flows.xml
+++ b/src/main/resources/clds/camel/routes/dcae-flows.xml
@@ -177,6 +177,40 @@
<to uri="direct:dump-loop-log-http-response" />
</doFinally>
</doTry>
+ </route>
+ <route id="get-dcae-blueprint-inventory">
+ <from uri="direct:get-dcae-blueprint-inventory" />
+ <log loggingLevel="INFO"
+ message="Getting DCAE blueprint id in inventory" />
+ <to
+ uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('DCAE', 'Getting blueprint id in inventory')" />
+ <doTry>
+ <setHeader headerName="CamelHttpMethod">
+ <constant>GET</constant>
+ </setHeader>
+ <setHeader headerName="X-ONAP-RequestID">
+ <simple>${exchangeProperty[X-ONAP-RequestID]}
+ </simple>
+ </setHeader>
+ <setHeader headerName="X-ONAP-InvocationID">
+ <simple>${exchangeProperty[X-ONAP-InvocationID]}
+ </simple>
+ </setHeader>
+ <setHeader headerName="X-ONAP-PartnerName">
+ <simple>${exchangeProperty[X-ONAP-PartnerName]}
+ </simple>
+ </setHeader>
+ <log loggingLevel="INFO"
+ message="Endpoint to query Dcae inventory Loop status: {{clamp.config.dcae.inventory.url}}/dcae-service-types?${header[CamelHttpQuery]}"></log>
+ <toD
+ uri="{{clamp.config.dcae.inventory.url}}/dcae-service-types?asdcResourceId=${exchangeProperty[blueprintResourceId]}&amp;asdcServiceId=${exchangeProperty[blueprintServiceId]}&amp;typeName=${exchangeProperty[blueprintName]}&amp;bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.dcae.deployment.userName}}&amp;authPassword={{clamp.config.dcae.deployment.password}}&amp;connectionTimeToLive=5000&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=30000&amp;authenticationPreemptive=true&amp;connectionClose=true" />
+ <convertBodyTo type="java.lang.String" />
+ <doFinally>
+ <to uri="direct:reset-raise-http-exception-flag" />
+ <to
+ uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
+ </doFinally>
+ </doTry>
</route>
</routes> \ No newline at end of file
diff --git a/src/main/resources/clds/camel/routes/flexible-flow.xml b/src/main/resources/clds/camel/routes/flexible-flow.xml
deleted file mode 100644
index bc79fc21..00000000
--- a/src/main/resources/clds/camel/routes/flexible-flow.xml
+++ /dev/null
@@ -1,78 +0,0 @@
-<routes xmlns="http://camel.apache.org/schema/spring">
- <route id="submit">
- <from uri="direct:processSubmit" />
- <choice>
- <when>
- <simple> ${exchangeProperty.actionCd} == 'SUBMIT' ||
- ${exchangeProperty.actionCd} == 'RESUBMIT'
- </simple>
- <to
- uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'INITIATED')" />
- <to uri="bean:org.onap.clamp.clds.client.TcaPolicyDelegate" />
- <to uri="bean:org.onap.clamp.clds.client.HolmesPolicyDelegate" />
- <delay>
- <constant>30000</constant>
- </delay>
- <to
- uri="bean:org.onap.clamp.clds.client.OperationalPolicyDelegate" />
- <to uri="bean:org.onap.clamp.clds.client.GuardPolicyDelegate" />
- <to
- uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'COMPLETED')" />
- </when>
- <when>
- <simple> ${exchangeProperty.actionCd} == 'DELETE'</simple>
- <to
- uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'INITIATED')" />
- <to uri="bean:org.onap.clamp.clds.client.TcaPolicyDeleteDelegate" />
- <to
- uri="bean:org.onap.clamp.clds.client.HolmesPolicyDeleteDelegate" />
- <delay>
- <constant>30000</constant>
- </delay>
- <to
- uri="bean:org.onap.clamp.clds.client.OperationalPolicyDeleteDelegate" />
- <to
- uri="bean:org.onap.clamp.clds.client.GuardPolicyDeleteDelegate" />
- <to uri="bean:org.onap.clamp.clds.client.ModelDeleteDelegate" />
- <to
- uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'COMPLETED')" />
- </when>
- <when>
- <simple> ${exchangeProperty.actionCd} == 'UPDATE'</simple>
- <to
- uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'INITIATED')" />
- <to uri="bean:org.onap.clamp.clds.client.TcaPolicyDelegate" />
- <to uri="bean:org.onap.clamp.clds.client.HolmesPolicyDelegate" />
- <delay>
- <constant>30000</constant>
- </delay>
- <to
- uri="bean:org.onap.clamp.clds.client.OperationalPolicyDelegate" />
- <to uri="bean:org.onap.clamp.clds.client.GuardPolicyDelegate" />
- <to
- uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'COMPLETED')" />
- </when>
- <when>
- <simple> ${exchangeProperty.actionCd} == 'STOP'</simple>
- <to
- uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'INITIATED')" />
- <to
- uri="bean:org.onap.clamp.clds.client.OperationalPolicyDeleteDelegate" />
- <to
- uri="bean:org.onap.clamp.clds.client.GuardPolicyDeleteDelegate" />
- <to
- uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'COMPLETED')" />
- </when>
- <when>
- <simple> ${exchangeProperty.actionCd} == 'RESTART'</simple>
- <to
- uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'INITIATED')" />
- <to uri="bean:org.onap.clamp.clds.client.GuardPolicyDelegate" />
- <to
- uri="bean:org.onap.clamp.clds.client.OperationalPolicyDelegate" />
- <to
- uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'COMPLETED')" />
- </when>
- </choice>
- </route>
-</routes> \ No newline at end of file