aboutsummaryrefslogtreecommitdiffstats
path: root/sdc-distribution-client/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'sdc-distribution-client/src/main/java')
-rw-r--r--sdc-distribution-client/src/main/java/org/onap/sdc/api/IDistributionClient.java21
-rw-r--r--sdc-distribution-client/src/main/java/org/onap/sdc/api/asdc/RegistrationRequest.java56
-rw-r--r--sdc-distribution-client/src/main/java/org/onap/sdc/api/consumer/IConfiguration.java50
-rw-r--r--sdc-distribution-client/src/main/java/org/onap/sdc/api/notification/INotificationData.java4
-rw-r--r--sdc-distribution-client/src/main/java/org/onap/sdc/api/notification/IVfModuleMetadata.java2
-rw-r--r--sdc-distribution-client/src/main/java/org/onap/sdc/http/HttpClientFactory.java2
-rw-r--r--sdc-distribution-client/src/main/java/org/onap/sdc/http/HttpSdcClient.java (renamed from sdc-distribution-client/src/main/java/org/onap/sdc/http/HttpAsdcClient.java)42
-rw-r--r--sdc-distribution-client/src/main/java/org/onap/sdc/http/HttpSdcClientException.java (renamed from sdc-distribution-client/src/main/java/org/onap/sdc/http/HttpAsdcClientException.java)4
-rw-r--r--sdc-distribution-client/src/main/java/org/onap/sdc/http/HttpSdcResponse.java (renamed from sdc-distribution-client/src/main/java/org/onap/sdc/http/HttpAsdcResponse.java)6
-rw-r--r--sdc-distribution-client/src/main/java/org/onap/sdc/http/IHttpSdcClient.java (renamed from sdc-distribution-client/src/main/java/org/onap/sdc/http/IHttpAsdcClient.java)6
-rw-r--r--sdc-distribution-client/src/main/java/org/onap/sdc/http/SdcConnectorClient.java222
-rw-r--r--sdc-distribution-client/src/main/java/org/onap/sdc/http/SdcUrls.java (renamed from sdc-distribution-client/src/main/java/org/onap/sdc/api/asdc/ServerListResponse.java)17
-rw-r--r--sdc-distribution-client/src/main/java/org/onap/sdc/http/TopicRegistrationResponse.java43
-rw-r--r--sdc-distribution-client/src/main/java/org/onap/sdc/impl/Configuration.java84
-rw-r--r--sdc-distribution-client/src/main/java/org/onap/sdc/impl/ConfigurationValidator.java30
-rw-r--r--sdc-distribution-client/src/main/java/org/onap/sdc/impl/DistributionClientImpl.java482
-rw-r--r--sdc-distribution-client/src/main/java/org/onap/sdc/impl/DistributionClientResultImpl.java4
-rw-r--r--sdc-distribution-client/src/main/java/org/onap/sdc/impl/NotificationConsumer.java72
-rw-r--r--sdc-distribution-client/src/main/java/org/onap/sdc/impl/StatusConsumer.java29
-rw-r--r--sdc-distribution-client/src/main/java/org/onap/sdc/utils/DistributionActionResultEnum.java22
-rw-r--r--sdc-distribution-client/src/main/java/org/onap/sdc/utils/DistributionClientConstants.java2
-rw-r--r--sdc-distribution-client/src/main/java/org/onap/sdc/utils/GeneralUtils.java20
-rw-r--r--sdc-distribution-client/src/main/java/org/onap/sdc/utils/NotificationSender.java43
-rw-r--r--sdc-distribution-client/src/main/java/org/onap/sdc/utils/kafka/KafkaDataResponse.java (renamed from sdc-distribution-client/src/main/java/org/onap/sdc/http/AsdcUrls.java)25
-rw-r--r--sdc-distribution-client/src/main/java/org/onap/sdc/utils/kafka/SdcKafkaConsumer.java100
-rw-r--r--sdc-distribution-client/src/main/java/org/onap/sdc/utils/kafka/SdcKafkaProducer.java98
26 files changed, 693 insertions, 793 deletions
diff --git a/sdc-distribution-client/src/main/java/org/onap/sdc/api/IDistributionClient.java b/sdc-distribution-client/src/main/java/org/onap/sdc/api/IDistributionClient.java
index fe37dc1..ac48419 100644
--- a/sdc-distribution-client/src/main/java/org/onap/sdc/api/IDistributionClient.java
+++ b/sdc-distribution-client/src/main/java/org/onap/sdc/api/IDistributionClient.java
@@ -33,6 +33,11 @@ import org.onap.sdc.api.results.IDistributionClientResult;
import org.onap.sdc.api.notification.IArtifactInfo;
import org.onap.sdc.api.notification.IVfModuleMetadata;
+/**
+ Client for sending/receiving notifications/status related to distributions from SDC.
+ This client uses Kafka for communication with the topics.
+ For communication using DMAAP MR use latest version with major version = 1 (e.g. 1.4.5)
+ **/
public interface IDistributionClient {
/**
@@ -63,15 +68,13 @@ public interface IDistributionClient {
/**
* Stop distribution client <br>
* - stop polling notification topic <br>
- * - unregister topics (via ASDC) <br>
- * - delete keys from UEB
*
* @return IDistributionClientResult
*/
IDistributionClientResult stop();
/**
- * Downloads an artifact from ASDC Catalog <br>
+ * Downloads an artifact from SDC Catalog <br>
*
* @param artifactInfo
* @return IDistributionClientDownloadResult
@@ -80,10 +83,10 @@ public interface IDistributionClient {
/**
* Initialize the distribution client <br>
- * - fetch the UEB server list from ASDC <br>
- * - create keys in UEB <br>
- * - register for topics (via ASDC) <br>
+ * - get MessageBus server list from configuration <br>
+ * - validate artifact types against sdc server <br>
* - set the notification callback <br>
+ * - set up notification sender <br>
* <p>
* Note: all configuration fields are mandatory. <br>
* Password must be in clear text and not encrypted <br>
@@ -98,10 +101,10 @@ public interface IDistributionClient {
/**
* Initialize the distribution client <br>
- * - fetch the UEB server list from ASDC <br>
- * - create keys in UEB <br>
- * - register for topics (via ASDC) <br>
+ * - get MessageBus server list from configuration <br>
+ * - validate artifact types against sdc server <br>
* - set the notification callback <br>
+ * - set up notification sender <br>
* <p>
* Note: all configuration fields are mandatory. <br>
* Password must be in clear text and not encrypted <br>
diff --git a/sdc-distribution-client/src/main/java/org/onap/sdc/api/asdc/RegistrationRequest.java b/sdc-distribution-client/src/main/java/org/onap/sdc/api/asdc/RegistrationRequest.java
deleted file mode 100644
index 765da4c..0000000
--- a/sdc-distribution-client/src/main/java/org/onap/sdc/api/asdc/RegistrationRequest.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * sdc-distribution-client
- * ================================================================================
- * Copyright (C) 2017 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=========================================================
- */
-
-package org.onap.sdc.api.asdc;
-
-import java.util.List;
-
-public class RegistrationRequest {
-
- private String apiPublicKey;
- private String distrEnvName;
- private Boolean isConsumerToSdcDistrStatusTopic;
- private List<String> distEnvEndPoints;
-
- public RegistrationRequest(String apiPublicKey, String distrEnvName, boolean isConsumerToSdcDistrStatusTopic, List<String> distEnvEndPoints) {
- this.apiPublicKey = apiPublicKey;
- this.distrEnvName = distrEnvName;
- this.isConsumerToSdcDistrStatusTopic = isConsumerToSdcDistrStatusTopic;
- this.distEnvEndPoints = distEnvEndPoints;
- }
-
- public String getApiPublicKey() {
- return apiPublicKey;
- }
-
- public String getDistrEnvName() {
- return distrEnvName;
- }
-
- public Boolean getIsConsumerToSdcDistrStatusTopic() {
- return isConsumerToSdcDistrStatusTopic;
- }
-
- public List<String> getDistEnvEndPoints() {
- return distEnvEndPoints;
- }
-
-
-}
diff --git a/sdc-distribution-client/src/main/java/org/onap/sdc/api/consumer/IConfiguration.java b/sdc-distribution-client/src/main/java/org/onap/sdc/api/consumer/IConfiguration.java
index e3013e2..84eb42b 100644
--- a/sdc-distribution-client/src/main/java/org/onap/sdc/api/consumer/IConfiguration.java
+++ b/sdc-distribution-client/src/main/java/org/onap/sdc/api/consumer/IConfiguration.java
@@ -22,6 +22,7 @@ package org.onap.sdc.api.consumer;
import java.util.List;
+import org.apache.kafka.common.KafkaException;
import org.onap.sdc.api.notification.INotificationData;
public interface IConfiguration {
@@ -30,7 +31,7 @@ public interface IConfiguration {
* without port), IP:port or FQDN (Fully Qualified Domain Name). * @return SDC
* Distribution Engine address.
*/
- String getAsdcAddress();
+ String getSdcAddress();
/**
* SDC Distribution Addresses from ONAP Component Values need to be set from
@@ -39,6 +40,32 @@ public interface IConfiguration {
List<String> getMsgBusAddress();
/**
+ * Kafka security.protocol
+ */
+ default String getKafkaSecurityProtocolConfig() {
+ return System.getenv().getOrDefault("SECURITY_PROTOCOL", "SASL_PLAINTEXT");
+ }
+
+ /**
+ * Kafka sasl.mechanism
+ */
+ default String getKafkaSaslMechanism() {
+ return System.getenv().getOrDefault("SASL_MECHANISM", "SCRAM-SHA-512");
+ }
+
+ /**
+ * Kafka sasl.jaas.config
+ */
+ default String getKafkaSaslJaasConfig() {
+ String saslJaasConfFromEnv = System.getenv("SASL_JAAS_CONFIG");
+ if(saslJaasConfFromEnv != null) {
+ return saslJaasConfFromEnv;
+ } else {
+ throw new KafkaException("sasl.jaas.config not set for Kafka Consumer");
+ }
+ }
+
+ /**
* User Name for SDC distribution consumer authentication.
*
* @return User Name.
@@ -64,7 +91,7 @@ public interface IConfiguration {
String getPassword();
/**
- * Distribution Client Polling Interval towards UEB in seconds. Can Be
+ * Distribution Client Polling Interval towards messaging bus in seconds. Can Be
* reconfigured in runtime.
*
* @return Distribution Client Polling Interval.
@@ -72,7 +99,7 @@ public interface IConfiguration {
int getPollingInterval();
/**
- * Distribution Client Timeout in seconds waiting to UEB server response in each
+ * Distribution Client Timeout in seconds waiting for messaging bus server response in each
* fetch interval. Can Be reconfigured in runtime.
*
* @return Distribution Client Timeout in seconds.
@@ -89,10 +116,10 @@ public interface IConfiguration {
List<String> getRelevantArtifactTypes();
/**
- * Returns the consumer group defined for this ECOMP component, if no consumer
+ * Returns the consumer group defined for this component, if no consumer
* group is defined return null.
*
- * @return Consumer group.
+ * @return SdcKafkaConsumer group.
*/
String getConsumerGroup();
@@ -105,7 +132,7 @@ public interface IConfiguration {
String getEnvironmentName();
/**
- * Unique ID of ECOMP component instance (e.x INSTAR name).
+ * Unique ID of component instance (e.x INSTAR name).
*
* @return
*/
@@ -113,7 +140,7 @@ public interface IConfiguration {
/**
* Return full path to Client's Key Store that contains either CA certificate or
- * the ASDC's public key (e.g /etc/keystore/asdc-client.jks) file will be
+ * the SDC's public key (e.g /etc/keystore/sdc-client.jks) file will be
* deployed with sdc-distribution jar.
*
* @return
@@ -147,15 +174,6 @@ public interface IConfiguration {
boolean isFilterInEmptyResources();
/**
- * By default, Distribution Client will use HTTPS (TLS 1.2) when connecting to
- * DMAAP. This param can be null, then default (HTTPS) behavior will be applied.
- * If set to false, distribution client will use HTTP when connecting to DMAAP.
- *
- * @return
- */
- Boolean isUseHttpsWithDmaap();
-
- /**
* By default, (false value) Distribution Client will trigger the regular
* registration towards SDC (register component as consumer to the
* SDC-DISTR-NOTIF-TOPIC-[ENV] topic and register component as producer to the
diff --git a/sdc-distribution-client/src/main/java/org/onap/sdc/api/notification/INotificationData.java b/sdc-distribution-client/src/main/java/org/onap/sdc/api/notification/INotificationData.java
index 5df130a..8c24ed4 100644
--- a/sdc-distribution-client/src/main/java/org/onap/sdc/api/notification/INotificationData.java
+++ b/sdc-distribution-client/src/main/java/org/onap/sdc/api/notification/INotificationData.java
@@ -25,7 +25,7 @@ import java.util.List;
public interface INotificationData {
/**
- * Global Distribution Identifier: UUID generated by ASDC per each distribution activation.<br>
+ * Global Distribution Identifier: UUID generated by SDC per each distribution activation.<br>
* Generated UUID is compliant with RFC 4122.<br>
* It is a 128-bit value formatted into blocks of hexadecimal digits separated by a hyphen ("-").<br>
* Ex.: AA97B177-9383-4934-8543-0F91A7A02836
@@ -45,7 +45,7 @@ public interface INotificationData {
String getServiceVersion();
/**
- * Global UUID generated by ASDC per each service version. Generated UUID is compliant with RFC 4122.<br>
+ * Global UUID generated by SDC per each service version. Generated UUID is compliant with RFC 4122.<br>
* It is a 128-bit value formatted into blocks of hexadecimal digits separated by a hyphen ("-").<br>
* Ex. : AA97B177-9383-4934-8543-0F91A7A02836
*/
diff --git a/sdc-distribution-client/src/main/java/org/onap/sdc/api/notification/IVfModuleMetadata.java b/sdc-distribution-client/src/main/java/org/onap/sdc/api/notification/IVfModuleMetadata.java
index 5347189..91415ce 100644
--- a/sdc-distribution-client/src/main/java/org/onap/sdc/api/notification/IVfModuleMetadata.java
+++ b/sdc-distribution-client/src/main/java/org/onap/sdc/api/notification/IVfModuleMetadata.java
@@ -45,7 +45,7 @@ public interface IVfModuleMetadata {
/**
* Global UUID of the VF Module.<br>
- * It is generated by ASDC per each new VF module version. Generated UUID is compliant with RFC 4122. It is a 128-bit value formatted into blocks of hexadecimal digits separated by a hyphen ("-").<br>
+ * It is generated by SDC per each new VF module version. Generated UUID is compliant with RFC 4122. It is a 128-bit value formatted into blocks of hexadecimal digits separated by a hyphen ("-").<br>
* Ex.: AA97B177-9383-4934-8543-0F91A7A02836
*/
String getVfModuleModelUUID();
diff --git a/sdc-distribution-client/src/main/java/org/onap/sdc/http/HttpClientFactory.java b/sdc-distribution-client/src/main/java/org/onap/sdc/http/HttpClientFactory.java
index 7a073a1..94e20fb 100644
--- a/sdc-distribution-client/src/main/java/org/onap/sdc/http/HttpClientFactory.java
+++ b/sdc-distribution-client/src/main/java/org/onap/sdc/http/HttpClientFactory.java
@@ -182,7 +182,7 @@ public class HttpClientFactory {
return HttpClientBuilder.create().setDefaultCredentialsProvider(credsProvider).setProxy(getHttpsProxyHost())
.setSSLSocketFactory(sslsf).build();
} catch (Exception e) {
- throw new HttpAsdcClientException("Failed to create https client", e);
+ throw new HttpSdcClientException("Failed to create https client", e);
}
}
diff --git a/sdc-distribution-client/src/main/java/org/onap/sdc/http/HttpAsdcClient.java b/sdc-distribution-client/src/main/java/org/onap/sdc/http/HttpSdcClient.java
index 14c9c7f..8b6ee0a 100644
--- a/sdc-distribution-client/src/main/java/org/onap/sdc/http/HttpAsdcClient.java
+++ b/sdc-distribution-client/src/main/java/org/onap/sdc/http/HttpSdcClient.java
@@ -41,9 +41,9 @@ import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
-public class HttpAsdcClient implements IHttpAsdcClient {
+public class HttpSdcClient implements IHttpSdcClient {
- private static final Logger log = LoggerFactory.getLogger(HttpAsdcClient.class.getName());
+ private static final Logger log = LoggerFactory.getLogger(HttpSdcClient.class.getName());
private static final boolean ALWAYS_CLOSE_THE_REQUEST_CONNECTION = true;
private final CloseableHttpClient httpClient;
private final String httpSchema;
@@ -56,18 +56,18 @@ public class HttpAsdcClient implements IHttpAsdcClient {
* @deprecated
* This constructor will be removed in the future.
*
- * @param configuration Asdc client configuration
+ * @param configuration Sdc client configuration
*/
@Deprecated
- public HttpAsdcClient(IConfiguration configuration) {
- this(configuration.getAsdcAddress(),
+ public HttpSdcClient(IConfiguration configuration) {
+ this(configuration.getSdcAddress(),
new HttpClientFactory(configuration),
new HttpRequestFactory(configuration.getUser(), configuration.getPassword())
);
}
- public HttpAsdcClient(String asdcAddress, HttpClientFactory httpClientFactory, HttpRequestFactory httpRequestFactory) {
- this.serverFqdn = asdcAddress;
+ public HttpSdcClient(String sdcAddress, HttpClientFactory httpClientFactory, HttpRequestFactory httpRequestFactory) {
+ this.serverFqdn = sdcAddress;
this.httpRequestFactory = httpRequestFactory;
Pair<String, CloseableHttpClient> httpClientPair = httpClientFactory.createInstance();
@@ -75,21 +75,21 @@ public class HttpAsdcClient implements IHttpAsdcClient {
this.httpClient = httpClientPair.getSecond();
}
- public HttpAsdcResponse postRequest(String requestUrl, HttpEntity entity, Map<String, String> headersMap) {
+ public HttpSdcResponse postRequest(String requestUrl, HttpEntity entity, Map<String, String> headersMap) {
return postRequest(requestUrl, entity, headersMap, ALWAYS_CLOSE_THE_REQUEST_CONNECTION).getFirst();
}
- public Pair<HttpAsdcResponse, CloseableHttpResponse> postRequest(String requestUrl, HttpEntity entity, Map<String, String> headersMap, boolean closeTheRequest) {
- Pair<HttpAsdcResponse, CloseableHttpResponse> ret;
+ public Pair<HttpSdcResponse, CloseableHttpResponse> postRequest(String requestUrl, HttpEntity entity, Map<String, String> headersMap, boolean closeTheRequest) {
+ Pair<HttpSdcResponse, CloseableHttpResponse> ret;
final String url = resolveUrl(requestUrl);
log.debug("url to send {}", url);
HttpPost httpPost = httpRequestFactory.createHttpPostRequest(url, headersMap, entity);
CloseableHttpResponse httpResponse = null;
- HttpAsdcResponse response = null;
+ HttpSdcResponse response = null;
try {
httpResponse = httpClient.execute(httpPost);
- response = new HttpAsdcResponse(httpResponse.getStatusLine().getStatusCode(), httpResponse.getEntity());
+ response = new HttpSdcResponse(httpResponse.getStatusLine().getStatusCode(), httpResponse.getEntity());
} catch (IOException e) {
log.error("failed to send request to url: {}", requestUrl);
response = createHttpResponse(HttpStatus.SC_INTERNAL_SERVER_ERROR, "failed to send request");
@@ -100,19 +100,19 @@ public class HttpAsdcClient implements IHttpAsdcClient {
return ret;
}
- public HttpAsdcResponse getRequest(String requestUrl, Map<String, String> headersMap) {
+ public HttpSdcResponse getRequest(String requestUrl, Map<String, String> headersMap) {
return getRequest(requestUrl, headersMap, ALWAYS_CLOSE_THE_REQUEST_CONNECTION).getFirst();
}
- public Pair<HttpAsdcResponse, CloseableHttpResponse> getRequest(String requestUrl, Map<String, String> headersMap, boolean closeTheRequest) {
- Pair<HttpAsdcResponse, CloseableHttpResponse> ret;
+ public Pair<HttpSdcResponse, CloseableHttpResponse> getRequest(String requestUrl, Map<String, String> headersMap, boolean closeTheRequest) {
+ Pair<HttpSdcResponse, CloseableHttpResponse> ret;
final String url = resolveUrl(requestUrl);
log.debug("url to send {}", url);
HttpGet httpGet = httpRequestFactory.createHttpGetRequest(url, headersMap);
CloseableHttpResponse httpResponse = null;
- HttpAsdcResponse response = null;
+ HttpSdcResponse response = null;
try {
httpResponse = httpClient.execute(httpGet);
@@ -122,7 +122,7 @@ public class HttpAsdcClient implements IHttpAsdcClient {
for (Header header : headersRes) {
headersResMap.put(header.getName(), header.getValue());
}
- response = new HttpAsdcResponse(httpResponse.getStatusLine().getStatusCode(), httpResponse.getEntity(), headersResMap);
+ response = new HttpSdcResponse(httpResponse.getStatusLine().getStatusCode(), httpResponse.getEntity(), headersResMap);
} catch (UnknownHostException | ConnectException e) {
log.error("failed to connect to url: {}", requestUrl, e);
@@ -145,8 +145,8 @@ public class HttpAsdcClient implements IHttpAsdcClient {
return this.httpSchema + serverFqdn + requestUrl;
}
- private Pair<HttpAsdcResponse, CloseableHttpResponse> finalizeHttpRequest(boolean closeTheRequest, CloseableHttpResponse httpResponse, HttpAsdcResponse response) {
- Pair<HttpAsdcResponse, CloseableHttpResponse> ret;
+ private Pair<HttpSdcResponse, CloseableHttpResponse> finalizeHttpRequest(boolean closeTheRequest, CloseableHttpResponse httpResponse, HttpSdcResponse response) {
+ Pair<HttpSdcResponse, CloseableHttpResponse> ret;
if (closeTheRequest) {
if (httpResponse != null) {
try {
@@ -163,8 +163,8 @@ public class HttpAsdcClient implements IHttpAsdcClient {
return ret;
}
- static HttpAsdcResponse createHttpResponse(int httpStatusCode, String httpMessage) {
- return new HttpAsdcResponse(httpStatusCode, new StringEntity(httpMessage, StandardCharsets.UTF_8));
+ static HttpSdcResponse createHttpResponse(int httpStatusCode, String httpMessage) {
+ return new HttpSdcResponse(httpStatusCode, new StringEntity(httpMessage, StandardCharsets.UTF_8));
}
public void closeHttpClient() {
diff --git a/sdc-distribution-client/src/main/java/org/onap/sdc/http/HttpAsdcClientException.java b/sdc-distribution-client/src/main/java/org/onap/sdc/http/HttpSdcClientException.java
index 8d6a527..d3747f5 100644
--- a/sdc-distribution-client/src/main/java/org/onap/sdc/http/HttpAsdcClientException.java
+++ b/sdc-distribution-client/src/main/java/org/onap/sdc/http/HttpSdcClientException.java
@@ -19,9 +19,9 @@
*/
package org.onap.sdc.http;
-public class HttpAsdcClientException extends RuntimeException {
+public class HttpSdcClientException extends RuntimeException {
- public HttpAsdcClientException(String message, Throwable cause) {
+ public HttpSdcClientException(String message, Throwable cause) {
super(message, cause);
}
}
diff --git a/sdc-distribution-client/src/main/java/org/onap/sdc/http/HttpAsdcResponse.java b/sdc-distribution-client/src/main/java/org/onap/sdc/http/HttpSdcResponse.java
index 8b85684..ad64f3f 100644
--- a/sdc-distribution-client/src/main/java/org/onap/sdc/http/HttpAsdcResponse.java
+++ b/sdc-distribution-client/src/main/java/org/onap/sdc/http/HttpSdcResponse.java
@@ -24,19 +24,19 @@ import java.util.Map;
import org.apache.http.HttpEntity;
-public class HttpAsdcResponse {
+public class HttpSdcResponse {
private int status;
private HttpEntity message;
private Map<String, String> headersMap;
- public HttpAsdcResponse(int status, HttpEntity message) {
+ public HttpSdcResponse(int status, HttpEntity message) {
super();
this.status = status;
this.message = message;
}
- public HttpAsdcResponse(int status, HttpEntity message, Map<String, String> headersMap) {
+ public HttpSdcResponse(int status, HttpEntity message, Map<String, String> headersMap) {
super();
this.status = status;
this.message = message;
diff --git a/sdc-distribution-client/src/main/java/org/onap/sdc/http/IHttpAsdcClient.java b/sdc-distribution-client/src/main/java/org/onap/sdc/http/IHttpSdcClient.java
index 2a0d9a0..9adce23 100644
--- a/sdc-distribution-client/src/main/java/org/onap/sdc/http/IHttpAsdcClient.java
+++ b/sdc-distribution-client/src/main/java/org/onap/sdc/http/IHttpSdcClient.java
@@ -24,11 +24,11 @@ import java.util.Map;
import org.apache.http.HttpEntity;
-public interface IHttpAsdcClient {
+public interface IHttpSdcClient {
- HttpAsdcResponse postRequest(String requestUrl, HttpEntity entity, Map<String, String> headersMap);
+ HttpSdcResponse postRequest(String requestUrl, HttpEntity entity, Map<String, String> headersMap);
- HttpAsdcResponse getRequest(String requestUrl, Map<String, String> headersMap);
+ HttpSdcResponse getRequest(String requestUrl, Map<String, String> headersMap);
void closeHttpClient();
diff --git a/sdc-distribution-client/src/main/java/org/onap/sdc/http/SdcConnectorClient.java b/sdc-distribution-client/src/main/java/org/onap/sdc/http/SdcConnectorClient.java
index 7aac780..18aba95 100644
--- a/sdc-distribution-client/src/main/java/org/onap/sdc/http/SdcConnectorClient.java
+++ b/sdc-distribution-client/src/main/java/org/onap/sdc/http/SdcConnectorClient.java
@@ -21,6 +21,10 @@
package org.onap.sdc.http;
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.reflect.TypeToken;
+import fj.data.Either;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Type;
@@ -30,7 +34,6 @@ import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.UUID;
-
import org.apache.commons.io.IOUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpHeaders;
@@ -38,33 +41,26 @@ import org.apache.http.HttpStatus;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
+import org.onap.sdc.api.consumer.IConfiguration;
import org.onap.sdc.api.notification.IArtifactInfo;
import org.onap.sdc.api.results.IDistributionClientResult;
+import org.onap.sdc.impl.DistributionClientDownloadResultImpl;
import org.onap.sdc.impl.DistributionClientResultImpl;
import org.onap.sdc.utils.DistributionActionResultEnum;
-import org.onap.sdc.api.asdc.RegistrationRequest;
-import org.onap.sdc.api.consumer.IConfiguration;
-import org.onap.sdc.impl.DistributionClientDownloadResultImpl;
import org.onap.sdc.utils.DistributionClientConstants;
import org.onap.sdc.utils.Pair;
+import org.onap.sdc.utils.kafka.KafkaDataResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.att.nsa.apiClient.credentials.ApiCredential;
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.google.gson.reflect.TypeToken;
-
-import fj.data.Either;
-
public class SdcConnectorClient {
private static final Logger log = LoggerFactory.getLogger(SdcConnectorClient.class.getName());
static final String CONTENT_DISPOSITION_HEADER = "Content-Disposition";
private final IConfiguration configuration;
- private final HttpAsdcClient httpClient;
+ private final HttpSdcClient httpClient;
- public SdcConnectorClient(IConfiguration configuration, HttpAsdcClient httpClient) {
+ public SdcConnectorClient(IConfiguration configuration, HttpSdcClient httpClient) {
Objects.requireNonNull(configuration);
Objects.requireNonNull(httpClient);
this.configuration = configuration;
@@ -76,23 +72,37 @@ public class SdcConnectorClient {
}
public Either<List<String>, IDistributionClientResult> getValidArtifactTypesList() {
- Pair<HttpAsdcResponse, CloseableHttpResponse> getServersResponsePair = performAsdcServerRequest();
- HttpAsdcResponse getArtifactTypeResponse = getServersResponsePair.getFirst();
+ Pair<HttpSdcResponse, CloseableHttpResponse> getServersResponsePair = performSdcServerRequest(SdcUrls.GET_VALID_ARTIFACT_TYPES);
+ HttpSdcResponse getArtifactTypeResponse = getServersResponsePair.getFirst();
Either<List<String>, IDistributionClientResult> response;
if (getArtifactTypeResponse.getStatus() == HttpStatus.SC_OK) {
response = parseGetValidArtifactTypesResponse(getArtifactTypeResponse);
} else {
- IDistributionClientResult asdcError = handleAsdcError(getArtifactTypeResponse);
- response = Either.right(asdcError);
+ IDistributionClientResult sdcError = handleSdcError(getArtifactTypeResponse);
+ response = Either.right(sdcError);
}
- handeAsdcConnectionClose(getServersResponsePair);
+ handeSdcConnectionClose(getServersResponsePair);
return response;
}
- private void handeAsdcConnectionClose(Pair<HttpAsdcResponse, CloseableHttpResponse> getServersResponsePair) {
+ public Either<KafkaDataResponse, IDistributionClientResult> getKafkaDistData() {
+ Pair<HttpSdcResponse, CloseableHttpResponse> getServersResponsePair = performSdcServerRequest(SdcUrls.GET_KAFKA_DIST_DATA);
+ HttpSdcResponse getKafkaDistDataResponse = getServersResponsePair.getFirst();
+ Either<KafkaDataResponse, IDistributionClientResult> response;
+ if (getKafkaDistDataResponse.getStatus() == HttpStatus.SC_OK) {
+ response = parseGetKafkaDistDataResponse(getKafkaDistDataResponse);
+ } else {
+ IDistributionClientResult sdcError = handleSdcError(getKafkaDistDataResponse);
+ response = Either.right(sdcError);
+ }
+ handeSdcConnectionClose(getServersResponsePair);
+ return response;
+ }
+
+ private void handeSdcConnectionClose(Pair<HttpSdcResponse, CloseableHttpResponse> getServersResponsePair) {
if (getServersResponsePair.getSecond() != null) {
try {
getServersResponsePair.getSecond().close();
@@ -104,79 +114,17 @@ public class SdcConnectorClient {
}
}
- private Pair<HttpAsdcResponse, CloseableHttpResponse> performAsdcServerRequest() {
+ private Pair<HttpSdcResponse, CloseableHttpResponse> performSdcServerRequest(String sdcUrl) {
String requestId = generateRequestId();
Map<String, String> requestHeaders = addHeadersToHttpRequest(requestId);
- log.debug("about to perform getServerList. requestId= {} url= {}", requestId, AsdcUrls.GET_VALID_ARTIFACT_TYPES);
- return httpClient.getRequest(AsdcUrls.GET_VALID_ARTIFACT_TYPES, requestHeaders, false);
- }
-
- public Either<TopicRegistrationResponse, DistributionClientResultImpl> registerAsdcTopics(ApiCredential credential) {
-
- Either<TopicRegistrationResponse, DistributionClientResultImpl> response;
-
- String requestId = generateRequestId();
- Map<String, String> requestHeaders = addHeadersToHttpRequest(requestId);
-
- RegistrationRequest registrationRequest = new RegistrationRequest(credential.getApiKey(), configuration.getEnvironmentName(), configuration.isConsumeProduceStatusTopic(), configuration.getMsgBusAddress());
- Gson gson = new GsonBuilder().setPrettyPrinting().create();
- String jsonRequest = gson.toJson(registrationRequest);
- StringEntity body = new StringEntity(jsonRequest, ContentType.APPLICATION_JSON);
-
- log.debug("about to perform registerAsdcTopics. requestId= {} url= {}", requestId, AsdcUrls.POST_FOR_TOPIC_REGISTRATION);
- Pair<HttpAsdcResponse, CloseableHttpResponse> registerResponsePair = httpClient.postRequest(AsdcUrls.POST_FOR_TOPIC_REGISTRATION, body, requestHeaders, false);
- HttpAsdcResponse registerResponse = registerResponsePair.getFirst();
- int status = registerResponse.getStatus();
-
- if (status == HttpStatus.SC_OK) {
- response = parseRegistrationResponse(registerResponse);
-
- } else {
- DistributionClientResultImpl asdcError = handleAsdcError(registerResponse);
- return Either.right(asdcError);
- }
- handeAsdcConnectionClose(registerResponsePair);
-
- log.debug("registerAsdcTopics response= {}. requestId= {} url= {}", status, requestId, AsdcUrls.POST_FOR_TOPIC_REGISTRATION);
- return response;
-
+ log.debug("about to perform get on SDC. requestId= {} url= {}", requestId, sdcUrl);
+ return httpClient.getRequest(sdcUrl, requestHeaders, false);
}
private String generateRequestId() {
return UUID.randomUUID().toString();
}
- public IDistributionClientResult unregisterTopics(ApiCredential credential) {
-
- DistributionClientResultImpl response;
-
- String requestId = generateRequestId();
- Map<String, String> requestHeaders = addHeadersToHttpRequest(requestId);
-
- RegistrationRequest registrationRequest = new RegistrationRequest(credential.getApiKey(), configuration.getEnvironmentName(), configuration.isConsumeProduceStatusTopic(), configuration.getMsgBusAddress());
- Gson gson = new GsonBuilder().setPrettyPrinting().create();
- String jsonRequest = gson.toJson(registrationRequest);
- StringEntity body = new StringEntity(jsonRequest, ContentType.APPLICATION_JSON);
-
- log.debug("about to perform unregisterTopics. requestId= {} url= {}", requestId, AsdcUrls.POST_FOR_UNREGISTER);
- Pair<HttpAsdcResponse, CloseableHttpResponse> unRegisterResponsePair = httpClient.postRequest(AsdcUrls.POST_FOR_UNREGISTER, body, requestHeaders, false);
- HttpAsdcResponse unRegisterResponse = unRegisterResponsePair.getFirst();
- int status = unRegisterResponse.getStatus();
- if (status == HttpStatus.SC_NO_CONTENT || status == HttpStatus.SC_OK) {
- response = new DistributionClientResultImpl(DistributionActionResultEnum.SUCCESS, "unregistration successful");
-
- } else {
- response = handleAsdcError(unRegisterResponse);
- }
-
- handeAsdcConnectionClose(unRegisterResponsePair);
-
- log.debug("unregisterTopics response = {}. requestId= {} url= {}", status, requestId, AsdcUrls.POST_FOR_UNREGISTER);
-
- return response;
-
- }
-
public DistributionClientDownloadResultImpl downloadArtifact(IArtifactInfo artifactInfo) {
DistributionClientDownloadResultImpl response;
@@ -186,23 +134,23 @@ public class SdcConnectorClient {
requestHeaders.put(DistributionClientConstants.HEADER_INSTANCE_ID, configuration.getConsumerID());
requestHeaders.put(HttpHeaders.ACCEPT, ContentType.APPLICATION_OCTET_STREAM.toString());
String requestUrl = artifactInfo.getArtifactURL();
- Pair<HttpAsdcResponse, CloseableHttpResponse> downloadPair = httpClient.getRequest(requestUrl, requestHeaders, false);
- HttpAsdcResponse downloadResponse = downloadPair.getFirst();
+ Pair<HttpSdcResponse, CloseableHttpResponse> downloadPair = httpClient.getRequest(requestUrl, requestHeaders, false);
+ HttpSdcResponse downloadResponse = downloadPair.getFirst();
int status = downloadResponse.getStatus();
if (status == HttpStatus.SC_OK) {
response = parseDownloadArtifactResponse(artifactInfo, downloadResponse);
} else {
- response = handleAsdcDownloadArtifactError(downloadResponse);
+ response = handleSdcDownloadArtifactError(downloadResponse);
}
- handeAsdcConnectionClose(downloadPair);
+ handeSdcConnectionClose(downloadPair);
return response;
}
/* **************************** private methods ********************************************/
- private Either<List<String>, IDistributionClientResult> parseGetValidArtifactTypesResponse(HttpAsdcResponse getArtifactTypesResponse) {
+ private Either<List<String>, IDistributionClientResult> parseGetValidArtifactTypesResponse(HttpSdcResponse getArtifactTypesResponse) {
Either<List<String>, IDistributionClientResult> result;
try {
String jsonMessage = IOUtils.toString(getArtifactTypesResponse.getMessage().getContent());
@@ -219,39 +167,33 @@ public class SdcConnectorClient {
return result;
}
- private Either<List<String>, IDistributionClientResult> handleParsingError(Exception e) {
- Either<List<String>, IDistributionClientResult> result;
- log.error("failed to parse response from ASDC. error: ", e);
- IDistributionClientResult response = new DistributionClientResultImpl(DistributionActionResultEnum.GENERAL_ERROR, "failed to parse response from ASDC");
- result = Either.right(response);
- return result;
- }
-
- Either<TopicRegistrationResponse, DistributionClientResultImpl> parseRegistrationResponse(HttpAsdcResponse registerResponse) {
-
- String jsonMessage;
+ private Either<KafkaDataResponse, IDistributionClientResult> parseGetKafkaDistDataResponse(HttpSdcResponse getKafkaDistDataResponse) {
+ Either<KafkaDataResponse, IDistributionClientResult> result;
try {
- jsonMessage = IOUtils.toString(registerResponse.getMessage().getContent());
-
+ String jsonMessage = IOUtils.toString(getKafkaDistDataResponse.getMessage().getContent());
Gson gson = new GsonBuilder().create();
- TopicRegistrationResponse registrationResponse = gson.fromJson(jsonMessage, TopicRegistrationResponse.class);
-
- if (registrationResponse.getDistrNotificationTopicName() == null) {
- DistributionClientResultImpl response = new DistributionClientResultImpl(DistributionActionResultEnum.FAIL, "failed to receive notification topic from ASDC");
- return Either.right(response);
- }
-
- if (registrationResponse.getDistrStatusTopicName() == null) {
- DistributionClientResultImpl response = new DistributionClientResultImpl(DistributionActionResultEnum.FAIL, "failed to receive status topic from ASDC");
- return Either.right(response);
- }
- return Either.left(registrationResponse);
-
+ KafkaDataResponse kafkaData = gson.fromJson(jsonMessage, KafkaDataResponse.class);
+ result = Either.left(kafkaData);
} catch (UnsupportedOperationException | IOException e) {
- log.error("failed to parse response from ASDC. error: ", e);
- DistributionClientResultImpl response = new DistributionClientResultImpl(DistributionActionResultEnum.GENERAL_ERROR, "failed to parse response from ASDC");
- return Either.right(response);
+ result = handleKafkaParsingError(e);
}
+ return result;
+ }
+
+ private Either<KafkaDataResponse, IDistributionClientResult> handleKafkaParsingError(Exception e) {
+ Either<KafkaDataResponse, IDistributionClientResult> result;
+ log.error("failed to parse kafka data response from SDC. error: ", e);
+ IDistributionClientResult response = new DistributionClientResultImpl(DistributionActionResultEnum.GENERAL_ERROR, "failed to parse kafka data response from SDC");
+ result = Either.right(response);
+ return result;
+ }
+
+ private Either<List<String>, IDistributionClientResult> handleParsingError(Exception e) {
+ Either<List<String>, IDistributionClientResult> result;
+ log.error("failed to parse response from SDC. error: ", e);
+ IDistributionClientResult response = new DistributionClientResultImpl(DistributionActionResultEnum.GENERAL_ERROR, "failed to parse response from SDC");
+ result = Either.right(response);
+ return result;
}
protected Map<String, String> addHeadersToHttpRequest(String requestId) {
@@ -263,29 +205,29 @@ public class SdcConnectorClient {
return requestHeaders;
}
- private DistributionClientResultImpl handleAsdcError(HttpAsdcResponse registerResponse) {
+ private DistributionClientResultImpl handleSdcError(HttpSdcResponse registerResponse) {
int status = registerResponse.getStatus();
- DistributionClientResultImpl errorResponse = new DistributionClientResultImpl(DistributionActionResultEnum.GENERAL_ERROR, "failed to send request to ASDC");
+ DistributionClientResultImpl errorResponse = new DistributionClientResultImpl(DistributionActionResultEnum.GENERAL_ERROR, "failed to send request to SDC");
if (status == HttpStatus.SC_UNAUTHORIZED) {
- errorResponse = new DistributionClientResultImpl(DistributionActionResultEnum.ASDC_AUTHENTICATION_FAILED, "authentication to ASDC failed for user " + configuration.getUser());
+ errorResponse = new DistributionClientResultImpl(DistributionActionResultEnum.SDC_AUTHENTICATION_FAILED, "authentication to SDC failed for user " + configuration.getUser());
} else if (status == HttpStatus.SC_FORBIDDEN) {
- errorResponse = new DistributionClientResultImpl(DistributionActionResultEnum.ASDC_AUTHORIZATION_FAILED, "authorization failure for user " + configuration.getUser());
+ errorResponse = new DistributionClientResultImpl(DistributionActionResultEnum.SDC_AUTHORIZATION_FAILED, "authorization failure for user " + configuration.getUser());
} else if (status == HttpStatus.SC_BAD_REQUEST) {
- errorResponse = new DistributionClientResultImpl(DistributionActionResultEnum.BAD_REQUEST, "ASDC call failed due to missing information");
+ errorResponse = new DistributionClientResultImpl(DistributionActionResultEnum.BAD_REQUEST, "SDC call failed due to missing information");
} else if (status == HttpStatus.SC_NOT_FOUND) {
- errorResponse = new DistributionClientResultImpl(DistributionActionResultEnum.ASDC_NOT_FOUND, "ASDC not found");
+ errorResponse = new DistributionClientResultImpl(DistributionActionResultEnum.SDC_NOT_FOUND, "SDC not found");
} else if (status == HttpStatus.SC_INTERNAL_SERVER_ERROR) {
- errorResponse = new DistributionClientResultImpl(DistributionActionResultEnum.ASDC_SERVER_PROBLEM, "ASDC server problem");
+ errorResponse = new DistributionClientResultImpl(DistributionActionResultEnum.SDC_SERVER_PROBLEM, "SDC server problem");
} else if (status == HttpStatus.SC_BAD_GATEWAY) {
- errorResponse = new DistributionClientResultImpl(DistributionActionResultEnum.ASDC_CONNECTION_FAILED, "ASDC server problem");
+ errorResponse = new DistributionClientResultImpl(DistributionActionResultEnum.SDC_CONNECTION_FAILED, "SDC server problem");
} else if (status == HttpStatus.SC_GATEWAY_TIMEOUT) {
- errorResponse = new DistributionClientResultImpl(DistributionActionResultEnum.ASDC_SERVER_TIMEOUT, "ASDC server problem");
+ errorResponse = new DistributionClientResultImpl(DistributionActionResultEnum.SDC_SERVER_TIMEOUT, "SDC server problem");
}
- log.error("status from ASDC is {}", registerResponse);
+ log.error("status from SDC is {}", registerResponse);
log.error(errorResponse.toString());
try {
String errorString = IOUtils.toString(registerResponse.getMessage().getContent());
- log.debug("error from ASDC is: {}", errorString);
+ log.debug("error from SDC is: {}", errorString);
} catch (UnsupportedOperationException | IOException e) {
log.error("During error handling another exception occurred: ", e);
}
@@ -293,27 +235,27 @@ public class SdcConnectorClient {
}
- private DistributionClientDownloadResultImpl handleAsdcDownloadArtifactError(HttpAsdcResponse registerResponse) {
+ private DistributionClientDownloadResultImpl handleSdcDownloadArtifactError(HttpSdcResponse registerResponse) {
int status = registerResponse.getStatus();
- DistributionClientDownloadResultImpl errorResponse = new DistributionClientDownloadResultImpl(DistributionActionResultEnum.GENERAL_ERROR, "failed to send request to ASDC");
+ DistributionClientDownloadResultImpl errorResponse = new DistributionClientDownloadResultImpl(DistributionActionResultEnum.GENERAL_ERROR, "failed to send request to SDC");
if (status == HttpStatus.SC_UNAUTHORIZED) {
- errorResponse = new DistributionClientDownloadResultImpl(DistributionActionResultEnum.ASDC_AUTHENTICATION_FAILED, "authentication to ASDC failed for user " + configuration.getUser());
+ errorResponse = new DistributionClientDownloadResultImpl(DistributionActionResultEnum.SDC_AUTHENTICATION_FAILED, "authentication to SDC failed for user " + configuration.getUser());
} else if (status == HttpStatus.SC_FORBIDDEN) {
- errorResponse = new DistributionClientDownloadResultImpl(DistributionActionResultEnum.ASDC_AUTHORIZATION_FAILED, "authorization failure for user " + configuration.getUser());
+ errorResponse = new DistributionClientDownloadResultImpl(DistributionActionResultEnum.SDC_AUTHORIZATION_FAILED, "authorization failure for user " + configuration.getUser());
} else if (status == HttpStatus.SC_BAD_REQUEST || status == HttpStatus.SC_NOT_FOUND) {
errorResponse = new DistributionClientDownloadResultImpl(DistributionActionResultEnum.ARTIFACT_NOT_FOUND, "Specified artifact is not found");
// } else if (status == 404){
// errorResponse = new DistributionClientDownloadResultImpl(
- // DistributionActionResultEnum.ASDC_NOT_FOUND,
- // "ASDC not found");
+ // DistributionActionResultEnum.SDC_NOT_FOUND,
+ // "SDC not found");
} else if (status == HttpStatus.SC_INTERNAL_SERVER_ERROR) {
- errorResponse = new DistributionClientDownloadResultImpl(DistributionActionResultEnum.ASDC_SERVER_PROBLEM, "ASDC server problem");
+ errorResponse = new DistributionClientDownloadResultImpl(DistributionActionResultEnum.SDC_SERVER_PROBLEM, "SDC server problem");
}
- log.error("status from ASDC is {}", registerResponse);
+ log.error("status from SDC is {}", registerResponse);
log.error(errorResponse.toString());
try {
String errorString = IOUtils.toString(registerResponse.getMessage().getContent());
- log.debug("error from ASDC is: {}", errorString);
+ log.debug("error from SDC is: {}", errorString);
} catch (UnsupportedOperationException | IOException e) {
log.error("During error handling another exception occurred: ", e);
}
@@ -321,7 +263,7 @@ public class SdcConnectorClient {
}
- private DistributionClientDownloadResultImpl parseDownloadArtifactResponse(IArtifactInfo artifactInfo, HttpAsdcResponse getServersResponse) {
+ private DistributionClientDownloadResultImpl parseDownloadArtifactResponse(IArtifactInfo artifactInfo, HttpSdcResponse getServersResponse) {
HttpEntity entity = getServersResponse.getMessage();
InputStream is;
try {
@@ -333,7 +275,7 @@ public class SdcConnectorClient {
byte[] payload = IOUtils.toByteArray(is);
if (artifactInfo.getArtifactChecksum() == null || artifactInfo.getArtifactChecksum().isEmpty()) {
- return new DistributionClientDownloadResultImpl(DistributionActionResultEnum.DATA_INTEGRITY_PROBLEM, "failed to get artifact from ASDC. Empty checksum");
+ return new DistributionClientDownloadResultImpl(DistributionActionResultEnum.DATA_INTEGRITY_PROBLEM, "failed to get artifact from SDC. Empty checksum");
}
return new DistributionClientDownloadResultImpl(DistributionActionResultEnum.SUCCESS, "success", artifactName, payload);
diff --git a/sdc-distribution-client/src/main/java/org/onap/sdc/api/asdc/ServerListResponse.java b/sdc-distribution-client/src/main/java/org/onap/sdc/http/SdcUrls.java
index b0cfb1e..4b9a648 100644
--- a/sdc-distribution-client/src/main/java/org/onap/sdc/api/asdc/ServerListResponse.java
+++ b/sdc-distribution-client/src/main/java/org/onap/sdc/http/SdcUrls.java
@@ -18,18 +18,13 @@
* ============LICENSE_END=========================================================
*/
-package org.onap.sdc.api.asdc;
+package org.onap.sdc.http;
-import java.util.List;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import lombok.Setter;
+public class SdcUrls {
-@Getter
-@Setter
-@NoArgsConstructor
-public class ServerListResponse {
-
- private List<String> uebServerList;
+ private SdcUrls() {
+ }
+ public static final String GET_VALID_ARTIFACT_TYPES = "/sdc/v1/artifactTypes";
+ public static final String GET_KAFKA_DIST_DATA = "/sdc/v1/distributionKafkaData";
}
diff --git a/sdc-distribution-client/src/main/java/org/onap/sdc/http/TopicRegistrationResponse.java b/sdc-distribution-client/src/main/java/org/onap/sdc/http/TopicRegistrationResponse.java
deleted file mode 100644
index 448005c..0000000
--- a/sdc-distribution-client/src/main/java/org/onap/sdc/http/TopicRegistrationResponse.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * sdc-distribution-client
- * ================================================================================
- * Copyright (C) 2017 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=========================================================
- */
-
-package org.onap.sdc.http;
-
-public class TopicRegistrationResponse {
- private String distrNotificationTopicName;
- private String distrStatusTopicName;
-
-
- public void setDistrNotificationTopicName(String distrNotificationTopicName) {
- this.distrNotificationTopicName = distrNotificationTopicName;
- }
-
- public void setDistrStatusTopicName(String distrStatusTopicName) {
- this.distrStatusTopicName = distrStatusTopicName;
- }
-
- public String getDistrNotificationTopicName() {
- return distrNotificationTopicName;
- }
-
- public String getDistrStatusTopicName() {
- return distrStatusTopicName;
- }
-}
diff --git a/sdc-distribution-client/src/main/java/org/onap/sdc/impl/Configuration.java b/sdc-distribution-client/src/main/java/org/onap/sdc/impl/Configuration.java
index 2da9c4e..db4433b 100644
--- a/sdc-distribution-client/src/main/java/org/onap/sdc/impl/Configuration.java
+++ b/sdc-distribution-client/src/main/java/org/onap/sdc/impl/Configuration.java
@@ -28,7 +28,12 @@ import org.onap.sdc.utils.DistributionClientConstants;
public class Configuration implements IConfiguration {
private List<String> msgBusAddressList;
- private String asdcAddress;
+ private final String kafkaSecurityProtocolConfig;
+ private final String kafkaSaslMechanism;
+ private final String kafkaSaslJaasConfig;
+ private String sdcStatusTopicName;
+ private String sdcNotificationTopicName;
+ private String sdcAddress;
private String user;
private String password;
private int pollingInterval = DistributionClientConstants.MIN_POLLING_INTERVAL_SEC;
@@ -40,10 +45,9 @@ public class Configuration implements IConfiguration {
private String keyStorePath;
private String keyStorePassword;
private boolean activateServerTLSAuth;
- private boolean filterInEmptyResources;
- private Boolean useHttpsWithDmaap;
+ private final boolean filterInEmptyResources;
private Boolean useHttpsWithSDC;
- private boolean consumeProduceStatusTopic;
+ private final boolean consumeProduceStatusTopic;
private String httpProxyHost;
private int httpProxyPort;
private String httpsProxyHost;
@@ -51,23 +55,24 @@ public class Configuration implements IConfiguration {
private boolean useSystemProxy;
public Configuration(IConfiguration other) {
- this.asdcAddress = other.getAsdcAddress();
- this.msgBusAddressList = other.getMsgBusAddress();
+ this.kafkaSecurityProtocolConfig = other.getKafkaSecurityProtocolConfig();
+ this.kafkaSaslMechanism = other.getKafkaSaslMechanism();
+ this.kafkaSaslJaasConfig = other.getKafkaSaslJaasConfig();
this.comsumerID = other.getConsumerID();
this.consumerGroup = other.getConsumerGroup();
- this.environmentName = other.getEnvironmentName();
- this.password = other.getPassword();
this.pollingInterval = other.getPollingInterval();
this.pollingTimeout = other.getPollingTimeout();
- this.relevantArtifactTypes = other.getRelevantArtifactTypes();
+ this.environmentName = other.getEnvironmentName();
+ this.consumeProduceStatusTopic = other.isConsumeProduceStatusTopic();
+ this.sdcAddress = other.getSdcAddress();
this.user = other.getUser();
+ this.password = other.getPassword();
+ this.relevantArtifactTypes = other.getRelevantArtifactTypes();
this.useHttpsWithSDC = other.isUseHttpsWithSDC();
this.keyStorePath = other.getKeyStorePath();
this.keyStorePassword = other.getKeyStorePassword();
this.activateServerTLSAuth = other.activateServerTLSAuth();
this.filterInEmptyResources = other.isFilterInEmptyResources();
- this.useHttpsWithDmaap = other.isUseHttpsWithDmaap();
- this.consumeProduceStatusTopic = other.isConsumeProduceStatusTopic();
this.httpProxyHost = other.getHttpProxyHost();
this.httpProxyPort = other.getHttpProxyPort();
this.httpsProxyHost = other.getHttpsProxyHost();
@@ -76,8 +81,24 @@ public class Configuration implements IConfiguration {
}
@Override
- public String getAsdcAddress() {
- return asdcAddress;
+ public String getSdcAddress() {
+ return sdcAddress;
+ }
+
+ public String getStatusTopicName() {
+ return sdcStatusTopicName;
+ }
+
+ public void setStatusTopicName(String sdcStatusTopicName) {
+ this.sdcStatusTopicName = sdcStatusTopicName;
+ }
+
+ public String getNotificationTopicName() {
+ return sdcNotificationTopicName;
+ }
+
+ public void setNotificationTopicName(String sdcNotificationTopicName) {
+ this.sdcNotificationTopicName = sdcNotificationTopicName;
}
@Override
@@ -85,6 +106,25 @@ public class Configuration implements IConfiguration {
return msgBusAddressList;
}
+ public void setMsgBusAddress(List<String> newMsgBusAddress) {
+ msgBusAddressList = newMsgBusAddress;
+ }
+
+ @Override
+ public String getKafkaSecurityProtocolConfig() {
+ return kafkaSecurityProtocolConfig;
+ }
+
+ @Override
+ public String getKafkaSaslMechanism() {
+ return kafkaSaslMechanism;
+ }
+
+ @Override
+ public String getKafkaSaslJaasConfig() {
+ return kafkaSaslJaasConfig;
+ }
+
@Override
public Boolean isUseHttpsWithSDC() {
return useHttpsWithSDC;
@@ -169,8 +209,8 @@ public class Configuration implements IConfiguration {
this.comsumerID = comsumerID;
}
- public void setAsdcAddress(String asdcAddress) {
- this.asdcAddress = asdcAddress;
+ public void setSdcAddress(String sdcAddress) {
+ this.sdcAddress = sdcAddress;
}
public void setUser(String user) {
@@ -243,19 +283,10 @@ public class Configuration implements IConfiguration {
return this.filterInEmptyResources;
}
- @Override
- public Boolean isUseHttpsWithDmaap() {
- return this.useHttpsWithDmaap;
- }
-
public void setUseHttpsWithSDC(boolean useHttpsWithSDC) {
this.useHttpsWithSDC = useHttpsWithSDC;
}
- public void setUseHttpsWithDmaap(boolean useHttpsWithDmaap) {
- this.useHttpsWithDmaap = useHttpsWithDmaap;
- }
-
@Override
public boolean isConsumeProduceStatusTopic() {
return this.consumeProduceStatusTopic;
@@ -265,11 +296,13 @@ public class Configuration implements IConfiguration {
public String toString() {
//@formatter:off
return "Configuration ["
- + "asdcAddress=" + asdcAddress
+ + "sdcAddress=" + sdcAddress
+ ", user=" + user
+ ", password=" + password
+ ", useHttpsWithSDC=" + useHttpsWithSDC
+ ", pollingInterval=" + pollingInterval
+ + ", sdcStatusTopicName=" + sdcStatusTopicName
+ + ", sdcNotificationTopicName=" + sdcNotificationTopicName
+ ", pollingTimeout=" + pollingTimeout
+ ", relevantArtifactTypes=" + relevantArtifactTypes
+ ", consumerGroup=" + consumerGroup
@@ -279,7 +312,6 @@ public class Configuration implements IConfiguration {
+ ", keyStorePassword=" + keyStorePassword
+ ", activateServerTLSAuth=" + activateServerTLSAuth
+ ", filterInEmptyResources=" + filterInEmptyResources
- + ", useHttpsWithDmaap=" + useHttpsWithDmaap
+ ", consumeProduceStatusTopic=" + consumeProduceStatusTopic
+ ", useSystemProxy=" + useSystemProxy
+ ", httpProxyHost=" + httpProxyHost
diff --git a/sdc-distribution-client/src/main/java/org/onap/sdc/impl/ConfigurationValidator.java b/sdc-distribution-client/src/main/java/org/onap/sdc/impl/ConfigurationValidator.java
index b645ed1..829c6ce 100644
--- a/sdc-distribution-client/src/main/java/org/onap/sdc/impl/ConfigurationValidator.java
+++ b/sdc-distribution-client/src/main/java/org/onap/sdc/impl/ConfigurationValidator.java
@@ -19,23 +19,22 @@
*/
package org.onap.sdc.impl;
-import org.onap.sdc.api.consumer.IConfiguration;
-import org.onap.sdc.api.consumer.IStatusCallback;
-import org.onap.sdc.utils.DistributionActionResultEnum;
-import org.onap.sdc.utils.DistributionClientConstants;
-
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.function.Function;
import java.util.regex.Matcher;
+import org.onap.sdc.api.consumer.IConfiguration;
+import org.onap.sdc.api.consumer.IStatusCallback;
+import org.onap.sdc.utils.DistributionActionResultEnum;
+import org.onap.sdc.utils.DistributionClientConstants;
public class ConfigurationValidator {
private Map<Function<IConfiguration, Boolean>, DistributionActionResultEnum> cachedValidators;
- DistributionActionResultEnum validateConfiguration(IConfiguration conf, IStatusCallback statusCallback) {
+ public DistributionActionResultEnum validateConfiguration(IConfiguration conf, IStatusCallback statusCallback) {
final Map<Function<IConfiguration, Boolean>, DistributionActionResultEnum> validators = getValidators(statusCallback);
for (Map.Entry<Function<IConfiguration, Boolean>, DistributionActionResultEnum> validation : validators.entrySet()) {
@@ -53,10 +52,8 @@ public class ConfigurationValidator {
validators.put(isCustomerIdNotSet(), DistributionActionResultEnum.CONF_MISSING_CONSUMER_ID);
validators.put(isUserNotSet(), DistributionActionResultEnum.CONF_MISSING_USERNAME);
validators.put(isPasswordNotSet(), DistributionActionResultEnum.CONF_MISSING_PASSWORD);
- validators.put(isMsgBusAddressNotSet(), DistributionActionResultEnum.CONF_MISSING_MSG_BUS_ADDRESS);
- validators.put(isAsdcAddressNotSet(), DistributionActionResultEnum.CONF_MISSING_ASDC_FQDN);
- validators.put(isFqdnValid(), DistributionActionResultEnum.CONF_INVALID_ASDC_FQDN);
- validators.put(areFqdnsValid(), DistributionActionResultEnum.CONF_INVALID_MSG_BUS_ADDRESS);
+ validators.put(isSdcAddressNotSet(), DistributionActionResultEnum.CONF_MISSING_SDC_FQDN);
+ validators.put(isFqdnValid(), DistributionActionResultEnum.CONF_INVALID_SDC_FQDN);
validators.put(isEnvNameNotSet(), DistributionActionResultEnum.CONF_MISSING_ENVIRONMENT_NAME);
validators.put(isRelevantArtifactTypesNotSet(), DistributionActionResultEnum.CONF_MISSING_ARTIFACT_TYPES);
validators.put(isConsumeStatusTopicWithCallbackNotSet(statusCallback), DistributionActionResultEnum.CONF_INVALID_CONSUME_PRODUCE_STATUS_TOPIC_FALG);
@@ -85,17 +82,10 @@ public class ConfigurationValidator {
return it -> it.getEnvironmentName() == null || it.getEnvironmentName().isEmpty();
}
- private Function<IConfiguration, Boolean> areFqdnsValid() {
- return it -> !isValidFqdns(it.getMsgBusAddress());
- }
-
private Function<IConfiguration, Boolean> isFqdnValid() {
- return it -> !isValidFqdn(it.getAsdcAddress());
+ return it -> !isValidFqdn(it.getSdcAddress());
}
- private Function<IConfiguration, Boolean> isMsgBusAddressNotSet() {
- return it -> it.getMsgBusAddress() == null || it.getMsgBusAddress().isEmpty();
- }
private Function<IConfiguration, Boolean> isPasswordNotSet() {
return it -> it.getPassword() == null || it.getPassword().isEmpty();
@@ -113,8 +103,8 @@ public class ConfigurationValidator {
return it -> it.getConsumerID() == null || it.getConsumerID().isEmpty();
}
- private Function<IConfiguration, Boolean> isAsdcAddressNotSet() {
- return it -> it.getAsdcAddress() == null || it.getAsdcAddress().isEmpty();
+ private Function<IConfiguration, Boolean> isSdcAddressNotSet() {
+ return it -> it.getSdcAddress() == null || it.getSdcAddress().isEmpty();
}
static boolean isValidFqdn(String fqdn) {
diff --git a/sdc-distribution-client/src/main/java/org/onap/sdc/impl/DistributionClientImpl.java b/sdc-distribution-client/src/main/java/org/onap/sdc/impl/DistributionClientImpl.java
index 3a25abb..a34ba1e 100644
--- a/sdc-distribution-client/src/main/java/org/onap/sdc/impl/DistributionClientImpl.java
+++ b/sdc-distribution-client/src/main/java/org/onap/sdc/impl/DistributionClientImpl.java
@@ -23,11 +23,12 @@ package org.onap.sdc.impl;
import static java.util.Objects.isNull;
-import java.io.IOException;
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.reflect.TypeToken;
+import fj.data.Either;
import java.lang.reflect.Type;
-import java.net.MalformedURLException;
import java.nio.charset.StandardCharsets;
-import java.security.GeneralSecurityException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -35,8 +36,8 @@ import java.util.UUID;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
-
import org.apache.http.HttpHost;
+import org.apache.kafka.common.KafkaException;
import org.onap.sdc.api.IDistributionClient;
import org.onap.sdc.api.IDistributionStatusMessageJsonBuilder;
import org.onap.sdc.api.consumer.IComponentDoneStatusMessage;
@@ -46,53 +47,35 @@ import org.onap.sdc.api.consumer.IFinalDistrStatusMessage;
import org.onap.sdc.api.consumer.INotificationCallback;
import org.onap.sdc.api.consumer.IStatusCallback;
import org.onap.sdc.api.notification.IArtifactInfo;
+import org.onap.sdc.api.notification.IVfModuleMetadata;
import org.onap.sdc.api.results.IDistributionClientDownloadResult;
import org.onap.sdc.api.results.IDistributionClientResult;
-import org.onap.sdc.http.HttpAsdcClient;
+import org.onap.sdc.http.HttpClientFactory;
+import org.onap.sdc.http.HttpRequestFactory;
+import org.onap.sdc.http.HttpSdcClient;
import org.onap.sdc.http.SdcConnectorClient;
-import org.onap.sdc.http.TopicRegistrationResponse;
import org.onap.sdc.utils.DistributionActionResultEnum;
import org.onap.sdc.utils.DistributionClientConstants;
-import org.onap.sdc.utils.GeneralUtils;
import org.onap.sdc.utils.NotificationSender;
import org.onap.sdc.utils.Pair;
import org.onap.sdc.utils.Wrapper;
-import org.onap.sdc.api.notification.IVfModuleMetadata;
+import org.onap.sdc.utils.kafka.KafkaDataResponse;
+import org.onap.sdc.utils.kafka.SdcKafkaConsumer;
+import org.onap.sdc.utils.kafka.SdcKafkaProducer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.att.nsa.apiClient.credentials.ApiCredential;
-import com.att.nsa.apiClient.http.HttpException;
-import com.att.nsa.cambria.client.CambriaBatchingPublisher;
-import com.att.nsa.cambria.client.CambriaClient.CambriaApiException;
-import com.att.nsa.cambria.client.CambriaClientBuilders.AbstractAuthenticatedManagerBuilder;
-import com.att.nsa.cambria.client.CambriaClientBuilders.ConsumerBuilder;
-import com.att.nsa.cambria.client.CambriaClientBuilders.IdentityManagerBuilder;
-import com.att.nsa.cambria.client.CambriaClientBuilders.PublisherBuilder;
-import com.att.nsa.cambria.client.CambriaConsumer;
-import com.att.nsa.cambria.client.CambriaIdentityManager;
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.google.gson.reflect.TypeToken;
-
-import fj.data.Either;
-
public class DistributionClientImpl implements IDistributionClient {
- private static final int POLLING_TIMEOUT_MULTIPLIER = 1000;
private static final int TERMINATION_TIMEOUT = 60;
private final Logger log;
- private SdcConnectorClient asdcConnector;
+ private SdcConnectorClient sdcConnector;
private ScheduledExecutorService executorPool = null;
- protected CambriaIdentityManager cambriaIdentityManager = null;
- private List<String> brokerServers;
- private ApiCredential credential;
+ private SdcKafkaProducer producer;
protected Configuration configuration;
private INotificationCallback callback;
private IStatusCallback statusCallback;
- private String notificationTopic;
- private String statusTopic;
private boolean isConsumerGroupGenerated = false;
private NotificationSender notificationSender;
private final ConfigurationValidator configurationValidator = new ConfigurationValidator();
@@ -110,12 +93,69 @@ public class DistributionClientImpl implements IDistributionClient {
}
@Override
+ public synchronized IDistributionClientResult init(IConfiguration conf, INotificationCallback notificationCallback, IStatusCallback statusCallback) {
+ IDistributionClientResult initResult;
+ if (!conf.isConsumeProduceStatusTopic()) {
+ initResult = new DistributionClientResultImpl(DistributionActionResultEnum.CONF_INVALID_CONSUME_PRODUCE_STATUS_TOPIC_FALG,
+ "configuration is invalid: isConsumeProduceStatusTopic() should be set to 'true'");
+
+ } else if (isNull(statusCallback)) {
+ initResult = new DistributionClientResultImpl(DistributionActionResultEnum.CONF_INVALID_CONSUME_PRODUCE_STATUS_TOPIC_FALG,
+ "configuration is invalid: statusCallback is not defined");
+ } else {
+ this.statusCallback = statusCallback;
+ initResult = init(conf, notificationCallback);
+ }
+ return initResult;
+ }
+
+ @Override
+ public synchronized IDistributionClientResult init(IConfiguration conf, INotificationCallback callback) {
+
+ log.info("DistributionClient - init");
+
+ Wrapper<IDistributionClientResult> errorWrapper = new Wrapper<>();
+ validateNotInitilized(errorWrapper);
+ if (errorWrapper.isEmpty()) {
+ validateNotTerminated(errorWrapper);
+ }
+ if (errorWrapper.isEmpty()) {
+ this.configuration = validateAndInitConfiguration(errorWrapper, conf).getSecond();
+ this.sdcConnector = createSdcConnector(configuration);
+ }
+ if (errorWrapper.isEmpty()) {
+ validateArtifactTypesWithSdcServer(conf, errorWrapper);
+ }
+ if (errorWrapper.isEmpty()) {
+ this.callback = callback;
+ }
+ if (errorWrapper.isEmpty()) {
+ initKafkaData(errorWrapper);
+ }
+ if (errorWrapper.isEmpty()) {
+ initKafkaProducer(errorWrapper, configuration);
+ }
+ if (errorWrapper.isEmpty()) {
+ this.notificationSender = new NotificationSender(producer);
+ }
+ IDistributionClientResult result;
+ if (errorWrapper.isEmpty()) {
+ isInitialized = true;
+ result = new DistributionClientResultImpl(DistributionActionResultEnum.SUCCESS,
+ "distribution client initialized successfully");
+ } else {
+ result = errorWrapper.getInnerElement();
+ }
+
+ return result;
+ }
+
+ @Override
public IConfiguration getConfiguration() {
return configuration;
}
@Override
- /* see javadoc */
public synchronized IDistributionClientResult updateConfiguration(IConfiguration conf) {
log.info("update DistributionClient configuration");
@@ -126,33 +166,34 @@ public class DistributionClientImpl implements IDistributionClient {
return errorWrapper.getInnerElement();
}
- IDistributionClientResult updateResult = new DistributionClientResultImpl(DistributionActionResultEnum.SUCCESS, "configuration updated successfuly");
+ IDistributionClientResult updateResult = new DistributionClientResultImpl(DistributionActionResultEnum.SUCCESS,
+ "configuration updated successfully");
- boolean needToUpdateCambriaConsumer = false;
+ boolean needToUpdateConsumer = false;
if (conf.getRelevantArtifactTypes() != null && !conf.getRelevantArtifactTypes().isEmpty()) {
configuration.setRelevantArtifactTypes(conf.getRelevantArtifactTypes());
- needToUpdateCambriaConsumer = true;
+ needToUpdateConsumer = true;
}
if (isPollingIntervalValid(conf.getPollingInterval())) {
configuration.setPollingInterval(conf.getPollingInterval());
- needToUpdateCambriaConsumer = true;
+ needToUpdateConsumer = true;
}
if (isPollingTimeoutValid(conf.getPollingTimeout())) {
configuration.setPollingTimeout(conf.getPollingTimeout());
- needToUpdateCambriaConsumer = true;
+ needToUpdateConsumer = true;
}
if (conf.getConsumerGroup() != null) {
configuration.setConsumerGroup(conf.getConsumerGroup());
isConsumerGroupGenerated = false;
- needToUpdateCambriaConsumer = true;
+ needToUpdateConsumer = true;
} else if (!isConsumerGroupGenerated) {
String generatedConsumerGroup = UUID.randomUUID().toString();
configuration.setConsumerGroup(generatedConsumerGroup);
isConsumerGroupGenerated = true;
}
- if (needToUpdateCambriaConsumer) {
+ if (needToUpdateConsumer) {
updateResult = restartConsumer();
}
@@ -167,7 +208,7 @@ public class DistributionClientImpl implements IDistributionClient {
log.info("start DistributionClient");
IDistributionClientResult startResult;
- CambriaConsumer cambriaNotificationConsumer = null;
+ SdcKafkaConsumer kafkaConsumer = null;
Wrapper<IDistributionClientResult> errorWrapper = new Wrapper<>();
validateRunReady(errorWrapper);
if (errorWrapper.isEmpty()) {
@@ -175,49 +216,49 @@ public class DistributionClientImpl implements IDistributionClient {
}
if (errorWrapper.isEmpty()) {
try {
- cambriaNotificationConsumer = new ConsumerBuilder().authenticatedBy(credential.getApiKey(), credential.getApiSecret()).knownAs(configuration.getConsumerGroup(), configuration.getConsumerID()).onTopic(notificationTopic).usingHttps(configuration.isUseHttpsWithDmaap()).usingHosts(brokerServers)
- .withSocketTimeout(configuration.getPollingTimeout() * POLLING_TIMEOUT_MULTIPLIER).build();
-
- } catch (MalformedURLException | GeneralSecurityException e) {
- handleCambriaInitFailure(errorWrapper, e);
+ kafkaConsumer = new SdcKafkaConsumer(configuration);
+ kafkaConsumer.subscribe(configuration.getNotificationTopicName());
+ } catch (KafkaException | IllegalArgumentException e) {
+ handleMessagingClientInitFailure(errorWrapper, e);
}
}
if (errorWrapper.isEmpty()) {
-
- List<String> relevantArtifactTypes = configuration.getRelevantArtifactTypes();
- // Remove nulls from list - workaround for how configuration is built
- relevantArtifactTypes.removeAll(Collections.singleton(null));
- NotificationConsumer consumer = new NotificationConsumer(cambriaNotificationConsumer, callback, relevantArtifactTypes, this);
- executorPool = Executors.newScheduledThreadPool(DistributionClientConstants.POOL_SIZE);
- executorPool.scheduleAtFixedRate(consumer, 0, configuration.getPollingInterval(), TimeUnit.SECONDS);
-
- handleStatusConsumer(errorWrapper, executorPool);
+ startNotificationConsumer(kafkaConsumer);
+ startStatusConsumer(errorWrapper, executorPool);
}
if (!errorWrapper.isEmpty()) {
startResult = errorWrapper.getInnerElement();
} else {
- startResult = new DistributionClientResultImpl(DistributionActionResultEnum.SUCCESS, "distribution client started successfuly");
+ startResult = new DistributionClientResultImpl(DistributionActionResultEnum.SUCCESS,
+ "distribution client started successfully");
isStarted = true;
}
return startResult;
}
- private void handleStatusConsumer(Wrapper<IDistributionClientResult> errorWrapper, ScheduledExecutorService executorPool) {
+ private void startNotificationConsumer(SdcKafkaConsumer kafkaConsumer) {
+ List<String> relevantArtifactTypes = configuration.getRelevantArtifactTypes();
+ // Remove nulls from list - workaround for how configuration is built
+ relevantArtifactTypes.removeAll(Collections.singleton(null));
+ NotificationConsumer consumer = new NotificationConsumer(kafkaConsumer, callback, relevantArtifactTypes, this);
+ executorPool = Executors.newScheduledThreadPool(DistributionClientConstants.POOL_SIZE);
+ executorPool.scheduleAtFixedRate(consumer, 0, configuration.getPollingInterval(), TimeUnit.SECONDS);
+ }
+
+ private void startStatusConsumer(Wrapper<IDistributionClientResult> errorWrapper, ScheduledExecutorService executorPool) {
if (configuration.isConsumeProduceStatusTopic()) {
- CambriaConsumer cambriaStatusConsumer;
try {
- cambriaStatusConsumer = new ConsumerBuilder().authenticatedBy(credential.getApiKey(), credential.getApiSecret()).knownAs(configuration.getConsumerGroup(), configuration.getConsumerID()).onTopic(statusTopic).usingHttps(configuration.isUseHttpsWithDmaap()).usingHosts(brokerServers)
- .withSocketTimeout(configuration.getPollingTimeout() * POLLING_TIMEOUT_MULTIPLIER).build();
- StatusConsumer statusConsumer = new StatusConsumer(cambriaStatusConsumer, statusCallback);
+ SdcKafkaConsumer kafkaConsumer = new SdcKafkaConsumer(configuration);
+ kafkaConsumer.subscribe(configuration.getStatusTopicName());
+ StatusConsumer statusConsumer = new StatusConsumer(kafkaConsumer, statusCallback);
executorPool.scheduleAtFixedRate(statusConsumer, 0, configuration.getPollingInterval(), TimeUnit.SECONDS);
- } catch (MalformedURLException | GeneralSecurityException e) {
- handleCambriaInitFailure(errorWrapper, e);
+ } catch (KafkaException | IllegalArgumentException e) {
+ handleMessagingClientInitFailure(errorWrapper, e);
}
}
}
@Override
- /* see javadoc */
public synchronized IDistributionClientResult stop() {
log.info("stop DistributionClient");
@@ -226,30 +267,13 @@ public class DistributionClientImpl implements IDistributionClient {
if (!errorWrapper.isEmpty()) {
return errorWrapper.getInnerElement();
}
- // 1. stop polling notification topic
shutdownExecutor();
- // 2. send to ASDC unregister to topic
- IDistributionClientResult unregisterResult = asdcConnector.unregisterTopics(credential);
- if (unregisterResult.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {
- log.info("client failed to unregister from topics");
- } else {
- log.info("client unregistered from topics successfully");
- }
- asdcConnector.close();
-
- try {
- cambriaIdentityManager.deleteCurrentApiKey();
- } catch (HttpException | IOException e) {
- log.debug("failed to delete cambria keys", e);
- }
- cambriaIdentityManager.close();
-
+ sdcConnector.close();
isInitialized = false;
isTerminated = true;
- DistributionClientResultImpl stopResult = new DistributionClientResultImpl(DistributionActionResultEnum.SUCCESS, "distribution client stopped successfuly");
- return stopResult;
+ return new DistributionClientResultImpl(DistributionActionResultEnum.SUCCESS, "distribution client stopped successfully");
}
@Override
@@ -259,167 +283,59 @@ public class DistributionClientImpl implements IDistributionClient {
validateRunReady(errorWrapper);
if (!errorWrapper.isEmpty()) {
IDistributionClientResult result = errorWrapper.getInnerElement();
- IDistributionClientDownloadResult downloadResult = new DistributionClientDownloadResultImpl(result.getDistributionActionResult(), result.getDistributionMessageResult());
- return downloadResult;
+ return new DistributionClientDownloadResultImpl(result.getDistributionActionResult(), result.getDistributionMessageResult());
}
- return asdcConnector.downloadArtifact(artifactInfo);
+ return sdcConnector.downloadArtifact(artifactInfo);
}
- @Override
- public synchronized IDistributionClientResult init(IConfiguration conf, INotificationCallback notificationCallback,
- IStatusCallback statusCallback) {
- IDistributionClientResult initResult;
- if (!conf.isConsumeProduceStatusTopic()) {
- initResult = new DistributionClientResultImpl(DistributionActionResultEnum.CONF_INVALID_CONSUME_PRODUCE_STATUS_TOPIC_FALG, "configuration is invalid: isConsumeProduceStatusTopic() should be set to 'true'");
-
- } else if (isNull(statusCallback)) {
- initResult = new DistributionClientResultImpl(DistributionActionResultEnum.CONF_INVALID_CONSUME_PRODUCE_STATUS_TOPIC_FALG, "configuration is invalid: statusCallback is not defined");
- } else {
- this.statusCallback = statusCallback;
- initResult = init(conf, notificationCallback);
- }
- return initResult;
+ SdcConnectorClient createSdcConnector(Configuration configuration) {
+ return new SdcConnectorClient(configuration, new HttpSdcClient(configuration.getSdcAddress(),
+ new HttpClientFactory(configuration),
+ new HttpRequestFactory(configuration.getUser(), configuration.getPassword())));
}
- @Override
- /*
- * see javadoc
- */
- public synchronized IDistributionClientResult init(IConfiguration conf, INotificationCallback callback) {
-
- log.info("DistributionClient - init");
-
- Wrapper<IDistributionClientResult> errorWrapper = new Wrapper<>();
- validateNotInitilized(errorWrapper);
- if (errorWrapper.isEmpty()) {
- validateNotTerminated(errorWrapper);
- }
- if (errorWrapper.isEmpty()) {
- this.configuration = validateAndInitConfiguration(errorWrapper, conf).getSecond();
- this.asdcConnector = createAsdcConnector(this.configuration);
- }
- // 1. get ueb server list from configuration
- if (errorWrapper.isEmpty()) {
- List<String> servers = initUebServerList(errorWrapper);
- if (servers != null) {
- this.brokerServers = servers;
- }
- }
- // 2.validate artifact types against asdc server
- if (errorWrapper.isEmpty()) {
- validateArtifactTypesWithAsdcServer(conf, errorWrapper);
- }
- // 3. create keys
- if (errorWrapper.isEmpty()) {
- this.callback = callback;
- ApiCredential apiCredential = createUebKeys(errorWrapper);
- if (apiCredential != null) {
- this.credential = apiCredential;
- }
- }
- // 4. register for topics
- if (errorWrapper.isEmpty()) {
- TopicRegistrationResponse topics = registerForTopics(errorWrapper, this.credential);
- if (topics != null) {
- this.notificationTopic = topics.getDistrNotificationTopicName();
- this.statusTopic = topics.getDistrStatusTopicName();
- this.notificationSender = createNotificationSender();
- }
- }
-
- IDistributionClientResult result;
- if (errorWrapper.isEmpty()) {
- isInitialized = true;
- result = new DistributionClientResultImpl(DistributionActionResultEnum.SUCCESS, "distribution client initialized successfuly");
- } else {
- result = errorWrapper.getInnerElement();
- }
-
- return result;
- }
-
- SdcConnectorClient createAsdcConnector(Configuration configuration) {
- return new SdcConnectorClient(configuration, new HttpAsdcClient(configuration));
- }
-
- private NotificationSender createNotificationSender() {
- return new NotificationSender(brokerServers);
- }
-
- private TopicRegistrationResponse registerForTopics(Wrapper<IDistributionClientResult> errorWrapper, ApiCredential credential) {
- Either<TopicRegistrationResponse, DistributionClientResultImpl> registerAsdcTopics = asdcConnector.registerAsdcTopics(credential);
- if (registerAsdcTopics.isRight()) {
-
- try {
- cambriaIdentityManager.deleteCurrentApiKey();
- } catch (HttpException | IOException e) {
- log.debug("failed to delete cambria keys", e);
- }
- errorWrapper.setInnerElement(registerAsdcTopics.right().value());
- } else {
- return registerAsdcTopics.left().value();
- }
- return null;
- }
-
- private ApiCredential createUebKeys(Wrapper<IDistributionClientResult> errorWrapper) {
- ApiCredential apiCredential = null;
-
- initCambriaClient(errorWrapper);
- if (errorWrapper.isEmpty()) {
- log.debug("create keys");
- Pair<DistributionClientResultImpl, ApiCredential> uebKeys = createUebKeys();
- DistributionClientResultImpl createKeysResponse = uebKeys.getFirst();
- apiCredential = uebKeys.getSecond();
- if (createKeysResponse.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {
- errorWrapper.setInnerElement(createKeysResponse);
- }
- }
- return apiCredential;
- }
-
- private void validateArtifactTypesWithAsdcServer(IConfiguration conf, Wrapper<IDistributionClientResult> errorWrapper) {
- Either<List<String>, IDistributionClientResult> eitherValidArtifactTypesList = asdcConnector.getValidArtifactTypesList();
+ private void validateArtifactTypesWithSdcServer(IConfiguration conf, Wrapper<IDistributionClientResult> errorWrapper) {
+ Either<List<String>, IDistributionClientResult> eitherValidArtifactTypesList = sdcConnector.getValidArtifactTypesList();
if (eitherValidArtifactTypesList.isRight()) {
DistributionActionResultEnum errorType = eitherValidArtifactTypesList.right().value().getDistributionActionResult();
- // Support the case of a new client and older ASDC Server which does not have the API
- if (errorType != DistributionActionResultEnum.ASDC_NOT_FOUND) {
+ // Support the case of a new client and older SDC Server which does not have the API
+ if (errorType != DistributionActionResultEnum.SDC_NOT_FOUND) {
errorWrapper.setInnerElement(eitherValidArtifactTypesList.right().value());
}
} else {
- final List<String> artifactTypesFromAsdc = eitherValidArtifactTypesList.left().value();
- boolean isArtifactTypesValid = artifactTypesFromAsdc.containsAll(conf.getRelevantArtifactTypes());
+ final List<String> artifactTypesFromSdc = eitherValidArtifactTypesList.left().value();
+ boolean isArtifactTypesValid = artifactTypesFromSdc.containsAll(conf.getRelevantArtifactTypes());
if (!isArtifactTypesValid) {
- List<String> invalidArtifactTypes = new ArrayList<>();
- invalidArtifactTypes.addAll(conf.getRelevantArtifactTypes());
- invalidArtifactTypes.removeAll(artifactTypesFromAsdc);
+ List<String> invalidArtifactTypes = new ArrayList<>(conf.getRelevantArtifactTypes());
+ invalidArtifactTypes.removeAll(artifactTypesFromSdc);
DistributionClientResultImpl errorResponse = new DistributionClientResultImpl(DistributionActionResultEnum.CONF_CONTAINS_INVALID_ARTIFACT_TYPES,
- "configuration contains invalid artifact types:" + invalidArtifactTypes + " valid types are:" + artifactTypesFromAsdc);
+ "configuration contains invalid artifact types:" + invalidArtifactTypes + " valid types are:" + artifactTypesFromSdc);
errorWrapper.setInnerElement(errorResponse);
} else {
- log.debug("Artifact types: {} were validated with ASDC server", conf.getRelevantArtifactTypes());
+ log.debug("Artifact types: {} were validated with SDC server", conf.getRelevantArtifactTypes());
}
}
}
- private List<String> initUebServerList(Wrapper<IDistributionClientResult> errorWrapper) {
- List<String> brokerServers = null;
- log.debug("get ueb cluster server list from component(configuration file)");
-
- Either<List<String>, IDistributionClientResult> serverListResponse = getUEBServerList();
- if (serverListResponse.isRight()) {
- errorWrapper.setInnerElement(serverListResponse.right().value());
+ private void initKafkaData(Wrapper<IDistributionClientResult> errorWrapper) {
+ log.debug("Get MessageBus cluster information from SDC");
+ Either<KafkaDataResponse, IDistributionClientResult> kafkaData = sdcConnector.getKafkaDistData();
+ if (kafkaData.isRight()) {
+ errorWrapper.setInnerElement(kafkaData.right().value());
} else {
- brokerServers = serverListResponse.left().value();
+ KafkaDataResponse kafkaDataResponse = kafkaData.left().value();
+ configuration.setMsgBusAddress(Collections.singletonList(kafkaDataResponse.getKafkaBootStrapServer()));
+ configuration.setNotificationTopicName(kafkaDataResponse.getDistrNotificationTopicName());
+ configuration.setStatusTopicName(kafkaDataResponse.getDistrStatusTopicName());
+ log.debug("MessageBus cluster info retrieved successfully {}", kafkaData.left().value());
}
-
- return brokerServers;
}
private void validateNotInitilized(Wrapper<IDistributionClientResult> errorWrapper) {
if (isInitialized) {
log.warn("distribution client already initialized");
- DistributionClientResultImpl alreadyInitResponse = new DistributionClientResultImpl(DistributionActionResultEnum.DISTRIBUTION_CLIENT_ALREADY_INITIALIZED, "distribution client already initialized");
+ DistributionClientResultImpl alreadyInitResponse = new DistributionClientResultImpl(DistributionActionResultEnum.DISTRIBUTION_CLIENT_ALREADY_INITIALIZED,
+ "distribution client already initialized");
errorWrapper.setInnerElement(alreadyInitResponse);
}
}
@@ -431,31 +347,17 @@ public class DistributionClientImpl implements IDistributionClient {
}
private IDistributionClientResult sendStatus(IDistributionStatusMessageJsonBuilder statusBuilder) {
- IDistributionClientResult distributionResult;
-
- Either<CambriaBatchingPublisher, IDistributionClientResult> cambriaPublisher = getCambriaPublisher(statusTopic, configuration, brokerServers, credential);
- if (cambriaPublisher.isRight()) {
- distributionResult = cambriaPublisher.right().value();
- } else {
- String statusMessage = statusBuilder.build();
- distributionResult = notificationSender.send(cambriaPublisher.left().value(), statusMessage);
- }
-
- return distributionResult;
+ return notificationSender.send(configuration.getStatusTopicName(), statusBuilder.build());
}
- private Either<CambriaBatchingPublisher, IDistributionClientResult> getCambriaPublisher(String statusTopic, Configuration configuration, List<String> brokerServers, ApiCredential credential) {
- CambriaBatchingPublisher cambriaPublisher = null;
+ private void initKafkaProducer(Wrapper<IDistributionClientResult> errorWrapper, Configuration configuration) {
try {
- cambriaPublisher = new PublisherBuilder().onTopic(statusTopic).usingHttps(configuration.isUseHttpsWithDmaap())
- .usingHosts(brokerServers).build();
- cambriaPublisher.setApiCredentials(credential.getApiKey(), credential.getApiSecret());
- } catch (MalformedURLException | GeneralSecurityException e) {
- Wrapper<IDistributionClientResult> errorWrapper = new Wrapper<>();
- handleCambriaInitFailure(errorWrapper, e);
- return Either.right(errorWrapper.getInnerElement());
+ if (producer == null) {
+ producer = new SdcKafkaProducer(configuration);
+ }
+ } catch (KafkaException | IllegalStateException e) {
+ handleMessagingClientInitFailure(errorWrapper, e);
}
- return Either.left(cambriaPublisher);
}
@Override
@@ -471,27 +373,17 @@ public class DistributionClientImpl implements IDistributionClient {
if (!errorWrapper.isEmpty()) {
return errorWrapper.getInnerElement();
}
- IDistributionStatusMessageJsonBuilder builder = DistributionStatusMessageJsonBuilderFactory.prepareBuilderForNotificationStatus(getConfiguration().getConsumerID(), currentTimeMillis, distributionId, artifactInfo, isNotified);
+ IDistributionStatusMessageJsonBuilder builder = DistributionStatusMessageJsonBuilderFactory.prepareBuilderForNotificationStatus(
+ getConfiguration().getConsumerID(),
+ currentTimeMillis,
+ distributionId,
+ artifactInfo,
+ isNotified);
return sendStatus(builder);
}
/* *************************** Private Methods *************************************************** */
- protected Pair<DistributionClientResultImpl, ApiCredential> createUebKeys() {
- DistributionClientResultImpl response = new DistributionClientResultImpl(DistributionActionResultEnum.SUCCESS, "keys created successfuly");
- ApiCredential credential = null;
- try {
- String description = String.format(DistributionClientConstants.CLIENT_DESCRIPTION, configuration.getConsumerID());
- credential = cambriaIdentityManager.createApiKey(DistributionClientConstants.EMAIL, description);
- cambriaIdentityManager.setApiCredentials(credential.getApiKey(), credential.getApiSecret());
-
- } catch (HttpException | CambriaApiException | IOException e) {
- response = new DistributionClientResultImpl(DistributionActionResultEnum.UEB_KEYS_CREATION_FAILED, "failed to create keys: " + e.getMessage());
- log.error(response.toString());
- }
- return new Pair<>(response, credential);
- }
-
private IDistributionClientResult restartConsumer() {
shutdownExecutor();
return start();
@@ -500,43 +392,36 @@ public class DistributionClientImpl implements IDistributionClient {
protected Pair<DistributionActionResultEnum, Configuration> validateAndInitConfiguration(Wrapper<IDistributionClientResult> errorWrapper, IConfiguration conf) {
DistributionActionResultEnum result = configurationValidator.validateConfiguration(conf, statusCallback);
- Configuration configuration = null;
+ Configuration configurationInit = null;
if (result == DistributionActionResultEnum.SUCCESS) {
- configuration = createConfiguration(conf);
+ configurationInit = createConfiguration(conf);
} else {
DistributionClientResultImpl initResult = new DistributionClientResultImpl(result, "configuration is invalid: " + result.name());
log.error(initResult.toString());
errorWrapper.setInnerElement(initResult);
}
- return new Pair<>(result, configuration);
+ return new Pair<>(result, configurationInit);
}
private Configuration createConfiguration(IConfiguration conf) {
- Configuration configuration = new Configuration(conf);
+ Configuration configurationCreate = new Configuration(conf);
if (!isPollingIntervalValid(conf.getPollingInterval())) {
- configuration.setPollingInterval(DistributionClientConstants.MIN_POLLING_INTERVAL_SEC);
+ configurationCreate.setPollingInterval(DistributionClientConstants.MIN_POLLING_INTERVAL_SEC);
}
if (!isPollingTimeoutValid(conf.getPollingTimeout())) {
- configuration.setPollingTimeout(DistributionClientConstants.POLLING_TIMEOUT_SEC);
+ configurationCreate.setPollingTimeout(DistributionClientConstants.POLLING_TIMEOUT_SEC);
}
if (conf.getConsumerGroup() == null) {
String generatedConsumerGroup = UUID.randomUUID().toString();
- configuration.setConsumerGroup(generatedConsumerGroup);
+ configurationCreate.setConsumerGroup(generatedConsumerGroup);
isConsumerGroupGenerated = true;
}
-
//Default use HTTPS with SDC
if (conf.isUseHttpsWithSDC() == null) {
- configuration.setUseHttpsWithSDC(true);
+ configurationCreate.setUseHttpsWithSDC(true);
}
-
- //Default use HTTPS with DMAAP
- if (conf.isUseHttpsWithDmaap() == null) {
- configuration.setUseHttpsWithDmaap(true);
- }
-
- return configuration;
+ return configurationCreate;
}
private void shutdownExecutor() {
@@ -577,7 +462,8 @@ public class DistributionClientImpl implements IDistributionClient {
private void validateInitialized(Wrapper<IDistributionClientResult> errorWrapper) {
if (!isInitialized) {
log.debug("client was not initialized");
- IDistributionClientResult result = new DistributionClientResultImpl(DistributionActionResultEnum.DISTRIBUTION_CLIENT_NOT_INITIALIZED, "distribution client was not initialized");
+ IDistributionClientResult result = new DistributionClientResultImpl(DistributionActionResultEnum.DISTRIBUTION_CLIENT_NOT_INITIALIZED,
+ "distribution client was not initialized");
errorWrapper.setInnerElement(result);
}
}
@@ -585,7 +471,8 @@ public class DistributionClientImpl implements IDistributionClient {
private void validateNotStarted(Wrapper<IDistributionClientResult> errorWrapper) {
if (isStarted) {
log.debug("client already started");
- IDistributionClientResult result = new DistributionClientResultImpl(DistributionActionResultEnum.DISTRIBUTION_CLIENT_ALREADY_STARTED, "distribution client already started");
+ IDistributionClientResult result = new DistributionClientResultImpl(DistributionActionResultEnum.DISTRIBUTION_CLIENT_ALREADY_STARTED,
+ "distribution client already started");
errorWrapper.setInnerElement(result);
}
}
@@ -593,7 +480,8 @@ public class DistributionClientImpl implements IDistributionClient {
private void validateNotTerminated(Wrapper<IDistributionClientResult> errorWrapper) {
if (isTerminated) {
log.debug("client was terminated");
- IDistributionClientResult result = new DistributionClientResultImpl(DistributionActionResultEnum.DISTRIBUTION_CLIENT_IS_TERMINATED, "distribution client was terminated");
+ IDistributionClientResult result = new DistributionClientResultImpl(DistributionActionResultEnum.DISTRIBUTION_CLIENT_IS_TERMINATED,
+ "distribution client was terminated");
errorWrapper.setInnerElement(result);
}
}
@@ -616,23 +504,10 @@ public class DistributionClientImpl implements IDistributionClient {
return isValid;
}
- private synchronized void initCambriaClient(Wrapper<IDistributionClientResult> errorWrapper) {
- if (cambriaIdentityManager == null) {
- try {
- AbstractAuthenticatedManagerBuilder<CambriaIdentityManager> managerBuilder = new IdentityManagerBuilder().usingHosts(brokerServers);
- if (configuration.isUseHttpsWithDmaap()) {
- managerBuilder = managerBuilder.usingHttps();
- }
- cambriaIdentityManager = managerBuilder.build();
- } catch (MalformedURLException | GeneralSecurityException e) {
- handleCambriaInitFailure(errorWrapper, e);
- }
- }
- }
- private void handleCambriaInitFailure(Wrapper<IDistributionClientResult> errorWrapper, Exception e) {
- final String errorMessage = "Failed initilizing cambria component:" + e.getMessage();
- IDistributionClientResult errorResponse = new DistributionClientResultImpl(DistributionActionResultEnum.CAMBRIA_INIT_FAILED, errorMessage);
+ private void handleMessagingClientInitFailure(Wrapper<IDistributionClientResult> errorWrapper, Exception e) {
+ final String errorMessage = "Failed initializing messaging component:" + e.getMessage();
+ IDistributionClientResult errorResponse = new DistributionClientResultImpl(DistributionActionResultEnum.MESSAGING_CLIENT_INIT_FAILED, errorMessage);
errorWrapper.setInnerElement(errorResponse);
log.error(errorMessage);
log.debug(errorMessage, e);
@@ -682,8 +557,7 @@ public class DistributionClientImpl implements IDistributionClient {
String vfModuleJsonString = new String(artifactPayload, StandardCharsets.UTF_8);
final Type type = new TypeToken<List<VfModuleMetadata>>() {
}.getType();
- List<IVfModuleMetadata> vfModules = gson.fromJson(vfModuleJsonString, type);
- return vfModules;
+ return gson.fromJson(vfModuleJsonString, type);
}
@@ -702,27 +576,12 @@ public class DistributionClientImpl implements IDistributionClient {
}
-
- public Either<List<String>, IDistributionClientResult> getUEBServerList() {
- List<String> msgBusAddresses = configuration.getMsgBusAddress();
- if (msgBusAddresses.isEmpty()) {
- return Either.right(new DistributionClientResultImpl(DistributionActionResultEnum.CONF_MISSING_MSG_BUS_ADDRESS, "Message bus address was not found in the config file"));
- } else if (getHttpProxyHost() == null && getHttpsProxyHost() == null) {
- // If there is no proxy configured, convert to valid host name
- return GeneralUtils.convertToValidHostName(msgBusAddresses);
- } else {
- // skip the IP address lookup when proxy is configured and treat all
- // hosts as valid
- return Either.left(msgBusAddresses);
- }
- }
private HttpHost getHttpProxyHost() {
HttpHost proxyHost = null;
- if (configuration.isUseSystemProxy() && System.getProperty("http.proxyHost") != null
- && System.getProperty("http.proxyPort") != null) {
+ if (Boolean.TRUE.equals(configuration.isUseSystemProxy() && System.getProperty("http.proxyHost") != null) && System.getProperty("http.proxyPort") != null) {
proxyHost = new HttpHost(System.getProperty("http.proxyHost"),
- Integer.valueOf(System.getProperty("http.proxyPort")));
+ Integer.parseInt(System.getProperty("http.proxyPort")));
} else if (configuration.getHttpProxyHost() != null && configuration.getHttpProxyPort() != 0) {
proxyHost = new HttpHost(configuration.getHttpProxyHost(), configuration.getHttpProxyPort());
}
@@ -731,10 +590,9 @@ public class DistributionClientImpl implements IDistributionClient {
private HttpHost getHttpsProxyHost() {
HttpHost proxyHost = null;
- if (configuration.isUseSystemProxy() && System.getProperty("https.proxyHost") != null
- && System.getProperty("https.proxyPort") != null) {
+ if (configuration.isUseSystemProxy() && System.getProperty("https.proxyHost") != null && System.getProperty("https.proxyPort") != null) {
proxyHost = new HttpHost(System.getProperty("https.proxyHost"),
- Integer.valueOf(System.getProperty("https.proxyPort")));
+ Integer.parseInt(System.getProperty("https.proxyPort")));
} else if (configuration.getHttpsProxyHost() != null && configuration.getHttpsProxyPort() != 0) {
proxyHost = new HttpHost(configuration.getHttpsProxyHost(), configuration.getHttpsProxyPort());
}
diff --git a/sdc-distribution-client/src/main/java/org/onap/sdc/impl/DistributionClientResultImpl.java b/sdc-distribution-client/src/main/java/org/onap/sdc/impl/DistributionClientResultImpl.java
index 4edd355..77655ac 100644
--- a/sdc-distribution-client/src/main/java/org/onap/sdc/impl/DistributionClientResultImpl.java
+++ b/sdc-distribution-client/src/main/java/org/onap/sdc/impl/DistributionClientResultImpl.java
@@ -25,8 +25,8 @@ import org.onap.sdc.utils.DistributionActionResultEnum;
public class DistributionClientResultImpl implements IDistributionClientResult {
- private DistributionActionResultEnum responseStatus;
- private String responseMessage;
+ private final DistributionActionResultEnum responseStatus;
+ private final String responseMessage;
public DistributionClientResultImpl(DistributionActionResultEnum responseStatus, String responseMessage) {
this.responseStatus = responseStatus;
diff --git a/sdc-distribution-client/src/main/java/org/onap/sdc/impl/NotificationConsumer.java b/sdc-distribution-client/src/main/java/org/onap/sdc/impl/NotificationConsumer.java
index bf28d97..c59612a 100644
--- a/sdc-distribution-client/src/main/java/org/onap/sdc/impl/NotificationConsumer.java
+++ b/sdc-distribution-client/src/main/java/org/onap/sdc/impl/NotificationConsumer.java
@@ -20,34 +20,32 @@
package org.onap.sdc.impl;
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
import java.util.ArrayList;
import java.util.List;
-
+import org.onap.sdc.api.consumer.INotificationCallback;
import org.onap.sdc.api.notification.IArtifactInfo;
+import org.onap.sdc.api.notification.INotificationData;
import org.onap.sdc.api.notification.IResourceInstance;
import org.onap.sdc.api.results.IDistributionClientResult;
-import org.onap.sdc.utils.DistributionActionResultEnum;
-import org.onap.sdc.api.consumer.INotificationCallback;
-import org.onap.sdc.api.notification.INotificationData;
import org.onap.sdc.utils.ArtifactTypeEnum;
+import org.onap.sdc.utils.DistributionActionResultEnum;
+import org.onap.sdc.utils.kafka.SdcKafkaConsumer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.att.nsa.cambria.client.CambriaConsumer;
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-
class NotificationConsumer implements Runnable {
- private static Logger log = LoggerFactory.getLogger(NotificationConsumer.class.getName());
+ private static final Logger log = LoggerFactory.getLogger(NotificationConsumer.class.getName());
- private CambriaConsumer cambriaConsumer;
- private INotificationCallback clientCallback;
- private List<String> artifactsTypes;
- private DistributionClientImpl distributionClient;
+ private final SdcKafkaConsumer kafkaConsumer;
+ private final INotificationCallback clientCallback;
+ private final List<String> artifactsTypes;
+ private final DistributionClientImpl distributionClient;
- NotificationConsumer(CambriaConsumer cambriaConsumer, INotificationCallback clientCallback, List<String> artifactsTypes, DistributionClientImpl distributionClient) {
- this.cambriaConsumer = cambriaConsumer;
+ NotificationConsumer(SdcKafkaConsumer kafkaConsumer, INotificationCallback clientCallback, List<String> artifactsTypes, DistributionClientImpl distributionClient) {
+ this.kafkaConsumer = kafkaConsumer;
this.clientCallback = clientCallback;
this.artifactsTypes = artifactsTypes;
this.distributionClient = distributionClient;
@@ -55,16 +53,16 @@ class NotificationConsumer implements Runnable {
@Override
public void run() {
-
try {
Gson gson = new GsonBuilder().setPrettyPrinting().create();
long currentTimeMillis = System.currentTimeMillis();
- for (String notificationMsg : cambriaConsumer.fetch()) {
+ log.info("Polling for messages from topic: {}", kafkaConsumer.getTopicName());
+ for (String notificationMsg : kafkaConsumer.poll()) {
log.debug("received message from topic");
- log.debug("recieved notification from broker: {}", notificationMsg);
+ log.debug("received notification from broker: {}", notificationMsg);
- final NotificationDataImpl notificationFromUEB = gson.fromJson(notificationMsg, NotificationDataImpl.class);
- NotificationDataImpl notificationForCallback = buildCallbackNotificationLogic(currentTimeMillis, notificationFromUEB);
+ final NotificationDataImpl notificationFromMessageBus = gson.fromJson(notificationMsg, NotificationDataImpl.class);
+ NotificationDataImpl notificationForCallback = buildCallbackNotificationLogic(currentTimeMillis, notificationFromMessageBus);
if (isActivateCallback(notificationForCallback)) {
String stringNotificationForCallback = gson.toJson(notificationForCallback);
log.debug("sending notification to client: {}", stringNotificationForCallback);
@@ -73,8 +71,8 @@ class NotificationConsumer implements Runnable {
}
} catch (Exception e) {
- log.error("Error exception occured when fetching with Cambria Client:{}", e.getMessage());
- log.debug("Error exception occured when fetching with Cambria Client:{}", e.getMessage(), e);
+ log.error("Error exception occurred when fetching with Kafka Consumer:{}", e.getMessage());
+ log.debug("Error exception occurred when fetching with Kafka Consumer:{}", e.getMessage(), e);
}
}
@@ -85,21 +83,21 @@ class NotificationConsumer implements Runnable {
return hasRelevantArtifactsInResourceInstance || hasRelevantArtifactsInService;
}
- protected NotificationDataImpl buildCallbackNotificationLogic(long currentTimeMillis, final NotificationDataImpl notificationFromUEB) {
- List<IResourceInstance> relevantResourceInstances = buildResourceInstancesLogic(notificationFromUEB, currentTimeMillis);
- List<ArtifactInfoImpl> relevantServiceArtifacts = handleRelevantArtifacts(notificationFromUEB, currentTimeMillis, notificationFromUEB.getServiceArtifactsImpl());
- notificationFromUEB.setResources(relevantResourceInstances);
- notificationFromUEB.setServiceArtifacts(relevantServiceArtifacts);
- return notificationFromUEB;
+ protected NotificationDataImpl buildCallbackNotificationLogic(long currentTimeMillis, final NotificationDataImpl notificationFromMessageBus) {
+ List<IResourceInstance> relevantResourceInstances = buildResourceInstancesLogic(notificationFromMessageBus, currentTimeMillis);
+ List<ArtifactInfoImpl> relevantServiceArtifacts = handleRelevantArtifacts(notificationFromMessageBus, currentTimeMillis, notificationFromMessageBus.getServiceArtifactsImpl());
+ notificationFromMessageBus.setResources(relevantResourceInstances);
+ notificationFromMessageBus.setServiceArtifacts(relevantServiceArtifacts);
+ return notificationFromMessageBus;
}
- private List<IResourceInstance> buildResourceInstancesLogic(NotificationDataImpl notificationFromUEB, long currentTimeMillis) {
+ private List<IResourceInstance> buildResourceInstancesLogic(NotificationDataImpl notificationFromMessageBus, long currentTimeMillis) {
List<IResourceInstance> relevantResourceInstances = new ArrayList<>();
- for (JsonContainerResourceInstance resourceInstance : notificationFromUEB.getResourcesImpl()) {
+ for (JsonContainerResourceInstance resourceInstance : notificationFromMessageBus.getResourcesImpl()) {
final List<ArtifactInfoImpl> artifactsImplList = resourceInstance.getArtifactsImpl();
- List<ArtifactInfoImpl> foundRelevantArtifacts = handleRelevantArtifacts(notificationFromUEB, currentTimeMillis, artifactsImplList);
+ List<ArtifactInfoImpl> foundRelevantArtifacts = handleRelevantArtifacts(notificationFromMessageBus, currentTimeMillis, artifactsImplList);
if (!foundRelevantArtifacts.isEmpty() || distributionClient.getConfiguration().isFilterInEmptyResources()) {
resourceInstance.setArtifacts(foundRelevantArtifacts);
relevantResourceInstances.add(resourceInstance);
@@ -109,17 +107,17 @@ class NotificationConsumer implements Runnable {
}
- private List<ArtifactInfoImpl> handleRelevantArtifacts(NotificationDataImpl notificationFromUEB, long currentTimeMillis, final List<ArtifactInfoImpl> artifactsImplList) {
+ private List<ArtifactInfoImpl> handleRelevantArtifacts(NotificationDataImpl notificationFromMessageBus, long currentTimeMillis, final List<ArtifactInfoImpl> artifactsImplList) {
List<ArtifactInfoImpl> relevantArtifacts = new ArrayList<>();
if (artifactsImplList != null) {
for (ArtifactInfoImpl artifactInfo : artifactsImplList) {
- handleRelevantArtifact(notificationFromUEB, currentTimeMillis, artifactsImplList, relevantArtifacts, artifactInfo);
+ handleRelevantArtifact(notificationFromMessageBus, currentTimeMillis, artifactsImplList, relevantArtifacts, artifactInfo);
}
}
return relevantArtifacts;
}
- private void handleRelevantArtifact(NotificationDataImpl notificationFromUEB, long currentTimeMillis, final List<ArtifactInfoImpl> artifactsImplList, List<ArtifactInfoImpl> relevantArtifacts, ArtifactInfoImpl artifactInfo) {
+ private void handleRelevantArtifact(NotificationDataImpl notificationFromMessageBus, long currentTimeMillis, final List<ArtifactInfoImpl> artifactsImplList, List<ArtifactInfoImpl> relevantArtifacts, ArtifactInfoImpl artifactInfo) {
boolean isArtifactRelevant = artifactsTypes.contains(artifactInfo.getArtifactType());
String artifactType = artifactInfo.getArtifactType();
if (artifactInfo.getGeneratedFromUUID() != null && !artifactInfo.getGeneratedFromUUID().isEmpty()) {
@@ -131,16 +129,16 @@ class NotificationConsumer implements Runnable {
}
}
if (isArtifactRelevant) {
- setRelatedArtifacts(artifactInfo, notificationFromUEB);
+ setRelatedArtifacts(artifactInfo, notificationFromMessageBus);
if (artifactType.equals(ArtifactTypeEnum.HEAT.name()) || artifactType.equals(ArtifactTypeEnum.HEAT_VOL.name()) || artifactType.equals(ArtifactTypeEnum.HEAT_NET.name())) {
setGeneratedArtifact(artifactsImplList, artifactInfo);
}
relevantArtifacts.add(artifactInfo);
}
- IDistributionClientResult notificationStatus = distributionClient.sendNotificationStatus(currentTimeMillis, notificationFromUEB.getDistributionID(), artifactInfo, isArtifactRelevant);
+ IDistributionClientResult notificationStatus = distributionClient.sendNotificationStatus(currentTimeMillis, notificationFromMessageBus.getDistributionID(), artifactInfo, isArtifactRelevant);
if (notificationStatus.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {
- log.error("Error failed to send notification status to UEB failed status:{}, error message:{}", notificationStatus.getDistributionActionResult().name(), notificationStatus.getDistributionMessageResult());
+ log.error("Error failed to send notification status to MessageBus failed status:{}, error message:{}", notificationStatus.getDistributionActionResult().name(), notificationStatus.getDistributionMessageResult());
}
}
diff --git a/sdc-distribution-client/src/main/java/org/onap/sdc/impl/StatusConsumer.java b/sdc-distribution-client/src/main/java/org/onap/sdc/impl/StatusConsumer.java
index 5951ed0..2c69330 100644
--- a/sdc-distribution-client/src/main/java/org/onap/sdc/impl/StatusConsumer.java
+++ b/sdc-distribution-client/src/main/java/org/onap/sdc/impl/StatusConsumer.java
@@ -20,24 +20,23 @@
package org.onap.sdc.impl;
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
import org.onap.sdc.api.consumer.IStatusCallback;
import org.onap.sdc.api.notification.IStatusData;
+import org.onap.sdc.utils.kafka.SdcKafkaConsumer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.att.nsa.cambria.client.CambriaConsumer;
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-
class StatusConsumer implements Runnable {
- private static Logger log = LoggerFactory.getLogger(StatusConsumer.class.getName());
+ private static final Logger log = LoggerFactory.getLogger(StatusConsumer.class.getName());
- private CambriaConsumer cambriaConsumer;
- private IStatusCallback clientCallback;
+ private final SdcKafkaConsumer kafkaConsumer;
+ private final IStatusCallback clientCallback;
- StatusConsumer(CambriaConsumer cambriaConsumer, IStatusCallback clientCallback) {
- this.cambriaConsumer = cambriaConsumer;
+ StatusConsumer(SdcKafkaConsumer kafkaConsumer, IStatusCallback clientCallback) {
+ this.kafkaConsumer = kafkaConsumer;
this.clientCallback = clientCallback;
}
@@ -46,18 +45,16 @@ class StatusConsumer implements Runnable {
try {
Gson gson = new GsonBuilder().setPrettyPrinting().create();
- for (String statusMsg : cambriaConsumer.fetch()) {
+ log.info("Polling for messages from topic: {}", kafkaConsumer.getTopicName());
+ for (String statusMsg : kafkaConsumer.poll()) {
log.debug("received message from topic");
- log.debug("recieved notification from broker: {}", statusMsg);
+ log.debug("received notification from broker: {}", statusMsg);
IStatusData statusData = gson.fromJson(statusMsg, StatusDataImpl.class);
clientCallback.activateCallback(statusData);
-
-
}
-
} catch (Exception e) {
- log.error("Error exception occured when fetching with Cambria Client:{}", e.getMessage());
- log.debug("Error exception occured when fetching with Cambria Client:{}", e.getMessage(), e);
+ log.error("Error exception occurred when fetching with Kafka Consumer:{}", e.getMessage());
+ log.debug("Error exception occurred when fetching with Kafka Consumer:{}", e.getMessage(), e);
}
}
diff --git a/sdc-distribution-client/src/main/java/org/onap/sdc/utils/DistributionActionResultEnum.java b/sdc-distribution-client/src/main/java/org/onap/sdc/utils/DistributionActionResultEnum.java
index 514630f..834751a 100644
--- a/sdc-distribution-client/src/main/java/org/onap/sdc/utils/DistributionActionResultEnum.java
+++ b/sdc-distribution-client/src/main/java/org/onap/sdc/utils/DistributionActionResultEnum.java
@@ -36,23 +36,19 @@ public enum DistributionActionResultEnum {
CONFIGURATION_IS_MISSING,
CONF_MISSING_USERNAME,
CONF_MISSING_PASSWORD,
- CONF_MISSING_ASDC_FQDN,
+ CONF_MISSING_SDC_FQDN,
CONF_MISSING_ARTIFACT_TYPES,
CONF_CONTAINS_INVALID_ARTIFACT_TYPES,
CONF_MISSING_CONSUMER_ID,
CONF_MISSING_ENVIRONMENT_NAME,
- CONF_MISSING_CONSUMER_GROUP,
- CONF_INVALID_ASDC_FQDN,
+ CONF_INVALID_SDC_FQDN,
CONF_INVALID_CONSUME_PRODUCE_STATUS_TOPIC_FALG,
- CONF_MISSING_MSG_BUS_ADDRESS,
- CONF_INVALID_MSG_BUS_ADDRESS,
- ASDC_AUTHENTICATION_FAILED,
- ASDC_AUTHORIZATION_FAILED,
- ASDC_NOT_FOUND,
- ASDC_SERVER_PROBLEM,
- ASDC_CONNECTION_FAILED,
- ASDC_SERVER_TIMEOUT,
+ SDC_AUTHENTICATION_FAILED,
+ SDC_AUTHORIZATION_FAILED,
+ SDC_NOT_FOUND,
+ SDC_SERVER_PROBLEM,
+ SDC_CONNECTION_FAILED,
+ SDC_SERVER_TIMEOUT,
- CAMBRIA_INIT_FAILED,
- UEB_KEYS_CREATION_FAILED
+ MESSAGING_CLIENT_INIT_FAILED
}
diff --git a/sdc-distribution-client/src/main/java/org/onap/sdc/utils/DistributionClientConstants.java b/sdc-distribution-client/src/main/java/org/onap/sdc/utils/DistributionClientConstants.java
index 8432611..f4ebbcc 100644
--- a/sdc-distribution-client/src/main/java/org/onap/sdc/utils/DistributionClientConstants.java
+++ b/sdc-distribution-client/src/main/java/org/onap/sdc/utils/DistributionClientConstants.java
@@ -28,7 +28,7 @@ import java.util.regex.Pattern;
* @author mshitrit
*/
public final class DistributionClientConstants {
- public static final String CLIENT_DESCRIPTION = "ASDC Distribution Client Key for %s";
+ public static final String CLIENT_DESCRIPTION = "SDC Distribution Client Key for %s";
public static final Pattern FQDN_PATTERN = Pattern.compile(
"^"
+ "([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])(\\.([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9]))*(:[0-9]{2,5})*$", Pattern.CASE_INSENSITIVE);
diff --git a/sdc-distribution-client/src/main/java/org/onap/sdc/utils/GeneralUtils.java b/sdc-distribution-client/src/main/java/org/onap/sdc/utils/GeneralUtils.java
index ff5d201..6a69d8b 100644
--- a/sdc-distribution-client/src/main/java/org/onap/sdc/utils/GeneralUtils.java
+++ b/sdc-distribution-client/src/main/java/org/onap/sdc/utils/GeneralUtils.java
@@ -70,24 +70,4 @@ public class GeneralUtils {
}
return isEncoded;
}
-
-
- public static Either<List<String>, IDistributionClientResult> convertToValidHostName(List<String> msgBusAddresses) {
- List<String> uebLocalHostsNames = new ArrayList<>();
- for (String name : msgBusAddresses) {
- try {
- uebLocalHostsNames.add(InetAddress.getByName(name).getHostName());
- } catch (UnknownHostException e) {
- LOGGER.debug("UnknownHost: {}", e.getMessage(), e);
- }
- }
- Either<List<String>, IDistributionClientResult> response;
- if (uebLocalHostsNames.isEmpty()) {
- response = Either.right(new DistributionClientResultImpl(DistributionActionResultEnum.CONF_INVALID_MSG_BUS_ADDRESS, "configuration is invalid: " + DistributionActionResultEnum.CONF_INVALID_MSG_BUS_ADDRESS.name()));
-
- } else {
- response = Either.left(uebLocalHostsNames);
- }
- return response;
- }
}
diff --git a/sdc-distribution-client/src/main/java/org/onap/sdc/utils/NotificationSender.java b/sdc-distribution-client/src/main/java/org/onap/sdc/utils/NotificationSender.java
index 1fb71a6..44a9ddb 100644
--- a/sdc-distribution-client/src/main/java/org/onap/sdc/utils/NotificationSender.java
+++ b/sdc-distribution-client/src/main/java/org/onap/sdc/utils/NotificationSender.java
@@ -20,55 +20,46 @@
package org.onap.sdc.utils;
-import com.att.nsa.cambria.client.CambriaBatchingPublisher;
-import com.att.nsa.cambria.client.CambriaPublisher;
+import java.util.concurrent.TimeUnit;
+import org.apache.kafka.common.KafkaException;
import org.onap.sdc.api.results.IDistributionClientResult;
import org.onap.sdc.impl.DistributionClientResultImpl;
+import org.onap.sdc.utils.kafka.SdcKafkaProducer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.io.IOException;
-import java.util.List;
-import java.util.concurrent.TimeUnit;
-
public class NotificationSender {
private static final Logger log = LoggerFactory.getLogger(NotificationSender.class);
- private static final long PUBLISHER_CLOSING_TIMEOUT = 10L;
private static final long SLEEP_TIME = 1;
+ private final SdcKafkaProducer producer;
- private final List<String> brokerServers;
-
- public NotificationSender(List<String> brokerServers) {
- this.brokerServers = brokerServers;
+ public NotificationSender(SdcKafkaProducer producer) {
+ this.producer = producer;
}
- public IDistributionClientResult send(CambriaBatchingPublisher publisher, String status) {
+ public IDistributionClientResult send(String topic, String status) {
log.info("DistributionClient - sendStatus");
DistributionClientResultImpl distributionResult;
try {
- log.debug("Publisher server list: {}", brokerServers);
- log.debug("Trying to send status: {}", status);
- publisher.send("MyPartitionKey", status);
+ log.debug("Publisher server list: {}", producer.getMsgBusAddresses());
+ log.info("Trying to send status: {} \n to topic {}", status, producer.getTopicName());
+ producer.send(topic, "MyPartitionKey", status);
TimeUnit.SECONDS.sleep(SLEEP_TIME);
- } catch (IOException | InterruptedException e) {
- log.error("DistributionClient - sendDownloadStatus. Failed to send download status", e);
+ } catch (KafkaException | InterruptedException e) {
+ log.error("DistributionClient - sendStatus. Failed to send status", e);
} finally {
- distributionResult = closePublisher(publisher);
+ distributionResult = closeProducer();
}
return distributionResult;
}
- private DistributionClientResultImpl closePublisher(CambriaBatchingPublisher publisher) {
+ private DistributionClientResultImpl closeProducer() {
DistributionClientResultImpl distributionResult = new DistributionClientResultImpl(DistributionActionResultEnum.GENERAL_ERROR, "Failed to send status");
try {
- List<CambriaPublisher.message> notSentMessages = publisher.close(PUBLISHER_CLOSING_TIMEOUT, TimeUnit.SECONDS);
- if (notSentMessages.isEmpty()) {
- distributionResult = new DistributionClientResultImpl(DistributionActionResultEnum.SUCCESS, "Messages successfully sent");
- } else {
- log.debug("DistributionClient - sendDownloadStatus. {} messages were not sent", notSentMessages.size());
- }
- } catch (IOException | InterruptedException e) {
+ producer.flush();
+ distributionResult = new DistributionClientResultImpl(DistributionActionResultEnum.SUCCESS, "Messages successfully sent");
+ } catch (KafkaException | IllegalArgumentException e) {
log.error("DistributionClient - sendDownloadStatus. Failed to send messages and close publisher.", e);
}
return distributionResult;
diff --git a/sdc-distribution-client/src/main/java/org/onap/sdc/http/AsdcUrls.java b/sdc-distribution-client/src/main/java/org/onap/sdc/utils/kafka/KafkaDataResponse.java
index b1d51d9..ac1d2ea 100644
--- a/sdc-distribution-client/src/main/java/org/onap/sdc/http/AsdcUrls.java
+++ b/sdc-distribution-client/src/main/java/org/onap/sdc/utils/kafka/KafkaDataResponse.java
@@ -2,7 +2,7 @@
* ============LICENSE_START=======================================================
* sdc-distribution-client
* ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2022 Nordix Foundation. 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.
@@ -18,17 +18,18 @@
* ============LICENSE_END=========================================================
*/
-package org.onap.sdc.http;
+package org.onap.sdc.utils.kafka;
-public class AsdcUrls {
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
- private AsdcUrls() {
+@Getter
+@Setter
+@NoArgsConstructor
+public class KafkaDataResponse {
- }
-
- public static final String GET_CLUSTER_SERVER_LIST = "/sdc/v1/distributionUebCluster";
- public static final String GET_VALID_ARTIFACT_TYPES = "/sdc/v1/artifactTypes";
- public static final String POST_FOR_TOPIC_REGISTRATION = "/sdc/v1/registerForDistribution";
- public static final String POST_FOR_UNREGISTER = "/sdc/v1/unRegisterForDistribution";
-
-}
+ private String kafkaBootStrapServer;
+ private String distrNotificationTopicName;
+ private String distrStatusTopicName;
+} \ No newline at end of file
diff --git a/sdc-distribution-client/src/main/java/org/onap/sdc/utils/kafka/SdcKafkaConsumer.java b/sdc-distribution-client/src/main/java/org/onap/sdc/utils/kafka/SdcKafkaConsumer.java
new file mode 100644
index 0000000..71f793d
--- /dev/null
+++ b/sdc-distribution-client/src/main/java/org/onap/sdc/utils/kafka/SdcKafkaConsumer.java
@@ -0,0 +1,100 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * sdc-distribution-client
+ * ================================================================================
+ * Copyright (C) 2022 Nordix Foundation. 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=========================================================
+ */
+
+package org.onap.sdc.utils.kafka;
+
+import java.time.Duration;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Properties;
+import java.util.UUID;
+import org.apache.kafka.clients.CommonClientConfigs;
+import org.apache.kafka.clients.consumer.ConsumerConfig;
+import org.apache.kafka.clients.consumer.ConsumerRecord;
+import org.apache.kafka.clients.consumer.ConsumerRecords;
+import org.apache.kafka.clients.consumer.KafkaConsumer;
+import org.apache.kafka.common.config.SaslConfigs;
+import org.apache.kafka.common.errors.InvalidGroupIdException;
+import org.onap.sdc.impl.Configuration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Utility class that provides a KafkaConsumer to communicate with a kafka cluster
+ */
+public class SdcKafkaConsumer {
+
+ private static final Logger log = LoggerFactory.getLogger(SdcKafkaConsumer.class);
+ final KafkaConsumer<String, String> consumer;
+ private final int pollTimeout;
+ private String topicName;
+
+ /**
+ *
+ * @param configuration The config provided to the client
+ */
+ public SdcKafkaConsumer(Configuration configuration) {
+ Properties props = new Properties();
+ props.put(CommonClientConfigs.BOOTSTRAP_SERVERS_CONFIG, configuration.getMsgBusAddress());
+ props.put(CommonClientConfigs.SECURITY_PROTOCOL_CONFIG, configuration.getKafkaSecurityProtocolConfig());
+ props.put(SaslConfigs.SASL_MECHANISM, configuration.getKafkaSaslMechanism());
+ props.put(SaslConfigs.SASL_JAAS_CONFIG, configuration.getKafkaSaslJaasConfig());
+ props.put(ConsumerConfig.GROUP_ID_CONFIG, configuration.getConsumerGroup());
+ props.put(ConsumerConfig.CLIENT_ID_CONFIG, configuration.getConsumerID() + "-consumer-" + UUID.randomUUID());
+ props.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "latest");
+ props.put(ConsumerConfig.ALLOW_AUTO_CREATE_TOPICS_CONFIG, false);
+ props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer");
+ props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer");
+ consumer = new KafkaConsumer<>(props);
+ pollTimeout = configuration.getPollingTimeout();
+ }
+
+ /**
+ *
+ * @param topic The kafka topic to subscribe to
+ */
+ public void subscribe(String topic) {
+ try {
+ consumer.subscribe(Collections.singleton(topic));
+ this.topicName = topic;
+ }
+ catch (InvalidGroupIdException e) {
+ log.error("Invalid Group {}", e.getMessage());
+ }
+ }
+
+ /**
+ *
+ * @return The list of records returned from the poll
+ */
+ public List<String> poll() {
+ List<String> msgs = new ArrayList<>();
+ ConsumerRecords<String, String> records = consumer.poll(Duration.ofSeconds(pollTimeout));
+ for (ConsumerRecord<String, String> rec : records) {
+ msgs.add(rec.value());
+ }
+ return msgs;
+ }
+
+ public String getTopicName() {
+ return topicName;
+ }
+} \ No newline at end of file
diff --git a/sdc-distribution-client/src/main/java/org/onap/sdc/utils/kafka/SdcKafkaProducer.java b/sdc-distribution-client/src/main/java/org/onap/sdc/utils/kafka/SdcKafkaProducer.java
new file mode 100644
index 0000000..9826f8b
--- /dev/null
+++ b/sdc-distribution-client/src/main/java/org/onap/sdc/utils/kafka/SdcKafkaProducer.java
@@ -0,0 +1,98 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * sdc-distribution-client
+ * ================================================================================
+ * Copyright (C) 2022 Nordix Foundation. 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=========================================================
+ */
+
+package org.onap.sdc.utils.kafka;
+
+import java.util.List;
+import java.util.Properties;
+import java.util.UUID;
+import java.util.concurrent.Future;
+import org.apache.kafka.clients.CommonClientConfigs;
+import org.apache.kafka.clients.producer.KafkaProducer;
+import org.apache.kafka.clients.producer.ProducerConfig;
+import org.apache.kafka.clients.producer.ProducerRecord;
+import org.apache.kafka.clients.producer.RecordMetadata;
+import org.apache.kafka.common.KafkaException;
+import org.apache.kafka.common.config.SaslConfigs;
+import org.onap.sdc.impl.Configuration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Utility class that provides a KafkaProducer to communicate with a kafka cluster
+ */
+public class SdcKafkaProducer {
+
+ private static final Logger log = LoggerFactory.getLogger(SdcKafkaProducer.class);
+ final KafkaProducer<String, String> producer;
+ private final List<String> msgBusAddresses;
+ private final String topicName;
+
+ public SdcKafkaProducer(Configuration configuration) {
+ Properties props = new Properties();
+ props.put(CommonClientConfigs.BOOTSTRAP_SERVERS_CONFIG, configuration.getMsgBusAddress());
+ props.put(CommonClientConfigs.SECURITY_PROTOCOL_CONFIG, configuration.getKafkaSecurityProtocolConfig());
+ props.put(SaslConfigs.SASL_MECHANISM, configuration.getKafkaSaslMechanism());
+ props.put(SaslConfigs.SASL_JAAS_CONFIG, configuration.getKafkaSaslJaasConfig());
+ props.put(ProducerConfig.CLIENT_ID_CONFIG, configuration.getConsumerID() + "-producer-" + UUID.randomUUID());
+ props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer");
+ props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer");
+ producer = new KafkaProducer<>(props);
+ msgBusAddresses = configuration.getMsgBusAddress();
+ topicName = configuration.getStatusTopicName();
+ }
+
+ /**
+ *
+ * @param topicName The name of the topic to publish to
+ * @param key The key value of the ProducerRecord
+ * @param value The value of the ProducerRecord
+ * @return The RecordMetedata of the request
+ */
+ public Future<RecordMetadata> send(String topicName, String key, String value) {
+ Future<RecordMetadata> data;
+ try {
+ data = producer.send(new ProducerRecord<>(topicName, key, value));
+ } catch (KafkaException e) {
+ log.error("Failed the send data: exc {}", e.getMessage());
+ throw e;
+ }
+ return data;
+ }
+ /**
+ *
+ */
+ public void flush() {
+ try {
+ producer.flush();
+ }
+ catch (KafkaException e) {
+ log.error("Failed to send data: exc {}", e.getMessage());
+ }
+ }
+
+ public List<String> getMsgBusAddresses() {
+ return msgBusAddresses;
+ }
+
+ public String getTopicName() {
+ return topicName;
+ }
+} \ No newline at end of file